Как реализовать поиск контрагентов по ИНН или коду при выгрузке из 1С 8 в 1С 7.7?

Программист 1С v7.7 1С:Управление нашей фирмой Управленческий учет
← На главную

При настройке обмена данными между современными конфигурациями на платформе 1С:Предприятие 8 и устаревшими, но все еще актуальными базами на 1С:Предприятие 7.7, разработчики часто сталкиваются с ограничениями механизма поиска. Одной из типичных задач является реализация «умного» поиска: если контрагент — юридическое лицо, его нужно искать по ИНН, а если физическое лицо — по Коду. В этой статье мы подробно разберем, как решить эту задачу в конфигурации «Конвертация данных 2.1», учитывая специфику платформы 7.7.

Проблема стандартного подхода «Поля поиска»

В платформе 8.3 мы привыкли использовать событие Поля поиска в ПКО (Правилах конвертации объектов). Это гибкий инструмент, позволяющий программно описывать логику сопоставления объектов. Однако при выгрузке в 1С 7.7 этот механизм не работает в привычном виде. Обработка загрузки для 7.7 (V77Imp.ert) имеет жестко заданный алгоритм, который ориентируется на галочки «Поиск», проставленные у свойств в ПКО. Нам нужно найти способ обойти это ограничение.

Решение №1: Использование нескольких ПКО (Рекомендуемый метод)

Рассмотрим самый надежный и простой в реализации способ — разделение правил конвертации для разных типов контрагентов. Вместо того чтобы пытаться заставить одно правило работать по-разному, мы создадим два специализированных правила.

Шаг 1. Создание ПКО

Проанализируем структуру справочника Контрагенты и создадим два правила:

  1. Контрагенты_ЮрЛица: В настройках этого правила у свойства ИНН установим флаг «Поиск». Все остальные флаги поиска (включая Код и Наименование) должны быть сняты.
  2. Контрагенты_ФизЛица: Здесь, наоборот, установим флаг «Поиск» только у свойства Код.

Шаг 2. Программное переключение правил

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


// Проверяем тип контрагента в источнике (1С 8)
Если Источник.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо Тогда
    ИмяПКО = "Контрагенты_ЮрЛица";
Иначе
    ИмяПКО = "Контрагенты_ФизЛица";
КонецЕсли;

Этот подход гарантирует, что при загрузке в 7.7 система будет использовать именно те поля поиска, которые определены в выбранном ПКО.

Решение №2: Реализация поиска через событие «При загрузке» на стороне 7.7

Если по каким-то причинам плодить ПКО нежелательно (например, из-за сложной иерархии или большого количества зависимых правил), мы можем реализовать поиск кодом на языке 1С 7.7. Важно помнить, что в момент загрузки в 7.7 у нас нет доступа к Источнику (объекту 8-ки), но у нас есть данные, которые пришли в файле.

Алгоритм действий:

  1. Передадим признак типа контрагента через дополнительный параметр.
  2. В ПКО Контрагенты в обработчике При загрузке (который выполняется на стороне 7.7) напишем код поиска.

Пример кода для обработчика При загрузке (синтаксис 7.7):


// Объект — это создаваемый или найденный элемент справочника в 7.7
// ПараметрыОбъекта — структура с переданными данными

СпрК = СоздатьОбъект("Справочник.Контрагенты");
Если ПараметрыОбъекта.Получить("ЭтоЮрЛицо") = 1 Тогда
    // Пытаемся найти по ИНН
    Если СпрК.НайтиПоРеквизиту("ИНН", ПараметрыОбъекта.Получить("ИНН"), 1) = 1 Тогда
        Объект = СпрК.ТекущийОбъект();
    КонецЕсли;
Иначе
    // Пытаемся найти по коду
    Если СпрК.НайтиПоКоду(ПараметрыОбъекта.Получить("Код"), 0) = 1 Тогда
        Объект = СпрК.ТекущийОбъект();
    КонецЕсли;
КонецЕсли;

Чтобы стандартный поиск 7.7 не перезаписал наш результат, можно использовать флаги управления загрузкой, предусмотренные в обработке V77Imp.ert.

Важные нюансы при работе с 1С 7.7

Рассмотрим специфические моменты, которые могут помешать корректному поиску, даже если код написан правильно:

Резюме

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

← На главную