Почему в регистре сведений «Контактная информация» отбор по объекту неактивен и равен «не определен»?

Программист 1С v8.3 (Обычные формы)
← На главную

При работе в конфигурациях на обычных формах (например, «Зарплата и кадры бюджетного учреждения, редакция 1.0» или «Зарплата и управление персоналом, редакция 2.5») пользователи нередко сталкиваются с ситуацией: при открытии регистра сведений Контактная информация напрямую из меню список оказывается пустым. В панели отбора флажок напротив поля Объект установлен, но само поле заблокировано, а заголовок окна указывает: «Контактная информация. Объект: не определен».

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

Анализ причины на уровне исходного кода

Проанализируем программный код обработчика ПриОткрытии() формы списка регистра сведений. Разработчики конфигурации заложили принудительную установку использования отбора по полю Объект при каждом открытии формы:


Процедура ПриОткрытии()
    
    РегистрСведенийСписок.Отбор.Объект.Использование = Истина;
    
    ПредставлениеОбъекта = "";
    Если ТипЗнч(РегистрСведенийСписок.Отбор.Объект.Значение) = Тип("СписокЗначений") Тогда
        Если РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.ВСписке ИЛИ РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.ВСпискеПоИерархии Тогда
            ПредставлениеОбъекта = "в списке ";
        ИначеЕсли РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.НеВСписке ИЛИ РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.НеВСпискеПоИерархии Тогда
            ПредставлениеОбъекта = "не в списке ";
        КонецЕсли;
        ПредставлениеСписка = "";
        Для каждого ЭлементСписка Из РегистрСведенийСписок.Отбор.Объект.Значение Цикл
            Если Не ПустаяСтрока(ПредставлениеСписка) Тогда
                ПредставлениеСписка = ПредставлениеСписка + ", ";
            КонецЕсли; 
            ПредставлениеСписка = ПредставлениеСписка + ?(НЕ ЗначениеЗаполнено(ЭлементСписка.Значение), "<...>", Строка(ЭлементСписка.Значение));
        КонецЦикла;
        ПредставлениеОбъекта = ПредставлениеОбъекта + ПредставлениеСписка;
    ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(РегистрСведенийСписок.Отбор.Объект.Значение)) Тогда
        Если НЕ ЗначениеЗаполнено(РегистрСведенийСписок.Отбор.Объект.Значение) Тогда
            ПредставлениеОбъекта = "не определен";
        Иначе
            Если РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.Равно Тогда
                ПредставлениеОбъекта = "";
            ИначеЕсли РегистрСведенийСписок.Отбор.Объект.ВидСравнения = ВидСравнения.НеРавно Тогда
                ПредставлениеОбъекта = "не равно ";
            КонецЕсли; 
            ПредставлениеОбъекта = ПредставлениеОбъекта + Строка(РегистрСведенийСписок.Отбор.Объект.Значение);
        КонецЕсли; 
    КонецЕсли; 
    ЭтаФорма.Заголовок = "Контактная информация. Объект: " + ПредставлениеОбъекта;
    
КонецПроцедуры

Как видим из кода, при вызове формы выполняется команда РегистрСведенийСписок.Отбор.Объект.Использование = Истина. Если форма открывается напрямую из главного меню программы, параметры владельца не передаются, и значение отбора остается не заложенным. В результате проверка НЕ ЗначениеЗаполнено(...) формирует представление «не определен», а платформа применяет отбор по пустому объекту, из-за чего список записей остаётся пустым.

Архитектурная концепция разработчиков 1С

Выясним, почему реализован именно такой механизм. Форма списка регистра сведений Контактная информация в типовых решениях не предназначена для прямого открытия и общего просмотра всего массива данных. Она спроектирована как подчиненная форма для работы в контексте конкретного владельца (сотрудника, контрагента или организации).

Основные причины такого ограничения:

  1. Защита от случайных изменений: Бесконтрольный доступ ко всему списку контактных данных из общего регистра увеличивает риск некорректного изменения адресов и телефонов чужих справочников.
  2. Отключение доступности поля: В свойствах настройки отбора для поля Объект установлено значение Доступность = Ложь, что блокирует ручное снятие флажка пользователем в интерфейсе.

Варианты решения проблемы и просмотра всех записей

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

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