Как быстро перенести адреса с одного контрагента на другого в 1С:УПП?

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

При ведении учета и реорганизации справочников в «1С:Управление производственным предприятием» (УПП) нередко возникает задача массового или точечного копирования контактных данных (юридических, фактических, почтовых адресов, телефонов) от одного контрагента к другому. Ручной ввод через форму элемента занимает слишком много времени, особенно когда контрагентов много.

Рассмотрим структуру хранения данных в конфигурации и разберем наиболее эффективные способы решения этой задачи — от программной обработки до применения штатных сервисных инструментов платформы.

Особенности хранения контактной информации в УПП

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

  1. Объект — ссылка на элемент справочника (в нашем случае СправочникСсылка.Контрагенты).
  2. Тип — перечисление ТипыКонтактнойИнформации (например, Адрес, Телефон, АдресЭлектроннойПочты).
  3. Вид — элемент справочника ВидыКонтактнойИнформации (например, «Юридический адрес контрагента», «Фактический адрес контрагента»).

Адресные данные записываются не только строкой в ресурс Представление, но и раскладываются по отдельным полям (Поле1–Поле10), в которых хранятся почтовый индекс, регион, район, город, улица, дом и другие составляющие. Поэтому при копировании данных важно переносить всю структуру записи целиком, чтобы адрес продолжал корректно открываться через специализированное диалоговое окно ввода адреса.

Способ 1. Программное копирование через набор записей регистра сведений

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

  1. Создаем набор записей регистра сведений КонтактнаяИнформация с отбором по контрагенту-источнику.
  2. Считываем данные источника и выгружаем их в таблицу значений.
  3. Заменяем в полученной таблице значений поле Объект на контрагента-приемника.
  4. Создаем новый набор записей с отбором по контрагенту-приемнику, загружаем в него модифицированную таблицу значений и записываем результат.

Посмотрим на пример программной реализации:


// Задаем переменные источника и приемника
КонтрагентИсточник = ИсточникСсылка; 
КонтрагентПриемник = ПриемникСсылка;

// 1. Считываем контактную информацию контрагента-источника
НаборИсточник = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборИсточник.Отбор.Объект.Установить(КонтрагентИсточник);
НаборИсточник.Прочитать();

ТаблицаКИ = НаборИсточник.Выгрузить();

Если ТаблицаКИ.Количество() > 0 Тогда
    // 2. Подменяем объект-владелец на контрагента-приемника
    Для Каждого Стр Из ТаблицаКИ Цикл
        Стр.Объект = КонтрагентПриемник;
    КонецЦикла;
    
    // 3. Записываем подготовленные данные в контрагента-приемника
    НаборПриемник = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    НаборПриемник.Отбор.Объект.Установить(КонтрагентПриемник);
    НаборПриемник.Загрузить(ТаблицаКИ);
    НаборПриемник.Записать();
КонецЕсли;

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

Способ 2. Использование универсальной выгрузки и загрузки XML

Если нет возможности написать собственный код, воспользуемся штатной обработкой Универсальный обмен данными в формате XML:

  1. В режиме выгрузки настраиваем правило для регистра сведений КонтактнаяИнформация.
  2. Устанавливаем отбор по измерению Объект, выбрав контрагента-источника.
  3. Выгружаем данные в XML-файл.
  4. При загрузке или при настройке правил конвертации переопределяем ссылку контрагента-приемника.

Способ 3. Перенос ссылок при объединении дублей

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

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

О чем важно помнить при переносе адресов

  1. Подчиненные объекты: Адреса доставки и контакты могут быть привязаны не к самому контрагенту, а к связанным справочникам — Контактные лица контрагентов или Договоры контрагентов. Проверьте, требуется ли переносить контакты этих объектов.
  2. Проверка через классификаторы: После программного переноса рекомендуется открыть форму контрагента-приемника и убедиться, что адресные поля отображаются корректно и открываются в структурированном окне ввода адреса КЛАДР/ФИАС.
  3. Подсистема версионирования: Прямая программная запись наборов записей регистра сведений выполняется в обход событий формы, поэтому изменения не всегда фиксируются в истории версий объектов, если в системе включено версионирование.
← На главную