|
Внешняя печатная форма. Ошибка: Метод объекта не обнаружен (ИнициализироватьМакет) | ☑ | ||
---|---|---|---|---|
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) Катя, сможешь помочь в одной вопросе?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |