344 подписчика

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

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

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