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