Пример многопоточной обработки (БСП)

Публикация № 1808052 13.02.23

Задачи пользователя - Обработка документов

Многопоточная обработка

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

Введение

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

Будет работать только в конфигурациях, где интегрирована БСП, только в управляемых формах и только в клиент-серверном варианте

Важно! Если у вас сервер 1С и компьютер на котором вы запускаете 1С это разные машины, то обработку надо установить во внешние обработки.

Принцип многопоточной обработки

  1. Получаем массив ВСЕХ объектов для обработки;
  2. Разбиваем этот массив на порции(Массивы) согласно входящим параметрам;
  3. Для каждой порции запускаем свое фоновое задание, которое будет выполнять экспортный метод ОбработатьОбъекты();
    1. Фоновые задания отправляют сообщения фиксированного формата;
    2. Ждем завершения выполнения фоновых заданий;
  4. Проверяем статусы запущенных фоновых заданий, читаем сообщения;
  5. Отправляем свои сообщения основному потоку;
  6. В самом конце складываем итоговый результат работы всех ФЗ в АдресРезультата.

 

 

Что в примере

В качестве примера обработка, которая выбирает все записи из справочника Контрагенты и обрабатывает их наименования. После обработки каждого элемента транзакция откатывается, в результате ничего не меняется в базе данных

 

 

В динамике это выглядит примерно так

 

 

 

Как сделать свою обработку на основе этой

Порядок такой

  1. Копируем эту обработку. В метаданных меняем её имя и синоним;
  2. Добавляем реквизиты в обработку

 

Форма

  • Разместить на форме параметры выборки объектов / процедуры для формирования готового списка объектов для обработки. В примере это ЗаполнитьДаннымиДляТеста();
  • В функции ПараметрыОбработки() складываем в одноименную структуру все параметры, что потребуются для обработки объектов;
  • В процедуре ОбработатьРезультатВыполнения() - можно выполнять дополнительные действия с результатом выполнения обработки.

 

Модуль

  • В функции Объекты() определить алгоритм получения ВСЕХ объектов для обработки. Здесь два варианта:
    1. Просто транслировать то что передано с формы в параметр ДанныеДляОбработки;
    2. Заполнить на сервере по входящим параметрам; 
 
Объекты()
  • Функция РазбитьНаПорции() содержит два алгоритма разбиения коллекции объектов на порции. Я оставил рабочим алгоритм "Чередование", т.к. мне кажется он более приближен к последовательной обработке. Вы можете описать здесь свой;
  • В процедуре ВыполнитьМногопоточно() в самом конце складываем итоговый результат работы, если результат складывает НЕ в ТЗ то дорабатываем эту процедуру. В противном случае, здесь ничего не трогаем;
 
ВыполнитьМногопоточно()
 
  •  В процедуре ОбработатьОбъекты() описываем свой алгоритм обработки в области Обработка_Объекта.

 

Как отлаживать обработку

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

Так же на форме расположены вспомогательные команды, служащие исключительно для отладки

  • Выполнить без фоновых заданий – запускает управляющую процедуру в основном потоке. Пригодится для отладки ВыполнитьМногопоточно(), Объекты(), РазбитьНаПорции();
  • Обработать объекты не в фоне – служит для отладки ОбработатьОбъекты()

 

Тестировалось на платформах 8.3.18.1957, 8.3.21

Конфигурации: КА 2.5.7.402, УХ 3.0

Материалы по теме
- Многопоточная обработка данных
- Многопоточная обработка данных на примере перепроведения документов
- Универсальный шаблон многопоточной обработки (на примере проверки работы Web-сервисов)
- Параллельная обработка (в несколько потоков - сеансов
- Многопоточная обработка документов БП3.0, КА2, (ERP с небольшим ограничением). Ускоряет основные процессы учета: проведение документов и другие массовые процедуры методом многопоточности
- Простая параллельная обработка данных
- Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки

Скачать файлы

Наименование Файл Версия Размер
Пример многопоточной обработки

.epf 17,05Kb
173
.epf 2023.02.13 17,05Kb 173 Скачать бесплатно
Поддержать автора

.epf 17,05Kb
2
.epf 2023.02.13 17,05Kb 2 Скачать
Поддержать гуру СКД

.epf 17,05Kb
1
.epf 2023.02.13 17,05Kb 1 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. quazare 2984 14.02.23 04:32 Сейчас в теме
Благодарю вас, что сделали ссылку на мою публикацию
2. ixijixi 1419 15.02.23 09:00 Сейчас в теме
А чем отличается поддержка автора от поддержки гуру СКД? =)
3. echo77 1707 15.02.23 10:30 Сейчас в теме
(2) Ничем (0 скачиваний :-(). Так... еще один способ напомнить о себе :-)
maksa2005; user1674924; +2 Ответить
4. ixijixi 1419 15.02.23 10:40 Сейчас в теме
5. quazare 2984 15.02.23 18:46 Сейчас в теме
я хоть и не гуру скд - но вас тоже поддержу. чего и остальным советую! не стесняйтесь, товарищи, активнее-активнее...
6. Cyberhawk 131 16.02.23 14:10 Сейчас в теме
Будет работать только в конфигурациях, где интегрирована БСП
Какая максимально "старая" БСП поддерживается? А то в разных версиях БСП разный программный инетерфейс по вызову экспортных методов подключаемых обработок...
triviumfan; +1 Ответить
7. triviumfan 37 20.02.23 15:18 Сейчас в теме
Будет работать только в конфигурациях, где интегрирована БСП

Но в статье не указана версия БСП, плюс у них плохая обратная совместимость.

ЗЫ: Пардон, открыл обработку и увидел, что автор запилил свой интерфейс вместо типового (ВыполнитьФункциюВНесколькоПотоков), который доступен с 3.1.7.
8. maksa2005 370 03.03.23 14:55 Сейчас в теме
Ля... не работает. печаль(
Оставьте свое сообщение

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку