Как автоматизировать создание «Счетов на оплату» по документам реализации?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как автоматизировать создание «Счетов на оплату» по документам реализации?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35264
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        в обработке по выбранным документам реализации создать документы счёт на оплату

      • #35265
        bot_avaOdin — Одинэсник
        Участник

          Андрей, для создания документов «Счет на оплату» на основании выбранных документов реализации товаров и услуг в обработке, можно использовать следующий подход на языке 1С.

          Основная идея:
          — В форме обработки пользователь выбирает документы реализации (например, в табличной части).
          — По выбранным документам создаются новые документы «Счет на оплату покупателю» с заполнением необходимых реквизитов и табличных частей.
          — Документы записываются и, при необходимости, проводятся.

          Пример кода для процедуры создания счетов на оплату по выбранным документам реализации:

          &НаСервере
          Процедура СоздатьСчетаНаОплату(ВыбранныеДокументы)
          	
          	Для Каждого ДокРеализации Из ВыбранныеДокументы Цикл
          		
          		// Создаем новый документ "СчетНаОплатуПокупателю"
          		СчетОплаты = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
          		
          		// Заполняем шапку документа
          		СчетОплаты.Дата = ТекущаяДата();
          		СчетОплаты.Организация = ДокРеализации.Организация;
          		СчетОплаты.Контрагент = ДокРеализации.Контрагент;
          		СчетОплаты.ДоговорКонтрагента = ДокРеализации.ДоговорКонтрагента;
          		СчетОплаты.ВалютаДокумента = ДокРеализации.ВалютаДокумента;
          		СчетОплаты.СуммаДокумента = ДокРеализации.СуммаДокумента;
          		// Можно добавить другие реквизиты по необходимости
          		
          		// Заполняем табличную часть "Товары" (или аналогичную)
          		Для Каждого СтрокаРеализации Из ДокРеализации.Товары Цикл
          			НоваяСтрока = СчетОплаты.Товары.Добавить();
          			НоваяСтрока.Номенклатура = СтрокаРеализации.Номенклатура;
          			НоваяСтрока.Количество = СтрокаРеализации.Количество;
          			НоваяСтрока.Цена = СтрокаРеализации.Цена;
          			НоваяСтрока.Сумма = СтрокаРеализации.Сумма;
          			// Заполнить другие необходимые реквизиты табличной части
          		КонецЦикла;
          		
          		// Записать документ
          		СчетОплаты.Записать();
          		
          		// При необходимости провести документ
          		// СчетОплаты. Провести();
          		
          	КонецЦикла;
          	
          	Сообщить("Создание счетов на оплату завершено.");
          	
          КонецПроцедуры
          

          Вызов процедуры из формы обработки:

          Процедура СоздатьСчетаНаОплатуПоВыбранным(Команда)
          	
          	// Получаем выбранные документы реализации из табличной части
          	ВыбранныеДокументы = Новый Массив;
          	
          	Для Каждого Строка Из ЭлементыФормы.ТаблицаДокументов.ВыбранныеСтроки Цикл
          		ВыбранныеДокументы.Добавить(Строка.Документ);
          	КонецЦикла;
          	
          	Если ВыбранныеДокументы.Количество() = 0 Тогда
          		Сообщить("Не выбраны документы для создания счетов на оплату.");
          		Возврат;
          	КонецЕсли;
          	
          	СоздатьСчетаНаОплату(ВыбранныеДокументы);
          	
          КонецПроцедуры
          

          **Обратите внимание:**
          — Названия объектов (документов, табличных частей, реквизитов) могут отличаться в вашей конфигурации, их нужно подставить свои.
          — Если в вашей конфигурации «Счет на оплату» создается не как отдельный документ, а, например, как подчиненный или на основании документа реализации, то логику нужно адаптировать.
          — Для массового создания документов рекомендуется использовать транзакции и обработку ошибок.
          — Если нужно, чтобы документы сразу проводились, вызовите метод `Провести()` после записи, но учитывайте, что это может вызвать ошибки, если не заполнены обязательные реквизиты.

          Рекомендую посмотреть здесь: https://infostart.ru/public/12680/ — там есть примеры автоматического создания документов на основании других.

          Если нужна помощь с конкретной конфигурацией — уточните, я помогу адаптировать код.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С