При организации обмена между 1С:Предприятием 8 и 1С 7.7 разработчики часто сталкиваются с ситуацией, когда данные из сформированного XML-файла загружаются стандартной обработкой V77imp.ert, однако написанные в конфигурации «Конвертация данных 2.1» (КД 2.1) алгоритмы и события (например, ПослеЗагрузки, ПередВыгрузкой) полностью игнорируются, а флаг «Режим отладки» не останавливает выполнение программы. Разберем причины такого поведения и подробно рассмотрим, как правильно организовать отладку кода на стороне 1С 7.7.
Проанализируем ключевое архитектурное различие между платформами 1С:Предприятие 8 и 1С 7.7:
Выполнить().Если выгрузить данные из 1С 8 и просто скормить их типовой обработке V77imp.ert, платформа выполнит только прямое сопоставление реквизитов, описанных в метаданных. Все процедуры событий физически отсутствуют в коде обработки, поэтому вызовы ПослеЗагрузки либо пропускаются, либо завершаются сообщением об отсутствии функции.
Чтобы задействовать весь функционал правил конвертации и получить возможность пошаговой трассировки, выполним следующие действия:
V77imp.ert.V77imp.ert.Для ускорения процесса постоянной доработки правил можно использовать директиву препроцессора. Рассмотрим, как подключить внешний текстовый файл модуля напрямую, чтобы не вставлять код вручную при каждом изменении:
#ЗагрузитьИзФайла C:\Exchange\V77RulesModule.txt
Важное ограничение: директива #ЗагрузитьИзФайла удобна при регулярной выгрузке, однако для установки интерактивных точек останова непосредственно в строках кода модуль всё равно должен быть сохранен в теле файла V77imp.ert через Конфигуратор 7.7.
Разберем по шагам, как запустить отладку загрузки данных на стороне приемника:
1cv7.exe с параметром запуска или через ярлык «Отладчик»).V77imp.ert и установим точку останова (клавиша F9) внутри нужного обработчика, например, в процедуре события ПослеЗагрузки.V77imp.ert, выберем файл с выгруженными данными, установим флаг «Режим отладки» и нажмем «Загрузить».Для упрощения отладки больших объемов информации рекомендуется в базе-источнике 1С 8 выгружать не весь массив документов, а ограничить выборку одним конкретным проблемным объектом.
При написании логики переноса в КД 2.1 для событий объектов-приемников необходимо строго учитывать синтаксис встроенного языка 1С 7.7. Разберем ключевые отличия от восьмой версии платформы:
СоздатьОбъект(). Поиск по уникальному идентификатору (GUID) из 1С 8 в 7.7 напрямую не поддерживается, поэтому поиск настраивается по полям Код, Наименование, ИНН или НомерДок + ДатаДок.
Спр = СоздатьОбъект("Справочник.Контрагенты");
Если Спр.НайтиПоРеквизиту("ИНН", СокрЛП(ИНН), 1) = 1 Тогда
// Объект найден
КонецЕсли;
Для Каждого. Перебор и добавление осуществляются позиционными методами:
// Добавление строки в табличную часть документа
ДокументОбъект.НоваяСтрока();
ДокументОбъект.Товар = СсылкаНаТовар;
ДокументОбъект.Количество = 10;
Установить() или через объект Периодический:
СпрЦены = СоздатьОбъект("Справочник.Цены");
Если СпрЦены.НайтиПоКоду(КодЦены) = 1 Тогда
СпрЦены.Цена.Установить(ТекущаяДата(), 1500);
КонецЕсли;
Провести().Если проект требует регулярной синхронизации, а сопровождение обработки V77imp.ert и регулярное обновление ее модуля вызывает трудности, рассмотрим другие методы переноса:
База77 = Новый COMОбъект("V77S.Application");
Открыта = База77.Initialize(База77.RMTrade, "/D""C:\Bases\Base77"" /N""Admin""", "NO_SPLASH_SHOW");
Если Открыта Тогда
СпрНом = База77.CreateObject("Справочник.Номенклатура");
СпрНом.Новый();
СпрНом.Наименование = "Новый товар из 8.3";
СпрНом.Записать();
КонецЕсли;
XBase, а на стороне 7.7 пишется компактная целевая обработка чтения DBF без привлечения тяжелого механизма Конвертации данных.