В процессе работы с конфигурацией «Управление торговлей», редакция 11 (в частности, релиз 11.4.6.188), пользователи и администраторы могут столкнуться с неприятной ситуацией: при попытке зайти в раздел «НСИ и Администрирование» -> «Настройка разделов» -> «Продажи» система аварийно завершает работу формы с ошибкой Поле объекта не обнаружено (ИспользоватьУправлениеСделками). Эта проблема особенно характерна для баз, которые давно не обновлялись или подвергались динамическому обновлению конфигурации.
Разберем ситуацию подробно: код типовой обработки Обработка.ПанельАдминистрированияУТ пытается обратиться к свойству ИспользоватьУправлениеСделками объекта НаборКонстант. Несмотря на то, что в метаданных константа присутствует и конфигурация находится «на замке», система её «не видит» в контексте выполнения программного кода формы.
Проанализируем причины и пошагово рассмотрим способы решения этой технической проблемы.
Одной из самых частых причин несоответствия программного кода и фактической структуры данных является динамическое обновление конфигурации. В среде разработчиков 1С его часто называют «демоническим» из-за непредсказуемых побочных эффектов. При таком обновлении кэш на стороне клиента или сервера может сохранить старую структуру метаданных, в то время как код формы уже ожидает новую.
Рассмотрим, как правильно очистить кэш:
%AppData%\Local\1C\1cv8\%AppData%\Roaming\1C\1cv8\Поскольку ошибка указывает на отсутствие поля в объекте НаборКонстант, это может свидетельствовать о повреждении внутренних таблиц базы данных (особенно в файловом варианте .1cd). Система «знает» о константе в метаданных, но не может корректно собрать набор констант для формы.
Проанализируем шаги по восстановлению базы:
Запустим конфигуратор и перейдем в меню Администрирование — Тестирование и исправление. Выберем следующие важные пункты:
Constants.В рассматриваемом примере используется релиз УТ 11.4.6.188 (выпущенный в 2018 году) на платформе 8.3.19 (2021-2022 годы). Разрыв в технологиях составляет более трех лет. В новых версиях платформы механизмы работы с объектом НаборКонстант в управляемых формах претерпели изменения.
Посмотрим на код, вызывающий ошибку:
{Обработка.ПанельАдминистрированияУТ.Форма.Продажи.Форма(712)}:
ЗапрещеноОтключатьКоммерческиеПредложения = НаборКонстант.ИспользоватьУправлениеСделками;
Проблема может заключаться в том, что в процедуре ПриСозданииНаСервере или УстановитьДоступность объект НаборКонстант еще не полностью инициализирован или ограничен функциональными опциями. На платформе 8.3.19 система более строго относится к чтению реквизитов, которые не включены в текущий контекст формы или закрыты правами доступа (хотя у пользователя могут быть полные права).
Рекомендация: Если ТиИ и очистка кэша не помогли, наиболее правильным решением будет обновление конфигурации «Управление торговлей» до актуального релиза (хотя бы до последних патчей ветки 11.4 или переход на 11.5). В новых релизах код обращения к настройкам переписан с учетом особенностей современных версий платформы.
Выясним, не установлены ли в базе расширения. Даже если расширение не изменяет напрямую модуль настроек продаж, оно может влиять на состав реквизитов формы ПанельАдминистрированияУТ при её «сборке» на сервере.
Попробуем временно отключить все расширения в меню Конфигурация — Расширения конфигурации (сняв галочку «Активно») и проверить работоспособность формы. Если ошибка исчезла — причину нужно искать в коде одного из расширений, который может затирать или переопределять НаборКонстант.
Если вы обладаете навыками программирования, выполним проверку вручную. Это поможет точно определить, какой объект подсовывает система вместо ожидаемого набора констант.
ПанельАдминистрированияУТ.Продажи и найдем строку 712 в модуле формы.НаборКонстант.Если тип объекта верный (КонстантыНабор), но поле отсутствует, проверьте список доступных свойств. Если тип Неопределено — значит, инициализация набора в процедуре ПриСозданииНаСервере не произошла корректно из-за сбоя в платформенных механизмах.
Для исправления ошибки Поле объекта не обнаружено (ИспользоватьУправлениеСделками) придерживайтесь следующего алгоритма: