Рабочая ли тема при выписке документов за поставщика - транзакционная печать?
Я вот подумал, может при печати документов за поставщика использовать транзакционную печать.
Открывается транзакция. Создается организация из контрагента.
Создается контрагент из нашей организации.
Подставляются в соответствующие поля документа.
После чего вызывается печать.
После чего транзакция отменяется.
Дешево-сердито-универсально.
В чем подводные камни? Взлетит?
Открывается транзакция. Создается организация из контрагента.
Создается контрагент из нашей организации.
Подставляются в соответствующие поля документа.
После чего вызывается печать.
После чего транзакция отменяется.
Дешево-сердито-универсально.
В чем подводные камни? Взлетит?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вспомнил свою старую статью на тему транзакционной печати: https://infostart.ru/1c/articles/685797/
Сделал в Управление нашей фирмой, редакция 1.6 (1.6.26.172)
В черновом виде примерно так (там еще полировать кое-какие реквизиты типа подписей, но в целом верно):
Так что годы прошли, а транзакционная печать остается актуальной!
Сделал в Управление нашей фирмой, редакция 1.6 (1.6.26.172)
В черновом виде примерно так (там еще полировать кое-какие реквизиты типа подписей, но в целом верно):
НачатьТранзакцию();
ПодготовитьДанныеВТранзакции(СсылкаНаДокумент);
//ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);
ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИмяМакетаПеч, МассивОбъектов, ПараметрыПечати);
ОтменитьТранзакцию();
ТабличныйДокумент = ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
Попытка
ТабличныйДокумент.Рисунки.Удалить(ТабличныйДокумент.Рисунки.Логотип);
Исключение КонецПопытки;
...
Процедура СкопироватьРеквизитыСправочника(Приемник, Источник) Экспорт
МД = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
Для Каждого Реквизит ИЗ МД.Реквизиты Цикл
Попытка
Приемник[Реквизит.Имя] = Источник[Реквизит.Имя];
Исключение КонецПопытки;
КонецЦикла;
КонецПроцедуры
Процедура ПодготовитьДанныеВТранзакции(СсылкаНаДокумент) Экспорт
ДО = СсылкаНаДокумент.ПолучитьОбъект();
Организация = ДО.Организация;
Контрагент = ДО.Контрагент;
НоваяОрганизацияОбъект = Справочники.Организации.СоздатьЭлемент();
НоваяОрганизацияОбъект.ОбменДанными.Загрузка = истина;
СкопироватьРеквизитыСправочника(НоваяОрганизацияОбъект, Контрагент);
НоваяОрганизацияОбъект.Записать();
НоваяОрганизация = НоваяОрганизацияОбъект.Ссылка;
НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагентОбъект.ОбменДанными.Загрузка = истина;
СкопироватьРеквизитыСправочника(НовыйКонтрагентОбъект, Организация);
НовыйКонтрагентОбъект.Записать();
НовыйКонтрагент = НовыйКонтрагентОбъект.Ссылка;
ДО.Организация = НоваяОрганизация;
ДО.Контрагент = НовыйКонтрагент;
//Сбрасываем подпись руководителя
Попытка ДО.ПодписьРуководителя = Неопределено; Исключение КонецПопытки;
Попытка ДО.ПодписьГлавногоБухгалтера = Неопределено; Исключение КонецПопытки;
Попытка ДО.ПодписьКассира = Неопределено; Исключение КонецПопытки;
Попытка ДО.ПодписьКладовщика = Неопределено; Исключение КонецПопытки;
Попытка ДО.КонтактноеЛицоПодписант = Неопределено; Исключение КонецПопытки;
Попытка
ИсхГрузоотправитель = ДО.Грузоотправитель;
ИсхГрузополучатель = ДО.Грузополучатель;
ДО.Грузополучатель = ИсхГрузоотправитель;
ДО.Грузоотправитель = ИсхГрузополучатель;
Исключение КонецПопытки;
ДО.ОбменДанными.Загрузка = истина;
ДО.Записать(); //Записываем документ
КонецПроцедуры
ПоказатьТак что годы прошли, а транзакционная печать остается актуальной!
Добавлю более свежий код, т.к. нужно создавать на основе поступления реализацию и к ней с/ф:
Но все же это проще, чем ковырять печатные формы 1С. И можно любую печатную форму прикрутить.
Процедура СкопироватьРеквизитыОбъекта(Приемник, Источник) Экспорт
МД = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
Для Каждого Реквизит ИЗ МД.Реквизиты Цикл
Попытка
Приемник[Реквизит.Имя] = Источник[Реквизит.Имя];
Исключение КонецПопытки;
КонецЦикла;
Для Каждого МДТЧ ИЗ МД.ТабличныеЧасти Цикл
ИмяТЧ = МДТЧ.Имя;
Попытка
ТЧ = Приемник[ИмяТЧ];
ТЧ.Очистить();
Для Каждого Строка ИЗ Источник[ИмяТЧ] Цикл
НСтр = ТЧ.Добавить();
Для Каждого Реквизит ИЗ МДТЧ.Реквизиты Цикл
Попытка
Нстр[Реквизит.Имя] = Строка[Реквизит.Имя];
Исключение КонецПопытки;
КонецЦикла;
КонецЦикла;
Исключение КонецПопытки;
КонецЦикла;
Попытка
Приемник.Код = Источник.Код;
Исключение КонецПопытки;
Попытка
Приемник.Дата = Источник.Дата;
Исключение КонецПопытки;
Попытка
Приемник.Номер = Источник.Номер;
Исключение КонецПопытки;
КонецПроцедуры
Функция ПодготовитьДанныеВТранзакции(СсылкаНаДокумент) Экспорт
ДО = СсылкаНаДокумент.ПолучитьОбъект();
Организация = ДО.Организация;
Контрагент = ДО.Контрагент;
НоваяОрганизацияОбъект = Справочники.Организации.СоздатьЭлемент();
НоваяОрганизацияОбъект.ОбменДанными.Загрузка = истина;
СкопироватьРеквизитыОбъекта(НоваяОрганизацияОбъект, Контрагент);
НоваяОрганизацияОбъект.Записать();
НоваяОрганизация = НоваяОрганизацияОбъект.Ссылка;
НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагентОбъект.ОбменДанными.Загрузка = истина;
СкопироватьРеквизитыОбъекта(НовыйКонтрагентОбъект, Организация);
НовыйКонтрагентОбъект.Записать();
НовыйКонтрагент = НовыйКонтрагентОбъект.Ссылка;
НДО = Документы.РасходнаяНакладная.СоздатьДокумент();
СкопироватьРеквизитыОбъекта(НДО, ДО);
НДО.Организация = НоваяОрганизация;
НДО.Контрагент = НовыйКонтрагент;
//Сбрасываем подпись руководителя
Попытка НДО.ПодписьРуководителя = Неопределено; Исключение КонецПопытки;
Попытка НДО.ПодписьГлавногоБухгалтера = Неопределено; Исключение КонецПопытки;
Попытка НДО.ПодписьКассира = Неопределено; Исключение КонецПопытки;
Попытка НДО.ПодписьКладовщика = Неопределено; Исключение КонецПопытки;
Попытка НДО.КонтактноеЛицоПодписант = Неопределено; Исключение КонецПопытки;
Попытка
ИсхГрузоотправитель = ДО.Грузоотправитель;
ИсхГрузополучатель = ДО.Грузополучатель;
НДО.Грузополучатель = ИсхГрузоотправитель;
НДО.Грузоотправитель = ИсхГрузополучатель;
Исключение КонецПопытки;
НДО.ОбменДанными.Загрузка = истина;
НДО.Проведен = истина;
НДО.Записать(); //Записываем документ
СФО = Документы.СчетФактура.СоздатьДокумент();
СФО.Заполнить(НДО.Ссылка);
СФО.ОбменДанными.Загрузка = истина;
СФО.Проведен = истина;
СФО.Записать();
Возврат НДО.Ссылка;
КонецФункции
ПоказатьНо все же это проще, чем ковырять печатные формы 1С. И можно любую печатную форму прикрутить.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот