Почему возникает ошибка «Поле объекта не обнаружено» в панели администрирования УТ и как её исправить?

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

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

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

Анализ причин возникновения ошибки

Основная причина заключается в несоответствии ожиданий кода и состава метаданных, представленных на форме. В современных конфигурациях 1С:Управление торговлей структура данных НаборКонстант, используемая в ПанельАдминистрированияУТ, формируется динамически. Если функциональная опция, связанная с константой ИспользоватьУправлениеСделками, по каким-либо причинам неактивна или не попала в состав реквизитов формы при обновлении, система выдает исключение при попытке обращения к ней.

Рассмотрим процесс инициализации структуры набора констант, который обычно выглядит следующим образом:


Функция ПолучитьСтруктуруНабораКонстант(НаборКонстант)
    Результат = Новый Структура;
    Для Каждого МетаКонстанта Из Метаданные.Константы Цикл
        Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Набор, МетаКонстанта.Имя) Тогда
            Результат.Вставить(МетаКонстанта.Имя);
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Если в процессе формирования структуры конкретная константа не обнаруживается в наборе, обращение НаборКонстант.ИспользоватьУправлениеСделками в модуле формы приводит к аварийной остановке выполнения.

Способ №1: Диагностика и проверка через отладчик

Прежде чем вносить изменения в код, проанализируем состояние объекта в отладчике. Выясним, почему реквизит не доступен. Установите точку останова в процедуре ПриСозданииНаСервере формы Продажи. Проверьте состояние переменной НаборКонстант.

  1. Проверьте, содержит ли НаборКонстант искомое свойство ИспользоватьУправлениеСделками.
  2. Если свойство отсутствует, это означает, что либо функциональная опция выключена, либо расширение конфигурации некорректно модифицировало состав формы.
  3. Проанализируйте, попадает ли данная константа в функцию ПолучитьСтруктуруНабораКонстант.

Способ №2: Корректировка доступности (Рекомендуемое решение)

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

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

Способ №3: Использование расширений для «красивого» решения

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


&Вместо("УстановитьДоступность")
Процедура Расш_УстановитьДоступность(РеквизитПутьКДанным = "")
    Если НаборКонстант.Свойство("ИспользоватьУправлениеСделками") Тогда
        ЗапрещеноОтключатьКоммерческиеПредложения = НаборКонстант.ИспользоватьУправлениеСделками;
    Иначе
        // Обработка ситуации, если константа отсутствует
        ЗапрещеноОтключатьКоммерческиеПредложения = Ложь; 
    КонецЕсли;
КонецПроцедуры

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

Заключение и советы

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

← На главную