Использование инструментов разработчика для отладки обменов КД 2.0

05.05.17

Интеграция - Перенос данных 1C

Пара трюков, благодаря которым жить становится намного проще...

Не буду здесь говорить о штатной отладке через внешнюю обработку "ВыгрузкаЗагрузкаДанных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С: предприятия \ Параметр запуска = "РежимОтладки", подробнее - доступные параметры запуска приложения). Тогда обмены не будут запускаться в фоне, и можно отлаживаться  более просто.

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

Вступайте в нашу телеграмм-группу Инфостарт

nt

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    183349    424    298    

437

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    180399    348    283    

406

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    156971    936    306    

475

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.262.x) и БП 3.0 (3.0.190.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    31991    234    61    

174

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 руб.

23.07.2020    64786    303    83    

243

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

55200 руб.

11.01.2021    36897    32    56    

34

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    60823    73    125    

71

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 3, УНФ 3 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16531 руб.

18.02.2016    198272    655    543    

557
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Matveev_VS 168 15.05.17 10:43 Сейчас в теме
2. artbear 1586 26.05.17 17:07 Сейчас в теме
Спасибо за использование ИР.
Очень их люблю
3. unichkin 1617 26.05.17 18:33 Сейчас в теме
(2) Для меня ИР в v8 стали неким аналогом опенконфа в v7 :)
4. olegbilas76 3 11.02.21 11:15 Сейчас в теме
для онлайн обмена - формируется строка сообщения отложенной отладки, помещается в лог, потом берется оттуда, и отправляется в ИР

А можно поподробнее? Куда и как именно отправляется строка сообщения отложенной отладки из лога в ИР?
5. unichkin 1617 11.02.21 17:10 Сейчас в теме
(4)
для онлайн обмена - формируется строка сообщения отложенной отладки, помещается в лог, потом берется оттуда, и отправляется в ИР

Вручную копируется из лога (текстовичка на диске) и вставляется в окно "Отладить отложенный объект"
6. olegbilas76 3 11.02.21 17:59 Сейчас в теме
(5) Спасибо, получилось. Очень полезная статья! Заслуженный плюс. А то штатную отладку я так и не смог заставить работать.
Для отправки сообщения требуется регистрация/авторизация