Почему не отображаются предопределенные элементы справочника "Виды контактной информации" в 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики 1С сталкиваются с ситуацией: после обновления Библиотеки стандартных подсистем (БСП) до версии 2.3.х и выше добавленные в конфигураторе предопределенные элементы справочника ВидыКонтактнойИнформации перестают отображаться в режиме Предприятия. В консоли запросов элементы видны, а в интерфейсе пользователя — пустота. Давайте подробно разберем причины такого поведения и рассмотрим эффективные способы решения этой проблемы.

Почему возникает проблема: изменения в архитектуре БСП и платформы

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

Кроме того, начиная с платформы 8.3.3, предопределенные элементы конфигурации больше не привязываются жестко по внутреннему идентификатору. Связь осуществляется по строковому реквизиту ИмяПредопределенныхДанных. При некорректных обновлениях или слияниях конфигураций эта связь может нарушиться: элемент физически существует, но платформа не "видит" его в пользовательском режиме — поможет инструмент выявления и удаления битых ссылок в 1С.

Также видимость зависит от свойства справочника Обновление предопределенных данных. Если там установлено значение "Не обновлять автоматически", новые предопределенные данные, добавленные через конфигуратор, не появятся в базе.

Рассмотрим по шагам, как мы можем исправить эту ситуацию несколькими надежными способами.

Решение 1: Использование служебной процедуры БСП

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

Посмотрим на пример кода, который необходимо выполнить:


Процедура ИнициализироватьВидимостьКИ() Экспорт
    УправлениеКонтактнойИнформациейСлужебный.УстановитьЗначениеПризнакаИспользуется();
КонецПроцедуры

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

Решение 2: Программное создание видов контактной информации (Рекомендуемый способ)

Разберем правильный, с точки зрения стандартов БСП, подход. Мы должны полностью отказаться от добавления элементов вручную и прописывать их создание программно.

Для добавления собственных видов КИ используем общий модуль УправлениеКонтактнойИнформациейПереопределяемый. Нам нужна процедура ПриНачальномЗаполненииЭлементов. Или же мы можем написать собственный обработчик обновления, который сформирует нужный вид. Рассмотрим, как программно задать параметры нового вида контактной информации:


Процедура ОбработатьАдресПолученияКоммерческихПредложений() Экспорт
    ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
    
    // Указываем ссылку на наш предопределенный элемент или создаем новый программно
    ПараметрыВида.Вид = Справочники.ВидыКонтактнойИнформации.АдресПолученияКоммерческихПредложений;
    ПараметрыВида.Подсказка = НСтр("ru='Адрес приема коммерческих предложений'");
    ПараметрыВида.МожноИзменятьСпособРедактирования = Ложь;
    ПараметрыВида.Порядок = 3;
    ПараметрыВида.НастройкиПроверки.ПроверятьКорректность = Истина;
    
    УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);
КонецПроцедуры

Обратите внимание: чтобы этот код сработал автоматически при обновлении, необходимо увеличить номер версии конфигурации. Тогда платформенные обработчики БСП, такие как ОбновитьПредопределенныеВидыКонтактнойИнформации, запустятся и актуализируют справочник.

Решение 3: Восстановление связи через ИмяПредопределенныхДанных

Если данные задвоились или слетела связь, мы можем принудительно назначить ИмяПредопределенныхДанных найденным или созданным элементам. Проанализируем алгоритм восстановления на примере похожего справочника:


Процедура ВосстановитьСвязьПредопределенногоЭлемента(ИмяЭлемента) Экспорт
    Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда 
        Возврат; // В подчиненных узлах РИБ не выполняется
    КонецЕсли;

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

Дополнительные проверки, если элементы все еще не видны

Если вы выполнили программные настройки, но контактная информация по-прежнему не отображается, проверим следующие нюансы:

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

Альтернативное решение для ERP 2.5

В некоторых сложных конфигурациях, таких как 1С:ERP (особенно при переходе с 2.4 на 2.5), может помочь перенос корректной структуры из типовой демо-базы. Для этого с помощью обработки "Выгрузка и загрузка данных XML" (удобнее через универсальный перенос данных через XML между базами 1С) выгрузите справочник ВидыКонтактнойИнформации из чистой демо-базы и загрузите в свою. Важно: перед загрузкой обязательно снимите флажок "Загружать данные в режиме обмена данными" (ОбменДанными.Загрузка = Истина). Это заставит платформу выполнить все обработчики записи и корректно перестроить индексы и связи предопределенных элементов.

← На главную