Почему не отображается контактная информация физических лиц после переноса данных в 1С:ЗУП 3.1 и как это исправить?

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

При переносе данных или слиянии двух информационных баз 1С:Зарплата и управление персоналом 3.1 (ЗУП) специалисты часто сталкиваются со странной проблемой: после переноса физических лиц их контактная информация (адреса проживания, регистрации, мобильные телефоны, email) не отображается на форме элемента справочника ФизическиеЛица. При этом, если заглянуть в базу консолью запросов или проверить табличную часть объекта, данные там физически присутствуют. Поля на форме остаются абсолютно пустыми, и пользователь не может их отредактировать.

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

В чем причина скрытия контактной информации на форме?

Давайте разберем внутреннюю кухню платформы «1С:Предприятие 8» и БСП. В современных версиях ЗУП 3.1 контактная информация хранится не в регистре сведений, как это было в старых редакциях, а непосредственно в табличной части КонтактнаяИнформация справочника ФизическиеЛица.

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


ВЫБРАТЬ
    КонтактнаяИнформация.Представление КАК Представление,
    КонтактнаяИнформация.Значение КАК Значение,
    КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
    КонтактнаяИнформация.НомерСтроки КАК НомерСтроки,
    КонтактнаяИнформация.Вид КАК Вид,
    0 КАК ИдентификаторСтрокиТабличнойЧасти
ПОМЕСТИТЬ КонтактнаяИнформация
ИЗ
    &ТаблицаКонтактнойИнформации КАК КонтактнаяИнформация
ИНДЕКСИРОВАТЬ ПО
    Вид
;

ВЫБРАТЬ
    ВидыКонтактнойИнформации.Ссылка КАК Вид,
    ВЫБОР
        КОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида <> ""
            ТОГДА ВидыКонтактнойИнформации.ИмяПредопределенногоВида
        ИНАЧЕ ВидыКонтактнойИнформации.ИмяПредопределенныхДанных
    КОНЕЦ КАК ИмяПредопределенногоВида,
    ВидыКонтактнойИнформации.Тип КАК Тип,
    ЕСТЬNULL(КонтактнаяИнформация.Представление, "") КАК Представление,
    ЕСТЬNULL(КонтактнаяИнформация.ЗначенияПолей, "") КАК ЗначенияПолей,
    ЕСТЬNULL(КонтактнаяИнформация.Значение, "") КАК Значение
ИЗ
    Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
ЛЕВОЕ СОЕДИНЕНИЕ
    КонтактнаяИнформация КАК КонтактнаяИнформация
ПО
    ВидыКонтактнойИнформации.Ссылка = КонтактнаяИнформация.Вид
ГДЕ
    ВидыКонтактнойИнформации.Используется
    И ЕСТЬNULL(ВидыКонтактнойИнформации.Родитель.Используется, ИСТИНА)
    И (ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
        ИЛИ ВидыКонтактнойИнформации.Родитель.Родитель = &ГруппаВидовКИ)
    И ВидыКонтактнойИнформации.Ссылка НЕ В (&СкрываемыеВиды)

Обратите внимание на блок условий ГДЕ. Программа жестко фильтрует виды контактной информации по родителю (параметр &ГруппаВидовКИ, в роли которого выступает предопределенная группа «Справочник Физические лица»).

Если в процессе слияния или переноса данных предопределенные элементы справочника ВидыКонтактнойИнформации задвоились, система теряет связь с правильной группой. В базе данных появляются два элемента с одинаковым наименованием, но с абсолютно разными уникальными идентификаторами (UUID). В табличной части физлица КИ может ссылаться на один вид (из "неправильной" или дублирующей группы), а форма при открытии пытается прочитать данные, используя в качестве параметра &ГруппаВидовКИ ссылку на "правильную" группу из конфигурации. В результате левое соединение не срабатывает, и поля на форме остаются пустыми.

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

  1. Задвоение предопределенных групп справочника: При слиянии баз через XML-выгрузку без четкого сопоставления по UUID могут создаться дубли предопределенных папок в справочнике ВидыКонтактнойИнформации (например, две группы «Контактная информация Физические лица»).
  2. Битые или неверные UUID: Предопределенные элементы в базе-источнике и базе-приемнике имели разные уникальные идентификаторы. При переносе ссылки в табличной части физлиц стали указывать на элементы, которые база считает обычными, а не предопределенными.
  3. Некорректная XML-структура в полях хранения данных: Поля Значение и ЗначенияПолей в табличной части КИ должны содержать сериализованную XML-строку (XDTO-объект) структуры адреса или телефона. Если при переносе туда записали простое текстовое представление, БСП не сможет его десериализовать для отображения на форме.
  4. Сброшенный флаг использования: Если у вида контактной информации или у его родительской группы свойство Используется установилось в значение Ложь, этот вид КИ полностью исключается из запроса компоновки формы.

Пошаговое руководство по решению проблемы

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

Шаг 1. Диагностика и поиск дублей

Для начала проанализируем справочник видов контактной информации. Откройте его через функции технического специалиста (или через меню Все функции) — найдите справочник Виды контактной информации. Проверьте структуру папок. Если вы обнаружите две группы с одинаковым именем (например, «Контактная информация справочника "Физические лица"»), мы нашли корень проблемы.

Шаг 2. Определение правильной предопределенной группы

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


ПравильнаяГруппа = Справочники.ВидыКонтактнойИнформации.СправочникФизическиеЛица;
Сообщить("Правильный UUID: " + Строка(ПравильнаяГруппа.УникальныйИдентификатор()));

Шаг 3. Замена ссылок в табличных частях

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

Для этого лучше всего воспользоваться типовой обработкой «Поиск и замена дублей» (встроенной в состав БСП большинства современных конфигураций, доступна в разделе «Администрирование — Обслуживание — Корректировка данных»):

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

Шаг 4. Удаление дублирующих элементов

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

Шаг 5. Принудительное обновление предопределенных данных БСП

Иногда после ручной очистки дублей полезно запустить механизм принудительного обновления и сопоставления предопределенных данных на уровне платформы. Для этого запустите базу в режиме «1С:Предприятие» с ключом запуска:

/C ЗапускОбновленияИнформационнойБазы

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

Как правильно переносить КИ, чтобы избежать проблемы в будущем?

Для того чтобы не сталкиваться с подобными трудностями при регулярных обменах или написании собственных правил переноса, рекомендуем придерживаться следующих правил:

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

← На главную