Неожиданное использование XDTO

05.12.20

Интеграция - Обмен между базами 1C

Расскажу про свой опыт, как XDTO может помочь в отладке обменов данных. И какие полезности можно почерпнуть для себя при работе с XDTO.

Начну с того, что расскажу свою историю, как я открыл для себя XDTO. И зачем оно мне неожиданно пригодилось.

Итак, типичная беда - обмен на КД 2.0. Конфигурации: 1С:ERP. Агропромышленный комплекс и 1C: Itilium. Интересный обмен написал мой коллега, но по каким-то обстоятельствам не смог с ним закончить, и вот оно пришло ко мне. Вся суть: в Itilium есть документы по учету активов и конфигурации (термины из ITIL), и нужно эти документы превращать в документы регламентированной системы, в роли которой выступал 1C: ERP. Вся история в том, что иногда нужно было создавать в ERP несколько документов на основании одного документа источника. И в целях упрощения жизни в обоих конфигурациях создали два идентичных документа (универсальный документ обмена) и заполняли его при проведении ключевых документов.

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

Для тех, кто не понял, поясню: Проведение документа - это транзакция (ну много чего может записываться во время проведения документа, и соответственно нужно либо чтобы все записалось в БД, либо вернулось к исходному состоянию, если есть ошибки) и т.к. 1С, к сожалению, не придумала вложенные транзакции (тут я уже говорю, как я понял после блуждания по форумам в поисках ответа "почему такая ошибка"), то при ошибке проведения документов, которые проводятся при проведении другого документа, мы получаем "информативную ошибку": "В данной транзакции уже происходили ошибки".

Вот и беда эта была достаточно частой, т.к. обмен был ещё "сыроват". Ну и бессонные ночи были обеспечены. Большая куча времени уходила, чтобы понять, в какой момент и из-за чего именно нельзя было провести тот или иной документ, который создавался на основе универсального документа.

И вот однажды в процессе выполнения других своих задач мой лучший друг по имени "Синтакс-помощник" показал вот такой вот объект: СериализаторXDTO. Стало интересно: а что я могу сериализовать? Оказалось что очень много чего можно сериализовать, а если еще и подготовить данные в нужном виде (привести к определенным типам данных), то вообще без проблем можно сериализовать все, что угодно.

Ну и вот пару часов экспериментов и получилось:

  • отладочное расширение, которое содержит функцию для Сериализации переменной типа "ДокументОбъект, СправочникОбъект и т.п." и выдачи их в тексте  xml;
  • обработка для преобразовании записанного объекта в xml;
  • и обработка для просмотра объекта записанного в xml.

Ну и вот такое странное применение всему этому:

  • ловим ошибку "в данной транзакции уже происходили ошибки";
  • тратим минут 15 на поиск документа который вызывает эту ошибку;
  • находим место где вызывается запись этого документа и ставим там точку останова;
  • когда точка остановилась вызываем функцию (через Shift+F9) из расширения в которую передаём ДокументОбъект;
  • нам возвращается текст xml и мы его копируем;
  • вставляем полученный текст в обработку для просмотра объектов из xml (см. п.3 выше);
  • и смотрим как заполнился наш документ;
  • при необходимости пробуем его провести или записать;
  • смотрим на ошибки которые выдаются при записи/проведении;
  • что-то осознаем и сравниваем с похожим документом созданным вручную, который мы выгрузим обработкой из п.2 (см. выше) и посмотрим обработкой из п.3 (см. выше).

Самая прелесть этого всего, что здесь, так же как и в коде, не отрабатывают лишние обработчики которые срабатывают при записи из формы (потому что такие обработчики могут дозаполнять объект за вас, а вы об этом и не подозреваете)

А теперь самое интересное. Как это всё работает?

Что делает отладочное расширение:

В отладочном расширении есть один серверный общий модуль с одной экспортной функцией. Функция в итоге возвращает объект, сериализованный в xml.

Содержимое у функции примерно такое:

//Объект передается в эту функцию и превращается в текст XML, который станет понятен для СериализатораXDTO при преобразовании обратно в объект
ЗаписьXML = Новый ЗаписьXML; //здесь создаем объект для записи в XML, ну это и ежу понятно
ЗаписьXML.УстановитьСтроку(); //делаем так чтобы при закрытии записи нам вернулась строка а не файл
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Объект); //собсна, сериализуем
Возврат ЗаписьXML.Закрыть(); //и возвращаем текст xml

В обработке, которая выгружает в xml уже записанный объект, все то же самое. Принципиальное отличие только в том, что отладочное расширение более нужно для того, чтобы выгрузить то, что не может записаться в базу, а обработка для того, чтобы выгрузить то, что мы создали ручками и смогли записать. И дальше уже сравнивать реквизиты, чтобы понять, что у нас не так.

Ну и как же потом это вот всё преобразовать в объект, спросите вы. А всё очень просто. Код примерно такой вернет вам обратно ДокументОбъект и делайте с ним что хотите:

//XML - это текст XML который мы получили из нашего сериализатора
ЧтениеXML = Новый ЧтениеXML; //создаем объект для чтения XML, ну это и ежу понятно
ЧтениеXML.УстановитьСтроку(XML); //пихаем в Чтение нашу строку
Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); // получаем объект из Чтения
ЧтениеXML.Закрыть(); //как все приличные люди закрываем Чтение

Вот такие небольшие приёмчики с СериализаторомXDTO мне помогли сократить бессонные ночи под отладкой обмена, до нескольких минут локализации ошибки.

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

Всем спасибо за внимание. Свои обработки для отладки я выложу позже отдельной публикацией.

XDTO СреиализаторXDTO отладка обмены данными

См. также

SALE! 20%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

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

45650 36520 руб.

04.08.2015    159662    363    267    

345

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134915    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

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

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

34650 27720 руб.

15.04.2019    68410    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34166    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

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

28000 25200 руб.

23.07.2020    46281    196    64    

157

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

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

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

50722 45650 руб.

31.10.2014    231386    124    327    

295

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9204    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

15.12.2021    20232    132    38    

90
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Tahallus 431 05.12.20 11:26 Сейчас в теме
Замечательно, ждем статью про ЗаполнитьЗначенияСвойств
3. davdykin 25 05.12.20 18:32 Сейчас в теме
(1)По-моему ваше замечание - мимо кассы. Если кто-то найдет нестандартное использование ЗаполнитьЗНачениеСвойств, при решение распространенной проблемы - почему-бы не написать статью?
2. partizand 129 05.12.20 14:24 Сейчас в теме
Мысли вам в помощь.
Данная ошибка возникает после чтения данных после ошибки в транзакции. Это можкт происходить в вашем документе. Есть ли в нем попытка искючение при вызове проведения других документов? По идее в этой попытке можно получить полную инфу по ошибке и прервать транзакцию. Образец кода есть в стандартах 1с.
Но возможно я ошибаюсь и у вас все это есть.
6. simon_sidoruk 43 06.12.20 10:59 Сейчас в теме
(2)
По идее в этой попытке можно получить полную инфу по ошибке и прервать транзакцию.

Мысль хорошая, и даже так уже сделано, чтобы меньше раз ходить в отладку. Но к сожалению никак не вытащить сообщения которые падают в СообщенияПользователю, ну или я не знаю таких способов. А когда срабатывает внутренняя проверка каких-нибудь документов учетной системы он ругается именно в СообщенияПользователю ((
8. partizand 129 07.12.20 18:59 Сейчас в теме
(6) запаздываю с ответом. Нет времени.
При загрузке выставляется флаг "ЗагрузкаДанных". Не помню точно как он называется. Это отключает проверки. Ваш документ мог бы его выставлять. Это конечно не хорошо. Но с другой стороны вы получите тот же функционал, что и при прямой загрузке создаваемых документов. И тогда ошибок не будет или они будут уловимы.
Если я вообще правильно понимаю.
9. simon_sidoruk 43 07.12.20 19:05 Сейчас в теме
(8) а тут опять минус при флаге ЗагрузкаДанных = Истина, нельзя документы проводить
10. partizand 129 08.12.20 15:58 Сейчас в теме
(9) Почему нельзя проводить?
В общем не знаю.
В универсальном обмене же проводятся документы при получении. И если не провелись, то ошибка записывается в таблицу и ее можно потом глянуть. Вот и нужно глянуть как это сделано в БСП.
В сущности копаться в отладчике при проблемах проведения документа при обмене на мой взгляд не есть хорошо. И я бы искал способы этого избежать, а не способы удобного копания в отладчике.
11. simon_sidoruk 43 08.12.20 19:28 Сейчас в теме
(10)
В сущности копаться в отладчике при проблемах проведения документа при обмене на мой взгляд не есть хорошо. И я бы искал способы этого избежать, а не способы удобного копания в отладчике.

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

По поводу почему документ нельзя проводить при ОбменДанными.Загрузка = Истина.
А какие движения вы хотите получить от такого документа?Если у него не получилось пройти проверки то вероятность того что в движениях все будет хорошо очень низкая.

В общем то я рассказываю про инструменты которые мне помогли и обмен сейчас работает как часы. Пользоваться ими или осуждать его это уже вам решать
13. fomix 33 06.01.21 14:34 Сейчас в теме
(9) Документ при таком флаге ПРОВОДИТСЯ в обход существующих в модуле объекта проверок. Т.е. пометка ПРОВЕДЕН установится, а вот движения будут "кривые" либо их совсем не будет.
15. simon_sidoruk 43 06.01.21 14:46 Сейчас в теме
(13) пометка Проведен и процесс проведения это разные вещи. Да при ОбменяДанными.Загрузка = Истина можно в тупую поставить Проведен = Истина, но как его потом отделить от тех которые и правда провелись. Потом сиди и думай почему остатки там и там не сходятся на складах. А оказывается что в приемнике док фиктивно провелся
12. Cyberhawk 135 15.12.20 17:05 Сейчас в теме
(6)
никак не вытащить сообщения которые падают в СообщенияПользователю
ПолучитьСообщенияПользователю
simon_sidoruk; +1 Ответить
4. lunjio 66 05.12.20 19:10 Сейчас в теме
Если создаваемый документ так сказать технический, достаточно ставить вызватьИсключение, а не Отказ при ошибках, так же в участке обработки проведения, где проводится этот подчиненный документ, если он в попытке, в исключении так же выкидывать ошибку ну или убрать совсем.
5. simon_sidoruk 43 05.12.20 20:38 Сейчас в теме
(4) в этом есть проблема. Когда у вас подчиненный документ, например, Реализация товаров. То при ошибке из серии на складе недостаточно товара Н в количестве М, то ругаться он будет в СообщенияПользователю. А что самое прикольное выяснится потом. Товара то достаточно, просто надо было поставить в ТЧ Товары правильные статусы указания серий (если вы поняли о чем я ;))
7. capitan 2466 06.12.20 14:48 Сейчас в теме
Минусов конечно я ставить не буду.
Любой написавший некоторое количество связанных букв достоин похвалы.
Предвижу только, когда автор откроет для себя конвертацию данных 3.0 он сильно удивится.
14. fomix 33 06.01.21 14:40 Сейчас в теме
(0) Не знаю как у вас, но у меня при типовом обмене тоже ошибки при проведении периодически возникают. Документ просто записывается в базу, но не проводится (это типовой функционал). А дальше ручками его уже можно провести. Причем проводится без ошибок! Отловить ошибку не удается, в техжурнале все без ошибок (просто констатация факта - ошибка при проведении документа, без подробностей). Можно ли, используя приведенный вами механизм, выявить эту ошибку?
16. simon_sidoruk 43 06.01.21 14:50 Сейчас в теме
(14) в этом и суть. Отлавливаете документ отладкой где он уже заполнен, используете функцию из расширения, вставляете результат функции в обработку и проводите там. Самое главное что никакие доп обработчик форм при этом не отработает и вы увидите реальную причину
17. fomix 33 06.01.21 16:25 Сейчас в теме
(16) В том то и прикол, что при проведении вручную ошибок нет! И отлавливать там, по сути, нечего...
18. simon_sidoruk 43 07.01.21 04:46 Сейчас в теме
(17) это через форму документа, потому что там вас спасают обработчик событий формы, которые что-то дозаполняют. А обработка открывает документ через универсальную форму и не содержит этих обработчиков
19. fomix 33 13.01.21 09:53 Сейчас в теме
(18) Если документ или любой объект УЖЕ записан в базу, но не проведен (по какой-то ошибке), поможет ли ваша обработка?
20. simon_sidoruk 43 13.01.21 10:55 Сейчас в теме
21. Dzenn 870 19.03.21 12:02 Сейчас в теме
Сама идея с промежуточным документом непонятного назначения и записи из него другого документа изначально плохая
22. simon_sidoruk 43 04.04.21 09:22 Сейчас в теме
(21) Если рассматривать этот проект, то там было так:
Есть Itillium в нем есть документы которые при выгрузке в ERP. Агрокомплекс будут создавать один или несколько документов. Пример перемещение между организациями (интеркампани насколько я помню это называется). В Itilium все просто - создаем документ перемещение активов и готово. В ERP должно было насколько я помню создастся Реализация на другую нашу организацию, счет-фактура, Поступление в другой организации и тоже счет-фактура.
Так вот мы решили что пусть при /записи создается универсальный документ обмена в Itillium и он уже пойдет в ERP. А ERP будет его принимать и что-то с ним делать.
При таком подходе мы можем в Itillium найти документ обмена (есть ссылка в форме документа).
Потом найти этот документ в ERP и узнать что на основании него создано.

И это облегчило задачу которая возникла позже: надо было чтобы пока в ERP есть хотя бы один проведенный документ в Itillium нельзя было бы менять документ-источник
Оставьте свое сообщение