Как исправить ошибку Поле объекта не обнаружено (валютадокумента) при печати документов в 1С?

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

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


ОбластьМакета.Параметры.ВалютаДокумента = ?(Шапка.ВалютаДокумента = ВалютаРегламентированногоУчета, ?(Шапка.Дата >= ДатаДеноминации, "руб. коп.", "руб."), Шапка.ВалютаДокумента);

Чаще всего эта неполадка возникает сразу после обновления конфигурации. Разберем по шагам, почему возникает данная ситуация и как быстро восстановить нормальную печать документов.

Причины возникновения ошибки

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

  1. Использование отредактированного пользовательского макета. В режиме «1С:Предприятие» пользователи могут настраивать оформление печатных форм (изменять шрифт, добавлять логотипы). После обновления конфигурации разработчики типового решения могли изменить текст запроса для выборки данных Шапка, переименовать реквизит или алгоритм заполнения. При этом система продолжает использовать сохраненный пользовательский макет, рассчитанный на прежний состав параметров.
  2. Изменение реквизитов в типовой конфигурации. При развитии конфигураций разработчики часто оптимизируют структуру метаданных — например, заменяют реквизит ВалютаДокумента на универсальный реквизит Валюта, берут валюту из договора контрагента или выносят форматирование сумм в общие модули БСП.
  3. Устаревшая внешняя печатная форма (ВПФ). Если документ выводится через подключенную внешнюю обработку, ее внутренний запрос обращается к старым полям, удаленным или переименованным в новом релизе базы.

Способ 1. Возврат макета печатной формы к стандартному виду

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

  1. Перейдем в раздел «Администрирование» (в некоторых конфигурациях — «НСИ и администрирование»).
  2. Откроем пункт «Печатные формы, отчеты и обработки», а затем перейдем по ссылке «Макеты печатных форм».
  3. В появившемся списке найдем проблемный документ (например, счет на оплату или протокол) и соответствующую ему печатную форму. Макеты с пользовательскими изменениями обычно выделены жирным шрифтом или отмечены специальной пиктограммой редактирования.
  4. Выделим нужную строку и нажмем кнопку «Использовать стандартный» (или удалим сохраненную пользовательскую версию макета).
  5. Попробуем снова сформировать печатную форму из документа.

Если вам требовалось сохранить персональные настройки (например, факсимиле или дополнительные надписи), откройте обновленный стандартный макет и внесите правки заново уже на базе актуальной структуры реквизитов.

Способ 2. Корректировка внешней печатной формы или расширения

Если ошибка возникает при использовании внешней обработки печати, проанализируем модуль объекта в конфигураторе:

  1. Откроем внешнюю печатную форму через Конфигуратор.
  2. Найдем процедуру формирования печатной формы (обычно функция СформироватьПечатнуюФорму или процедура Печать).
  3. Проверим текст запроса, формирующего выборку Шапка. Убедимся, что поле ВалютаДокумента присутствует в секции выборки ВЫБРАТЬ, либо заменим его на актуальное имя реквизита из текущей конфигурации.
  4. Сохраним обработку и обновим файл в справочнике «Дополнительные отчеты и обработки».

Способ 3. Безопасное обращение к реквизитам в коде 1С

Для программистов и специалистов по доработке конфигураций разберем, как сделать код печати устойчивым к изменениям структуры данных. Чтобы исключить падение программы при отсутствии одного из параметров, используем метод Свойство() для структур или предварительную проверку колонок:


ЗначениеВалюты = Неопределено;
Если Шапка.Свойство("ВалютаДокумента", ЗначениеВалюты) Тогда
    ОбластьМакета.Параметры.ВалютаДокумента = ?(ЗначениеВалюты = ВалютаРегламентированногоУчета, 
        ?(Шапка.Дата >= ДатаДеноминации, "руб. коп.", "руб."), 
        ЗначениеВалюты);
Иначе
    // Если реквизит был переименован в конфигурации
    ОбластьМакета.Параметры.ВалютаДокумента = "руб.";
КонецЕсли;

Такой подход защищает код от критических сбоев при последующих обновлениях конфигурации и гарантирует корректный вывод печатной формы.

← На главную