Как идентифицировать договоры при переносе данных из «Торговля и Склад 9.2» в «Управление торговлей 11» при отсутствии кода?

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

Переход с платформы 1С 7.7 на современную 1С 8.3, особенно в связке «Торговля и Склад 9.2» (ТиС) и «Управление торговлей 11» (УТ 11), часто преподносит сюрпризы технического характера. Одной из наиболее острых проблем является перенос справочника Договоры. Программисты, привыкшие к жесткой структуре 7.7, сталкиваются с тем, что в УТ 11 длина кода этого справочника по умолчанию равна нулю. Если при этом в исходной базе наименования договоров правились вручную, задача их точной идентификации становится нетривиальной. Разберем подробно, как решить эту проблему и какие механизмы платформы 1С 8.3 задействовать для успешной синхронизации.

Анализ архитектурных различий справочников

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

Важно также понимать различие между логикой ТиС и УТ 11. В старой конфигурации договор был универсальным объектом. В УТ 11 функции разделены:

  1. Соглашения об условиях продаж: определяют цены, скидки и графики оплаты.
  2. Договоры: определяют юридическую сторону, учет взаиморасчетов и печатные формы документов.

При переносе нам нужно обеспечить связь именно со справочником договоров, учитывая, что прямой поиск по наименованию невозможен из-за его искажения в исходной базе.

Решение 1: Использование дополнительных реквизитов для хранения «Старого кода»

Рассмотрим самый надежный способ, который позволит избежать дублей и ошибок при повторных загрузках данных. Мы создадим в УТ 11 «мостик» между системами. Для этого воспользуемся механизмом Дополнительных реквизитов.

Проанализируем шаги реализации:

  1. В УТ 11 зайдем в раздел «Администрирование» — «Общие настройки» — «Дополнительные реквизиты и сведения».
  2. Для справочника «Договоры» создадим новый дополнительный реквизит с названием ID_TiS_Contract (или «СтарыйКод»).
  3. При первом проходе загрузки из ТиС 9.2 будем записывать в это поле значение Код или ID из 7.7.

Пример алгоритма поиска на языке 1С при выполнении загрузки (в обработке или правилах конвертации):


Функция НайтиДоговорПоСтаромуКоду(ЗначениеСтарогоКода, КонтрагентСсылка, ОрганизацияСсылка)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Договоры.Ссылка КАК Ссылка
        |ИЗ
        |	Справочник.ДоговорыКонтрагентов КАК Договоры
        |ГДЕ
        |	Договоры.Владелец = &Контрагент
        |	И Договоры.Организация = &Организация
        |	И Договоры.ДополнительныеРеквизиты.Свойство.Наименование = ""ID_TiS_Contract""
        |	И Договоры.ДополнительныеРеквизиты.Значение = &СтарыйКод";
    
    Запрос.УстановитьПараметр("Контрагент", КонтрагентСсылка);
    Запрос.УстановитьПараметр("Организация", ОрганизацияСсылка);
    Запрос.УстановитьПараметр("СтарыйКод", ЗначениеСтарогоКода);
    
    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Ссылка;
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции

Решение 2: Поиск по составному ключу (Связка реквизитов)

Если по каким-то причинам изменять структуру базы и добавлять реквизиты нельзя, проанализируем возможность поиска по совокупности стандартных полей. В УТ 11 договор жестко подчинен не только контрагенту (через поле Партнер или Владелец), но и конкретной Организации предприятия.

Разберем, какие поля следует включить в составной ключ для поиска:

Важно учитывать, что поле Наименование в УТ 11 имеет длину 150 символов. Если в ТиС оно было изменено, но в нем сохранились уникальные вхождения (например, номер счета), можно попробовать использовать поиск по подстроке, но это увеличивает риск нахождения неверного объекта.

Решение 3: Регламентированный поиск через «Конвертацию данных»

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

Рассмотрим порядок настройки правил:

  1. В правиле выгрузки данных (ПВД) для договоров укажем, что поиск должен вестись по внутреннему идентификатору.
  2. Если GUID в базах разный (что логично при первом переносе), создадим алгоритм в обработчике «Поля поиска» на стороне УТ 11.
  3. Воспользуемся регистром сведений СоответствияОбъектовИнформационныхБаз. Это скрытый системный механизм, который хранит связки ссылок между базами.

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

Особенности заполнения номера в УТ 11

При переносе данных из ТиС важно обратить внимание на формат номера. В семерке номера могли содержать любые префиксы и символы. В УТ 11 желательно нормализовать номер. Рассмотрим пример обработки строки номера перед поиском:


Функция НормализоватьНомер(ВходящийНомер)
    // Удаляем лишние пробелы и приводим к верхнему регистру
    Результат = СокрЛП(ВходящийНомер);
    // При необходимости можно добавить логику удаления префиксов
    // Результат = СтрЗаменить(Результат, "ДОГ-", "");
    Возврат Результат;
КонецФункции

Резюмируем: отсутствие кода в справочнике договоров УТ 11 — это не ограничение, а переход к более гибкой модели идентификации. Наилучшей практикой является использование Дополнительных реквизитов для хранения уникального идентификатора из старой системы. Это гарантирует 100% точность сопоставления объектов даже при полном изменении их наименований или номеров в будущем.

← На главную