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

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При организации обмена между 1С:Предприятием 8 и 1С 7.7 разработчики часто сталкиваются с ситуацией, когда данные из сформированного XML-файла загружаются стандартной обработкой V77imp.ert, однако написанные в конфигурации «Конвертация данных 2.1» (КД 2.1) алгоритмы и события (например, ПослеЗагрузки, ПередВыгрузкой) полностью игнорируются, а флаг «Режим отладки» не останавливает выполнение программы. Разберем причины такого поведения и подробно рассмотрим, как правильно организовать отладку кода на стороне 1С 7.7.

Почему в 1С 7.7 не работают обработчики событий по умолчанию

Проанализируем ключевое архитектурное различие между платформами 1С:Предприятие 8 и 1С 7.7:

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

Если выгрузить данные из 1С 8 и просто скормить их типовой обработке V77imp.ert, платформа выполнит только прямое сопоставление реквизитов, описанных в метаданных. Все процедуры событий физически отсутствуют в коде обработки, поэтому вызовы ПослеЗагрузки либо пропускаются, либо завершаются сообщением об отсутствии функции.

Пошаговая подготовка обработки V77imp.ert к загрузке и отладке

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

  1. В конфигурации «Конвертация данных 2.1» откроем обработку выгрузки правил. При формировании правил для платформы 7.7 конфигурация формирует не только XML-файл с правилами, но и отдельный текстовый файл с программным кодом модуля обработки загрузки.
  2. Откроем конфигуратор базы-приемника 1С 7.7.
  3. Через меню Файл > Открыть выберем внешнюю обработку V77imp.ert.
  4. Перейдем в модуль формы обработки (вкладка «Модуль») и полностью заменим имеющийся там код на текст, сгенерированный Конвертацией данных.
  5. Сохраним внешнюю обработку V77imp.ert.

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

#ЗагрузитьИзФайла C:\Exchange\V77RulesModule.txt

Важное ограничение: директива #ЗагрузитьИзФайла удобна при регулярной выгрузке, однако для установки интерактивных точек останова непосредственно в строках кода модуль всё равно должен быть сохранен в теле файла V77imp.ert через Конфигуратор 7.7.

Запуск процесса отладки в 1С 7.7

Разберем по шагам, как запустить отладку загрузки данных на стороне приемника:

  1. В платформе 1С 7.7 отладчик реализован как отдельное приложение. Запустим сеанс 1С:Предприятие 7.7 — Отладчик (файл 1cv7.exe с параметром запуска или через ярлык «Отладчик»).
  2. Из отладчика запустим сеанс «1С:Предприятие» в режиме отладки или подключимся к уже запущенному сеансу через меню отладчика.
  3. В окне отладчика откроем модифицированный файл V77imp.ert и установим точку останова (клавиша F9) внутри нужного обработчика, например, в процедуре события ПослеЗагрузки.
  4. В запущенном сеансе «1С:Предприятие» откроем обработку V77imp.ert, выберем файл с выгруженными данными, установим флаг «Режим отладки» и нажмем «Загрузить».
  5. При доходе до нужного объекта управление будет передано в окно отладчика 1С 7.7, где можно просматривать переменные через табло и выполнять пошаговое прохождение кода (клавиши F10, F11).

Для упрощения отладки больших объемов информации рекомендуется в базе-источнике 1С 8 выгружать не весь массив документов, а ограничить выборку одним конкретным проблемным объектом.

Особенности написания кода обработчиков под платформу 1С 7.7

При написании логики переноса в КД 2.1 для событий объектов-приемников необходимо строго учитывать синтаксис встроенного языка 1С 7.7. Разберем ключевые отличия от восьмой версии платформы:

  1. Создание и поиск объектов: для обращения к объектам базы используется метод СоздатьОбъект(). Поиск по уникальному идентификатору (GUID) из 1С 8 в 7.7 напрямую не поддерживается, поэтому поиск настраивается по полям Код, Наименование, ИНН или НомерДок + ДатаДок.
    
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Если Спр.НайтиПоРеквизиту("ИНН", СокрЛП(ИНН), 1) = 1 Тогда
        // Объект найден
    КонецЕсли;
    
  2. Работа с табличными частями: табличная часть в 7.7 не является коллекцией, по которой можно пройтись циклом Для Каждого. Перебор и добавление осуществляются позиционными методами:
    
    // Добавление строки в табличную часть документа
    ДокументОбъект.НоваяСтрока();
    ДокументОбъект.Товар = СсылкаНаТовар;
    ДокументОбъект.Количество = 10;
    
  3. Периодические реквизиты: если реквизит справочника является периодическим, его значение привязывается к дате через метод Установить() или через объект Периодический:
    
    СпрЦены = СоздатьОбъект("Справочник.Цены");
    Если СпрЦены.НайтиПоКоду(КодЦены) = 1 Тогда
        СпрЦены.Цена.Установить(ТекущаяДата(), 1500);
    КонецЕсли;
    
  4. Проведение документов: при стандартной XML-загрузке в 1С 7.7 документы создаются непроведенными. Для их проведения список созданных ссылок собирается в событии загрузки, после чего в глобальном обработчике «После загрузки данных» для каждого документа вызывается метод Провести().

Альтернативные варианты обмена данными

Если проект требует регулярной синхронизации, а сопровождение обработки V77imp.ert и регулярное обновление ее модуля вызывает трудности, рассмотрим другие методы переноса:

  1. Прямое COM/OLE-соединение из 1С 8 в 1С 7.7: весь процесс выгрузки и создания объектов контролируется на стороне 1С 8.x. Это дает возможность полноценно использовать отладчик 1С:Предприятия 8.
    
    База77 = Новый COMОбъект("V77S.Application");
    Открыта = База77.Initialize(База77.RMTrade, "/D""C:\Bases\Base77"" /N""Admin""", "NO_SPLASH_SHOW");
    Если Открыта Тогда
        СпрНом = База77.CreateObject("Справочник.Номенклатура");
        СпрНом.Новый();
        СпрНом.Наименование = "Новый товар из 8.3";
        СпрНом.Записать();
    КонецЕсли;
    
  2. Обмен через промежуточные форматы (DBF / CSV): база 1С 8 формирует таблицы DBF через объект XBase, а на стороне 7.7 пишется компактная целевая обработка чтения DBF без привлечения тяжелого механизма Конвертации данных.
← На главную