При работе в программе 1С:Бухгалтерия 3.0 пользователи и технические специалисты часто сталкиваются с неприятной ситуацией: после очередного обновления при попытке зайти в раздел «Главное» -> «Настройки» -> «Функциональность» система аварийно завершает работу с ошибкой Поле объекта не обнаружено (ВедетсяРозничнаяТорговля). Примечательно, что ошибка может возникать даже на самых свежих релизах платформы и конфигурации, а стандартная очистка локального кэша не всегда приносит результат.
В этой статье мы подробно разберем природу данной ошибки, проанализируем программный контекст ее возникновения и рассмотрим пошаговые алгоритмы решения проблемы — от простых манипуляций в пользовательском режиме до внесения изменений в расширения конфигурации.
Для начала проанализируем ситуацию с технической точки зрения. Ошибка возникает в модуле формы ФормаФункциональностьПрограммы обработки ФункциональностьПрограммы. Программный код в цикле пытается сопоставить настройки функциональности с данными, хранящимися в константах. Типичный фрагмент кода, на котором происходит прерывание, выглядит следующим образом:
// Пример проблемного участка кода в типовой конфигурации
Для Каждого Функциональность Из СписокФункциональности Цикл
ЭтотОбъект[Функциональность.Имя] = НаборКонстант[Функциональность.Имя];
КонецЦикла;
Проблема заключается в том, что в метаданных конфигурации константа ВедетсяРозничнаяТорговля существует, но в объекте формы НаборКонстант (который является реквизитом формы) это поле отсутствует или недоступно. Рассмотрим основные сценарии, почему это происходит.
Это самая распространенная причина. Если в вашей информационной базе установлены расширения, которые затрагивают форму ФункциональностьПрограммы, они могут хранить старую структуру формы. Когда основная конфигурация обновляется и в форму добавляются новые реквизиты (в данном случае — привязка к новой константе), расширение «перекрывает» обновленную форму своей старой версией, где этого поля еще нет.
Алгоритм действий:
Если вы являетесь разработчиком этого расширения, вам необходимо обновить форму в расширении, добавив в реквизит НаборКонстант недостающее поле ВедетсяРозничнаяТорговля вручную или перезахватив форму заново.
В платформе 1С:Предприятие 8.3 существует механизм оптимизации работы с данными формы. Если реквизит (в данном случае константа в составе набора) не выведен на форму визуально, платформа может исключить его из программного обращения для экономии ресурсов. Чтобы принудительно заставить систему видеть это поле, нужно изменить его свойства в Конфигураторе.
Разберем по шагам:
ФункциональностьПрограммы.ФормаФункциональностьПрограммы.НаборКонстант.ВедетсяРозничнаяТорговля.Важно: Если конфигурация находится на поддержке и закрыта для изменений («на замке»), это действие следует выполнить через Расширение. Создадим новое расширение, добавим в него указанную форму и в структуре реквизита НаборКонстант установим нужный флаг.
Иногда система «зависает» на уровне кэширования метаданных, и обычное удаление базы из списка и обратное добавление не помогает. Это особенно актуально для клиент-серверных вариантов работы.
Проанализируем методику полной очистки:
1C:Enterprise 8.3 Server Agent и очистить содержимое папок snccntx и config в каталоге конкретной информационной базы на сервере..dt и последующая загрузка в новую чистую базу. Это заставляет платформу полностью пересобрать внутренние таблицы индексов и структуру объектов.В некоторых случаях ошибка вызвана тем, что после обновления конфигурации не до конца отработали процедуры обновления данных в самой базе (обработчики обновления). Мы можем инициировать их запуск вручную.
Для этого запустим 1С:Предприятие с дополнительным параметром командной строки:
/ЗапуститьОбновлениеИнформационнойБазы
Этот параметр заставляет систему пересчитать функциональные опции и обновить значения констант, что может восстановить корректную связь между метаданными и формой «Функциональность».
Если нам нужно просто изменить настройки, а форма не открывается, мы можем попробовать инициализировать константу через стандартную обработку.
Посмотрим, как это сделать:
Константы.Ведется розничная торговля и установим ей нужное значение (например, «Нет»).После записи значения константа будет физически создана в таблице базы данных (если она по какой-то причине отсутствовала), и форма может начать открываться корректно.
Подводя итог, отметим, что наиболее эффективным методом является проверка расширений и установка флага «Использовать всегда» для проблемного поля в реквизитах формы. Совместное применение этих методов позволяет устранить ошибку ВедетсяРозничнаяТорговля и вернуть работоспособность разделу настройки программы.