Доработка конвертации данных КД2 (версии 2.1). Расширенная диагностическая информация при выгрузке по правилам из 1С 7.7 и при загрузке в 1С 7.7







Есть очень неприятная особенность при настройке обмена по правилам КД2 в момент отладки на стороне 1С 7.7, как при выгрузке из 1С 7.7, так и при загрузке в 1С 7.7. Непонятно, в каком конкретно месте формирования или разбора данных XML файла в какой именно момент споткнулась программа (произошел сбой). Я нашел способ вывода дополнительной диагностики, теперь точно известно, на каком элементе данных XML споткнулся модуль выгрузки V77Exp.ert (модуль загрузки V77Imp.ert). Теперь отладка правил обмена на стороне 1С 7.7 стала простой, выполняется на порядок проще.

Допустим мы где-то в правилах допустили опечатку в коде на встроенном языке.

В этом случаепри открытии формы обработки "V77Exp.ert" мы получим сообщение об ошибке:

Сообщать<<?>>("Способ задания цены =" + Значение)
{….CONVERSIONV77EXP.ERT(12199)}: Процедура не обнаружена (Сообщать)

Тут все понятно по-русски написано, открыв модуль сразу ясно что и где исправлять. В реальной же жизни отлаживать правила конвертации сложно. Ошибка в модуле выгрузки V77EXP.ERT или загрузки V77IMP.ERT, когда алгоритм не спотыкается, а просто ругнется на каком-то одном неизвестном объекте или свойстве где-нибудь в середине XML-файла, или вообще не покажет ошибку. Куда смотреть — не понятно. Трассировать? {….CONVERSIONV77EXP.ERT(12199)} — трассировать можно до утра, эти модули довольно объемные и трассировать их не всегда приемлемо.

Чаще всего при отладке правил конвертации происходит ошибка логическая, и она может проявляться не у всех элементов, а на каком-то неизвестном элементе данных в зависимости от сложившейся последовательности предыдущих итераций обработчиков цепочки разбора XML. Детерминировать такую ошибку мешает отсутствие подробной диагностической информации о происходящих в обработке событиях. Поясняю на примере.

Прежде всего смоделируем решаемую проблему.

Намеряно внесем в конвертацию ошибку, от которой выгрузка данных прервется с непонятным сообщением об ошибке. Пусть в некотором алгоритме не передается ожидаемый элемент структуры во входящие данные.

Где-то в другом обработчике этот элемент должен был использоваться но теперь уже программа работает не правильно, создает нам бракованную XML-ку, и теперь прийдется повозиться, чтобы выяснить где собака порылась. Ведь робот на комментарии скуп, "  — Значение не представляет агрегатный объект (Код)" и всё.

 

 Под спойлером стандартные комментарии выгрузки

На форме обработки выгрузки выведен флажок "Комментировать выгрузку объектов".  Если его активировать, увидим какой объект в данный момент выгружается, но не увидим какое конкретно выгружается мвойство и в каком порядке, а их там тьма.

 

 Комментарии выгрузки если включить "Комментировать выгрузку объектов"

Ошибка исполнения обработчика:  ПКС_ПередВыгрузкой_ОперацияБух_Содержание_Реквизит4
Взглянем на код. Это еще надо знать что значит комментарий:  ПКС_ПередВыгрузкой_ОперацияБух_Содержание_Реквизит4, как он преврящается в конвертации в элемент ПКС ПКС_ОперацияБух_Содержание_ПередВыгрузкойСвойства_4_11.

А если не знать как трактовать какой-то комментарий или если случай подвернется более сложный? Вон "Ошибка получения свойства из объекта коллекции. Свойство: КОплате" откуда взялось вообще? Можно открыть XML-ку и пошарить в ней, но это всё равно будет на угад. Таким образом назрела необходимость расширить диагностические сообщения, и это возможно.

Доработка конвертации данных КД2 (версии 2.1). Расширенная диагностическая информация при выгрузке по правилам из 1С 7.7.

В проблемное место конвертации добавим обработку, если установлено "Комментировать выгрузку объектов".

 

 Доработка модуля объекта обработки выгрузки конвертации

При установке флажка появятся диагностические сообщения следующего рода,

Сообщить(""" + ИмяОбработчика + """);

которые сделают сообщения об ошибках гораздо нагляднее, во много раз упростят разработку правил.

 

 Пример вывода расширенных диагностических сообщений в "комментировать выгрузку объектов"

Согласитесь, комментарии стали гораздо понятнее.

И еще один момент, на форму элемента справочника конвертаций я добавил ГУИД, чтобы была однозначность когда несколько раз выгружаем и загружаем несколько вариантов конвертации в одну базу.

    GUID = СокрЛП(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
    ЭлементыФормы.GUID.Значение = GUID;

Что касается модуля загрузки данных, в конвертации данных в его комментарий указаны локальные и глобальные обработчики, можно повесить на флажок "ФормФлРежимОтладки", аналогичное диагностическое сообщение для локальных и/или глобальных обработчиков событий ПослеЗагрузкиОбъекта, ПослеЗагрузки, ПередЗагрузкойОбъекта, ПередЗагрузкой, ПередЗагрузкойДанных, ПослеЗагрузкиДанных.

//Космачев+
Результат.ЗаписатьСтроку("Если ФормФлРежимОтладки=1 Тогда Сообщить(""" + ИмяПравила + """); КонецЕсли;");
//Космачев-

В КД2 обмен с 7.7 реализован не идеально, и пользователи сообщества "Инфостарт" уже предлагали свои доработки и исправления для иодулей выгрузки и загрузки V77Exp.ert и V77Imp.ert, например:

Обработка "Выгрузка конвертации" для КД 2.1.8.2 + GCOMP + исправлена ошибка отсутствия отбора по периоду в ПВД документов со способом выборки "Стандартная обработка" //infostart.ru/public/319649/

Исправлена ошибка, приводящая к неработоспособности модуля обработки загрузки данных на платформе 7.7 //infostart.ru/public/267853/

(ошибка есть в конвертации 2.1.8.2 "Если ИдРеквизита <> "ДатаДок" ИЛИ ИдРеквизита <> "ПометкаУдаления" Тогда")

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

"Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8407)}: Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML:  — [384,17899536]
Фатальная ошибка:
PCDATA invalid Char value 2
SystemId: file:////путь/114.xml"

Данную ситуацию можно выявить и исправить путем сравнения выгружаемого и исправленного файлов. Код выявления ошибки PCDATA invalid Char value 2:

 

 Этот модуль исправления надо включить в обработку либо выполнить в консоли произвольного кода

Сравните исправленный код с выгруженным и Вы поймете, где произошла ошибка.

На Инфостарте ест пара обработок на эту тему для тех, кто не может разобраться сам:

//infostart.ru/public/286257/ и //infostart.ru/public/677885/

У меня пока еще мало опыта с загрузкой КД2 в 7.7, разберусь подробнее — статью дополню. А Вы пользуететь подобными приемами при отладке правил конвертации?

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *