Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 мая 2025, 00:31

Создание документов на основании по кнопке

Автор Jeslav, 17 фев 2025, 10:05

0 Пользователей и 1 гость просматривают эту тему.

Jeslav

Здравствуйте. Написал вот такой код для кнопки на форме:


&НаКлиенте
Процедура СформироватьДокументы(Команда, ПараметрКоманды)

Если ЗначениеЗаполнено(ДатаНовДокументов) Тогда
СформироватьДокументыНаСервере(ПараметрКоманды);
Иначе
Сообщить("Не выбрана дата для формирования новых документов!");
КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура СформироватьДокументыНаСервере(Док)

ОрганИННООО = Справочники.Организации.НайтиПоРеквизиту("ИНН", "Значение1");
ОрганИННИП = Справочники.Организации.НайтиПоРеквизиту("ИНН", "Значение2");

Для Каждого Элемент Из Объект.СписСчетов Цикл

Если Элемент.Организация.ИНН = ОрганИННИП.ИНН И Элемент.Галка = Истина Тогда

ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("ДокументОснование", Док);
ДанныеЗаполнения.Вставить("СчетНаОплату", Истина);
ДанныеЗаполнения.Вставить("Контрагент", Элемент.Контрагент);

АктВыпРаб = Документы.АктВыполненныхРабот.СоздатьДокумент();
АктВыпРаб.Заполнить(ДанныеЗаполнения);
АктВыпРаб.Дата = ДатаНовДокументов;
АктВыпРаб.Записать();
Элемент.ДокументНаОсновании = АктВыпРаб;
Сообщить("Создан документ: " + АктВыпРаб.Ссылка);

ИначеЕсли Элемент.Организация.ИНН = ОрганИННООО.ИНН И Элемент.Галка = Истина Тогда

ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("ДокументОснование", Док);
ДанныеЗаполнения.Вставить("СчетНаОплату", Истина);
ДанныеЗаполнения.Вставить("Контрагент", Элемент.Контрагент);

РасходНаклад = Документы.РасходнаяНакладная.СоздатьДокумент();
РасходНаклад.Заполнить(ДанныеЗаполнения);
РасходНаклад.Дата = ДатаНовДокументов;
РасходНаклад.Записать();
Элемент.ДокументНаОсновании = РасходНаклад;
Сообщить("Создан документ: " + РасходНаклад.Ссылка); 

Иначе 

Продолжить;

КонецЕсли; 

КонецЦикла;

КонецПроцедуры


Документы создаются, но тут есть пара нюансов:
1) Дата для новых документов выводится в виде «0:00». Везде типы стоят «дата», с этим всё в порядке, почему так происходит, не понимаю.
2) Нужно из документа «СчетНаОплату» автоматически заполнить остальные реквизиты с такими же именами. Также, там есть табличная часть в акте выполненных работ «РаботыИУслуги», в документе-основании «СчетНаОплату» она называется «ТоварыИУслуги», надо из неё также копировать по совпадению имен. Как это реализовать, чтобы корректно всё заполнялось? Пожалуйста, подскажите, уже второй день сообразить не могу

antoneus

1) Куда выводится?
2) ЗаполнитьЗначеняСвойств

Jeslav

antoneus, 1) выводится в колонке «дата», в списке документов с расходными накладными и в списке документов с актами выполнения работ.
2) ЗаполнитьЗначенияСвойств использовать вместо метода Заполнить() или его нужно дополнительно определить в процедуре?

antoneus

1) Бывают такие списки, в которых для сегодняшних документов выводится только время, для документов с другими датами - дата.

2) Вызвать после метода заполнить, если там не все заполняется.

ЗаполнитьЗначенияСвойств(АктВыпРаб, Док, СписокСвойствЧерезЗапятую);
ТабличныеЧасти

Для каждого стр из Док.ТоварыИУслуги Цикл
    ЗаполнитьЗначенияСвойств(АктВыпРаб.РаботыИУслуги.Добавить(), стр)
КонецЦикла;

Jeslav

antoneus, спасибо, помогло ваше решение👌

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск