Что делать, когда фоновые задания для печатных форм 1С тормозят?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Поймай 1С если сможешь.

Недавно мне довелось поработать с конфигурацией Комплексная Автоматизация 2.5.15.82  , на релизе 8.3.24.1342 . Ничего близкого к HighLoad , базы до 10 гигабайт на MS SQL , свежий выделенный однопроцессорный сервер , десяток пользователей и  жалобы на медленное формирование печатных форм документов , даже если в базе один человек.

Анализ загруженности оборудования выявил его незагруженность как на клиенте, так и на сервере. Клиенты тонкие, конфигурация полностью типовая, при обычной работе загрузка сервера (кластер 1С + MS SQL) не превышает 60% в пике в отдельные редкие моменты. Конечно незагруженность это еще не показатель проблем – кто то где то может ждать как в 1С + MS SQL против Матрицы виртуализации / Хабр (habr.com) в самых неожиданных местах, но существенных ожиданий на MS SQL тоже не было.

Было видно, что 1С все вызовы по формированию печатных форм заворачивала в фоновые задания. Казалось бы – почему Универсальный передаточный документ (УПД) (1c.ru)  из выданного счета фактуры должен формироваться 10-15 секунд? За это время рекламу можно показать тут

Здесь могла бы быть Ваша реклама
Здесь могла бы быть Ваша реклама

Пришлось отладчиком пройтись по джунглям структуированного и универсального программного кода, это не плохо, когда он хорошо работает, но текущий результат на лицо. Вообще на разработчиков типовых конфигураций большая ответственность – они закладывают паттерны и Best practice по разработке на 1С для нового поколения. Clean code и все такое, тем более что при модификации приходится следовать окружению типовых процедур. Посмотрим, что нам ставят в пример.

Все дороги идут сюда

Начинаем из модуля формы счета фактуры, вы уже не найдете кнопку сформировать поскольку команды формируются динамически

Начало пути подключаемые команды
Начало пути подключаемые команды

УпраДалее уходим в общие модули. Я не буду приводить их все (это легко пройти самим),  а сразу перейду к главному

Управление печатью клиент
Управление печатью клиент

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

Длительные операции
Длительные операции

Вот мы уже ближе к точке принятия решения. Обратите внимание – кто не владеет русским, никогда не узнают причину исключения  и не имеют шансов вставить это в яндекс translate

ВыполнитьВФоне
ВыполнитьВФоне

ТНу вот эти условия. Как видите, при определенных обстоятельствах (файловая база, включенный режим отладки, либо явное указание ПараметрыВыполнения.ЗапуститьНеВфоне ) позволяет избежать выполнения  фоновым заданием

Тут принимается решение
Тут принимается решение

РеТ.е. без фонового  задания можно обойтись

реWorkAround  или жди когда поправят

Вообще создание Workaround это исскуство Workaround me в 1С\MS SQL и не только, научный подход к созданию костылей / Хабр (habr.com)  , которое стараются скрыть. Но без этого тут никак

Я просто попробовал установить через конфигуратор параметр запуска РежимОтладки

«Параметр запуска - параметр запуска; доступен для обработки через свойство глобального контекста ПараметрЗапуска (аналог параметру, передаваемому через ключ командной строки /C).»

РежимОтладки
РежимОтладки

Далее запустил в режиме отладки и о чудо! Все печатные формы стали формироваться меньше 5 секунд без фоновых заданий.

Можно настроить это как запуск с ярлыка если добавить туда параметр \С РежимОтладки , будет тот же эффект.

Но этот параметр работает на все случаи в данном коде и еще других местах. Возможно какие-то процедуры нужно оставить выполняющимися в фоне. Поэтому лучше поправить код для установки ПараметрыВыполнения.ЗапуститьНеВФоне только для печатных форм документов.

Итак – этот пример наглядно показывает, что проблема именно в запуске кода в виде фонового задания. Причины нужно еще исследовать,  но судя по сообщениям тут 8.3.22.1709 Тормоза фоновых заданий - Форум.Инфостарт (infostart.ru) проблема частая. В целом подсистема фоновых заданий с каждым релизом приносит новые проблемы о которых я писал тут Осторожно у 1С новый релиз .

Проблема началась недавно c какого то нового релиза и если для больших фоновых заданий она не заметна, то для печатных форм и отдельных вызовов в рамках документа вполне мешает.

Исследование и убеждение  1С скорее всего будет долгим, поскольку тут без глубокого изучения технологического лога не обойтись, а саппорту нужно принести на блюдечке. В bugboard.v8.1c.ru ничего подобного нет.

Корень проблемы понятен – попытки подменить асинхронность при выполнении отчетов\и печатных форм фоновыми заданиями.

Фоновое задание оно не только имеет накладные расходы при запуске (прием передача параметров, ожидание свой очереди в rmanager с его неочевидной логикой)  , но и еще зависит от аккаунта под которым работает сервис кластера. Я встречал случаи когда кластер, работающий под доменным аккаунтом запускал фоновые задания медленней, чем под системным . Видимо влияло время ответа домена.

Асинхронность в 1С вроде как появилась еще в релизе 8.3.18.1128 , но пока я не вижу широкого распространения в коде типовых конфигураций.  В 1С фоновые задания требуют рефакторинга о чем написано тут Язык мой Враг мой . Архитектору о будущем 1С

Подписывайтесь на наш канал , будем придумывать Workaroundы профессионально t.me/Chat1CUnlimited

Источник: https://habr.com/ru/articles/788586/


Интересные статьи

Интересные статьи

Недавно пиарщики из российского отделения Vivienne Sabo говна поели выпустили удивительный креатив. Это тушь для ресниц Vivienne Sabo в форме вибратора и рекламный ролик, в котором женщины этой тушью ...
В данной статье рассматривается непопсовый метод тестирования чисел на простоту с использованием биномиальных коэффициентов. Авторы представляют алгоритм, позволяющий быстро и точно определить простые...
Пришедшая с началом пандемии удалёнка уничтожила главное пространственное ограничение рабочей жизни: необходимость каждый будний день гонять в офис. Некоторые компании сейчас вернулись к прежним ...
Всем привет!На сегодняшний день данные и всё связанное с ними (ML, AI, DataMining, etc) это самый хайповый тренд в IT-индустрии. Все - от ритейлеров до компаний Илона Мас...
Представьте, что вам надо разработать операционную систему, которую переведут на десятки языков, продадут миллиардным тиражом, дата выхода релиза уже публично объявлена самим Биллом Гейтсом. ...