Как перенести контактную информацию в 1С:Управление торговлей 11 между базами?

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

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

Анализ архитектуры хранения данных в УТ 11

Для начала проанализируем, где именно хранятся данные. В современных версиях УТ 11 используется двухзвенная система: Партнеры (управленческий учет) и Контрагенты (юридические лица). Рассмотрим важный нюанс: даже если в настройках системы отключена опция «Независимо вести партнеров и контрагентов», программная логика 1С все равно создает и использует оба справочника.

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

Способ 1: Корректное использование запросов для проверки данных

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

Рассмотрим пример правильного запроса для проверки наличия данных в Контрагентах:


ВЫБРАТЬ
    КИ.Ссылка КАК Ссылка,
    КИ.Вид КАК Вид,
    КИ.Представление КАК Представление,
    КИ.ЗначенияПолей КАК ЗначенияПолей
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
ГДЕ
    КИ.Ссылка = &Объект

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


ВЫБРАТЬ
    КИ.Представление КАК КонтактнаяИнформация
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК КИ
ГДЕ
    КИ.Ссылка = &Объект

Способ 2: Синхронизированный перенос Партнеров и Контрагентов

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

  1. Сопоставление объектов: В УТ 11 Контрагент связан с Партнером через реквизит Партнер. В то же время у Партнера может быть несколько Контрагентов (или один, если разделение отключено).
  2. Выгрузка Партнеров: Сначала выгружаем справочник Партнеры вместе с их табличной частью КонтактнаяИнформация.
  3. Выгрузка Контрагентов: Затем выгружаем справочник Контрагенты, обеспечивая сохранение ссылочной связи с уже загруженными партнерами.

Именно этот подход позволяет решить проблему, описанную многими пользователями: когда в источнике данные видны, а в приемнике — нет. Если мы перенесем Контрагента, но не перенесем связанного с ним Партнера, форма в УТ 11 (которая часто отображает данные именно из партнера) будет пустой.

Способ 3: Программный перенос через API конфигурации

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

Проанализируем ситуацию: простого копирования строк табличной части может быть недостаточно, так как адрес в 1С хранится в структурированном виде (XML или JSON) в реквизите ЗначенияПолей. Если мы перенесем только текстовое Представление, мы не сможем редактировать адрес в диалоговом окне. Для корректной записи данных программным путем воспользуемся методом:


// Пример записи адреса программно
СтруктураКИ = Новый Структура;
СтруктураКИ.Вставить("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
СтруктураКИ.Вставить("Представление", "г. Москва, ул. Ленина, д. 1");
СтруктураКИ.Вставить("ЗначенияПолей", СтрокаЗначенийПолей); // Сформированный XML/JSON

УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(ОбъектСсылка, СтруктураКИ, , Ложь);

Важные технические нюансы при переносе

Рассмотрим дополнительные факторы, которые могут повлиять на результат:

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

Резюме для решения задачи

Подведем итог. Чтобы перенести контактную информацию в УТ 11, необходимо:

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

← На главную