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

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

Вот код.

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

//ФОРМИРОВАНИЕ ПЕЧАТНОЙ ФОРМЫ
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения)  экспорт
    
    ПараметрКоманды = ОбъектыНазначения;
    
    // Используется для получения макета.
    ИмяМакета = ИдентификаторКоманды;
    ТипМакета = "DOC"; //Варианты: "DOC", "ODT"
    
    // Получаем всю необходимую информацию из модуля менеджера
    // объекта: данные объекта, описание секций, данные макетов.
    МакетИДанныеОбъекта = ПолучитьДанныеПечати(ПараметрКоманды,ИмяМакета,ТипМакета);
    
    Для Каждого ДокументСсылка Из ПараметрКоманды Цикл
        ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
        
        Области= МакетИДанныеОбъекта.Макеты.ОписаниеОбластей;
        
        ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
        
        Попытка
            ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета);
            Макет = УправлениеПечатьюКлиент.ИнициализироватьМакет(ДвоичныеДанныеМакетов[ИмяМакета],ТипМакета);
            
            // Здесь должен быть код получения областей из макета,
            // их вывода и заполнения в печатной форме.
            Если ПечатнаяФорма <> Неопределено И Макет <> Неопределено Тогда
                
            
            //// Вывод верхней части документа - обычная область с параметрами.
            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["Заголовок"]);
            УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
            
            //// Вывод коллекции данных из информационной базы в виде таблицы.
            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["ШапкаТаблицыТовары"]);
            УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
            Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["СтрокаТаблицаТовары"]);
            УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.Запасы, Ложь);
            //Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, Области[ИмяМакета]["ПодвалТаблицаТовары"]);
            //УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);


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



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

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

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

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

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

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


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

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

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

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



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




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


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


// Интерфейс для регистрации обработки.
// Вызывается при добавлении обработки в справочник "ВнешниеОбработки"
//
// Возвращаемое значение:
// Структура:
// Вид - строка - возможные значения:    "ДополнительнаяОбработка"
//                                        "ДополнительныйОтчет"
//                                        "ЗаполнениеОбъекта"
//                                        "Отчет"
//                                        "ПечатнаяФорма"
//                                        "СозданиеСвязанныхОбъектов"
//
// Назначение - массив строк имен объектов метаданных в формате:
//            <ИмяКлассаОбъектаМетаданного>.[ * | <ИмяОбъектаМетаданных>]
//            Например, "Документ.СчетЗаказ" или "Справочник.*"
//            Прим. параметр имеет смысл только для назначаемых обработок
//
// Наименование - строка - наименование обработки, которым будет заполнено
//                        наименование справочника по умолчанию - краткая строка для
//                        идентификации обработки администратором
//
// Версия - строка - версия обработки в формате <старший номер>.<младший номер>
//                    используется при загрузке обработок в информационную базу
// БезопасныйРежим – Булево – Если истина, обработка будет запущена в безопасном режиме.
//                            Более подбробная информация в справке.
//
// Информация - Строка- краткая информация по обработке, описание обработки
//
// ВерсияБСП - Строка - Минимальная версия БСП, на которую рассчитывает код
// дополнительной обработки. Номер версии БСП задается в формате «РР.ПП.ВВ.СС»
// (РР – старший номер редакции; ПП – младший номер ре-дакции; ВВ – номер версии; СС – номер сборки).
//
// Команды - ТаблицаЗначений - команды, поставляемые обработкой, одная строка таблицы соотвествует
//                            одной команде
//                колонки:
//                 - Представление - строка - представление команды конечному пользователю
//                 - Идентификатор - строка - идентефикатор команды. В случае печатных форм
//                                            перечисление через запятую списка макетов
//                 - Использование - строка - варианты запуска обработки:
//                        "ОткрытиеФормы" - открыть форму обработки
//                        "ВызовКлиентскогоМетода" - вызов клиентского экспортного метода из формы обработки
//                        "ВызовСерверногоМетода" - вызов серверного экспортного метода из модуля объекта обработки
//                 - ПоказыватьОповещение – Булево – если Истина, требуется оказывать оповещение при начале
//                                и при окончании запуска обработки. Прим. Имеет смысл только
//                                при запуске обработки без открытия формы.
//                 - Модификатор – строка - для печатных форм MXL, которые требуется
//                                        отображать в форме ПечатьДокументов подсистемы Печать
//                                        требуется установить как "ПечатьMXL"
//
Функция СведенияОВнешнейОбработке() Экспорт
  
  ПараметрыРегистрации = Новый Структура;
  ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //Варианты: "ДополнительнаяОбработка", "ДополнительныйОтчет", "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов"
  
  МассивНазначений = Новый Массив();
  МассивНазначений.Добавить("Документ.ЗаказПокупателя");// например: "Документ._ДемоСчетНаОплатуПокупателю"
// МассивНазначений.Добавить("Документ.<ИмяДокумента2>");
  ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
  
  ПараметрыРегистрации.Вставить("Наименование", "Печать сертификата качества");
  ПараметрыРегистрации.Вставить("Версия", "1.0"); //например: "1.0"
  ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); //Варианты: Истина, Ложь
  ПараметрыРегистрации.Вставить("Информация", " ");
  ПараметрыРегистрации.Вставить("ВерсияБСП", "1.2.1.4");// не ниже какой версии БСП подерживается обработка
  
  ТаблицаКоманд = ПолучитьТаблицуКоманд();

  ДобавитьКоманду(ТаблицаКоманд,
          НСтр("ru = 'Сертификат качества'"),//для отображения пользователю
          "ПечСертКачества",    //можно использовать для подмены поставляемой печатной формы
          "ВызовКлиентскогоМетода",  //Использование.  Варианты: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"  
          Ложь,//Показывать оповещение. Варианты Истина, Ложь
          "");//Модификатор


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

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

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

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

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

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

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

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

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

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

Должно быть не:

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


А вот так:

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