Как настроить выгрузку нетипового документа из 1С:Бухгалтерии 7.7 в 1С:Бухгалтерию 8.3 через Конвертацию данных?

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

Перенос данных между устаревшей платформой 1С:Предприятие 7.7 и современными конфигурациями на платформе 1С:Предприятие 8.3 — классическая задача при модернизации учетных систем. При переносе нетиповых документов через конфигурацию Конвертация данных 2.1 разработчики часто сталкиваются с ситуацией, когда документы переносятся пустыми, дублируются элементы справочников или возникают ошибки несоответствия типов данных (ИмяТипа). Рассмотрим причины этих проблем и разберем пошаговые способы их решения.

Анализ основных причин ошибок при переносе из 7.7 в 8.3

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

  1. Отсутствие глобальных уникальных идентификаторов (GUID/UUID) в 1С 7.7: В платформе 7.7 объекты адресуются внутренними идентификаторами базы данных, отличными от стандарта UUID платформы 8.x. Поэтому флаг Искать объект приемника по внутреннему идентификатору объекта источника в ПКО для объектов 7.7 недоступен или приводит к ошибкам. Поиск должен выполняться строго по полям поиска (код, наименование, ИНН, дата и номер).
  2. Несовпадение базовых типов данных: В 1С 7.7 булевы значения и пометки удаления хранятся и обрабатываются как числа (0 и 1), тогда как в 1С 8.3 используется строгий тип Булево. Номера документов в 7.7 могут иметь числовой тип или содержать префиксы, требующие явного приведения к строке.
  3. Специфика выгрузки табличных частей и свойств: В 7.7 пометка удаления — это метод Источник.ПометкаУдаления(), а не прямое свойство объекта, как в 8.3. Попытка прочитать его напрямую без обработчика приводит к пустому значению.

Способ 1. Корректная настройка Правил Конвертации Объектов (ПКО) и Свойств (ПКС)

Рассмотрим, как правильно настроить конвертацию свойств документа, чтобы исключить ошибки типов данных и обеспечить перенос реквизитов.

  1. Настройка поиска справочников и предотвращение дублей:

    Для всех сопутствующих справочников (Контрагенты, ДоговорыКонтрагентов, Номенклатура) в их ПКО необходимо включить флаги поиска по ключевым реквизитам (например, ИНН + КПП или Код + Наименование).

    Чтобы исключить перезапись уже существующей в 8.3 нормативно-справочной информации, на закладке Настройки в ПКО справочников взведите флаг Не замещать существующие объекты в приемнике (только создавать новые).

  2. Корректное приведение типов в ПКС документа:

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

    Для номера документа приведите значение к строке:

    Значение = СокрЛП(Источник.НомерДок);

    Для пометки удаления вызовите соответствующий метод 7.7 с преобразованием результата:

    Значение = ?(Источник.ПометкаУдаления() = 1, 1, 0);

    Для булевых реквизитов (флагов проведения или признаков учета):

    Значение = ?(Источник.УчитыватьНДС = 1, 1, 0);
  3. Выгрузка табличной части документа:

    Если структура табличной части в источнике 7.7 отличается от приемника 8.3, в ПКС табличной части документа в обработчике Перед выгрузкой сформируйте и передайте таблицу данных:

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

    Если стандартная выборка выгружает 0 объектов, переключите способ выборки в ПВД на Произвольный алгоритм и выполните явный обход документов:

    
    Док = СоздатьОбъект("Документ.ОказаниеУслуг");
    Док.ВыбратьДокументы(ДатаНачала, ДатаКонца);
    Пока Док.ПолучитьДокумент() = 1 Цикл
        ВыгрузитьПоПравилу(Док, , , , "ОказаниеУслуг_Приемник");
    КонецЦикла;
    

Способ 2. Перенос данных через прямое COM-соединение

Если перенос является разовым и разработка сложных XML-правил в Конвертации данных нецелесообразна, эффективным решением будет прямая загрузка данных из базы 7.7 с помощью внешней обработки в 1С 8.3 через объект COMОбъект.

Рассмотрим пример кода внешней обработки для 1С 8.3, которая подключается к информационной базе 7.7 и создает документы РеализацияТоваровУслуг (вид операции Услуги):


// Инициализация COM-соединения с базой 1С 7.7
База77 = Новый COMОбъект("V77.Application"); // Для SQL-версии: "V77S.Application"
КаталогИБ = "C:\Bases\Accounting77\";
ПараметрыПодключения = "/D""" + КаталогИБ + """ /N""Администратор"" /P""Пароль""";

Если Не База77.Initialize(База77.RMTrade, ПараметрыПодключения, "NO_SPLASH_SHOW") Тогда
    ВызватьИсключение "Не удалось подключиться к базе 1С:Предприятия 7.7";
КонецЕсли;

Док77 = База77.CreateObject("Документ.ОказаниеУслуг");
Док77.ВыбратьДокументы(ПериодС, ПериодПо);

Пока Док77.ПолучитьДокумент() = 1 Цикл
    // Создаем новый документ в приемнике 1С 8.3
    НовыйДок83 = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    НовыйДок83.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваровУслуг.Услуги;
    НовыйДок83.Дата = Док77.ДатаДок;
    НовыйДок83.Номер = СокрЛП(Док77.НомерДок);
    
    // Поиск контрагента по ИНН/КПП или наименованию
    ИНН_77 = СокрЛП(Док77.Клиент.ИНН);
    НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН_77);
    Если ЗначениеЗаполнено(НайденныйКонтрагент) Тогда
        НовыйДок83.Контрагент = НайденныйКонтрагент;
        НовыйДок83.ДоговорКонтрагента = НайденныйКонтрагент.ОсновнойДоговорКонтрагента;
    КонецЕсли;
    
    // Заполнение табличной части Услуги
    Док77.ВыбратьСтроки();
    Пока Док77.ПолучитьСтроку() = 1 Цикл
        СтрокаТЧ = НовыйДок83.Услуги.Добавить();
        
        НаименованиеУслуги = СокрЛП(Док77.Услуга.Наименование);
        СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеУслуги);
        СтрокаТЧ.Количество = Док77.Количество;
        СтрокаТЧ.Цена = Док77.Цена;
        СтрокаТЧ.Сумма = Док77.Сумма;
    КонецЦикла;
    
    Попытка
        НовыйДок83.Записать(РежимЗаписиДокумента.Запись);
    Исключение
        Сообщить("Ошибка при записи документа: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

Рекомендации по выгрузке правил в 1С 7.7

Если обработка выгрузки V77Exp.ert перестает загружать обновленный файл правил обмена:

  1. Проверьте синтаксис встроенного языка: В обработчиках Конвертации данных, исполняемых на стороне источника (7.7), категорически запрещено использовать конструкции платформы 8.x (например, ЗначениеЗаполнено(), Новый Структура, СтрШаблон()).
  2. Проверьте XML-парсер MSXML: Обработка выгрузки 7.7 использует системную библиотеку MSXML. Убедитесь, что правила сохранены в стандартной кодировке Windows-1251 без спецсимволов и управляющих последовательностей.
← На главную