ТабДок = неопределенно в УниверсальныеМеханизмы.НапечататьВнешнююФорму

1. Nastya-chajkovskaya 30.08.18 11:30 Сейчас в теме
Здравствуйте! Может кто подскажет, печатаю вешнюю печатную форму через
ТабДок = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Док, СтруктураПечатнаяФорма);

Но у меня возвращается ТабДок = Неопределенно и соответственно я не могу сохранить в PDF.
Я отладчиком прошла и получается в самой этой процедуре,когда ныряет в
ТабДокумент = Обработка.Печать();
он возвращает табдок = неопределенно, хотя отладчиком прохожу и все было нормально. С чем это связано и как мне получить мой табДок, чтобы его потом сохранить.

Это обычное приложение.
Вознаграждение за ответ
Показать полностью
Найденные решения
14. plevakin 30.08.18 14:34 Сейчас в теме +0.31 $m
(6) Так у вас Функция ничего не возращает, поэтому ТабДок = Неопределено

Замените процедуру СтандартнаяПроцедураПечать на функцию

Функция СтандартнаяПроцедураПечать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
	
	// Получить экземпляр документа на печать
	Если      ИмяМакета = "Накладная" Тогда
		ТабДокумент = ПечатьДокумента();
		
	ИначеЕсли ИмяМакета = "УниверсальныйПередаточныйДокумент" тогда
		ТабДокумент = ПечатьУниверсальногоПередаточногоДокумента();
		
	ИначеЕсли ИмяМакета = "ТОРГ12" тогда
		ТабДокумент = ПечатьТОРГ12();
		
	ИначеЕсли ИмяМакета = "ТОРГ12_БезУслуг" тогда
		ТабДокумент = ПечатьТОРГ12(Истина);	
		
	ИначеЕсли ИмяМакета = "Акт" Тогда
		ТабДокумент = ПечатьАктаОбОказанииУслуг();
		
	ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
		ТабДокумент = ПечатьТТН();
		
	ИначеЕсли ИмяМакета = "М15" Тогда
		ТабДокумент = ПечатьМ15();
		
	ИначеЕсли ИмяМакета = "СправкаРасчетВал" Тогда
		
		// Справка-расчет формирования рублевой суммы документа в валюте
		БухгалтерскийУчетРасчетовСКонтрагентами.НапечататьСправкуРасчетРублеваяСуммаДокументаВВалюте(Ссылка);
		Возврат Неопределено;
		
	КонецЕсли;
	
	Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, 
		ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект.ПолучитьОбъект()), НепосредственнаяПечать, Ссылка);
	
КонецФункции // Печать
Показать



+ Функцию печать замените на

Функция Печать() Экспорт

	//СЗК КОнстанта 17.05.2018 начало
	ПроверкаНДС();
	//СЗК КОнстанта 17.05.2018 конец
	ПрисвоениеПеременных();

////////////////////////////////////////////////////////////­////////////////////////
//Передаваемые параметры
	ИмяМакета = "УниверсальныйПередаточныйДокумент";
	КоличествоЭкземпляров = 1;
	НаПринтер = Ложь;
	НепосредственнаяПечать = Ложь;
////////////////////////////////////////////////////////////­//////////////////////// 

	Возврат СтандартнаяПроцедураПечать(ИмяМакета,КоличествоЭкземпляров,НаПринтер,НепосредственнаяПечать);	


КонецФункции	
Показать
15. VUN 38 30.08.18 14:38 Сейчас в теме +0.3 $m
(14) В функции СтандартнаяПроцедураПечать УниверсальныеМеханизмы.НапечататьДокумент() - это процедура, поэтому надо ее вызов закомментировать и поставить:
Возврат ТабДокумент;
22. plevakin 31.08.18 11:22 Сейчас в теме +0.27 $m
(21)
ВложенияПисьма = Новый Соответствие;


вынесите перед началом цикла. Вы же его каждый раз заново создаете.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 302 30.08.18 12:48 Сейчас в теме
(1) в самой обработке, которая внешняя печатная форма, там в модуле объекта - процедура печать есть ?
Это именно она возвращает вам результат, и смотреть нужно что там.
3. Nastya-chajkovskaya 30.08.18 12:53 Сейчас в теме
(2) да вот она и есть:
Сначала в модуле формы:

Процедура КнопкаВыполнитьНажатие(Кнопка)

ТабДок = Печать();
УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));


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


а потом в модуле объекта

Функция Печать() Экспорт

//СЗК КОнстанта 17.05.2018 начало
ПроверкаНДС();
//СЗК КОнстанта 17.05.2018 конец
ПрисвоениеПеременных();

////////////////////////////////////////////////////////////­////////////////////////
//Передаваемые параметры
ИмяМакета = "УниверсальныйПередаточныйДокумент";
КоличествоЭкземпляров = 1;
НаПринтер = Ложь;
НепосредственнаяПечать = Ложь;
////////////////////////////////////////////////////////////­////////////////////////

СтандартнаяПроцедураПечать(ИмяМакета,КоличествоЭкземпляров,НаПринтер,НепосредственнаяПечать);


КонецФункции
Показать


Она до последнего возвращает нормально табличный документ, а уже когда возвращается в мою, то неопределенна(
5. Boneman 302 30.08.18 12:59 Сейчас в теме
(3) Функция Печать, должна сформировать и вернуть готовый ТабДок.
Я не вижу у вас в коде, не формирования, ни даже Возврат ТабДок-а.
6. Nastya-chajkovskaya 30.08.18 13:00 Сейчас в теме
14. plevakin 30.08.18 14:34 Сейчас в теме +0.31 $m
(6) Так у вас Функция ничего не возращает, поэтому ТабДок = Неопределено

Замените процедуру СтандартнаяПроцедураПечать на функцию

Функция СтандартнаяПроцедураПечать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь, НепосредственнаяПечать = Ложь) Экспорт
	
	// Получить экземпляр документа на печать
	Если      ИмяМакета = "Накладная" Тогда
		ТабДокумент = ПечатьДокумента();
		
	ИначеЕсли ИмяМакета = "УниверсальныйПередаточныйДокумент" тогда
		ТабДокумент = ПечатьУниверсальногоПередаточногоДокумента();
		
	ИначеЕсли ИмяМакета = "ТОРГ12" тогда
		ТабДокумент = ПечатьТОРГ12();
		
	ИначеЕсли ИмяМакета = "ТОРГ12_БезУслуг" тогда
		ТабДокумент = ПечатьТОРГ12(Истина);	
		
	ИначеЕсли ИмяМакета = "Акт" Тогда
		ТабДокумент = ПечатьАктаОбОказанииУслуг();
		
	ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
		ТабДокумент = ПечатьТТН();
		
	ИначеЕсли ИмяМакета = "М15" Тогда
		ТабДокумент = ПечатьМ15();
		
	ИначеЕсли ИмяМакета = "СправкаРасчетВал" Тогда
		
		// Справка-расчет формирования рублевой суммы документа в валюте
		БухгалтерскийУчетРасчетовСКонтрагентами.НапечататьСправкуРасчетРублеваяСуммаДокументаВВалюте(Ссылка);
		Возврат Неопределено;
		
	КонецЕсли;
	
	Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, 
		ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект.ПолучитьОбъект()), НепосредственнаяПечать, Ссылка);
	
КонецФункции // Печать
Показать



+ Функцию печать замените на

Функция Печать() Экспорт

	//СЗК КОнстанта 17.05.2018 начало
	ПроверкаНДС();
	//СЗК КОнстанта 17.05.2018 конец
	ПрисвоениеПеременных();

////////////////////////////////////////////////////////////­////////////////////////
//Передаваемые параметры
	ИмяМакета = "УниверсальныйПередаточныйДокумент";
	КоличествоЭкземпляров = 1;
	НаПринтер = Ложь;
	НепосредственнаяПечать = Ложь;
////////////////////////////////////////////////////////////­//////////////////////// 

	Возврат СтандартнаяПроцедураПечать(ИмяМакета,КоличествоЭкземпляров,НаПринтер,НепосредственнаяПечать);	


КонецФункции	
Показать
15. VUN 38 30.08.18 14:38 Сейчас в теме +0.3 $m
(14) В функции СтандартнаяПроцедураПечать УниверсальныеМеханизмы.НапечататьДокумент() - это процедура, поэтому надо ее вызов закомментировать и поставить:
Возврат ТабДокумент;
16. plevakin 30.08.18 14:49 Сейчас в теме
(15) В какой это конфигурации УниверсальныеМеханизмы.НапечататьДокумент это процедура?

В ЗУП 2.5 это вполне себе функция.
17. VUN 38 30.08.18 14:59 Сейчас в теме
7. Timur.V 82 30.08.18 13:21 Сейчас в теме
Пример сохранения в pdf

Макет = ПолучитьМакет("Макет"); 
ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); 

ТабДок = Новый ТабличныйДокумент; 
ОбластьШапка.Параметры.НомерДок = Номер; 
ОбластьШапка.Параметры.ДатаДок = Формат(Дата, "DDMMMMYYYY"); 
ОбластьШапка.Параметры.Руководитель = Руководитель;

ТабДок.Вывести(ОбластьШапка); 

ТабДок.Защита=Истина;
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
ЗапуститьПриложение(ВремФайл);   
Показать
8. Nastya-chajkovskaya 30.08.18 13:26 Сейчас в теме
(7)
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);


Сохранить проблемы нет. А вот понять почему табдок = неопределенно, если на экран её он выводит .
9. Timur.V 82 30.08.18 13:55 Сейчас в теме
(8)
Когда ТабДок выводится на экран, переменная обнуляется т.е = неопределенно. Потому что она больше не используется (не нужна).
А до этого, у неё есть значение.

Пример (7) рабочий, работает на платформе выше 8.2.13
10. Nastya-chajkovskaya 30.08.18 14:16 Сейчас в теме
(9) А как можно преобразовать ? Я знаю,что есть
УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект)); 
, но у меня же нету табдок. Можно как-то сделать так, чтобы он у меня не выводился, а просто сформировал и сохранил?
11. Timur.V 82 30.08.18 14:24 Сейчас в теме
(10)
ТабДок у вас есть т.к. вы же его передаете в строку
УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект)); 

которая печатает документ.
А вам нужно сохранить, пример ниже:
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
ЗапуститьПриложение(ВремФайл); 
13. Nastya-chajkovskaya 30.08.18 14:33 Сейчас в теме
(11)
УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));


Не работает, т.к. табДок = неопределено , то когда ныряет в эту процедуру, обрывает на начальном этапе.

Процедура НапечататьДокумент(ПечДокумент, КоличествоЭкземпляров = 1, НаПринтер = Ложь, Заголовок = "", НепосредственнаяПечать = Ложь, Ссылка = Неопределено, ИмяМакета = "", Контрагент = Неопределено) Экспорт

	Если ПечДокумент = Неопределено тогда
		Возврат;
	КонецЕсли;

	// Получить необходимое количество копий
	Если КоличествоЭкземпляров > 0 Тогда
		ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
	КонецЕсли;

	Если НЕ ПечДокумент.АвтоМасштаб
	   И НЕ ЗначениеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
		ПечДокумент.АвтоМасштаб = Истина;
	КонецЕсли;

	Если НаПринтер Тогда

		ПечДокумент.Напечатать(НепосредственнаяПечать = Истина);

	Иначе

		// Отобразить печатный документ на экране
		//ФормаПечати = ПолучитьОбщуюФорму("ФормаПечати",, Новый УникальныйИдентификатор);
		ФормаПечати = ПолучитьОбщуюФорму("ФормаПечати",, Заголовок + ИмяМакета + Ссылка);
		ФормаПечати.Документ = Ссылка;
		ФормаПечати.Заголовок = Заголовок;
		ФормаПечати.ИмяМакета = ИмяМакета;
		ФормаПечати.Контрагент = Контрагент;
		ФормаПечати.ПечатныйДокумент = ПечДокумент;
		ФормаПечати.Открыть();

	КонецЕсли;

КонецПроцедуры // НапечататьДокумент()
Показать
12. VUN 38 30.08.18 14:32 Сейчас в теме
(10) Процедура СтандартнаяПроцедураПечать надо сделать функцией и в конце этой функции поставить:
Возврат ТабДокумент;
В конце Функция Печать() исправить СтандартнаяПроцедураПечать на
ТабДок = СтандартнаяПроцедураПечать(ИмяМакета,КоличествоЭкземпляров,НаПринтер,НепосредственнаяПечать);
Возврат ТабДок;
4. Nastya-chajkovskaya 30.08.18 12:59 Сейчас в теме
и она на экран выводиться. Но когда я пытаюсь её сохранить
тСтруктура = PDFСохранить(Док,ТабДок);


[1C-CODE]Функция PDFСохранить(текДокумент,ТабДок)
СтруктураВозврата = Новый Структура;

печ_текДокумент = СокрЛП(Строка(текДокумент));
печ_текДокумент = СтрЗаменить(печ_текДокумент,".","_");
печ_текДокумент = СтрЗаменить(печ_текДокумент,":","_");
печ_текДокумент = СтрЗаменить(печ_текДокумент," ","_");
СтруктураВозврата.Вставить("Наименование",печ_текДокумент);
печ_текДокумент = печ_текДокумент + ".pdf";
СтруктураВозврата.Вставить("ИмяФайла",печ_текДокумент);

ПутьВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
СтрокиПути = СтрЗаменить(ПутьВременногоФайла,"\",Символы.ПС);
ЗаменяемоеЗначение = СтрПолучитьСтроку(СтрокиПути,СтрЧислоСтрок(СтрокиПути));
ПутьВременногоФайла = СтрЗаменить(ПутьВременногоФайла,ЗаменяемоеЗначение,печ_текДокумент);

СтруктураВозврата.Вставить("Путь",ПутьВременногоФайла);

ТабДок.Записать(ПутьВременногоФайла,ТипФайлаТабличногоДокумента.PDF);

Возврат СтруктураВозврата;
КонецФункции
/CODE]

Выдается ошибка

{ВнешняяОбработка.ОтправкаУПДПоЭлектроннойПочте.Форма.Форма.Форма(177)}: Значение не является значением объектного типа (Записать)
ТабДок.Записать(ПутьВременногоФайла,ТипФайлаТабличногоДокумента.PDF);
18. Nastya-chajkovskaya 30.08.18 15:45 Сейчас в теме
сейчас буду пробовать)
19. PeRom 51 30.08.18 15:53 Сейчас в теме
(4) А какой тип значения по отладчику у ТабДок?
20. kild 93 30.08.18 18:12 Сейчас в теме
Ни самой обработки, ни названия конфигурации, ни версии платформы.
Пока получите ответ - придется почитать много лишней болтовни.
21. Nastya-chajkovskaya 31.08.18 01:15 Сейчас в теме
Да вышло)
Ещё вопрос как при обходе цикла мне добавить печатные формы во вложения:

Для Каждого ЭлементМассива из НайденныеСтроки Цикл
			
			ВложенияПисьма = Новый Соответствие;
			
			Если НЕ тТемаСообщения="" Тогда
				тТемаСообщения = тТемаСообщения + "; ";
			КонецЕсли;	
			Если ЗначениеЗаполнено(ЭлементМассива.Ссылка) Тогда
				
				Док = ЭлементМассива.Ссылка;
				ВПФ = ПолучитьПечатныеФормы(Док);
				
				СоответствиеПечатныхФорм.Вставить(ВПФ[0].Значение.СсылкаНаВнешнююОбработку.Наименование,ВПФ[0].Значение);
				ПечФ = ВПФ[0].Значение.СсылкаНаВнешнююОбработку.Наименование;
				
				СтруктураПечатнаяФорма = СоответствиеПечатныхФорм[ПечФ];
				ТабДок = НайтиВПФ(Док);
				ИмяФайлаРеализация = Каталог+"\Реализация"+ЭлементМассива.Ссылка.Номер+Формат(ЭлементМассива.Ссылка.Дата,"ДФ=dd.MM.yyyy")+".pdf";
				ТабДок.Записать(ИмяФайлаРеализация,ТипФайлаТабличногоДокумента.PDF);
				СписокВложений.Добавить(Новый Структура("ИмяФайла", ИмяФайлаРеализация));

!!!!- вот тут проблема , получаем только последнюю, хотя их две в табличной части!!!!!!!!!!				


ВложенияПисьма.Вставить("Реализация"+СокрЛП(ЭлементМассива.Ссылка.Номер)+СокрЛП(ЭлементМассива.Ссылка.Дата)+".pdf",Новый ДвоичныеДанные(ИмяФайлаРеализация));	 
				тТемаСообщения = тТемаСообщения + "" + ТипЗНЧ(ЭлементМассива.Ссылка)+ " " + ОбщегоНазначения.ПолучитьНомерНаПечать(ЭлементМассива.Ссылка) + " от " +Формат(ЭлементМассива.Ссылка.Дата,"ДФ=dd.MM.yyyy");
				
				ПараметрыПисьма.Вставить("Вложения", ВложенияПисьма );
				
			КонецЕсли;
Показать
22. plevakin 31.08.18 11:22 Сейчас в теме +0.27 $m
(21)
ВложенияПисьма = Новый Соответствие;


вынесите перед началом цикла. Вы же его каждый раз заново создаете.
Оставьте свое сообщение

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