Почему не выгружается ИНН при переносе данных из 1С:ТиС 7.7 в 1С:Бухгалтерию 8.3 через Конвертацию данных?

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

При настройке правил обмена в конфигурации «Конвертация данных 2.x» (КД) для переноса справочника «Контрагенты» из «1С:Торговля и Склад 7.7» в «1С:Бухгалтерия предприятия 8.3» часто возникает ситуация: обработчик события «Перед выгрузкой» для реквизита ИНН написан без ошибок, однако в результирующем файле или в базе-приемнике поле остается пустым. При этом выгрузка проходит без сообщений об ошибках.

Разберем детально причины такого поведения, архитектурные особенности платформы 1С 7.7 и правильные способы извлечения ИНН и КПП из строкового реквизита источника.

Главная причина: отсутствие компиляции модуля выгрузки для 1С 7.7

Проанализируем ключевое отличие механизмов выгрузки между платформами 1С:Предприятие 8 и 1С:Предприятие 7.7. В платформе 8.x код алгоритмов и обработчиков правил конвертации может компилироваться динамически прямо из файла правил .xml. В платформе 7.7 отсутствует штатная функция динамического исполнения произвольного программного кода (аналог метода Выполнить()).

По этой причине обработка выгрузки для 7.7 (обычно V77Exp.ert) не может исполнять код обработчиков непосредственно из загруженного XML-файла. Для того чтобы написанный в «Конвертации данных» код заработал, выполним следующие шаги:

  1. В конфигурации «Конвертация данных» после изменения любых обработчиков выгрузки или алгоритмов откроем меню выгрузки правил и выберем пункт выгрузки модуля обработки для 7.7.
  2. Сохраним сформированный текст модуля или скопируем его в буфер обмена.
  3. Запустим конфигурацию «1С:Торговля и Склад 7.7» в режиме Конфигуратора.
  4. Откроем внешнюю обработку выгрузки (V77Exp.ert), перейдем в ее программный модуль и полностью заменим исходный текст на выгруженный из КД.
  5. Сохраним обработку V77Exp.ert.

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

Очистка реквизита-источника в ПКС

Посмотрим на настройку Правила конвертации свойства (ПКС) для реквизита ИНН в «Конвертации данных». Если значение реквизита формируется программно в обработчике «Перед выгрузкой» через переменную Значение, поле «Источник» в строке ПКС необходимо оставить пустым.

Если в поле источника оставить ссылку на реквизит (например, ЮрФизЛицо.ИНН), механизм выгрузки может автоматически перезаписать результат вычислений прямым считыванием реквизита из базы данных.

Варианты программного разбора ИНН и КПП в 1С:ТиС 7.7

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

Вариант 1. Использование типовых функций глобального модуля 7.7

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


Если Источник.ЭтоГруппа() = 0 Тогда
    Значение = глПолучитьИНН(Источник.ЮрФизЛицо.ИНН);
Иначе
    Отказ = 1;
КонецЕсли;

Аналогично в ПКС для реквизита КПП в обработчике «Перед выгрузкой» используем:


Если Источник.ЭтоГруппа() = 0 Тогда
    Значение = глПолучитьКПП(Источник.ЮрФизЛицо.ИНН);
Иначе
    Отказ = 1;
КонецЕсли;

Вариант 2. Ручной разбор строки с поддержкой разных разделителей

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


Если Источник.ЭтоГруппа() = 0 Тогда
    СтрИНН = СокрЛП(Источник.ЮрФизЛицо.ИНН);
    ПозСлэш = Найти(СтрИНН, "/");
    
    Если ПозСлэш = 0 Тогда
        ПозСлэш = Найти(СтрИНН, "\");
    КонецЕсли;
    
    Если ПозСлэш > 0 Тогда
        Значение = Лев(СтрИНН, ПозСлэш - 1);
    Иначе
        Значение = СтрИНН;
    КонецЕсли;
Иначе
    Отказ = 1;
КонецЕсли;

Особенности заполнения реквизитов в «1С:Бухгалтерия предприятия 8.3»

При загрузке данных в конфигурацию БП 8.3 важно учитывать правила валидации:

  1. Длина реквизитов: Для юридических лиц ИНН должен содержать 10 цифр, а КПП — 9 цифр. Для физических лиц и индивидуальных предпринимателей длина ИНН составляет 12 цифр, а реквизит КПП должен оставаться пустым.
  2. Тип контрагента: Убедимся, что настроена конвертация реквизита ЮридическоеФизическоеЛицо (перечисление ЮрЛицо, ФизЛицо, ИндивидуальныйПредприниматель). Если тип лица определен неверно, типовые алгоритмы проверки при записи объекта в 1С 8.3 могут очистить невалидный ИНН.
  3. Отладка выгрузки: Для контроля промежуточных результатов на стороне 7.7 вставим в обработчик команду Сообщить("ИНН: " + Значение); и убедимся после обновления V77Exp.ert, что сообщения выводятся в окно сообщений при выгрузке.
← На главную