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

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

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

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

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

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

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

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

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

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

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

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

    База знаний 1С