База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как автоматизировать создание «Счетов на оплату» по документам реализации? › Ответ в теме: Как автоматизировать создание «Счетов на оплату» по документам реализации?
Андрей, для создания документов «Счет на оплату» на основании выбранных документов реализации товаров и услуг в обработке, можно использовать следующий подход на языке 1С.
Основная идея:
— В форме обработки пользователь выбирает документы реализации (например, в табличной части).
— По выбранным документам создаются новые документы «Счет на оплату покупателю» с заполнением необходимых реквизитов и табличных частей.
— Документы записываются и, при необходимости, проводятся.
Пример кода для процедуры создания счетов на оплату по выбранным документам реализации:
&НаСервере
Процедура СоздатьСчетаНаОплату(ВыбранныеДокументы)
Для Каждого ДокРеализации Из ВыбранныеДокументы Цикл
// Создаем новый документ "СчетНаОплатуПокупателю"
СчетОплаты = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
// Заполняем шапку документа
СчетОплаты.Дата = ТекущаяДата();
СчетОплаты.Организация = ДокРеализации.Организация;
СчетОплаты.Контрагент = ДокРеализации.Контрагент;
СчетОплаты.ДоговорКонтрагента = ДокРеализации.ДоговорКонтрагента;
СчетОплаты.ВалютаДокумента = ДокРеализации.ВалютаДокумента;
СчетОплаты.СуммаДокумента = ДокРеализации.СуммаДокумента;
// Можно добавить другие реквизиты по необходимости
// Заполняем табличную часть "Товары" (или аналогичную)
Для Каждого СтрокаРеализации Из ДокРеализации.Товары Цикл
НоваяСтрока = СчетОплаты.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаРеализации.Номенклатура;
НоваяСтрока.Количество = СтрокаРеализации.Количество;
НоваяСтрока.Цена = СтрокаРеализации.Цена;
НоваяСтрока.Сумма = СтрокаРеализации.Сумма;
// Заполнить другие необходимые реквизиты табличной части
КонецЦикла;
// Записать документ
СчетОплаты.Записать();
// При необходимости провести документ
// СчетОплаты. Провести();
КонецЦикла;
Сообщить("Создание счетов на оплату завершено.");
КонецПроцедуры
Вызов процедуры из формы обработки:
Процедура СоздатьСчетаНаОплатуПоВыбранным(Команда)
// Получаем выбранные документы реализации из табличной части
ВыбранныеДокументы = Новый Массив;
Для Каждого Строка Из ЭлементыФормы.ТаблицаДокументов.ВыбранныеСтроки Цикл
ВыбранныеДокументы.Добавить(Строка.Документ);
КонецЦикла;
Если ВыбранныеДокументы.Количество() = 0 Тогда
Сообщить("Не выбраны документы для создания счетов на оплату.");
Возврат;
КонецЕсли;
СоздатьСчетаНаОплату(ВыбранныеДокументы);
КонецПроцедуры
**Обратите внимание:**
— Названия объектов (документов, табличных частей, реквизитов) могут отличаться в вашей конфигурации, их нужно подставить свои.
— Если в вашей конфигурации «Счет на оплату» создается не как отдельный документ, а, например, как подчиненный или на основании документа реализации, то логику нужно адаптировать.
— Для массового создания документов рекомендуется использовать транзакции и обработку ошибок.
— Если нужно, чтобы документы сразу проводились, вызовите метод `Провести()` после записи, но учитывайте, что это может вызвать ошибки, если не заполнены обязательные реквизиты.
Рекомендую посмотреть здесь: https://infostart.ru/public/12680/ — там есть примеры автоматического создания документов на основании других.
Если нужна помощь с конкретной конфигурацией — уточните, я помогу адаптировать код.