При доработке типовых печатных форм документов (например, счета на оплату покупателю) начинающие разработчики часто сталкиваются с ошибками выполнения: макет не находится программой, параметры ячеек не заполняются или вызывают исключение Поле объекта не обнаружено, а добавленный статический текст не отображается при печати. Разберем по шагам типовые проблемы, возникающие при изменении табличных документов, и выясним, как правильно модифицировать структуру макета и алгоритм формирования печатной формы.
Рассмотрим ситуацию, когда при формировании печатной формы возникает ошибка следующего вида:
{Документ.СчетНаОплатуПокупателю.МодульОбъекта(118)}: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = ПолучитьМакет("СчетЗаказ");
по причине:
Недопустимое значение параметра (параметр номер '1')
Проанализируем причину ее появления. Данное исключение всегда свидетельствует о том, что в объекте метаданных отсутствует макет с указанным именем. Наиболее частые причины ошибки:
С визуально неотличима от латинской C. Если имя макета в дереве метаданных содержит латинские символы, а в коде написано кириллицей (или наоборот), платформа 1С считает эти строки не совпадающими. Чтобы исключить эту проблему, скопируем точное имя из свойств макета через буфер обмена и вставим его в строку вызова метода ПолучитьМакет().После успешного получения макета выполнение кода может прерываться на этапе заполнения данных:
{Документ.СчетНаОплатуПокупателю.МодульОбъекта(297)}: Поле объекта не обнаружено (СуммаПрописью)
ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);
Выясним причину этой ошибки. Коллекция ОбластьМакета.Параметры формируется динамически на основании тех ячеек, у которых в свойствах установлен режим заполнения Параметр или Шаблон. Если в ячейке допущена опечатка (например, указано СуммаПропись вместо СуммаПрописью) или ячейка переведена в режим обычного текста, свойство с таким именем в объекте Параметры создано не будет.
Разберем правила настройки свойств ячеек табличного документа:
СуммаПрописью). Значение целиком заменяется программно через ОбластьМакета.Параметры.СуммаПрописью = ....Счет действителен до [ДатаДействительностиСчета].Частая проблема при редактировании макета — добавленный текст не появляется на печатной форме. Это происходит из-за того, что новые строки вставляются за пределами поименованной области (секции), которую модуль считывает методом Макет.ПолучитьОбласть("ИмяСекции").
Разберем по шагам правильный порядок расширения области:
СуммаПрописью или ПодвалСчета).Рассмотрим практическую задачу: необходимо вывести под суммой прописью предупреждение о сроке действия счета с динамической датой (текущая дата документа плюс 2 рабочих дня).
Посмотрим на пример настройки ячейки в макете:
СуммаПрописью выбираем ячейку для текста.Счет действителен в течение 2 дней до [ДатаДействительностиСчета].Переносить или Авто, а для строки включаем Автовысота строки.Теперь обратимся к программному модулю. Заполнение параметра должно происходить строго до вызова метода ТабДокумент.Вывести(ОбластьМакета), иначе переданные параметры не попадут в результирующий документ.
Разберем итоговый фрагмент кода формирования области сумм и срока действия:
// Вывести Сумму прописью и срок действия счета
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований " + ЗапросТовары.Количество()
+ ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);
ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);
// Расчет даты действия счета с учетом рабочих дней
ДатаДействительностиСчета = РегламентированнаяОтчетность.ПолучитьСледующуюРабочуюДатуДляРегОтчетности(Шапка.Дата + 2 * 24 * 60 * 60);
ОбластьМакета.Параметры.ДатаДействительностиСчета = Формат(ДатаДействительностиСчета, "ДЛФ=D");
ТабДокумент.Вывести(ОбластьМакета);
Чтобы изменения не затрудняли последующие обновления конфигурации и оставались надежными, придерживаемся следующих правил:
РегламентированнаяОтчетность или КалендарныеГрафики) корректно отрабатывают праздники и переносы только при условии, что в информационной базе заполнен регламентированный производственный календарь на текущий рабочий год.