Как исправить ошибку «Поле объекта не обнаружено (ЕдиницаИзмерения)» при печати счета-фактуры?

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

В этой статье мы подробно разберем ситуацию, с которой часто сталкиваются специалисты поддержки и программисты 1С: типовая конфигурация, стандартный код, но при печати конкретного документа возникает ошибка. Рассмотрим реальный кейс на примере ошибки при формировании печатной формы Счета-фактуры.

Суть проблемы

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

Поле объекта не обнаружено (ЕдиницаИзмерения)

Ситуация осложняется следующими факторами:

  1. Конфигурация является типовой (находится на поддержке, доработки минимальны или отсутствуют).
  2. В других аналогичных базах с идентичным кодом (CF) ошибка не воспроизводится.
  3. Сравнение конфигураций показывает полную идентичность модулей менеджера и макетов в Конфигураторе.
  4. Тестирование и исправление базы (TiI), а также проверка утилитой chdbfl.exe результатов не дают.

Давайте проанализируем причины такого поведения и найдем решение.

Диагностика: почему код «не видит» параметр?

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


ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрок.Товар;
ОбластьМакета.Параметры.ЕдиницаИзмерения = ВыборкаСтрок.ЕдиницаИзмерения; // Ошибка здесь
ТабДокумент.Вывести(ОбластьМакета);

Платформа 1С обращается к коллекции Параметры полученной области макета. Если в самом макете (табличном документе) в данной области нет ячейки с типом заполнения «Параметр» и именем «ЕдиницаИзмерения» (даже если это Счет-фактура без характеристик), то свойства с таким именем в коллекции не существует. Попытка записи в несуществующее свойство вызывает исключение.

Но мы знаем, что в Конфигураторе макет верный. Почему же в режиме Предприятия он отличается?

Причина: Пользовательские макеты печати

В современных конфигурациях на платформе 1С:Предприятие 8.3 реализован механизм редактирования макетов печатных форм без изменения конфигурации (в режиме «1С:Предприятие»).

Когда пользователь открывает форму печати и нажимает кнопку «Изменить макет» (или переходит в раздел администрирования макетов), система создает копию эталонного макета и сохраняет её в регистре сведений (обычно это регистр ПользовательскиеМакетыПечати).

Сценарий возникновения ошибки:

  1. Пользователь решил изменить печатную форму (например, перевести на другой язык или изменить формулировку).
  2. В редакторе макета он нашел ячейку, где было написано [ЕдиницаИзмерения].
  3. Вместо того чтобы изменить текст вокруг параметра, пользователь удалил параметр или изменил тип ячейки с «Параметр» на «Текст», написав туда, например, «всего к оплате» или просто статичное слово.
  4. Теперь для программного кода этой ячейки как «приемника данных» не существует.

При этом, когда мы сравниваем конфигурации (CF-файлы), мы сравниваем только эталонные макеты. Пользовательские изменения хранятся в данных информационной базы, поэтому обновление конфигурации или загрузка CF из рабочей базы не исправляют проблему.

Решение проблемы

Чтобы исправить ошибку, нам необходимо либо удалить пользовательский макет (вернуться к стандартному), либо корректно настроить пользовательский. Разберем по шагам, как это сделать.

Способ 1. Возврат к стандартному макету (Рекомендуемый)

Этот способ самый быстрый и надежный, если пользовательские правки не являются критически важными.

  1. Запустите базу в режиме «1С:Предприятие».
  2. Перейдите в раздел Администрирование.
  3. Выберите пункт Печатные формы, отчеты и обработки.
  4. Откройте ссылку Макеты печатных форм.
  5. В открывшемся списке найдите нужный документ (например, «Реализация товаров и услуг» или «Счет-фактура») и конкретную печатную форму.
  6. Обратите внимание на иконку рядом с макетом. Если макет был изменен пользователем, он обычно помечается специальным значком (например, зеленый карандаш или галочка, в зависимости от версии БСП).
  7. Выделите измененный макет и нажмите кнопку «Использовать стандартный макет» (или кнопку «Удалить» с пиктограммой крестика, которая удаляет пользовательскую версию).
  8. После этого система начнет использовать макет из Конфигуратора, в котором все параметры прописаны корректно.

Способ 2. Исправление ошибки в пользовательском макете

Если изменения в макете важны для бизнеса, нужно найти ошибку и исправить её вручную.

  1. В том же окне Макеты печатных форм выделите проблемный макет.
  2. Нажмите кнопку «Изменить» (карандаш).
  3. В открывшемся редакторе табличного документа найдите область, где происходит ошибка. Часто это «шапка» таблицы или «подвал», где выводятся итоги.
  4. Проверьте ячейки. Если вы видите просто текст там, где должно выводиться переменное значение, посмотрите свойства ячейки (через контекстное меню или палитру свойств).
  5. Убедитесь, что свойство Заполнение установлено в значение Параметр или Шаблон.
  6. Убедитесь, что в свойстве Параметр (или в тексте шаблона в квадратных скобках []) указано точное имя переменной, которое ожидает программный код: ЕдиницаИзмерения.
  7. Сохраните изменения.

Как подтвердить диагноз с помощью Отладчика

Если вы хотите убедиться, что причина именно в макете, воспользуйтесь отладчиком. Это поможет точно определить, какого параметра не хватает.

Поставим точку останова в общем модуле, отвечающем за печать (например, УчетНДС или модуль менеджера документа).


// Примерный код для анализа в отладчике
Область = Макет.ПолучитьОбласть("Подвал");
// Ставим точку останова на следующей строке
Область.Параметры.ЕдиницаИзмерения = Данные.Валюта; 

Когда выполнение остановится:

  1. Выделите переменную Область и нажмите Shift+F9 (Вычислить выражение).
  2. Раскройте свойство Параметры.
  3. Вы увидите список всех доступных для записи параметров в этой области.
  4. Если в списке нет ЕдиницаИзмерения, значит, в текущем активном макете эта ячейка переименована, удалена или превращена в простой текст.

Важное замечание про локализацию (Узбекистан)

В обсуждаемой теме упоминалась конфигурация для Узбекистана. Особенность локализованных решений в том, что печатные формы часто содержат дублирующиеся параметры для вывода информации на двух языках или специфические параметры валют.

При использовании обработок типа «Сумма прописью» код может пытаться записать результат в параметр, который находится внутри текстовой строки (шаблона). Если пользователь случайно удалил квадратные скобки [] вокруг имени параметра при редактировании перевода, параметр перестает определяться системой, что и приводит к падению программы.

Заключение

Ошибка «Поле объекта не обнаружено» при печати в типовой конфигурации в 99% случаев означает наличие пользовательского макета с некорректной структурой. Программный код пытается передать данные в ячейку, которой больше нет.

Резюме действий:

  1. Не ищите ошибку в Конфигураторе, если база типовая.
  2. Проверьте регистр пользовательских макетов в режиме Предприятия.
  3. Удалите пользовательские правки или восстановите имя параметра в макете.
← На главную