Консоль кода для управляемых форм с многопоточностью

13.08.26

Разработка - Инструментарий разработчика

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

Файлы

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

Наименование Скачано Купить файл
Консоль кода для управляемых форм с многопоточностью
.cfe 1,51Mb
3 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Не так давно публиковал статью о многопоточности простым способом, решил продвинуться дальше и внедрить данный функционал в обработку консоли кода не только для обычных форм (разработал давно, использую сам, публиковать не планирую), но и для управляемых. В качестве основы использую все ту же обработку salexdv Консоль кода для управляемых форм, которую я уже модифицировал в статье про объявление методов в консоли.

Идея обработки простая: у нас есть данные, которые нужно обработать в любой последовательности (можно использовать сортировку, но четкая последовательность не важна) и обрабатывать их в один поток слишком долго. Можно написать код для определения этих данных и прочих параметров, а потом обработать в соответствующей функции обработки порции, но уже в несколько потоков за счет использования механизма фоновых заданий. Разумеется, здесь встает ограничение на передачу данных фоновому заданию - данные должны быть сериализуемы. Соответственно, например, результат запроса передавать можно, а выборку из результата запроса - уже нет. Ну и никаких ДокументОбъект, строки должны поддерживать сериализацию XML (должны отсутствовать неподдерживаемые символы) и прочая, и прочая. Вообще, все сериализуемые объекты легко можно подсмотреть в синтакс-помощнике по слову "сериализуется" - их там больше 300, чтобы вы понимали, и наверняка вы найдете то, что не ожидали увидеть в этом списке!

Немного расскажу про механизм вызова кода обработки порций. Собранные данные и дополнительные параметры функции передаются фоновому заданию, чтобы обеспечить тем самым удобство использования с отслеживанием прогресса и параллельной работой с базой 1С во время обработки. Одним из самых удобных видов передаваемых данных может служить Результат запроса. Все это вместе с дополнительными параметрами помещается кодом, написанным вами в тексте определения данных и параметров, в массив ПараметрыВызова, в котором первый элемент - это, собственно, распараллеливаемые данные, а последующие параметры - дополнительные в любом количестве, в разумных пределах, конечно. Последующие параметры передаются в функцию обработки, которую вы пишете на другой вкладке, в непосредственном виде, в то время как данные для обработки - в виде порции с типом Массив. Массив легко переделать в Таблицу Значений, если нужно - в образце, вставляемом при переключении на многопоточность, есть код вызова соответствующей процедуры. При этом вторым параметром функции обработки данных всегда должен следовать АдресРезультата, чтобы можно было в случае необходимости вернуть какие-либо результаты выполнения обработки. Помещать его в массив ПараметрыВызова не нужно, он получается из функции-оркестратора. Чтобы не быть голословным, приведу здесь строчки дополнения кода:

ОсновнойТекст = ОсновнойТекст + Символы.ПС + Символы.Таб + "ПараметрыВызова = Новый Массив;
|	ПараметрыВызова.Добавить(ДанныеДляОбработки); // РезультатЗапроса, Массив (в т.ч. Структур) или Таблица значений
|	ПараметрыВызова.Добавить(ДополнительныйПараметр1); // сериализуемое значение
|	ПараметрыВызова.Добавить(ДополнительныйПараметр2); // сериализуемое значение";
ОчиститьТекст(Истина);
УстановитьТекст(ОсновнойТекст, Неопределено, Истина, Истина);
КодОбработки = КодОбработки + Символы.ПС + "Процедура ОбработкаДанных(ДанныеДляОбработки, АдресРезультата, ДополнительныйПараметр1, ДополнительныйПараметр2) Экспорт
|	ДанныеВВидеТаблицы = МВК_ДлительныеОперацииСервер.МассивЗаписейВТаблицуЗначений(ДанныеДляОбработки); // на входе всегда универсальный массив
|	Результат = ДанныеДляОбработки; // здесь любой код обработки с получением результата или без
|	ПоместитьВоВременноеХранилище(Результат, АдресРезультата); // если хотите, чтобы результаты потоков объединялись в один массив, результат должен быть массивом (сериализуемым, конечно)
|КонецПроцедуры";
ОчиститьТекст(Ложь);
УстановитьТекст(КодОбработки, Неопределено, Ложь, Ложь);

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

Что происходит дальше? В фоновом задании вызывается функция-оркестратор, которая управляет обработкой порций также в фоновых заданиях - ВыполнитьФункциюПорциями. Она дробит данные на порции в соответствии с заданными на форме параметрами и запускает, а затем проверяет их обработку. В случае ошибки можно продолжить, но лучше остановиться и передать ее в консоль. Это осуществляется за счет обработки записей журнала регистрации, которые обычно формируются при ошибке в фоновом задании. Таким образом становится возможным следующее:

 
 Подсвечивание ошибки

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

По ходу выполнения при завершении обработки каждой порции идет оповещение через панель состояния:

 

 

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

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

 

 

Что не может не радовать, поскольку операция выполнится максимально быстро. Обратите внимание, что потоков 10, а ядер задействовано больше - это из-за того, что база данных PostgreSQL размещена на том же компьютере, что и сервер 1С, а она также активно работает на таких операциях как поиск ссылок и удаление.

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

Также хочется отметить, что фоновые задания не используют лицензию на запуск клиента, поэтому не стоит переживать из-за них (проверял лично, однажды по ошибке запустил более 30 тысяч заданий, на лицензии разработчика)

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

И это хорошо, что консоль кода будет стабильно доступна только пользователям с полными правами. Для остальных назначенная роль почему-то слетает - я так понимаю, это проверки БСП, не знаю, как их обойти, видимо отдельный профиль группы доступа нужен. Так что тоже в каком-то смысле безопасно) К тому же непосредственно фоновая обработка данных выполняется таки в безопасном режиме, кто не согласен - you are welcome in модуль менеджера.

Код консоли совместим с версией 8.3.23 (режим совместимости расширения), однако по некоторым сведениям, JS в поле HTML может работать не так, как ожидалось, в версиях до 8.3.25, имейте ввиду - хотя я ничего странного не заметил.

P.S. Функции, которые появились в этой версии консоли:

1. многопоточное выполнение кода со следующими особенностями:

    а) фоновый запуск потоков обработки данных

    б) отслеживание прогресса через панель состояния

    в) отмена в любой момент (невыполненной части)

2. сохранение временных копий файла при запуске на исполнение (сохраняются только различные версии)

3. два окна для кодирования (при включенном режиме многопоточности) - глюков быть не должно, вроде аккуратно делал, но правок было очень много, все кнопки не проверял. Если что - обращайтесь, буду рад исправить.

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

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.192.25

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

Консоль кода Многопоточность Объявление методов и процедур Фоновые задания

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    76596    385    171    

330

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    272340    1510    422    

1182

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    41047    120    54    

129

Инструментарий разработчика Нейросети Платные (руб)

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

15250 руб.

25.08.2025    66291    134    36    

141

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    9892    42    60    

56

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    26980    98    46    

104

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    55294    189    63    

220
Для отправки сообщения требуется регистрация/авторизация