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

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

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

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

Физика процесса: почему адреса «исчезают» с формы?

Для того чтобы понять суть проблемы, нам необходимо проанализировать архитектуру хранения данных в современных конфигурациях 1С (ЗУП 3.1, БП 3.0, ERP 2.5). В старых решениях контактная информация хранилась в отдельном независимом регистре сведений. В современных же базах на управляемых формах за это отвечает встроенная табличная часть самого объекта. Например, у справочника Справочники.ФизическиеЛица существует табличная часть КонтактнаяИнформация.

Существуют две основные технические причины, по которым загруженные адреса не выводятся на форму сотрудника:

  1. Конфликт уникальных идентификаторов (GUID) видов КИ. Это наиболее частая причина. На форме физического лица выводятся не абстрактные строки, а строго определенные виды контактной информации. Они привязаны к предопределенным элементам справочника ВидыКонтактнойИнформации. Во время программной загрузки или переноса данных обработка часто создает новый (дублирующий) элемент в справочнике видов КИ с тем же наименованием (например, «Адрес по прописке»), но с новым системным GUID. База связывает адрес сотрудника с этим новым «пользовательским» видом КИ. Форма карточки физического лица при этом продолжает искать жестко зашитый предопределенный системный GUID и, естественно, ничего не находит.
  2. Отсутствие сериализованной структуры адреса (JSON/XML). Современная платформа 1С ожидает, что адрес будет храниться не просто одной строкой в поле Представление, а в виде структурированного XML или JSON в поле ЗначенияПолей (согласно требованиям ФИАС/ГАР). Если при загрузке было заполнено только строковое представление, а служебное поле со структурой осталось пустым, то интерактивные поля ввода на форме не смогут отобразить и десериализовать этот адрес.

Шаг 1. Диагностика проблемы с помощью Консоли запросов

Прежде чем приступать к изменениям в базе данных, давайте точно выясним причину неполадки. Самый быстрый способ — запустить Консоль запросов (или воспользоваться отчетом по контактной информации) и проанализировать, к каким именно видам КИ привязаны наши незадачливые адреса.

Давайте напишем и выполним следующий запрос:


ВЫБРАТЬ
    ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК Сотрудник,
    ФизическиеЛицаКонтактнаяИнформация.Вид КАК ВидКонтактнойИнформации,
    ФизическиеЛицаКонтактнаяИнформация.Вид.ИмяПредопределенныхДанных КАК ИмяПредопределенного,
    ФизическиеЛицаКонтактнаяИнформация.Представление КАК ТекстовыйАдрес,
    ФизическиеЛицаКонтактнаяИнформация.ЗначенияПолей КАК СериализованныйАдрес
ИЗ
    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
ГДЕ
    ФизическиеЛицаКонтактнаяИнформация.Представление ПОДОБНО "%"

Проанализируем результаты выполнения этого запроса:

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

Шаг 2. Способы решения проблемы

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

Вариант А. Устранение дублей видов контактной информации

Если диагностика показала наличие дублирующих элементов в справочнике видов КИ, нам необходимо объединить эти элементы, перенаправив все ссылки со стороннего (загруженного) элемента на стандартный предопределенный. Для этого отлично подойдет встроенный инструмент системы.

Разберем этот процесс по шагам:

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

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

Вариант Б. Программная инициализация и заполнение полей адреса

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

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


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

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

Рекомендация на будущее: как правильно загружать адреса программно

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

Например, для записи адреса рекомендуется использовать процедуру УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(). Этот метод самостоятельно проверит все типы, создаст необходимые XML/JSON-структуры и исключит появление дубликатов в справочниках.

← На главную