Вход | Регистрация


Внешняя печатная форма. Ошибка: Метод объекта не обнаружен (ИнициализироватьМакет)

Внешняя печатная форма. Ошибка: Метод объекта не обнаружен (ИнициализироватьМакет)
Я
   SpellGunner
 
17.08.18 - 10:10
Добрый день!

Пишу внешнюю печатную форму. Макет в двоичных данных из DOC. При открытии печатной формы выдает ошибку "Метод объекта не обнаружен (ИнициализироватьМакет)". Не пойму что не так.

Вот код.

Модуль формы:

//ФОРМИРОВАНИЕ ПЕЧАТНОЙ ФОРМЫ

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения)  экспорт 
    
    ПараметрКоманды = ОбъектыНазначения;
    
    // Используется для получения макета.

    ИмяМакета = ИдентификаторКоманды;
    ТипМакета = "DOC";//Варианты: "DOC", "ODT"

    
    // Получаем всю необходимую информацию из модуля менеджера

    // объекта: данные объекта, описание секций, данные макетов.

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

            // их вывода и заполнения в печатной форме.

            Если ПечатнаяФорма <> Неопределено И Макет <> Неопределено Тогда
                
            
            //// Вывод верхней части документа - обычная область с параметрами.

            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Заголовок"]);
            УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
            
            //// Вывод коллекции данных из информационной базы в виде таблицы.

            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["ШапкаТаблицыТовары"]);
            УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["СтрокаТаблицаТовары"]);
            УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.Запасы, Ложь);
            //Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["ПодвалТаблицаТовары"]);

            //УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);



            //Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Подвал"]);

            //УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);

            
                
                УправлениеПечатьюКлиент.ПоказатьДокумент(ПечатнаяФорма);
            КонецЕсли;
            
        Исключение
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
            УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма);
            УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
            Возврат;
        КонецПопытки;
        
        УправлениеПечатьюКлиент.ОчиститьСсылки(ПечатнаяФорма, Ложь);
        УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
    КонецЦикла;
КонецПроцедуры



&НаСервере
Функция ПолучитьДанныеПечати(знач МассивДокументов, знач ИмяМакета, знач ТипМакета) Экспорт

    ДанныеПоВсемОбъектам = Новый Соответствие;
    
    РезультатЗапросаПоВсемПечатаемымДокументам = ПолучитьДанныеДокументов(МассивДокументов);
    ВыборкаДетальныеЗаписи = РезультатЗапросаПоВсемПечатаемымДокументам.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

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

    ДвоичныеДанныеМакетов.Вставить(ИмяМакета, РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"));
    ТипыМакетов.Вставить(ИмяМакета, ТипМакета); 
        
    ОписаниеОбластей.Вставить(ИмяМакета, ПолучитьОписаниеОбластейМакетаОфисногоДокумента());
    
    
    Возврат Новый Структура("Данные, Макеты",
                            ДанныеПоВсемОбъектам,
                            Новый Структура("ОписаниеОбластей, ТипыМакетов, ДвоичныеДанныеМакетов",
                                            ОписаниеОбластей,
                                            ТипыМакетов,
                                            ДвоичныеДанныеМакетов));
    
КонецФункции

&НаСервере
Функция ПолучитьДанныеДокументов(МассивСчетов)

        
        Запрос = Новый Запрос;
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗаказПокупателя.Ссылка КАК Ссылка,
        |    ЗаказПокупателя.Дата КАК Дата,
        |    ЗаказПокупателя.Контрагент.Наименование КАК Грузополучатель,
        |    ЗаказПокупателя.АдресДоставки КАК АдресДоставки,
        |    ЗаказПокупателя.Запасы.(
        |        Номенклатура КАК Номенклатура,
        |        НомерСтроки КАК НомерСтроки,
        |        ЕдиницаИзмерения КАК ЕдиницаИзмерения,
        |        Всего КАК Всего,
        |        Количество КАК Количество
        |    ) КАК Запасы
        |ИЗ
        |    Документ.ЗаказПокупателя КАК ЗаказПокупателя";


    возврат Запрос.Выполнить();

                
КонецФункции 
 
&НаСервере
Функция ПолучитьДанныеОбъекта(ВыборкаИзЗапроса)
        
    ДанныеОбъекта = Новый Структура;
    //Объект= ВыборкаИзЗапроса;

    
    ДанныеОбъекта.Вставить("Дата",    ВыборкаИзЗапроса.Дата);
    ДанныеОбъекта.Вставить("Грузополучатель",    ВыборкаИзЗапроса.Грузополучатель);
    ДанныеОбъекта.Вставить("АдресДоставки",    ВыборкаИзЗапроса.АдресДоставки);
    
    
    ДанныеОбъекта.Вставить("Запасы", Новый Массив);

    Для Каждого СтрокаТабличнойЧасти Из ВыборкаИзЗапроса.Запасы.Выгрузить() Цикл  //ag

        СтрокаТаблицыЗапасы = Новый Структура;
        СтрокаТаблицыЗапасы.Вставить("НомерСтроки",СтрокаТабличнойЧасти.НомерСтроки);
        СтрокаТаблицыЗапасы.Вставить("Номенклатура",    СтрокаТабличнойЧасти.Номенклатура);
        СтрокаТаблицыЗапасы.Вставить("ЕдИзм",        СтрокаТабличнойЧасти.ЕдиницаИзмерения);
        СтрокаТаблицыЗапасы.Вставить("Количество",        СтрокаТабличнойЧасти.Количество);
        
        ДанныеОбъекта.Запасы.Добавить(СтрокаТаблицыЗапасы);
       
    КонецЦикла;
        
    Возврат ДанныеОбъекта;
    
КонецФункции



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




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


//ПОДГОТОВКА РЕГИСТРАЦИИ ОБРАБОТКИ



// Интерфейс для регистрации обработки.

// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//

// Возвращаемое значение:
// Структура:

// Вид - строка - возможные значения:    "ДополнительнаяОбработка"
//                                        "ДополнительныйОтчет"

//                                        "ЗаполнениеОбъекта"
//                                        "Отчет"

//                                        "ПечатнаяФорма"
//                                        "СозданиеСвязанныхОбъектов"

//
// Назначение - массив строк имен объектов метаданных в формате:

//            <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
//            Например, "Документ.СчетЗаказ" или "Справочник.*"

//            Прим. параметр имеет смысл только для назначаемых обработок
//

// Наименование - строка - наименование обработки, которым будет заполнено
//                        наименование справочника по умолчанию - краткая строка для

//                        идентификации обработки администратором
//

// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
//                    используется при загрузке обработок в информационную базу

// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
//                            Более подбробная информация в справке.

//
// Информация - Строка- краткая информация по обработке, описание обработки

//
// ВерсияБСП - Строка - Минимальная версия БСП, на которую рассчитывает код

// дополнительной обработки. Номер версии БСП задается в формате «РР.ПП.ВВ.СС»
// (РР – старший номер редакции; ПП – младший номер ре-дакции; ВВ – номер версии; СС – номер сборки).

//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует

//                            одной команде
//                колонки: 

//                 - Представление - строка - представление команды конечному пользователю
//                 - Идентификатор - строка - идентефикатор команды. В случае печатных форм

//                                            перечисление через запятую списка макетов
//                 - Использование - строка - варианты запуска обработки:

//                        "ОткрытиеФормы" - открыть форму обработки
//                        "ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки

//                        "ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
//                 - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале

//                                и при окончании запуска обработки. Прим. Имеет смысл только
//                                при запуске обработки без открытия формы.

//                 - Модификатор – строка - для печатных форм MXL, которые требуется
//                                        отображать в форме ПечатьДокументов подсистемы Печать

//                                        требуется установить как "ПечатьMXL"
//

Функция СведенияОВнешнейОбработке() Экспорт
  
  ПараметрыРегистрации = Новый Структура;
  ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");//Варианты: "ДополнительнаяОбработка", "ДополнительныйОтчет", "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов" 

  
  МассивНазначений = Новый Массив();
  МассивНазначений.Добавить("Документ.ЗаказПокупателя")// например: "Документ._ДемоСчетНаОплатуПокупателю"

// МассивНазначений.Добавить("Документ.<ИмяДокумента2>");

  ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
  
  ПараметрыРегистрации.Вставить("Наименование", "Печать сертификата качества");
  ПараметрыРегистрации.Вставить("Версия", "1.0");//например: "1.0"

  ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);//Варианты: Истина, Ложь

  ПараметрыРегистрации.Вставить("Информация", " ");
  ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4")// не ниже какой версии БСП подерживается обработка

  
  ТаблицаКоманд = ПолучитьТаблицуКоманд();

  ДобавитьКоманду(ТаблицаКоманд,
          НСтр("ru = 'Сертификат качества'")//для отображения пользователю

          "ПечСертКачества",    //можно использовать для подмены поставляемой печатной формы

          "ВызовКлиентскогоМетода",  //Использование.  Варианты: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"   

          Ложь//Показывать оповещение. Варианты Истина, Ложь 

          "")//Модификатор 

 

  ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

  Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

  Возврат Команды;

КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
 
 
   Cyberhawk
 
1 - 17.08.18 - 10:14
Толстый клиент пади у тебя
   Вафель
 
2 - 17.08.18 - 10:20
(1) а что на толстом клиенте не доступны клиентские методы?
   SpellGunner
 
3 - 17.08.18 - 10:34
(1) На тонком и на толстом одна и та же ошибка
   catena
 
4 - 17.08.18 - 10:41
А в модуле УправлениеПечатьюКлиент точно есть такая процедура? В моей ЗУПе нет, например.
   Cyberhawk
 
5 - 17.08.18 - 11:09
(2) Подловил :) Речь шла о толстом клиенте обычном приложении.
Например, ребятки из УНФ напрочь забили на поддержку этого режима в своих клиентских модулях (флажка компиляции нигде нет).
   Вафель
 
6 - 17.08.18 - 11:11
(5) ну директива &НаКлиенте однозначно говорит, что это не ОФ
   Cyberhawk
 
7 - 17.08.18 - 11:13
Так речи про ОФ Я не вел
   Вафель
 
8 - 17.08.18 - 11:14
(7) Так та галка вроде только для ОФ нужна
   Cyberhawk
 
9 - 17.08.18 - 11:17
Конечно же нет: эта галка для режима запуска "ОП" (обычное приложение) нужна.
Запусти УНФ в этом режиме, открой какую-нибудь УФ документа (например, "Авансовый отчет") и словишь ошибку, что общий модуль не найден.
   МимохожийОднако
 
10 - 17.08.18 - 11:39
Word установлен на ПК?
 
 Рекламное место пустует
   SpellGunner
 
11 - 17.08.18 - 11:48
(10) Офис установлен
   SpellGunner
 
12 - 17.08.18 - 11:51
Разобрался. Ошибка в коде. В Управлении печати УНФ нет 
метода "ИнициализироватьМакет"

Должно быть не:
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакет(ДвоичныеДанныеМакетов[ИмяМакета],ТипМакета);


А вот так:

Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакетов[ИмяМакета],ТипМакета);
   catena
 
13 - 17.08.18 - 11:59
А я еще час назад говорила...
   мистер игрек
 
14 - 17.08.18 - 14:02
(13) Катя, сможешь помочь в одной вопросе?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует