Оптимизация типовых обменов EnterpriseData. Делаем асинхронное проведение и дожидаемся ответа от приёмника

28.01.25

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Оптимизация типовых обменов EnterpriseData. Делаем асинхронное проведение и дожидаемся ответа от приёмника.:
.zip 32,30Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

Лирическое отступление.

Лет десять назад я открыл для себя Конвертацию Данных 2.0. И до сих пор нежно люблю этот инструмент. Он одинаково хорошо подходит для регулярных обменов данными между конфигурациями 1С и реализации разовых выгрузок. Я даже реализовывал обработку данных в одной и той же конфигурации последовательно выгрузив их и загрузив обратно - просто это было быстрее написать, чем реализовывать обработкой с нуля...

Примерно в это же время фирма 1С выкатила новое решение - конвертацию данных 3.0 и XDTO пакет EnterpriseData. Отличная идея - выгружать данные в некий стандартный формат, чтобы затем можно было считывать из него в разные конфигурации-приёмники.

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

 

Суть проблемы.

Текущая технология обменов, хоть и использует новый формат данных, технологически напоминает старые добрые обмены КД 2. Одно из преимуществ таких обменов, если от базы-приёмника не получена "квитанция" о приёме очередного пакета данных, то источник заново выгружает ранее выгруженные данные и добавляет к ним новые. Таким образом достигается надёжность передачи данных, но этот способ имеет и недостатки - если за рабочий день в источнике создается (изменяется) несколько десятков тысяч документов, то просто не получается подобрать адекватное расписание для обменов. Пока база-приёмник записывает и проводит документы из очередного пакета, источник уже начинает выгрузку следующего (который, напомню, содержит данные предыдущего пакета плюс новые). Таким образом размер пакетов, а значит и время на их обработку, вырастает как снежный ком. Если задать в расписании выгрузки большой интервал, тоже ничего хорошего не происходит. За это время накапливается большое количество изменений и всё равно файл обмена будет занимать сотни мегабайт, а то и несколько гигабайт. Плюс, в 2025 году пользователи уже не хотят ждать данные даже один день.

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

 

Решение.

Решено было действовать в двух направлениях: 1. Сократить время выдачи "квитанции" от базы-приёмника. Тут напрашивалось решение - проводить документы асинхронно (ведь обмен, по сути, прошел, зачем задерживать загрузку следующего пакета?) 2. Сократить интервал выгрузки данных, но при этом заставить базу-источник ожидать "квитанцию", чтобы не выгружать повторно лишние данные. 

Забегая вперед, скажу, что всё получилось. Уже несколько месяцев у нас работают обмены с расписанием "раз в 5 минут" на выгрузку и "раз в 100 секунд" на загрузку. Файлы обмена при этом редко превышают 10Мб, а чаще находятся в пределах 2-5Мб.

 

Технические детали.

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

Итак, первым делом создаем два справочника - "ДополнительныеНастройкиУзловКорреспондента" для хранения настроек, и "ОчередьОтложенногоПроведения" для хранения очереди документов для отложенного проведения.

Справочник "ДополнительныеНастройкиУзловКорреспондента":

 

 

Описание реквизитов:

 

Название колонки Тип данных
УзелКорреспондента План обмена ссылка
ИспользоватьОтложенноеПроведение Булево
РазмерПорцииДокументовДляПроведения Число (5,0)
ДожидатьсяЗагрузкиВыгруженногоПакета Булево

 

 
 Модуль менеджера справочника "ДополнительныеНастройкиУзловКорреспондента"

 

Справочник "ОчередьОтложенногоПроведения" выглядит так:

 

 

Описание реквизитов:

 

Название колонки Тип данных
ДатаВремяДобавления Дата и время
ДокументСсылка Документ ссылка
ДатаДокумента Дата и время
УзелКорреспондента План обмена ссылка
ДополнительныеСвойстваОбъекта Строка (0)

 

 
 Модуль менеджера справочника "ОчередьОтложенногоПроведения"

 

Теперь, когда справочники готовы, можно заняться модернизацией кода. Изменять код БСП я рекомендую в расширении и обязательно в режиме ИзменениеИКонтроль. Вот такая вставка нам понадобится в общем модуле "ОбменДаннымиСервер":

 

 
Этого достаточно, чтобы во время обмена документы не проводились, а записывались в нашу очередь.
Осталось сделать регламентное задание, которое будет вызывать нашу функцию асинхронного проведения. Расписание ставим хоть раз в минуту и не забываем прописать ключ (на тот случай, если предыдущий вызов ещё не закончился).
 
 Код процедуры асинхронного проведения

 

Работа на стороне приёмника закончена. Настал черед базы-источника.

Справочник настроек я взял готовый из приёмника со всеми процедурами в модуле менеджера. Хотя здесь нам понадобится единственный флаг "ДожидатьсяЗагрузкиВыгруженногоПакета".

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

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

 

 

Конечно, было бы лучше, если бы СтруктураНастроекОбмена инициализировалась лишь однажды и передавалась бы сквозным методом из процедур загрузки в процедуры выгрузки. Но, увы.

Вторая процедура, которую нам нужно перехватить "ПрочитатьСообщениеСИзменениямиДляУзла". Здесь всё просто, мы узнаем номер пакета и запоминаем его в СтруктураНастроекОбмена.

 

 

Помимо общего модуля "ОбменДаннымиСервер" нам придется немного изменить обработку "КонвертацияОбъектовXDTO". Здесь модифицируем лишь одну процедуру в модуле объекта и вполне можем использовать директиву "&После":

 

 

На этом доработка завершена. Можно переходить к тестированию. Обратите внимание, что цепочка вызовов процедур при "ручном" выполнении обмена и при срабатывании типового регламентного задания обмена данных - разная. Поэтому для тестирования нужно править расписание. Есть ещё один нюанс, при ручном запуске обмен происходит от имени текущего пользователя, а при срабатывании РЗ от имени пользователя, указанного в настройках. У них могут быть разные даты запрета изменения данных, поэтому ручной режим я даже не тестировал, всегда запускал РЗ, изменяя расписание.

 

Пара слов о хранении настроек.

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

 

Бонус - готовые расширения.

Во вложении расширения, которые были созданы для обмена УТ - Бухгалтерия корп. Тестировались на версиях УТ 11.4.14.181 и Бух корп 3.0.151.27. Вариант обмена - файловый, через общую папку. Единственный момент, который нужно поправить в коде расширения - в приёмнике, в процедуре, которая вызывается из регламентного задания нужно указать код вашего узел обмена. После чего установите галку "Использование" у РЗ (в поставке оно отключено, чтобы не было ошибок).

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

EnterpriseData обмен Конвертация данных 3.0 типовой обмен интеграция конвертация данных синхронизация оптимизация обмен данными подсистема обмена данными БСП

См. также

SALE! 10%

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

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

55778 50200 руб.

04.08.2015    168820    350    280    

383

SALE! 10%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 24894 руб.

12.06.2017    143759    830    297    

430

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    53941    238    73    

194

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    37484    100    68    

96

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    25039    175    51    

133

SALE! 10%

Перенос данных 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 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    72968    188    152    

127

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    81817    332    253    

282

SALE! 10%

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

48278 43450 руб.

25.02.2015    172232    308    259    

385
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aximo 2135 28.01.25 14:57 Сейчас в теме
Асинхронное проведение - блокировки вас не замучают?
2. tambu 78 28.01.25 15:08 Сейчас в теме
(1) Проведение выполняется ровно теми же типовыми процедурами БСП. Просто таблицу документов для них я сперва сохраняю, завершаю обмен (чтобы ушла квитанция) а потом обратно подаю на вход процедурам проведения (через РЗ). Асинхронное оно по отношению к обмену, параллельного проведения там нет. Регламентное задание запускается часто, но благодаря ключу отрабатывает только когда предыдущее закончилось.
Оставьте свое сообщение