Отладка конвертации данных 2.1 в конфигурациях, построенных на БСП 2.1 (БП 3.0, УТ 11 etc.)

Опубликовал Владимир Попов (NittenRenegade) в раздел Программирование - Практика программирования

Отладка процесса выгрузки/загрузки данных при проведении синхронизации в новых конфигурациях 1С может вызвать (у меня вызвала) некоторые затруднения. О них и пойдёт речь.

Отладка выгрузки и загрузки затрудняется двумя аспектами.

Первый: загрузка по умолчанию происходит в фоновом режиме, а это препятствует использованию отладчика.

Второй: сама обработка не очень-то банально подключается.

 

Как настроить синхронизацию между базами, я описывать не буду, процесс этот несложный. Поэтому ниже будет описана непосредственно технология отладки загрузки данных из Управления небольшой фирмой ред.1.4 (1.4.9.49) в Бухгалтерию предприятия 3.0 (3.0.42.37).  Стандартного обмена между этими версиями не существует, поэтому пример самый что ни на есть живой. Smile

Для того, чтобы загрузка данных происходила не в фоновом режиме, нужно, чтобы параметр сеанса в базе приёмнике ПараметрыКлиентаНаСервере (фиксированное соответствие) содержал строку "РежимОтладки". В конфигураторе базы приёмника заходим в меню Сервис / Параметры, где на вкладке "Основные" прописываем соответствующий параметр в поле "Параметр запуска":

 Параметры запуска 1С Предприятия

Если после этого шага попытаться отладить загрузку при помощи функции отладчика "Остановка по ошибке" можно увидеть, как ошибка, которую мы ловим, возникает в операторе "Выполнить", куда передается текст одного из обработчиков конвертации. Как правило, этого бывает недостаточно. Большинство процедур и функций конвертации сосредоточено среди вызываемых алгоритмов. В конвертации они располагаются на закладке "Алгоритмы\Запросы" настройки правил обмена.

Для того, чтобы проходить отладчиком непосредственно по алгоритмам конвертации, используются внешние обработки, которые, подобно библиотекам, содержат процедуры обработчиков данных. Чтобы создать такую, идём в конфигуратор, там создаём простую внешнюю обработку и называем её как придётся. В модуль объекта обработки добавляем текст обработчиков, который выгружается непосредственно из конвертации данных.  В версии КД  2.1.8.1 для  этого используется меню "Отладка обработчиков" настройки правил обмена. В своём примере я отлаживал загрузку, соответственно пользовался пунктом  "Сформировать модуль обработчиков загрузки":

Формирование модуля обработчиков загрузки

Содержимое открывшегося окна нужно скопировать и вставить в нашу обработку как есть.

Таким образом, модули для отладки у нас готовы. Однако это ещё не всё. В свойствах самой конвертации на вкладке "Дополнительно" нужно установить режим совместимости "Не использовать":

 Настройка конвертации данных

Режим совместимости выставляется для предыдущей версии БСП, а потому не позволит воспользоваться нашими правилами в новых конфигурациях.

Есть ещё один, неприятный аспект. При загрузке в приёмнике, обработка КонвертацияОбъектовИнформационныхБаз оперирует переменной "ОбработкаЗагрузки". В этой переменной она ожидает увидеть внешню обработку с библиотекой обработчиков загрузки. Вот только у меня почему-то упорно не хотела видеть. Функция для заполнения переменной есть, но почему она остается не у дел, я не стал разбираться слишком упорно. Добавил её вызов в процедуру "ВыпонитьАнализСообщенияОбмена" и всё стало работать.  Таким образом, возможно что в вашем релизе всё будет работать. Если не будет - делаем копию базы, разрешаем себе вносить изменения в конфигурациюSmile, устанавливаем для обработки правило поддержки отличное от "Не редактируется" и решительно делаем следующие правки модуля объекта:

 Правка модуля объкта обработки конвертации в приёмнике

Дело осталось за малым: настроить загрузку данных и произвести её, воспользовавшись отладчиком! В базе приёмнике находим регистр "Правила для обмена данными", где ищем вид правил "Правила конвертации объектов" с нужным нам именем правила. Открыв запись регистра, выставляем галочку "Включить режим отладки", где указываем созданную ранее обработку для отладки и не забываем загрузить нужные правила обмена. Правила подаются упакованными в zip-архив, само правило должно иметь имя "ExchangeRules.xml", правила для отправки данных обратно помещаются в файл "CorrespondentExchangeRules.xml" архива.

Настройка правил обмена приёмника

Готово!

Проводим синхронизацию на стороне источника.

Запускаем базу приёмника через конфигуратор.

Заходим в общий модуль РаботаВБезопасномРежиме, процедура ВыполнитьМетодОбъекта оттуда получаем вход в нашу обработку с отладчиком.

Запускаем базу на отладку (я запускал в режиме толстого клиента).

???????

PROFIT!!!

См. также

Комментарии
1. ivanov660 ivanov660 (ivanov660) 330 02.11.15 23:01 Сейчас в теме
2. Владимир Попов (NittenRenegade) 60 03.11.15 13:44 Сейчас в теме
(1) ivanov660, не приходилось. На сколько я понимаю, за работу с универсальным форматом отвечает подсистема БСП ОбменДаными
3. Владислав Агеев (badKillerMan) 08.01.16 20:24 Сейчас в теме
Огромное спасибо. Уже несколько раз пытался провалиться в отладку и не хватило терпения разобраться на выдаваемые ошибки. А тут так приперло... не мог понять почему поля поиска не срабатывают. Благодаря статье нашел ошибку. Спасибо помогло.
4. Владислав Агеев (badKillerMan) 08.01.16 20:34 Сейчас в теме
(1) ivanov660, Начинаются занятия и есть несколько бесплатных видео на http://курсы-по-1с.рф/1c-v8/dataconv-3/startpage/ И где-то были бесплатные видео на этом сайте.
5. Владимир Попов (NittenRenegade) 60 09.01.16 19:55 Сейчас в теме
(3) badKillerMan, чертовски рад, что статья оказалась полезной! На выяснение обстоятельств и саму статью ушло порядочно времени))
KazanKokos; +1 Ответить
6. Владимир Попов (NittenRenegade) 60 09.01.16 19:58 Сейчас в теме
По конвертации 3.0 я видел несколько вводных видео, где давалось общее представление о предмете. Любопытно конечно!
7. anton popov (dexxxqqq) 05.01.17 01:08 Сейчас в теме
Спасибо. Дошел до самого конца статьи и встрял. Что значит "Заходим в общий модуль РаботаВБезопасномРежиме, процедура ВыполнитьМетодОбъекта оттуда получаем вход в нашу обработку с отладчиком"? Не понимаю что надо сделать.
8. Владимир Попов (NittenRenegade) 60 06.01.17 11:48 Сейчас в теме
(7) Имеется ввиду общий модуль конфигурации-приемника. Его наименование "РаботаВБезопасномРежиме". Ставим точку останова в процедуре "ВыполнитьМетодОбъекта". При выполнении загрузки оттуда будут происходить вызовы функций в нашей внешней обработке и можно будет в отладчике пройти их построчно.
Возможно что-то в парадигме изменилось за минувший год, я уже давненько не пользовался этим методом.
9. anton popov (dexxxqqq) 06.01.17 14:08 Сейчас в теме
(8)
Ставим точку останова в процедуре "ВыполнитьМетодОбъекта".


Спасибо большое. Теперь понятно
10. anton popov (dexxxqqq) 06.01.17 23:45 Сейчас в теме
(8) В парадигме старой конвертации ничего не изменилось, единственное, что мне помешало: платформа 8.3.9, пришлось в настройках пользователя в конфигураторе снять галку "Защита от опасных действий", так как выполнение внешней обработки все время прерывалось из-за этой защиты. Может кому пригодится.
11. Максим Сухов (MaxS) 229 07.01.17 06:13 Сейчас в теме
Ещё один вариант отладки: берем тестовые файловые базы, добавляем общий модуль Отладка, в правилах в тот месте, где нужно отладить часть кода пишем вызов процедуры из этого общего модуля, после отладки переносим код в правила...
Тестируем на базах, где нет этого общего модуля (чтобы проверить, что ничего не забыли)...
12. Анатолий Лукьянов (KazanKokos) 8 31.03.17 16:42 Сейчас в теме
Достаточно оказалось первого абзаца. Спасибо огромное :)