Как перенести контактную информацию и адреса из ЗУП 2.5 в ЗУП 3

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

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

Рассмотрим подробнее, как корректно сформировать структуру контактной информации и перенести адреса физических лиц.

Вариант 1. Использование типовых правил переноса 1С

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

  1. ОбщийМакет.ЗарплатаКадрыПереносДанныхИзЗУП25 — правила переноса из типовой ЗУП 2.5;
  2. ОбщийМакет.ЗарплатаКадрыПереносДанныхИзЗУП25КОРП — правила для КОРП-версии;
  3. ОбщийМакет.ЗарплатаКадрыПереносДанныхИзБП30 — правила переноса из Бухгалтерии предприятия.

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

Вариант 2. Программное формирование контактной информации через БСП

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

Разберем по шагам алгоритм программного заполнения табличной части КонтактнаяИнформация у объекта справочника (например, ФизическиеЛица или Сотрудники):

  1. Определяем тип и вид контактной информации (получаем ссылки из перечисления ТипыКонтактнойИнформации и справочника ВидыКонтактнойИнформации).
  2. Формируем текстовое представление адреса или телефона.
  3. С помощью функции УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению() генерируем корректную XML-структуру для поля ЗначенияПолей.
  4. Извлекаем отдельные составляющие адреса (страна, регион, город) методом УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML().
  5. Заполняем строки табличной части КонтактнаяИнформация, включая вспомогательные колонки Страна, Регион, Город, Представление и ЗначенияПолей.

Проанализируем пример кода, выполняющего описанный алгоритм:


Для Каждого Строка Из ТаблицаКонтактнаяИнформация Цикл
    
    Тип = ПолучитьЗначениеПеречисления("ТипыКонтактнойИнформации", Строка.Тип);
    
    Если Не ЗначениеЗаполнено(Строка.Вид) Тогда
        Строка.Вид = ПолучитьВидКонтактнойИнформации(Строка.Вид_ИмяПредопределенного, Строка.Вид_Наименование, Тип, РодительВидаКИ);
    КонецЕсли;
    
    // Подготовка представления
    Если Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
        Представление = ?(Лев(Строка.Представление, 5) = "(495)", "+7 " + Строка.Представление, Строка.Представление);
        
    ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
        Представление = Строка.Представление;
        Представление = СтрЗаменить(Представление, "кв.", "квартира ");
        Представление = СтрЗаменить(Представление, "оф.", "офис ");
        
        // Генерация XML для поля ЗначенияПолей
        ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Представление, Строка.Вид);
        СтруктураКИ   = УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(ЗначенияПолей, Строка.Вид);
        
        Если Строка.ВключатьСтрануВПредставление Тогда
            Представление = СтруктураКИ.Страна + ", " + Представление;
        КонецЕсли;
    Иначе
        Представление = Строка.Представление;
    КонецЕсли;
    
    ЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияXMLПоПредставлению(Представление, Строка.Вид);
    
    // Добавление строки в табличную часть объекта
    Если ЗначениеЗаполнено(Тип) И ЗначениеЗаполнено(Строка.Вид) И ЗначениеЗаполнено(ЗначенияПолей) Тогда
        
        ОтобранныеСтроки = Объект.КонтактнаяИнформация.НайтиСтроки(Новый Структура("Тип, Вид", Тип, Строка.Вид));
        Если ОтобранныеСтроки.Количество() > 0 Тогда
            РедактируемаяСтрока = ОтобранныеСтроки[0];
        Иначе
            РедактируемаяСтрока = Объект.КонтактнаяИнформация.Добавить();
        КонецЕсли;
        
        РедактируемаяСтрока.Тип           = Тип;
        РедактируемаяСтрока.Вид           = Строка.Вид;
        РедактируемаяСтрока.ВидДляСписка  = Строка.Вид;
        РедактируемаяСтрока.Представление = Представление;
        РедактируемаяСтрока.ЗначенияПолей = ЗначенияПолей;
        
        // Дополнительные реквизиты для разных типов КИ
        Если Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
            РедактируемаяСтрока.АдресЭП = Представление;
            
        ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
            РедактируемаяСтрока.НомерТелефона         = Представление;
            РедактируемаяСтрока.НомерТелефонаБезКодов = Представление;
            
        ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
            РедактируемаяСтрока.Страна = ?(СтруктураКИ.Свойство("Страна"), СтруктураКИ.Страна, "");
            РедактируемаяСтрока.Регион = ?(СтруктураКИ.Свойство("Регион"), СтруктураКИ.Регион, "");
            РедактируемаяСтрока.Город  = ?(СтруктураКИ.Свойство("Город"),  СтруктураКИ.Город,  "");
        КонецЕсли;
        
    КонецЕсли;
    
КонецЦикла;

Важные особенности записи адресов в ЗУП 3

При записи контактной информации обратите внимание на следующие нюансы:

1. Заполнение вспомогательных полей: Обязательно заполняйте реквизиты Страна, Регион и Город в табличной части. Если записать только XML-структуру в ЗначенияПолей, то в справочнике или формах отчетов адрес может отображаться не полностью.

2. Виды контактной информации: Реквизит Вид должен ссылаться на актуальные предопределенные элементы справочника ВидыКонтактнойИнформации целевой базы (например, АдресПоПропискеФизическиеЛица, ТелефонДомашнийФизическиеЛица).

3. Формат XML/JSON: БСП автоматически генерирует требуемую XDTO-схему при использовании стандартных методов модуля УправлениеКонтактнойИнформацией, поэтому ручное сшивание XML-строк через конкатенацию категорически не рекомендуется.

← На главную