1.
pa240775
24
20.08.21 05:58
Сейчас в теме
Пришла задача сделать печать договора по шаблону WORD. Конфигурация УТ 11.1. Конечно же первым делом ищем аналогичный функционал в конфигурации. Находим печать Акта выполненных работ. Копипастим, подправляем, обнаруживаем что размеры полей не соответствуют шаблону. Открываем УТ 11.4Ю, видим код со времен 11.1 не изменился.
Вот процедура в УТ 11.4:
// Выводит печатную форму акта выполненных работ в word.
//
// Параметры:
// ОписаниеКоманды - Структура - структура с описанием команды.
//
// Возвращаемое значение:
// Неопределено - ничего не возвращается.
//
Функция ПечатьАктВыполненныхРаботMicrosoftWord(ОписаниеКоманды) Экспорт
Состояние(НСтр("ru = 'Выполняется формирование печатных форм'"));
ИмяМакета = "ПФ_DOC_Акт";
ТипМакета = "doc";
МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати("Документ.АктВыполненныхРабот",
ИмяМакета,
ОписаниеКоманды.ОбъектыПечати);
ДвоичныеДанныеМакетов = МакетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
Секции = МакетИДанныеОбъекта.Макеты.ОписаниеСекций;
Для Каждого ДокументСсылка Из ОписаниеКоманды.ОбъектыПечати Цикл
ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
Попытка
ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета);
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(
ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета);
Внимательно смотрим описание процедуры УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму
<Структура> ИнициализироватьПечатнуюФорму(ТипДокумента, НастройкиСтраницыМакета = Неопределено, Макет = Неопределено)
Устарела. Следует использовать УправлениеПечатью.ИнициализироватьПечатнуюФорму.
Создает соединение с выходной печатной формой.
Необходимо вызвать перед любыми действиями над формой.
Функция не работает в любых других браузерах кроме IE.
Перед выполнением функции в веб-клиенте необходимо подключить расширение для работы с 1С:Предприятием.
Описание возвращаемого значения: - новая печатная форма.
Параметры:
•ТипДокумента Строка(Обязательный) тип печатной формы "DOC" или "ODT";
•НастройкиСтраницыМакета Соответствие(Необязательный) параметры из структуры, возвращаемой функцией ИнициализироватьМакет
(параметр устарел, его следует пропускать и использовать параметр Макет);
•Макет Структура(Необязательный) результат функции ИнициализироватьМакет
даже в справке указано что функции нужен параметр макет.
Меняем местами вызов функций, во вторую передаем результат первой:
Секции = МакетИДанныеОбъекта.Макеты.ОписаниеСекций;
Для Каждого ДокументСсылка Из ОписаниеКоманды.ОбъектыПечати Цикл
ДанныеОбъекта = МакетИДанныеОбъекта.Данные[ДокументСсылка][ИмяМакета];
Попытка
Макет = УправлениеПечатьюКлиент.ИнициализироватьМакетОфисногоДокумента(
ДвоичныеДанныеМакетов[ИмяМакета], ТипМакета);
ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(ТипМакета,,Макет);
вот так все работает, настройки копируются в форму из макета.
я всегда "топлю" за типовой код. Но и в нем встречаются баги. И все же продолжаю за него топить, так как исправить баг существенно быстрее, чем написать все с нуля и наделать еще больше багов и непонятного кода.