Как перенести ИНН и КПП контрагентов из 1С 7.7 ТиС в 1С 8.3 УНФ через Конвертацию данных

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

Перенос данных из устаревших систем на платформе 1С:Предприятие 7.7 в современные конфигурации на 8.3, такие как Управление нашей фирмой (УНФ), всегда сопряжен с архитектурными различиями. Одной из наиболее частых проблем является перенос реквизитов ИНН и КПП для справочника Контрагенты. В данной статье мы детально разберем, как преодолеть разницу в структурах этих баз и правильно настроить правила в Конвертации данных 2.1 (КД 2.1).

Анализ структуры данных: в чем главная сложность?

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

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

Решение 1: Использование глобальных функций для разбора строки ИНН/КПП

Рассмотрим первый способ. В 7.7 ИНН и КПП часто хранятся в одной строке, разделенной символом «/» или «\». Чтобы корректно передать их в разные реквизиты 8.3, нам потребуются функции парсинга. Мы можем использовать встроенные в конфигурацию ТиС функции или написать свои в обработчиках КД.

Разберем пример функции для выделения ИНН:


Функция глПолучитьИНН(ИННКПП) Экспорт
    поз = Найти(ИННКПП, "\");
    Если поз <> 0 Тогда
        Возврат Лев(ИННКПП, поз - 1);
    Иначе
        поз = Найти(ИННКПП, "/");
        Если поз <> 0 Тогда
            Возврат Лев(ИННКПП, поз - 1);
        Иначе
            Возврат СокрЛП(ИННКПП);
        КонецЕсли;
    КонецЕсли;
КонецФункции

И аналогично для КПП:


Функция глПолучитьКПП(ИННКПП) Экспорт
    поз = Найти(ИННКПП, "\");
    Если поз <> 0 Тогда
        Возврат Сред(ИННКПП, поз + 1);
    Иначе
        поз = Найти(ИННКПП, "/");
        Если поз <> 0 Тогда
            Возврат Сред(ИННКПП, поз + 1);
        Иначе
            Возврат "";
        КонецЕсли;
    КонецЕсли;
КонецФункции

Эти функции позволяют нам получить «чистые» значения, которые примет УНФ без ошибок валидации.

Решение 2: Настройка Правил Конвертации Свойств (ПКС)

Выясним, как реализовать обращение к данным в самой Конвертации данных. Самый гибкий вариант — прописать код в обработчике Перед выгрузкой для конкретного свойства в Правилах Конвертации Объектов (ПКО) для справочника Контрагенты.

Пошагово это выглядит так:

  1. В КД найдите ПКО Контрагенты.
  2. Добавьте ПКС для реквизита ИНН.
  3. В качестве источника оставьте пустое поле, так как мы будем заполнять его программно.
  4. В обработчике "Перед выгрузкой" напишите следующий код:

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

Аналогично поступим для КПП, используя функцию глПолучитьКПП. Обратите внимание, что в 1С 7.7 доступ к атрибутам объекта осуществляется через точку, даже если тип реквизита ЮрФизЛицо неопределен (система выполнит позднее связывание).

Решение 3: Использование произвольной выборки в ПВД

Рассмотрим более сложный, но производительный метод — использование Правил Выгрузки Данных (ПВД) с произвольным алгоритмом. Этот метод хорош тем, что мы можем один раз собрать все необходимые данные запросом или циклом, сформировать таблицу и передать её на вход ПКО.

В ПВД для контрагентов установите способ выборки «Произвольный алгоритм». В обработчике Перед обработкой мы можем сформировать таблицу значений:


ВыборкаДанных = СоздатьОбъект("ТаблицаЗначений");
ВыборкаДанных.НоваяКолонка("Ссылка");
ВыборкаДанных.НоваяКолонка("Наименование");
ВыборкаДанных.НоваяКолонка("ИНН");
ВыборкаДанных.НоваяКолонка("КПП");
ВыборкаДанных.НоваяКолонка("ВидКонтрагента");

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

Важно помнить: при использовании ВыборкаДанных в ПВД, в ПКО необходимо будет указать, что поиск и заполнение реквизитов ведется по входящим данным.

Особенности заполнения реквизита «Вид контрагента» в УНФ

Проанализируем важный нюанс: в 1С:УНФ для корректной работы обязательно должен быть заполнен реквизит ВидКонтрагента. Это перечисление, которое может принимать значения: ЮрЛицо, ФизЛицо, ИндивидуальныйПредприниматель или ГосударственныйОрган.

Поскольку в 7.7 ТиС нет прямого аналога этого перечисления, мы должны вычислить его на основе метаданных. Если ЮрФизЛицо.Вид() возвращает "ФизЛица", в УНФ следует передавать ФизЛицо. Если "ЮрЛица" — соответственно, ЮрЛицо. Для Индивидуальных предпринимателей в 7.7 часто не выделяли отдельный справочник, поэтому признак ИП можно определять по длине ИНН (12 знаков) или по наличию определенных слов в наименовании.

Очистка данных и борьба с дублями

Посмотрим на ситуацию с качеством данных. В базе 7.7 пользователи часто вводили ИНН с пробелами, тире или другими лишними знаками. В 8.3 встроенные механизмы проверки контрагентов могут блокировать запись таких объектов.

Рекомендуем добавить в правила выгрузки функцию очистки строки от нецифровых символов:


Функция ОчиститьИНН(Знач Стр)
    Результат = "";
    Для к = 1 По СтрДлина(Стр) Цикл
        Символ = Сред(Стр, к, 1);
        Если Найти("0123456789", Символ) > 0 Тогда
            Результат = Результат + Символ;
        КонецЕсли;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Также стоит уделить внимание поиску объектов. Если в 7.7 несколько карточек контрагентов ссылаются на одно и то же ЮрФизЛицо, в УНФ могут возникнуть дубли. Чтобы этого избежать, в Настройках поиска ПКО рекомендуется установить приоритет поиска по ИНН + КПП, а не только по внутреннему идентификатору (GUID).

Заключение

Мы разобрали основные подходы к переносу данных из 1С 7.7 ТиС в 1С 8.3 УНФ. Ключ к успеху здесь — правильное обращение к подчиненным справочникам через ЮрФизЛицо и предварительная обработка строк. Используя предложенные алгоритмы в обработчиках ПКС или ПВД, вы сможете обеспечить чистоту и корректность переносимой нормативно-справочной информации.

← На главную