Рабочая ли тема при выписке документов за поставщика - транзакционная печать?

1. fixin 4282 22.03.22 12:15 Сейчас в теме
Я вот подумал, может при печати документов за поставщика использовать транзакционную печать.
Открывается транзакция. Создается организация из контрагента.
Создается контрагент из нашей организации.
Подставляются в соответствующие поля документа.
После чего вызывается печать.
После чего транзакция отменяется.
Дешево-сердито-универсально.

В чем подводные камни? Взлетит?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. nomad_irk 81 22.03.22 15:17 Сейчас в теме
(1) "нужно больше транзакций" ©....
2. dmbarchenkov 22.03.22 13:48 Сейчас в теме
3. ishelper 22.03.22 14:57 Сейчас в теме
(2) Абсолютно правильный ответ!

Что вообще можно посоветовать "Гению 1С"? "Сама-сама-сама!" (с) :-)
5. fixin 4282 23.03.22 18:44 Сейчас в теме
Вспомнил свою старую статью на тему транзакционной печати: https://infostart.ru/1c/articles/685797/
Сделал в Управление нашей фирмой, редакция 1.6 (1.6.26.172)
В черновом виде примерно так (там еще полировать кое-какие реквизиты типа подписей, но в целом верно):
	НачатьТранзакцию();
	ПодготовитьДанныеВТранзакции(СсылкаНаДокумент);
	//ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);
	ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИмяМакетаПеч, МассивОбъектов, ПараметрыПечати);
	
	ОтменитьТранзакцию();


    ТабличныйДокумент = ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
	Попытка 
		ТабличныйДокумент.Рисунки.Удалить(ТабличныйДокумент.Рисунки.Логотип);
	Исключение КонецПопытки;
	
...

Процедура СкопироватьРеквизитыСправочника(Приемник, Источник) Экспорт

	МД = Метаданные.НайтиПоТипу(ТипЗнч(Источник));
	
	Для Каждого Реквизит ИЗ МД.Реквизиты Цикл
		Попытка
			Приемник[Реквизит.Имя] = Источник[Реквизит.Имя];
		Исключение КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры


Процедура ПодготовитьДанныеВТранзакции(СсылкаНаДокумент) Экспорт
	ДО = СсылкаНаДокумент.ПолучитьОбъект();
	
	Организация = ДО.Организация;
	Контрагент =  ДО.Контрагент;                             
	
	НоваяОрганизацияОбъект = Справочники.Организации.СоздатьЭлемент();
	НоваяОрганизацияОбъект.ОбменДанными.Загрузка = истина;             
	СкопироватьРеквизитыСправочника(НоваяОрганизацияОбъект, Контрагент);
	НоваяОрганизацияОбъект.Записать();
	НоваяОрганизация = НоваяОрганизацияОбъект.Ссылка;
	
	НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
	НовыйКонтрагентОбъект.ОбменДанными.Загрузка = истина;
	СкопироватьРеквизитыСправочника(НовыйКонтрагентОбъект, Организация);
	НовыйКонтрагентОбъект.Записать();
	НовыйКонтрагент = НовыйКонтрагентОбъект.Ссылка;
	
	ДО.Организация = НоваяОрганизация; 
	ДО.Контрагент = НовыйКонтрагент;  
	
	//Сбрасываем подпись руководителя
	Попытка ДО.ПодписьРуководителя = Неопределено; 				Исключение 	КонецПопытки;
	Попытка ДО.ПодписьГлавногоБухгалтера = Неопределено; 		Исключение 	КонецПопытки;
	Попытка ДО.ПодписьКассира = Неопределено; 					Исключение 	КонецПопытки;
	Попытка ДО.ПодписьКладовщика = Неопределено; 				Исключение 	КонецПопытки;
	
	Попытка ДО.КонтактноеЛицоПодписант = Неопределено; 			Исключение 	КонецПопытки;
	
	Попытка 
		ИсхГрузоотправитель = ДО.Грузоотправитель; 
		ИсхГрузополучатель = ДО.Грузополучатель; 
		ДО.Грузополучатель = ИсхГрузоотправитель;
		ДО.Грузоотправитель = ИсхГрузополучатель;
	Исключение 	КонецПопытки;
	
	
	ДО.ОбменДанными.Загрузка = истина;
	ДО.Записать(); //Записываем документ
	
КонецПроцедуры

Показать


Так что годы прошли, а транзакционная печать остается актуальной!
6. fixin 4282 30.03.22 18:24 Сейчас в теме
Добавлю более свежий код, т.к. нужно создавать на основе поступления реализацию и к ней с/ф:
Процедура СкопироватьРеквизитыОбъекта(Приемник, Источник) Экспорт

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

	
	Попытка
		Приемник.Код = Источник.Код;
	Исключение КонецПопытки;
	Попытка
		Приемник.Дата = Источник.Дата;
	Исключение КонецПопытки;
	Попытка
		Приемник.Номер = Источник.Номер;
	Исключение КонецПопытки;

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


Функция ПодготовитьДанныеВТранзакции(СсылкаНаДокумент) Экспорт
	ДО = СсылкаНаДокумент.ПолучитьОбъект();
	
	Организация = ДО.Организация;
	Контрагент =  ДО.Контрагент;                             
	
	НоваяОрганизацияОбъект = Справочники.Организации.СоздатьЭлемент();
	НоваяОрганизацияОбъект.ОбменДанными.Загрузка = истина;             
	СкопироватьРеквизитыОбъекта(НоваяОрганизацияОбъект, Контрагент);
	НоваяОрганизацияОбъект.Записать();
	НоваяОрганизация = НоваяОрганизацияОбъект.Ссылка;
	
	НовыйКонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
	НовыйКонтрагентОбъект.ОбменДанными.Загрузка = истина;
	СкопироватьРеквизитыОбъекта(НовыйКонтрагентОбъект, Организация);
	НовыйКонтрагентОбъект.Записать();
	НовыйКонтрагент = НовыйКонтрагентОбъект.Ссылка;
	
	НДО = Документы.РасходнаяНакладная.СоздатьДокумент();
	СкопироватьРеквизитыОбъекта(НДО, ДО);
	
	НДО.Организация = НоваяОрганизация; 
	НДО.Контрагент = НовыйКонтрагент;  
	
	//Сбрасываем подпись руководителя
	Попытка НДО.ПодписьРуководителя = Неопределено; 				Исключение 	КонецПопытки;
	Попытка НДО.ПодписьГлавногоБухгалтера = Неопределено; 		Исключение 	КонецПопытки;
	Попытка НДО.ПодписьКассира = Неопределено; 					Исключение 	КонецПопытки;
	Попытка НДО.ПодписьКладовщика = Неопределено; 				Исключение 	КонецПопытки;
	
	Попытка НДО.КонтактноеЛицоПодписант = Неопределено; 			Исключение 	КонецПопытки;
	
	Попытка 
		ИсхГрузоотправитель = ДО.Грузоотправитель; 
		ИсхГрузополучатель = ДО.Грузополучатель; 
		НДО.Грузополучатель = ИсхГрузоотправитель;
		НДО.Грузоотправитель = ИсхГрузополучатель;
	Исключение 	КонецПопытки;
	
	
	НДО.ОбменДанными.Загрузка = истина;
	НДО.Проведен = истина;
	НДО.Записать(); //Записываем документ   
	
	СФО = Документы.СчетФактура.СоздатьДокумент();
	СФО.Заполнить(НДО.Ссылка);
	СФО.ОбменДанными.Загрузка = истина;
	СФО.Проведен = истина;
	СФО.Записать();
 
	
	Возврат НДО.Ссылка;
	
КонецФункции


Показать

Но все же это проще, чем ковырять печатные формы 1С. И можно любую печатную форму прикрутить.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот