Имя: Пароль:
1C
1С v8
программно вызвать печатную форму
0 I_learn_1c
 
26.02.20
12:36
Доброго дня,

Вопрос может для кого-то банальный, но у меня вот на нем затык случился... помогите разобраться пожалуйста что не так.

Есть внешняя печатная форма, в ней используется NameDecl для склонения, хранится в макете этой же формы в двоичных данных.
Форма как внешняя работает, через файл-открыть тоже работает. со склонением все хорошо

Но есть необходимость вызывать функцию из этой формы программно. При определенном событии нужно вызвать из обработки функцию формирующую табличный документ, получить документ и сохранить его.
При этом вылезает ошибка на ОбработкаФорма.СформироватьТабДок(МассивДок)    {ВнешняяОбработка.ПриказСПодписью.МодульОбъекта(126)}: Значение не является значением объектного типа (Просклонять)



вот такое есть в модуле обработки:

Функция СформироватьТабДок(МассивОбъектов) Экспорт
.......
Попытка
        // Подключаем внешнюю компоненту
        ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("КомпонентаСклонения")), "NameDecl", ТипВнешнейКомпоненты.Native);
        //ПодключитьВнешнююКомпоненту("Макет.КомпонентаСклонения", "NameDecl",ТипВнешнейКомпоненты.Native );
        ОбъектСклонение = Новый("AddIn.NameDecl.CNameDecl");
    Исключение
        // Не удалось выполнить операции с внешней компонентой
        Сообщить("Не удалось подключить внешнюю компоненту по причине: " + ОписаниеОшибки());
    КонецПопытки;

Для Каждого ДокСсылка из МассивОбъектов Цикл
.....
Если ОтделГруппаЗакупки<>Справочники.Подразделения.ПустаяСсылка() Тогда
                    Если ЗначениеЗаполнено(ОтделГруппаЗакупки.Руководитель) Тогда
                        Сообщить("123"+ОтделГруппаЗакупки.Руководитель);
                        ОбластьПриказ.Параметры.ФИОЗакупки ="Группе по проведению закупок ("+ОбъектСклонение.Просклонять(ОтделГруппаЗакупки.Руководитель.Фамилия,3)+" "+Лев(ОтделГруппаЗакупки.Руководитель.Имя,1)+"."+Лев(ОтделГруппаЗакупки.Руководитель.Отчество,1)+". )";
                    Иначе
                        ОбластьПриказ.Параметры.ФИОЗакупки = "___________________________________";    
                    КонецЕсли;
                Иначе
                    ОбластьПриказ.Параметры.ФИОЗакупки = "___________________________________";    
                КонецЕсли;
.....
КонецЦикла;
    
КонецФункции


вот так вызываю программно (в модуле объекта): МассивДок поступает одинаковый, на выходе функция должна вернуть ТабДок, но валится на склонении, Сообщить("123") даже не выводит, ну это потому что программно наверно... Данные заполнены, все ок, в обычном режиме работает


ПечОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ПриказСПодписью");
        
        Если ПечОбработка<>Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда
            
            ПечФормаОбъект = ПечОбработка.ПолучитьОбъект();
            
            МассивДок = Новый Массив;
            МассивДок.Добавить(Предмет.Предмет);
            
            ИмяФайлаОбработки = ПолучитьИмяВременногоФайла();
            ДвоичныеДанные = ПечОбработка.ХранилищеОбработки.Получить();
            ДвоичныеДанные.Записать(ИмяФайлаОбработки);
            
            Попытка
                ОбработкаФорма = ВнешниеОбработки.Создать(ИмяФайлаОбработки);
                ТабДок = ОбработкаФорма.СформироватьТабДок(МассивДок);
                
                ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
Исключение
            КонецПопытки;
                        
        КонецЕсли;
1 I_learn_1c
 
26.02.20
12:54
(0) может нужно компоненту эту как то вызвать по другому? Вероятно ее не удается подключить
2 Ц_У
 
26.02.20
13:08
А так можно?       ПодключитьВнешнююКомпоненту(ПоместитьВоВременноеХранилище(ПолучитьМакет("КомпонентаСклонения")), "NameDecl", ТипВнешнейКомпоненты.Native);
В СП говорят вот так:       //ПодключитьВнешнююКомпоненту("Макет.КомпонентаСклонения", "NameDecl",ТипВнешнейКомпоненты.Native );
ОбъектСклонение = Новый("AddIn.NameDecl.CNameDecl");
Проверить на то, что это он, может NULL/Неопределено?
3 Ц_У
 
26.02.20
13:11
Может быть это: ОбъектСклонение = Новый("AddIn.NameDecl.CNameDecl");
Заменить на Это: ОбъектСклонение = ПодключитьВнешнююКомпоненту("AddIn.NameDecl.CNameDecl")
4 I_learn_1c
 
26.02.20
13:20
(2) взяла из какого-то примера, но действительно....

в обычном режиме внешней и через файл-открыть работают оба варианта, а при программном вызове действительно помогло  ПодключитьВнешнююКомпоненту("Макет.КомпонентаСклонения", "NameDecl",ТипВнешнейКомпоненты.Native );

В итоге подходит так

Попытка
        // Подключаем внешнюю компоненту
        ПодключитьВнешнююКомпоненту("Макет.КомпонентаСклонения", "NameDecl",ТипВнешнейКомпоненты.Native );
        ОбъектСклонение = Новый("AddIn.NameDecl.CNameDecl");
    Исключение
        // Не удалось выполнить операции с внешней компонентой
        Сообщить("Не удалось подключить внешнюю компоненту по причине: " + ОписаниеОшибки());
    КонецПопытки;



Спасииибо!))))