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

13.02.23

База данных - HighLoad оптимизация

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

Скачать файл

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

Наименование SM По подписке [?] Купить один файл
Пример многопоточной обработки
.epf 17,05Kb
443
443
0 SM
Скачать
Поддержать автора
.epf 17,05Kb
4
4
2 SM
Скачать Купить за 2 150 руб.
Поддержать гуру СКД
.epf 17,05Kb
2
2
2 SM
Скачать Купить за 2 150 руб.

Введение

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

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

Важно! Если у вас сервер 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 с небольшим ограничением). Ускоряет основные процессы учета: проведение документов и другие массовые процедуры методом многопоточности
- Простая параллельная обработка данных
- Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки

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

См. также

HighLoad оптимизация Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих запросов на sql, ожиданий, конвертация запроса в 1С и рекомендации, где может тормозить.

2 стартмани

15.02.2024    10325    208    ZAOSTG    74    

111

HighLoad оптимизация Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    9566    doom2good    49    

70

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    5680    mrXoxot    11    

106

HighLoad оптимизация Системный администратор Программист Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    11335    ivanov660    6    

80

HighLoad оптимизация Бесплатно (free)

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

15.11.2023    6189    a.doroshkevich    22    

74

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    17862    skovpin_sa    14    

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

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

ЗЫ: Пардон, открыл обработку и увидел, что автор запилил свой интерфейс вместо типового (ВыполнитьФункциюВНесколькоПотоков), который доступен с 3.1.7.
8. maksa2005 542 03.03.23 14:55 Сейчас в теме
Ля... не работает. печаль(
9. Alex_mar 05.06.24 23:10 Сейчас в теме
Не работает в ЕРП 2.5.13

Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)
{ВнешняяОбработка.ПримерМногопоточнойОбработки.МодульОбъекта(378)}:ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторУправляющегоЗадания);
{(1)}:Объект.ОбработатьОбъекты(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5436)}:Выполнить "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1156)}:ОбщегоНазначения.ВыполнитьМетодОбъекта(Обработка, Параметры.ИмяМетода, ПараметрыМетода);
{(1)}:ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5377)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1449)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(627)}:ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры);
{ВнешняяОбработка.ПримерМногопоточнойОбработки.МодульОбъекта(264)}:СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
{(1)}:Объект.ВыполнитьМногопоточно(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5436)}:Выполнить "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1156)}:ОбщегоНазначения.ВыполнитьМетодОбъекта(Обработка, Параметры.ИмяМетода, ПараметрыМетода);
{(1)}:ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки(Параметры[0],Параметры[1])
{ОбщийМодуль.ОбщегоНазначения.Модуль(5377)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";
{ОбщийМодуль.ДлительныеОперации.Модуль(1449)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);
{ОбщийМодуль.ДлительныеОперации.Модуль(627)}:ВызватьПроцедуру(ИмяПроцедуры, ПараметрыЭкспортнойПроцедуры);
{ВнешняяОбработка.ПримерМногопоточнойОбработки.Форма.Форма.Форма(182)}:СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);

по причине:
Несоответствие типов (параметр номер '1')
Оставьте свое сообщение