Разработка и Конфигурация · 10 мин
Что такое ПДС в 1С и как работает подсистема длительных операций
ПДС в 1С — подсистема длительных операций из БСП. Разбираем, как работают фоновые задания, ДлительныеОперации.ВыполнитьВФоне, ожидание результата и типичные ошибки.
ПДС в 1С — это сокращение от «подсистема длительных операций», входящая в состав Библиотеки стандартных подсистем (БСП). Она решает одну практическую задачу: позволяет запускать тяжёлые процедуры — обмены данными, формирование больших отчётов, загрузку прайсов, групповое проведение документов — в фоновом задании, не блокируя сеанс пользователя. Пользователь нажимает кнопку, видит индикатор выполнения и продолжает работать, а результат появляется, когда операция завершится.
Без ПДС любая длительная процедура выполняется прямо в клиентском сеансе: форма «зависает», пользователь не может ничего нажать, а при обрыве соединения с сервером операция прерывается без сохранения результата. Подсистема убирает эти проблемы за счёт стандартного механизма: вызов процедуры в фоне, отслеживание её состояния, передача результата обратно в форму и обработка ошибок.
ПДС встроена во все типовые конфигурации на базе БСП — «Управление торговлей», «ERP», «Бухгалтерия предприятия», «Зарплата и управление персоналом» и другие. Если конфигурация разработана на основе БСП, подсистема уже доступна, и программисту достаточно вызвать несколько методов общего модуля ДлительныеОперации и ДлительныеОперацииКлиент.
Из чего состоит подсистема длительных операций
Ядро ПДС — общие модули БСП. Основной программный интерфейс сосредоточен в модуле ДлительныеОперации (серверный) и ДлительныеОперацииКлиент (клиентский). Первый отвечает за постановку процедуры в фоновое задание и получение её результата, второй — за ожидание завершения на клиенте с отображением индикатора.
Дополнительно подсистема использует стандартный механизм платформы «Фоновые задания» и, при необходимости, механизм сообщений пользователю для вывода прогресса. В типовых формах обработок БСП уже предусмотрены переопределяемые процедуры, поэтому разработчику часто достаточно описать свою серверную процедуру и подключить ожидание.
Результат длительной операции передаётся через временное хранилище: серверная процедура помещает данные по адресу, а клиент после завершения забирает их и обрабатывает. Это важно учитывать при проектировании: объёмные результаты разумно возвращать не целиком, а в виде ссылки на данные в базе.
Как устроен цикл выполнения операции
Типовой сценарий работы с ПДС состоит из четырёх этапов. Сначала клиентская процедура формирует параметры и вызывает серверный метод запуска. Затем сервер ставит процедуру в очередь фоновых заданий и возвращает структуру с идентификатором задания и статусом. После этого клиент подключает обработчик ожидания, который периодически опрашивает сервер. Наконец, по завершении вызывается оповещение, в котором разработчик забирает результат и обновляет форму.
- 1Создайте экспортную серверную процедуру в общем модуле с параметрами: структура параметров и адрес временного хранилища результата
- 2В клиентской процедуре вызовите ДлительныеОперации.ВыполнитьВФоне с именем процедуры и параметрами
- 3Настройте параметры ожидания через ДлительныеОперацииКлиент.ПараметрыОжидания: интервал опроса, вывод окна ожидания, текст пояснения
- 4Вызовите ДлительныеОперацииКлиент.ОжидатьЗавершение с описанием оповещения о завершении
- 5В обработчике оповещения проверьте статус, получите результат из временного хранилища и обработайте ошибки
Как запустить процедуру в фоне: практический пример
Минимальный каркас вызова выглядит так. Серверная процедура размещается в общем модуле с признаками «Сервер» и «Вызов сервера» не требуется — достаточно обычного серверного модуля. Процедура принимает два параметра: произвольную структуру параметров и адрес временного хранилища, куда нужно поместить результат.
&НаКлиенте
Процедура СформироватьОтчет(Команда)
ПараметрыПроцедуры = Новый Структура("Период, Организация", Период, Организация);
Длительность = ДлительныеОперации.ВыполнитьВФоне(
"Обработки.МойОтчет.СформироватьДанные",
ПараметрыПроцедуры,
ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор));
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
Оповещение = Новый ОписаниеОповещения("ПослеЗавершенияФоновогоЗадания", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(Длительность, Оповещение, ПараметрыОжидания);
КонецПроцедуры
В обработчике ПослеЗавершенияФоновогоЗадания первым делом проверяется статус: если он равен «Выполнено», результат забирается через ПолучитьИзВременногоХранилища(Результат.АдресРезультата). Если статус «Ошибка», текст ошибки доступен в свойстве КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки — его нужно показать пользователю и записать в журнал регистрации.
Как показать прогресс и сообщения пользователю
По умолчанию ПДС показывает модальное окно ожидания с текстом «Пожалуйста, подождите». Его можно настроить через ПараметрыОжидания: задать свой текст пояснения, отключить окно и выводить прогресс в элемент формы, изменить интервал опроса. Для операций, где пользователь должен видеть этапы, окно ожидания часто заменяют собственным индикатором в форме.
Из фоновой процедуры можно отправлять сообщения через ДлительныеОперации.СообщитьПрогресс — например, «Обработано 1200 из 5000 документов». Клиент получит эти сообщения при очередном опросе и сможет обновить полосу прогресса. Это заметно улучшает восприятие: пользователь видит, что процесс идёт, а не завис.
Когда ПДС нужна, а когда избыточна
Как выбрать действие
Важное ограничение файлового режима: фоновое задание там не даёт настоящей параллельности, оно выполняется в отдельном сеансе на том же компьютере. Тем не менее ПДС в файловой базе всё равно полезна — интерфейс остаётся отзывчивым, а логика кода не отличается от клиент-серверного варианта, что упрощает сопровождение.
Типичные ошибки при работе с ПДС
Отдельная группа проблем — права доступа. Фоновое задание выполняется от имени пользователя, который его запустил, поэтому все проверки прав применяются как обычно. Если процедура обращается к данным, недоступным пользователю, задание завершится ошибкой. Для обхода в строго обоснованных случаях используют установку привилегированного режима внутри серверной процедуры, но это должно быть осознанным решением, а не способом «починить» ошибку прав.
Как проверить, что операция отработала корректно
Как проверить результат
Статус равен «Выполнено», адрес результата заполнен
Статус «Ошибка» или «Отменено» — читайте представление ошибки и журнал регистрации
По адресу результата лежит структура с ожидаемыми полями
Неопределено или пустая структура — процедура не поместила результат
Есть записи о начале и завершении задания без ошибок
Записи об ошибках фонового задания с текстом исключения
Изменения соответствуют параметрам запуска (период, организация, отбор)
Данные обработаны частично или с неверными отборами
Для отладки фоновых процедур удобно временно вызывать серверную процедуру напрямую, минуя ПДС: так ошибка всплывёт сразу с полным стеком. Когда логика отлажена, вызов возвращают в фоновый режим. В конфигураторе также доступна отладка фоновых заданий — нужно включить в параметрах отладки пункт «Фоновые задания» и подключиться к нужному сеансу.
Если операция запускается из формы обработки, передавайте в ПараметрыВыполненияВФоне уникальный идентификатор формы — тогда временное хранилище результата будет жить, пока открыта форма, и результат не пропадёт раньше времени.
Частые вопросы о ПДС в 1С
Чем ПДС отличается от регламентного задания?
Регламентное задание запускается по расписанию без участия пользователя и не связано с формой. ПДС — это интерактивный запуск: пользователь нажимает кнопку, видит прогресс и получает результат в свою форму. Под капотом оба механизма используют фоновые задания платформы.
Можно ли отменить запущенную длительную операцию?
Да, у фонового задания есть метод отмены, но серверная процедура прервётся только в точках, где платформа может безопасно остановить выполнение. В параметрах ожидания можно включить кнопку отмены в окне ожидания. После отмены в обработчик завершения придёт статус «Отменено», и это нужно обработать.
Работает ли ПДС в файловой базе?
Работает, но фоновое задание выполняется в отдельном сеансе на том же компьютере, поэтому реального распараллеливания нет. Интерфейс при этом остаётся отзывчивым, и код не нужно менять при переходе на клиент-серверный вариант.
Почему результат из временного хранилища пустой?
Чаще всего серверная процедура не поместила результат по переданному адресу или поместила его в хранилище с другим идентификатором. Проверьте, что процедура принимает адрес вторым параметром и вызывает ПоместитьВоВременноеХранилище именно с ним, а также что форма не была закрыта до завершения задания.
Нужно ли что-то внедрять, чтобы использовать ПДС в своей конфигурации?
В типовых конфигурациях на БСП подсистема уже есть. В самостоятельной разработке нужно внедрить БСП или как минимум подсистему «Длительные операции» вместе с её зависимостями — проще всего это сделать при создании конфигурации на основе БСП, чем переносить модули вручную.
Что важно запомнить
ПДС — подсистема длительных операций БСП, которая запускает тяжёлые процедуры в фоне и возвращает результат в форму. Ключевые точки: серверная экспортная процедура, вызов ВыполнитьВФоне, ожидание через ДлительныеОперацииКлиент, обязательная проверка статуса и обработка ошибок. Передавайте в фон только простые типы и ссылки, а ошибки фиксируйте в журнале регистрации.