Часто при доработке существующих печатных форм в 1С:Предприятии разработчики сталкиваются с досадной ошибкой: «Поле не найдено». Внешне все кажется правильным: в макете добавлен параметр, в коде прописано его заполнение, но система упорно отказывается видеть изменения. Давайте вместе разберем, почему это происходит и как найти решение.
Основная проблема заключается в том, что платформа 1С при вызове метода ПолучитьМакет() использует строгий алгоритм поиска. Если в вашей конфигурации существует несколько макетов с одинаковым именем (например, один общий, а другой привязан к конкретному документу), платформа может подтянуть совсем не тот файл, который вы только что отредактировали.
Мы проанализируем ситуацию, когда разработчик вносит изменения в макет документа, но при печати система обращается к Общему макету. В результате в «старом» общем макете просто нет того параметра Комментарий, который вы добавили в макете документа. Отсюда и возникает ошибка «Поле не найдено» — система пытается присвоить значение параметру, которого нет в загруженной в память области.
Прежде всего, давайте выясним, какой именно макет использует ваша процедура печати. Чтобы это сделать, воспользуйтесь отладчиком 1С. Установите точку останова непосредственно перед выводом макета и посмотрите, что возвращает функция ПолучитьМакет().
Если вы видите, что функция обращается к Общим макетам, а вы правите макет документа — значит, именно здесь кроется причина. Платформа 1С отдает приоритет макету, встроенному в документ, только если он существует в контексте этого объекта. Если вы вызываете макет по имени, которое совпадает с общим макетом, платформа может «предпочесть» общее решение.
Разберемся, как правильно организовать работу, чтобы ваши правки гарантированно отображались:
.epf. Редактирование макета в основной конфигурации никак не затронет внешнюю обработку.МакетАктаНаСписание_ДляПечати).После того как вы убедились, что редактируете верный макет, важно правильно прописать логику заполнения. Часто разработчики дублируют код, что ведет к ошибкам. Рассмотрим пример оптимального заполнения:
// Правильный подход к заполнению области
Область = Макет.ПолучитьОбласть("СтрокаТаблицы");
Область.Параметры.Заполнить(СтрокаДанных);
// Если нужно добавить специфичный параметр, которого нет в строке данных:
Область.Параметры.Комментарий = Шапка.Комментарий;
ТабДокумент.Вывести(Область);
Обратите внимание: если вы используете метод Заполнить(Шапка), он автоматически переносит все значения из структуры Шапка в параметры области, которые совпадают по именам. Если вы отдельно пытаетесь присвоить Область.Параметры.Комментарий = Комментарий, убедитесь, что переменная Комментарий определена и доступна в данном контексте.
Если правки внесены, макет выбран верный, а ошибка сохраняется, выполните следующие действия:
.epf файл после всех изменений в конфигураторе и переподключите его в справочнике Дополнительные отчеты и обработки. Система может использовать старую версию, сохраненную в базе данных.Область.Параметры. Если в этом списке нет нужного вам параметра, значит, макет, который вы правите, и макет, который выводится в печатную форму — это разные объекты.Помните: чаще всего проблема заключается в человеческом факторе и «самовнушении», что мы правим нужный файл. Всегда проверяйте путь к макету через отладчик — это сэкономит вам часы работы!