ВПФ (метод объекта не обнаружен)

Версия для печатиPDF-версия

Здравствуйте!

Необходимо создать внешнюю печатную форму "Акт списания" к  документу "Требование-накладная". Вроде всё сделал из готовой формы, но появляется ошибка "Метод объекта не обнаружен (ПечатьАкта)".

 

Код модуля объекта:

Функция Печать() Экспорт
    Форма = ПолучитьФорму("Форма");
    Форма.ПечатьАкта();
КонецФункции
 

Код модуля фомы

Процедура ПечатьАкта(Кнопка)
    ТабДок = Новый ТабличныйДокумент;
    Макет = ЭтотОбъект.ПолучитьМакет("Акт");
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.НомерДок = СсылкаНаОбъект.Номер;
    ОбластьШапка.Параметры.Подразделение = СсылкаНаОбъект.ПодразделениеЗатрат;
    ОбластьШапка.Параметры.ДатаДок = СсылкаНаОбъект.Дата;
    ТабДок.Вывести(ОбластьШапка);
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(ОбластьЗаголовок);
    
    Для Каждого Стр из СсылкаНаОбъект.Материалы Цикл
        ОбластьДанные = Макет.ПолучитьОбласть("Данные");
        ОбластьДанные.Параметры.Пункт = Стр.НомерСтроки;
        ОбластьДанные.Параметры.Номенклатура = Стр.Номенклатура;
        ОбластьДанные.Параметры.ЕдИзм = Стр.ЕдиницаИзмерения;
        ОбластьДанные.Параметры.Колво = Стр.Количество;
        ОбластьДанные.Параметры.Сумма = Стр.Себестоимость;
        ТабДок.Вывести(ОбластьДанные);
    КонецЦикла;
    
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.Председатель = ЭтотОбъект.ПредседательКомиссии;
    ОбластьПодвал.Параметры.Член_1 = ЭтотОбъект.ЧленКомиссии_1;
    ОбластьПодвал.Параметры.Член_2 = ЭтотОбъект.ЧленКомиссии_2;
    ТабДок.Вывести(ОбластьПодвал);
    
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.ПолеСверху = 5;
    ТабДок.ПолеСнизу = 5;
    ТабДок.ПолеСлева = 20;
    ТабДок.ПолеСправа = 10;
    ТабДок.Защита = Ложь;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
КонецПроцедуры       
 

В чём может быть проблема?

 

Переделал - по большому счету поменял модули местами. Осталась проблема - у обработки есть форма, куда вводятся некоторые реквизиты, она не выводится на экран (чтобы их ввести); на экране сразу табличный документ.
 

А вот это:

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

в модуле объекта осталось?

Да

Форма = ПолучитьФорму("Форма");

Форма.Открыть();

Печать().Показать();

Так выглядит модуль  объекта.

 

Вместо 

Форма.Открыть();

попробуйте

Форма.ОткрытьМодально();

Сразу же попробовал - пишет, что форма уже открыта (и это действительно так), хотя "Получить" вроде бы не должен её открывать.

Сейчас открывается форма, потом на её фоне Макет. После переключения на форму, ввода реквизитов и нажатия её кнопки "Печать акта" макет открывается повторно со вставленными реквизитами.
 

Вы форму открываете в функции Печать()?

Да. Это не правильно?
 

А потом в ней же ещё раз вызываете Печать().Показать()?

Ну в ней "Показать" уже табличный документ...

Вот модуль формы:

Процедура ПечатьАкта(Кнопка)
    Печать();
КонецПроцедуры

Вот модуль объекта:

Функция Печать() Экспорт
    Форма = ПолучитьФорму("Форма");
    Форма.ОткрытьМодально();
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = ЭтотОбъект.ПолучитьМакет("Акт");
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.НомерДок = СсылкаНаОбъект.Номер;
    ОбластьШапка.Параметры.Подразделение = СсылкаНаОбъект.ПодразделениеЗатрат;
    ОбластьШапка.Параметры.ДатаДок = СсылкаНаОбъект.Дата;
    ТабДок.Вывести(ОбластьШапка);
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(ОбластьЗаголовок);
    
    Для Каждого Стр из СсылкаНаОбъект.Материалы Цикл
        ОбластьДанные = Макет.ПолучитьОбласть("Данные");
        ОбластьДанные.Параметры.Пункт = Стр.НомерСтроки;
        ОбластьДанные.Параметры.Номенклатура = Стр.Номенклатура;
        ОбластьДанные.Параметры.ЕдИзм = Стр.ЕдиницаИзмерения;
        ОбластьДанные.Параметры.Колво = Стр.Количество;
        ОбластьДанные.Параметры.Сумма = Стр.Себестоимость;
        ТабДок.Вывести(ОбластьДанные);
    КонецЦикла;
    
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.Председатель = ЭтотОбъект.ПредседательКомиссии;
    ОбластьПодвал.Параметры.Член_1 = ЭтотОбъект.ЧленКомиссии_1;
    ОбластьПодвал.Параметры.Член_2 = ЭтотОбъект.ЧленКомиссии_2;
    ТабДок.Вывести(ОбластьПодвал);
    
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.ПолеСверху = 5;
    ТабДок.ПолеСнизу = 5;
    ТабДок.ПолеСлева = 20;
    ТабДок.ПолеСправа = 10;
    ТабДок.Защита = Ложь;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
КонецФункции

 

Понятно. Зацикливаете программу.

В процедуре ПечатьАкта напишите просто Закрыть();. Желательно перед этим сделать проверку заполненности реквизитов, необходимых для печати.

Спасибо огромное!! Всё работает!!
 

Пожалуйста)