Почему в карточке физического лица не отображаются адреса после переноса данных и где они хранятся

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

При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 (ЗУП) технические специалисты часто сталкиваются с ситуацией, когда после переноса данных из другой базы или с помощью обработки «Выгрузка и загрузка данных XML» информация об адресах (прописка, место проживания) физических лиц перестает отображаться в экранных формах. При этом программно данные в базе присутствуют. В этой статье мы разберем, по какой логике хранятся контактные данные, почему возникают дубли и как восстановить корректное отображение информации в интерфейсе. При миграции между двумя базами редакции 3.1 применяется перенос данных ЗУП 3 — ЗУП 3.

Где физически хранятся адреса в 1С:ЗУП 3.1

Прежде всего, проанализируем структуру хранения данных. В старых версиях программ 1С (например, ЗУП 2.5) для хранения контактной информации использовался регистр сведений КонтактнаяИнформация. Однако в современных конфигурациях, построенных на базе БСП (Библиотеки стандартных подсистем), архитектура изменилась.

Рассмотрим основные объекты метаданных, участвующие в хранении:

  1. Табличная часть справочника: Основным местом хранения является табличная часть КонтактнаяИнформация справочника ФизическиеЛица. Это сделано для повышения производительности и обеспечения целостности данных при копировании или удалении объекта.
  2. Структура табличной части: В этой ТЧ нас интересуют реквизиты:
    • Тип — перечисление (Адрес, Телефон, Email и т.д.);
    • Вид — ссылка на справочник ВидыКонтактнойИнформации;
    • Представление — строковое значение адреса;
    • Значение — XML или JSON строка, содержащая детальную структуру адреса (индекс, город, улица и т.д.).
  3. Справочник «Виды контактной информации»: Это ключевой классификатор, который определяет, какой именно адрес записан (прописка, проживание или рабочий адрес).

Выясняем причину: почему данные «исчезли» из карточки

Разберем ситуацию, когда данные в табличной части справочника ФизическиеЛица есть, но на форме «Адреса, телефоны» пусто. Основная причина кроется в механизме работы управляемых форм 1С.

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

При использовании обработки «Выгрузка и загрузка данных XML» объекты сопоставляются по GUID (Internal ID). Если в базе-источнике и базе-приемнике идентификаторы предопределенных видов контактной информации различаются (что часто бывает при ручном создании элементов или разных версиях конфигураций), система создает дубли. В итоге мы получаем два элемента «Адрес по прописке»: один «родной» (предопределенный, с шариком в иконке), а второй — загруженный извне как обычный пользовательский элемент. Для исключения дублей из-за несовпадающих ссылок применяется перенос данных между похожими конфигурациями 1С с сопоставлением объектов по произвольным полям поиска.

Шаг 1: Диагностика дублей в справочнике

Проанализируем содержимое справочника ВидыКонтактнойИнформации. Для этого необходимо перейти в раздел «Администрирование» — «Общие настройки» — «Виды контактной информации» (или найти через «Все функции/Функции для технического специалиста»).

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

Шаг 2: Исправление привязки данных

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

Рассмотрим решение через использование режима загрузки данных. Этот режим отключает платформенные и программные проверки (включая обработчики ПередЗаписью и ПриЗаписи), позволяя модифицировать объекты так, как это необходимо разработчику.

Для реализации этого метода можно воспользоваться консолью кода или специализированной обработкой «Групповое изменение реквизитов». В «Групповом изменении» обязательно нужно включить «Дополнительные параметры» — «Изменять в режиме загрузки».

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


// Получаем ссылку на неправильный вид КИ и правильную группу
ВидКИОбъект = СправочникСсылка.ПолучитьОбъект();
ВидКИОбъект.ОбменДанными.Загрузка = Истина; // Включаем режим загрузки
ВидКИОбъект.Родитель = Справочники.ВидыКонтактнойИнформации.ГруппаФизическиеЛица; 
// ГруппаФизическиеЛица — это имя предопределенной группы
ВидКИОбъект.Записать();

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

Шаг 3: Перенос ссылок в табличных частях

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

  1. Найти все записи в табличной части КонтактнаяИнформация, где поле Вид равно загруженному дублю.
  2. Заменить значение поля Вид на ссылку на оригинальный предопределенный элемент (например, Справочники.ВидыКонтактнойИнформации.ПропискаФизЛица).
  3. Сохранить объект физического лица также в режиме ОбменДанными.Загрузка = Истина, чтобы избежать лишних проверок и ускорить процесс.

Проанализируем пример кода для такой обработки:


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

Рекомендации по предотвращению проблемы

Выясним, как избежать подобных ситуаций в будущем при обмене данными между базами 1С:

Резюме: Отсутствие адресов в карточке — это не потеря данных, а следствие нарушения логики связи между табличной частью ФизическиеЛица.КонтактнаяИнформация и справочником ВидыКонтактнойИнформации. Исправление иерархии справочников и очистка дублей в режиме загрузки данных позволяют полностью восстановить работоспособность интерфейса без ручного переввода информации.

← На главную