Как исправить ошибки при редактировании макета печатной формы и добавить в него новые параметры в 1С?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При доработке типовых печатных форм документов (например, счета на оплату покупателю) начинающие разработчики часто сталкиваются с ошибками выполнения: макет не находится программой, параметры ячеек не заполняются или вызывают исключение Поле объекта не обнаружено, а добавленный статический текст не отображается при печати. Разберем по шагам типовые проблемы, возникающие при изменении табличных документов, и выясним, как правильно модифицировать структуру макета и алгоритм формирования печатной формы.

1. Ошибка при вызове метода ПолучитьМакет: «Недопустимое значение параметра»

Рассмотрим ситуацию, когда при формировании печатной формы возникает ошибка следующего вида:


{Документ.СчетНаОплатуПокупателю.МодульОбъекта(118)}: Ошибка при вызове метода контекста (ПолучитьМакет)
    Макет = ПолучитьМакет("СчетЗаказ");
по причине:
Недопустимое значение параметра (параметр номер '1')

Проанализируем причину ее появления. Данное исключение всегда свидетельствует о том, что в объекте метаданных отсутствует макет с указанным именем. Наиболее частые причины ошибки:

  1. Разная раскладка клавиатуры при написании имени. Русская буква С визуально неотличима от латинской C. Если имя макета в дереве метаданных содержит латинские символы, а в коде написано кириллицей (или наоборот), платформа 1С считает эти строки не совпадающими. Чтобы исключить эту проблему, скопируем точное имя из свойств макета через буфер обмена и вставим его в строку вызова метода ПолучитьМакет().
  2. Случайное переименование макета. Если имя макета было изменено в дереве конфигурации, необходимо либо вернуть исходное имя, либо синхронизировать его с кодом модуля.

2. Ошибка «Поле объекта не обнаружено» при заполнении параметров области

После успешного получения макета выполнение кода может прерываться на этапе заполнения данных:


{Документ.СчетНаОплатуПокупателю.МодульОбъекта(297)}: Поле объекта не обнаружено (СуммаПрописью)
    ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);

Выясним причину этой ошибки. Коллекция ОбластьМакета.Параметры формируется динамически на основании тех ячеек, у которых в свойствах установлен режим заполнения Параметр или Шаблон. Если в ячейке допущена опечатка (например, указано СуммаПропись вместо СуммаПрописью) или ячейка переведена в режим обычного текста, свойство с таким именем в объекте Параметры создано не будет.

Разберем правила настройки свойств ячеек табличного документа:

  1. Режим «Текст» — строка выводится в неизменном виде. Платформа не ищет параметры и не создает для них полей в коде.
  2. Режим «Параметр» — в ячейке указывается точное имя параметра (без пробелов и знаков пунктуации, например СуммаПрописью). Значение целиком заменяется программно через ОбластьМакета.Параметры.СуммаПрописью = ....
  3. Режим «Шаблон» — позволяет совмещать произвольный статический текст и переменные значения, заключенные в квадратные скобки. Например: Счет действителен до [ДатаДействительностиСчета].

3. Добавление новых строк в существующие секции макета

Частая проблема при редактировании макета — добавленный текст не появляется на печатной форме. Это происходит из-за того, что новые строки вставляются за пределами поименованной области (секции), которую модуль считывает методом Макет.ПолучитьОбласть("ИмяСекции").

Разберем по шагам правильный порядок расширения области:

  1. Найдем границы нужной секции на линейке слева (именованные области строк выделены вертикальными маркерами).
  2. Выделим строку внутри секции, нажмем правую кнопку мыши и выберем пункт Раздвинуть (или пункт меню Таблица — Строки — Раздвинуть).
  3. Убедимся, что новая строка оказалась внутри красных линий, обозначающих границы секции (например, внутри области СуммаПрописью или ПодвалСчета).
  4. Внесем необходимый статический текст или настроим параметры.

4. Вывод срока действия счета с использованием шаблона и расчет даты

Рассмотрим практическую задачу: необходимо вывести под суммой прописью предупреждение о сроке действия счета с динамической датой (текущая дата документа плюс 2 рабочих дня).

Посмотрим на пример настройки ячейки в макете:

  1. В секции СуммаПрописью выбираем ячейку для текста.
  2. В свойствах ячейки устанавливаем режим заполнения Шаблон.
  3. В тексте ячейки пишем: Счет действителен в течение 2 дней до [ДатаДействительностиСчета].
  4. Для предотвращения обрезания длинной даты настраиваем свойство Размещение текста в значение Переносить или Авто, а для строки включаем Автовысота строки.

Теперь обратимся к программному модулю. Заполнение параметра должно происходить строго до вызова метода ТабДокумент.Вывести(ОбластьМакета), иначе переданные параметры не попадут в результирующий документ.

Разберем итоговый фрагмент кода формирования области сумм и срока действия:


// Вывести Сумму прописью и срок действия счета
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);

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

// Расчет даты действия счета с учетом рабочих дней
ДатаДействительностиСчета = РегламентированнаяОтчетность.ПолучитьСледующуюРабочуюДатуДляРегОтчетности(Шапка.Дата + 2 * 24 * 60 * 60);
ОбластьМакета.Параметры.ДатаДействительностиСчета = Формат(ДатаДействительностиСчета, "ДЛФ=D");

ТабДокумент.Вывести(ОбластьМакета);

5. Рекомендации по сопровождению и расширению макетов

Чтобы изменения не затрудняли последующие обновления конфигурации и оставались надежными, придерживаемся следующих правил:

  1. Использование внешних печатных форм (ВПФ): изменение типовых макетов непосредственно в конфигурации снимает объекты с полной поддержки. Для сохранения типовой конфигурации предпочтительно выносить доработанный макет и алгоритм печати во внешнюю печатную форму через подсистему дополнительных отчетов и обработок.
  2. Вставка логотипов и факсимиле: изображения следует вставлять через меню Таблица — Рисунки — Вставить картинку, строго контролируя, чтобы рамки рисунка не выходили за границы выводимой секции. Для печатей и подписей оптимально использовать формат PNG с прозрачным фоном.
  3. Контроль производственного календаря: функции расчета рабочих дней (такие как методы общих модулей РегламентированнаяОтчетность или КалендарныеГрафики) корректно отрабатывают праздники и переносы только при условии, что в информационной базе заполнен регламентированный производственный календарь на текущий рабочий год.
← На главную