Не буду здесь говорить о штатной отладке через внешнюю обработку "ВыгрузкаЗагрузкаДанныхXML8x.epf" - в ней нет ничего сложного, и осваивается она довольно просто. Но не всегда это удобно - и не всегда это применимо, если говорить про online-обмены. Вы можете просмотреть выгрузку штатным способом, с отбором по плану обмена - но результат может быть отличен от того, который получается при непосредственно обмене. Потому что отлаживаемся через внешнюю обработку, а настроенный обмен работает через ряд служебных обработок, механизм которых в нюансах от нее отличен. Также надо иметь в виду, что базы участники обмена могу иметь разные версии БСП. Поэтому может возникнуть такая ситуация, что отлаживались на одном, а видим другое. Как этого избежать? Отлаживаться по контексту. То есть работая непосредственно с штатным механизмом обмена.
Первое, о чем хочется упомянуть - в принципе когда речь заходит о любых обменах на КД 2.0, это разработка Конвертация данных + Контекстная подсказка. Это такой "апгрейд" КД 2.0, на основе инструментов разработчика. Как показывает практика мало кто о ней знает, а инструмент удобнейший. Отнесем это к части рабочего места: синтакс контроль в правилах, а также контекстная подсказка по именам метаданных - очень крутая вещь, рекомендую.
Но только этим роль ИР здесь не заканчивается. Перед тем как читать дальше - рекомендую ознакомится с механизмом отложенной отладки. Если где-то в правилах используется закрученный алгоритм, и хочется посмотреть результат запроса, или таблицу значений - это очень просто реализуется с их помощью. Теперь немного определюсь с понятиями.
В основном здесь будет рассматриваться online обмен по com-соединению от базы "Источник" в базу "Приемник". Основная сложность в разработке правил online обмена состоит в том, что штатный механизм требует стандартной выборки. Можно применять произвольный алгоритм - но при этом все отборы и квитирование ложатся на плечи разработчика, поэтому далее буду считать что все ПВД в рамках online обмена реализованы именно стандартной выборкой. О каких же запросах может идти тогда речь? Дело в том, что практически все обмены имеют какие-то свои, обусловленные методологией сложности (мне приходилоссь выгружать бизнес процессы в записи регистров сведений, например). Получается что для штатной работы необходима стандартная выборка, но выгружаемая информация должна иметь другую структуру. Тут-то и приходят на помощь запросы и алгоритмы: ведь если в глобальном событии конвертации "ПередПолучениемИзмененных" реализовать выборку данных, в которой сохранить ключ - т.е. ссылку на выгружаемый объект, то в событии "ПередВыгрузкой" можно спозиционироваться на получившуюся выборку, и делать все что душе угодно. Главное - оставить ключ исходной выгрузки - чтобы система после удачного обмена могла произвести квитирование и корректно очистить таблицы изменений.
Чтобы просмотреть любой параметр конвертации, запрос, таблицу, ссылку - что угодно - надо добавить в правила два алгоритма: один для выгрузки, другой - для загрузки. Текст у них будет практически одинаков, вот как это выглядит у меня:
Код алгоритма
Если Ложь Тогда
// Чтобы не ругался синтакс контроль, необходим этот блок в алгоритме "как-бы объявления переменных"
СообщениеЛога = Неопределено;
ОбъектИР = Неопределено;
МодальныйВызов = Неопределено;
КонецЕсли;
Если МодальныйВызов = Неопределено Тогда
МодальныйВызов = Ложь; // Для online обменов, для прочих - удобнее Истина, если работаем в обычном приложении
КонецЕсли;
Попытка
// Бывает такое, что забываю убирать вызов лога, это разумеется может привести к ошибке.
// Чтобы подстраховать себя от этого - всю конструкцию обрамляю в попытку
Если ОбъектИР <> Неопределено Тогда
ЭтоКоллекция = Истина;
Попытка
Просто = ОбъектИР.Ссылка;
ЭтоКоллекция = Ложь;
Исключение
КонецПопытки;
Если ТипЗнч(ОбъектИР) = Тип("Запрос") Тогда
Если МодальныйВызов Тогда
// в обычном режиме при исполнении алгоритма откроется модальное окно с запросом и всеми параметрами
СообщениеЛога = ВнешниеОбработки.Создать("D:\Tools\ir\ирПортативный.epf", БезопасныйРежим()).От(ОбъектИР);
Иначе
// лог для отложенной отладки запроса - открывается в консоли запросов
СообщениеЛога = ВнешниеОбработки.Создать("D:\Tools\ir\ирПортативный.epf", БезопасныйРежим()).От(ОбъектИР,,,Истина);
КонецЕсли;
Иначе
Если МодальныйВызов Тогда
// в обычном режиме при исполнении алгоритма откроется модальное окно с исследователем объектов
СообщениеЛога = ВнешниеОбработки.Создать("D:\Tools\ir\ирПортативный.epf", БезопасныйРежим()).Ис(ОбъектИР, ЭтоКоллекция, Ложь);
Иначе
// лог для отложенной отладки ссылки или коллекции - открывается в исследователе объектов
СообщениеЛога = ВнешниеОбработки.Создать("D:\Tools\ir\ирПортативный.epf", БезопасныйРежим()).Ис(ОбъектИР, ЭтоКоллекция, Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СообщениеЛога <> Неопределено Тогда
АдресЛога = "D:\Лог.txt";
ТекстДокумент = Новый ТекстовыйДокумент;
ТекстДокумент.Прочитать(АдресЛога);
// Вся разница в текстах алгоритма только в этой строчке - "выгрузка" для выгрузки, "загрузка" для загрузки
ТекстДокумент.ДобавитьСтроку("" + ТекущаяДата() + ", выгрузка: " + СообщениеЛога);
ТекстДокумент.Записать(АдресЛога);
КонецЕсли;
Исключение
КонецПопытки;
//Примеры вызова:
ОбъектИР = Запрос.ДополнительныеСвойстваКонтрагентов;
Выполнить(Алгоритмы.ЛогВыгрузки);
//..
ОбъектИР = Параметры; // т.е. глобальные параметры конвертации
Выполнить(Алгоритмы.ЛогВыгрузки); // Откроется исследователь объектов
//Иногда не надо вызывать ИР, а нужно быстро что-то посмотреть:
СообщениеЛога = НазначениеПлатежа + ", сформировано по " + Объект.Ссылка;
Выполнить(Алгоритмы.ЛогЗагрузки); // Откроется исследователь объектов
Далее в нужном месте вызывается этот алгоритм, и:
- для онлайн обмена - формируется строка сообщения отложенной отладки, помещается в лог, потом берется оттуда, и отправляется в ИР.
- для прочих обменов и обменов через ВыгрузкаЗагрузкаXML82.epf - можно выставить параметр МодальныйВызов = Истина, и при выгрузке сразу можно видеть модальное окно с требуемым контекстом. Но здесь есть нюанс: окно мы будем видеть в источнике, с контекстом источника. Чтобы получить запрос, который выполняется в удаленной базе надо модальный вызов запрещать, и пользоваться логом.
Еще выручает порой вот такой метод ИР:
обр = ВнешниеОбработки.Создать("D:\Tools\ir\Модули\ирОбщий.epf", Ложь);
обр.СохранитьЗначениеВФайлЛкс(МояТаблица, ПолноеИмяФайла, Сжатие = Ложь, УровеньСжатия = Неопределено);
// Здесь специально оставил значения параметров, чтобы было ясно что это
Обычно я применяю его, если надо как-то детально проанализировать коллекцию, или передать эту коллекцию в параметр запроса удаленной базы. Т.е. таблицу собрали в одной базе, а параметром хочется ее засунуть в запрос другой базы - иногда очень выручает.
Пара слов о остановке по ошибке. Обычно с ней проще\быстрее понимать причину вылета обмена, по выбросу исключения в базе приемнике (я имею в виду отладку удаленной базы по com-соединению), т.е. когда выгрузка отлажена и делаем загрузку. Для этого необходимо включить отладку внешнего соединения. Делается это очень просто: в каталог конфигурационных файлов (т.е. "...\1cv8\conf") необходимо добавить файл "comcntrcfg.xml", примерно следующего содержания:
<config xmlns="http://v8.1c.ru/v8/comcntrcfg">
<debugconfig debug="true" protocol="tcp" debuggerURL="tcp://localhost"/>
</config>
Перезапускать сервер 1С не нужно. После этого можно в базе приемнике включать флаг "Остановка по ошибке", в настройках отладки ставить флаг "Отладка \ Автоматическое подключение \ Клиентские и внешние соединения на сервере" и запускать обмен. В случае выброса исключения вы сможете проанализировать контекст удаленной базы.
Если по отладке хочется останавливаться в базе источнике, то надо учитывать, что online обмены выполняются в фоне. Можно конечно зайти в предметы отладки, и включить фоновые задания (Отладка \ Подключение \ Автоматическое подключение \ поставить флаг "Фоновые задания"). Но чтобы не материться всякий раз, когда контекст отладки перехватывается параллельно работающим процессом - можно использовать те параметры запуска, о которых позаботились разработчики БСП - запускать базу с ключом "РежимОтладки" (Сервис \ Параметры \ Запуск 1С: предприятия \ Параметр запуска = "РежимОтладки", подробнее - доступные параметры запуска приложения). Тогда обмены не будут запускаться в фоне, и можно отлаживаться более просто.
Конечно, кому-то все это может показаться сложным. Но это гораздо удобнее, чем отлаживаться через штатную внешнюю обработку. Попробуйте сами)