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

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

Это обычное приложение.
---
Так у вас Функция ничего не возращает, поэтому ТабДок = Неопределено

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

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

    // Получить экземпляр документа на печать
    Если ИмяМакета = "Накладная" Тогда
    ТабДокумент = ПечатьДокумента();

    ИначеЕсли ИмяМакета = "УниверсальныйПередаточныйДокумент" тогда
    ТабДокумент = ПечатьУниверсальногоПередаточногоДокумента();

    ИначеЕсли ИмяМакета = "ТОРГ12" тогда
    ТабДокумент = ПечатьТОРГ12();

    ИначеЕсли ИмяМакета = "ТОРГ12_БезУслуг" тогда
    ТабДокумент = ПечатьТОРГ12(Истина);

    ИначеЕсли ИмяМакета = "Акт" Тогда
    ТабДокумент = ПечатьАктаОбОказанииУслуг();

    ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
    ТабДокумент = ПечатьТТН();

    ИначеЕсли ИмяМакета = "М15" Тогда
    ТабДокумент = ПечатьМ15();

    ИначеЕсли ИмяМакета = "СправкаРасчетВал" Тогда

    // Справка-расчет формирования рублевой суммы документа в валюте
    БухгалтерскийУчетРасчетовСКонтрагентами.НапечататьСправкуРасчетРублеваяСуммаДокументаВВалюте(Ссылка);
    Возврат Неопределено;

    КонецЕсли;

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

    КонецФункции // Печать
```

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

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

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

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

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

    КонецФункции
```
---
В функции СтандартнаяПроцедураПечать УниверсальныеМеханизмы.НапечататьДокумент() - это процедура, поэтому надо ее вызов закомментировать и поставить:
Возврат ТабДокумент;
---
ВложенияПисьма = Новый Соответствие;

вынесите перед началом цикла. Вы же его каждый раз заново создаете.
---
в самой обработке, которая внешняя печатная форма, там в модуле объекта - процедура печать есть ?
Это именно она возвращает вам результат, и смотреть нужно что там.
---
да вот она и есть:
Сначала в модуле формы:

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

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

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

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

Она до последнего возвращает нормально табличный документ, а уже когда возвращается в мою, то неопределенна(
---
Функция Печать, должна сформировать и вернуть готовый ТабДок.
Я не вижу у вас в коде, не формирования, ни даже Возврат ТабДок-а.
---
Так у вас Функция ничего не возращает, поэтому ТабДок = Неопределено

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

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

    // Получить экземпляр документа на печать
    Если ИмяМакета = "Накладная" Тогда
    ТабДокумент = ПечатьДокумента();

    ИначеЕсли ИмяМакета = "УниверсальныйПередаточныйДокумент" тогда
    ТабДокумент = ПечатьУниверсальногоПередаточногоДокумента();

    ИначеЕсли ИмяМакета = "ТОРГ12" тогда
    ТабДокумент = ПечатьТОРГ12();

    ИначеЕсли ИмяМакета = "ТОРГ12_БезУслуг" тогда
    ТабДокумент = ПечатьТОРГ12(Истина);

    ИначеЕсли ИмяМакета = "Акт" Тогда
    ТабДокумент = ПечатьАктаОбОказанииУслуг();

    ИначеЕсли ИмяМакета = "1Т" или ИмяМакета = "_1Т" Тогда
    ТабДокумент = ПечатьТТН();

    ИначеЕсли ИмяМакета = "М15" Тогда
    ТабДокумент = ПечатьМ15();

    ИначеЕсли ИмяМакета = "СправкаРасчетВал" Тогда

    // Справка-расчет формирования рублевой суммы документа в валюте
    БухгалтерскийУчетРасчетовСКонтрагентами.НапечататьСправкуРасчетРублеваяСуммаДокументаВВалюте(Ссылка);
    Возврат Неопределено;

    КонецЕсли;

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

    КонецФункции // Печать
```

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

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

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

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

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

    КонецФункции
```
---
В функции СтандартнаяПроцедураПечать УниверсальныеМеханизмы.НапечататьДокумент() - это процедура, поэтому надо ее вызов закомментировать и поставить:
Возврат ТабДокумент;
---
В какой это конфигурации УниверсальныеМеханизмы.НапечататьДокумент это процедура?

В ЗУП 2.5 это вполне себе функция.
---
БГУ 1.0
---
Пример сохранения в pdf

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

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

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

    ТабДок.Защита=Истина;
    ВремФайл=ПолучитьИмяВременногоФайла("pdf");
    ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
    ЗапуститьПриложение(ВремФайл);
```
---
ВремФайл=ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);

Сохранить проблемы нет. А вот понять почему табдок = неопределенно, если на экран её он выводит .
---
Когда ТабДок выводится на экран, переменная обнуляется т.е = неопределенно. Потому что она больше не используется (не нужна).
А до этого, у неё есть значение.

Пример (7) рабочий, работает на платформе выше 8.2.13
---
А как можно преобразовать ? Я знаю,что есть
```1c
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));
```
 , но у меня же нету табдок. Можно как-то сделать так, чтобы он у меня не выводился, а просто сформировал и сохранил?
---
ТабДок у вас есть т.к. вы же его передаете в строку

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

которая печатает документ.
А вам нужно сохранить, пример ниже:

```1c
    ВремФайл=ПолучитьИмяВременногоФайла("pdf");
    ТабДок.Записать(ВремФайл,ТипФайлаТабличногоДокумента.PDF);
    ЗапуститьПриложение(ВремФайл);
```
---
УниверсальныеМеханизмы.НапечататьДокумент(ТабДок, 0, Ложь, ОбщегоНазначения.СформироватьЗаголовокДокумента(СсылкаНаОбъект));

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

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

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

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

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

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

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

    Иначе

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

    КонецЕсли;

    КонецПроцедуры // НапечататьДокумент()
```
---
Процедура СтандартнаяПроцедураПечать надо сделать функцией и в конце этой функции поставить:
Возврат ТабДокумент;
В конце Функция Печать() исправить СтандартнаяПроцедураПечать на
ТабДок = СтандартнаяПроцедураПечать(ИмяМакета,КоличествоЭкземпляров,НаПринтер,НепосредственнаяПечать);
Возврат ТабДок;
---
и она на экран выводиться. Но когда я пытаюсь её сохранить
```1c
    тСтруктура = PDFСохранить(Док,ТабДок);
```

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

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

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

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

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

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

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

{ВнешняяОбработка.ОтправкаУПДПоЭлектроннойПочте.Форма.Форма.Форма(177)}: Значение не является значением объектного типа (Записать)
 ТабДок.Записать(ПутьВременногоФайла,ТипФайлаТабличногоДокумента.PDF);
---
сейчас буду пробовать)
---
А какой тип значения по отладчику у ТабДок?
---
Ни самой обработки, ни названия конфигурации, ни версии платформы.
Пока получите ответ - придется почитать много лишней болтовни.
---
Да вышло)
Ещё вопрос как при обходе цикла мне добавить печатные формы во вложения:

```1c
    Для Каждого ЭлементМассива из НайденныеСтроки Цикл

    ВложенияПисьма = Новый Соответствие;

    Если НЕ тТемаСообщения=" Тогда
    тТемаСообщения = тТемаСообщения + "; ";
    КонецЕсли;
    Если ЗначениеЗаполнено(ЭлементМассива.Ссылка) Тогда

    Док = ЭлементМассива.Ссылка;
    ВПФ = ПолучитьПечатныеФормы(Док);

    СоответствиеПечатныхФорм.Вставить(ВПФ[0].Значение.СсылкаНаВнешнююОбработку.Наименование,ВПФ[0].Значение);
    ПечФ = ВПФ[0].Значение.СсылкаНаВнешнююОбработку.Наименование;

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

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

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

    ПараметрыПисьма.Вставить("Вложения", ВложенияПисьма );

    КонецЕсли;
```
---
ВложенияПисьма = Новый Соответствие;

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