Выполнение внешней обработки в фоне с выводом прогресса. Максимум использования БСП

13.02.25

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

Статья, как выполнить код внешней обработки в фоне с подключением внешней обработки в справочник или через "Файл-Открыть". Для файловых и клиент-серверных баз.

Бесплатные

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

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Выполнение внешней обработки в фоне с выводом прогресса. Максимум использования БСП:
.epf 8,57Kb
589 Скачать бесплатно

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

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

Дисклеймер. Делаю больше себе шпаргалку на будущее, чтоб не воспроизводить все это руками, когда потребуется. Плюс все что находил тут так или иначе содержит какие-то костыли которые можно не использовать. А тут готовый вариант Ctrl+C Ctrl+V.

Нам потребуется внешняя обработка. Любая. 

В модуле объекта нам потребуется процедура или функция, которая будет выполнять нашу длительную операцию. Для примера сделал процедуру имитирующей длительную операцию на минуту.
 

 
 Процедура модуля объекта обработки с длительной операцией.


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

 
 Код кнопки ВыполнитьВФоне (без подключения в справочник дополнительных отчетов и обработок)

 

 
 Код кнопки ВыполнитьВФоне (С подключеннием обработки в справочник)


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

 
 Вспомогательные функции. 



Ну и пример процедуры ОписаниеОповещения после завершения нашей операции
 

 
 ОписаниеОповещения ПослеВыполненияОбработки



Обработка с двумя примерами в закрепе.


Все описанное тестировалось на БСП 3.1.10.х.

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

  • Зарплата и управление персоналом, редакция 3.1, релизы 3.1.30.117

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

Внешнаяя обработка Выполнение в фоне БСП

См. также

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

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

24900 руб.

20.08.2024    75097    379    170    

325

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

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

10000 руб.

02.09.2020    268369    1494    421    

1179

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

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

22570 руб.

06.10.2023    40164    113    54    

126

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

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

15250 руб.

25.08.2025    63758    130    36    

137

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

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

14000 руб.

17.04.2026    8907    38    46    

51

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

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

17000 руб.

10.11.2023    26425    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2624    6    0    

21

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

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

9500 руб.

17.05.2024    54768    187    63    

220
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1481 13.02.25 17:11 Сейчас в теме
"Никогда такого не было и вот опять")))
Al3x; Yellow_Cube; mrChOP93; qwinter; Lone_Mayson; +5 Ответить
2. Zloysanta96 14.02.25 02:58 Сейчас в теме
(1) Тут автор применил более современный подход
8. kalyaka 1182 14.02.25 09:53 Сейчас в теме
(7) хотя суть осталась, но все же методы БСП уже поменялись
Disly; mrChOP93; d4rkmesa; +3 Ответить
9. RocKeR_13 1481 14.02.25 09:58 Сейчас в теме
(8) Ладно, уговорили: ВыполнитьВФоне заменили на ВыполнитьПроцедуру + добавили Асинх)
15. Avatarzorro 77 17.02.25 02:08 Сейчас в теме
(7)
как минимум во всех 3х вариантах платные примеры, что, по моему мнению, полнейшая дичь. Это не уникальный или суперсложный контент чтобы продавать его, да еще и с пачкой костылей в придачу.

так же абсолютно во всех 3х примера есть куча бессмысленного текста(кода) не относящегося к теме вопроса
annak2906; treavlad; EvgeTrofi; eeeio; prog1c_vl; mirokiro; so-lf; antistress; mrChOP93; +9 Ответить
13. alex_sayan 70 16.02.25 13:21 Сейчас в теме
(2) тут банальное использование возможностей БСП
45. so-lf 2 29.04.25 13:33 Сейчас в теме
(13) Банальное или нет, но Автор не за деньги а просто по доброте поделился знаниями для начинающих программистов. На сайте не все гуру есть и начинающие!!!Автор если ты это читаешь то здоровья тебе!!!
annak2906; Disly; jimli; art7979; user719210; treavlad; EvgeTrofi; kysin; distorshion; Ellestrago; FReIM; Димон; eeeio; prog1c_vl; Al3x; ochirul; +16 Ответить
11. Avatarzorro 77 14.02.25 10:18 Сейчас в теме
(1) Делал чисто как шпаргалку для себя, т.к. хранить в "гугле" такие вещи проще.
annak2906; +1 Ответить
41. elian 149 22.02.25 02:53 Сейчас в теме
(1) Таких статей куча. Да. Но... У всех какие-то свои косяки... у всех какие-то свои костыли... у всех какие-то свои подходы... у всех чего-то своего наверчено явно лишнего... и у всех по-своему некрасиво и нелаконично...

Да... И тут тоже самое!
3. PerlAmutor 162 14.02.25 06:23 Сейчас в теме
С временными файлами не все так просто. Надо учесть, что он может автоматически удалится платформой через 20 минут после создания. Я на это наткнулся когда у меня было много долгоиграющих фоновых заданий установленных на ночь. Чтобы исправить - сериализовал двоичные данные обработки в двоичные данные, перевел в base64 и таскаю через параметры записывая во временный файл прямо перед запуском нового фонового задания.
annak2906; solinik; prog1c_vl; Al3x; mrChOP93; dsdred; BigB; +7 Ответить
4. Avatarzorro 77 14.02.25 07:34 Сейчас в теме
(3) Не то чтобы может, а это прямо прописано в документации к методу ПолучитьИмяВременногоФайла()
mrChOP93; BigB; +2 Ответить
6. kalyaka 1182 14.02.25 09:29 Сейчас в теме
(4)
а это прямо прописано в документации
Если быть точнее, то в документации написано
Если файл не будет удален средствами встроенного языка, он будет удален платформой при следующем запуске.
Дополнительно в клиент-серверном варианте:
1. файлы, созданные во время работы сеанса, будут удалены в течение 20 минут после завершения сеанса.
2. (недоступно в режиме совместимости 8.3.16 и ниже) файлы, созданные во время серверного вызова, будут удалены через 20 минут после завершения этого вызова.
т.е. после завершения сеанса/серверного вызова
mirokiro; +1 Ответить
5. Xershi 1561 14.02.25 09:17 Сейчас в теме
Не плохо бы привести ссылку на ИТС, где всё разжевано и больше вариативности.
10. Avatarzorro 77 14.02.25 10:17 Сейчас в теме
(5) если бы была ссылка на итс, то этой статьи как других по этой тематике бы не было
12. Xershi 1561 14.02.25 10:57 Сейчас в теме
(10) она есть, я пользовался. И даже в парочке таких статей писал, но тут автор выложил бесплатно файл, поэтому грех статью не закинуть!
14. Avatarzorro 77 17.02.25 01:57 Сейчас в теме
(12) если находил то кинь. Вставлю в пост. Я не находил
18. Xershi 1561 17.02.25 13:52 Сейчас в теме
19. Avatarzorro 77 17.02.25 17:40 Сейчас в теме
(18) так по ссылке описание длительных операций бсп для выполнния из конфигурации, а не из внешней обработки. Статья именно о внешней
21. Xershi 1561 17.02.25 17:47 Сейчас в теме
(19) принцип тот же. Я не говорил что на ИТС внешняя обработка. Я писал, что подходы к разработке описаны плюс расширены возможности работы с данными.
А внешняя обработка скорее всего есть в демке БСП. Но у меня свои наработки туда нет нужды лезть.
Да и в добавок весь текст и картинки это именно выполнение длительной операции на сервере.
22. Avatarzorro 77 17.02.25 17:54 Сейчас в теме
(21) без всего текста не показать. Плюс для демонстрационной обработки нужен полный цикл.

А в самом методе мало того что нет описания которое обычно сверху, так и на итсе тоже ничего нет (именно про внешнюю обработку)
23. Xershi 1561 17.02.25 18:34 Сейчас в теме
(22) ты раскопал внешнюю обработку из демки БСП? Не понял про что ты.
24. Avatarzorro 77 17.02.25 18:50 Сейчас в теме
(23) нет. я все писал сам с помощью гугла. Без полного цикла (просто запуск процедуры в фоне) не показать пример запуска в фоне для внешней обработки. А статьи по запуску в фоне именно внешней обработки на итсе нет. Ну а т.к. эта статья про запуск в фоне именно внешей обработки, то статья на итс по запуску в фоне (из конфигурации) здесь не нужна
43. Xershi 1561 12.03.25 00:52 Сейчас в теме
(24) на днях написал универсальную обработку, как раз будет пример сравнения.
Плюс куча фишек в догонку.
16. maksa2005 380 17.02.25 12:40 Сейчас в теме
попробовал 2 варианта. оба без вывода окна о фоновом выполнении
17. maksa2005 380 17.02.25 12:42 Сейчас в теме
оба действия выполняются на сервере и блокируют работаю пользователя.
20. Avatarzorro 77 17.02.25 17:44 Сейчас в теме
(17) нужно больше инфы.
напиши конфу, релиз, платформу, тип клиента. Можешь скрин "о программе" кинуть

Статья для запуска в тонком клиенте УФ
25. maksa2005 380 17.02.25 19:41 Сейчас в теме
(20) вот
отбой. я проверял на толстом клиенте!
Прикрепленные файлы:
26. Avatarzorro 77 17.02.25 19:46 Сейчас в теме
(25) не знаю че за конфа, но бухня 3.0.110....там бсп сильно старее чем 3.1.10. Там 3.1.7 или старше. На старых версиях не тестил. В общем покури общий модуль ДлительныеОперации Там должно быть. думаю не составит проблем это адаптировать
27. maksa2005 380 18.02.25 08:56 Сейчас в теме
(26) все получилось на тонком клиенте. странно. почему на толстом такое не отрабатывает. в плане индикации
28. Avatarzorro 77 18.02.25 08:59 Сейчас в теме
(27) потому что толстый клиент почти = сервер по факту и все вычисления делаются на клиентской машине
29. maksa2005 380 18.02.25 08:59 Сейчас в теме
(28) ясно. ок. благодарю!
30. maksa2005 380 18.02.25 12:10 Сейчас в теме
(28) скажите а как получить результат сделанные на сервере? я про АдресРезультата
31. maksa2005 380 18.02.25 12:12 Сейчас в теме
(28) а отбой.
ПоместитьВоВременноеХранилище(Данные,Новый УникальныйИдентификатор);
34. Avatarzorro 77 18.02.25 15:59 Сейчас в теме
(31) в адресе уже ест адрес. Нужно просто ПоместитьВоВременноеХранилище(Данные, АдресРезультата);

Я там заранее ложу ничего по адресу чтоб получить адрес
32. maksa2005 380 18.02.25 12:43 Сейчас в теме
все равно не понимаю
ОперацияНаМинуту(Параметры, АдресРезультата) Экспорт

Данные = ТекущаяДата;
ПоместитьВоВременноеХранилище(Данные,АдресРезультата);

АдресРезультата - уже есть, но после выполнения

Результат.АдресРезультата = пустое значение.
как получить его?
35. Avatarzorro 77 18.02.25 16:01 Сейчас в теме
(32) Вообще адрес в таком случае нужен для функций. В примере процедура. По факту адрес там бесполезен, но иначе оно не работает, т.к. ранее через ДлительныеОперации.ВыполнитьВФоне() нужно было минимум 2 параметра, 1 из которых адрес
36. maksa2005 380 19.02.25 07:31 Сейчас в теме
(35) я вышел из ситуации по адресу, но с отчетом - встал в ступор(
37. Avatarzorro 77 19.02.25 08:05 Сейчас в теме
(36) отчеты формируются по другому. Тут такой метод не подойдет. Щас в типовых конфигурациях подключенные отчеты они в фоне формируют. Можешь попробовать поотлаживать, полюбому найдешь. Там не должно быть сложно. А использовать отчеты через "файл-открыть" лютейшая дичь
38. maksa2005 380 19.02.25 08:06 Сейчас в теме
(37)
А использовать отчеты через "файл-открыть" лютейшая дичь

не понял...
39. Avatarzorro 77 19.02.25 08:10 Сейчас в теме
(38) Отчеты как правило используются на постоянку. Если тебе нужен отчет на 1 раз, то делать его в фоне ради этого без подключения в справочник смысла особо не имеет (имхо).Да и внешние отчеты редко собираются долго. Обычно это вызвано криворукостью самого отчета.

В случае обработок же может понадобится сделать что-то объемное разово. Поэтому здесь выполнение в фоне без подключения в справочник имеет смысл.

кури в сторону ОтчетыСервер.ПодключитьСхему() и целом весь этот модуль
40. maksa2005 380 19.02.25 08:11 Сейчас в теме
33. maksa2005 380 18.02.25 15:26 Сейчас в теме
Работает только для дополнительных обработок, если указать как внешний отчет - не видит саму экспортную процедуру!
42. eudgan 03.03.25 13:52 Сейчас в теме
Спасибо, помогли разобраться. Просто и понятно
44. zurg 12.03.25 09:32 Сейчас в теме
Создаем макет двоичных данных куда помещаем саму обработку и используем в параметрах выполнения. ДополнительнаяОбработкаСсылка не нужна!

ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ДвоичныеДанные = ОбработкаОбъект.ПолучитьМакет("ВнешняяОбработкаДД");

ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ВнешнийОтчетОбработка = ДвоичныеДанные;

СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьФункцию ...
fom_iv@list.ru; +1 Ответить
46. badday 29.10.25 17:05 Сейчас в теме
Подскажите, пожалуйста, при использовании внешней обработки использовать ДлительныеОперации.ВыполнитьФункцию нельзя? Почему использовали именно ДлительныеОперации.ВыполнитьПроцедуру?
48. Avatarzorro 77 06.11.25 04:32 Сейчас в теме
(46) можно поидее. Просто обычно внешние обработки нужны для обработок, т.е. для процедур и особо нет смысла получать из них какое-то значение
50. badday 06.11.25 17:19 Сейчас в теме
(48) Как раз наоборот, например можно получить результат. В случае с функцией, результат сразу должен быть по адресу Результат.АдресРезультата и не надо передавать адрес хранилища и где-то его хранить. Но почему-то с функцией не получается именно во внешней обработке. В остальном статья полезная. Спасибо!
52. Vinzor 121 10.03.26 15:17 Сейчас в теме
(50) С помещением в фон метода "Функция".
"Результат.АдресРезультата" - там ерунда какая-то.

Я этот адрес
Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);

забираю в метод запуска в фоне и передаю в Описание оповещения.
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьЗавершение", ЭтотОбъект, Адрес);

А уже там извлекаю из хранилища результат вот так
Результат = ПолучитьИзВременногоХранилища(Адрес);

и там коллекция, которая мне нужна.
А чтобы она там точно была, в основном методе исполнения, который исполняется в фоне, результат (у меня таблица значений) пакую в массив структур (уход от мутабельности) и помещаю в хранилище. "Адрес результата" - это параметр "Адрес", что описан выше
Если НЕ ПустаяСтрока(АдресРезультата) Тогда
	Итог = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТЗ); 	
	ПоместитьВоВременноеХранилище(Итог, АдресРезультата);
Иначе ...
47. distorshion 31 31.10.25 17:42 Сейчас в теме
Как серверную процедуру в модуле обработки можно отладить?
49. Avatarzorro 77 06.11.25 04:34 Сейчас в теме
(47) этим методом никак, т.к. это уже другой файл создается. Только на форме прописать кнопку и вручную вызвать без фона напрямую
РеквизитФормыВЗначение("ОбъектОбработки").ИмяПроцедуры(Параметр1, Параметры2...);
51. EvgeTrofi 144 31.01.26 04:48 Сейчас в теме
Молодец!
Хорошая статья.

Доработал немного код кнопки, чтобы было универсально:
&НаКлиенте
Асинх Процедура ВыполнитьВФоне(Команда)
	// Получаем путь к файлу нашей обработки
    Имя = ИмяФайлаОбработки();

	Если СтрНачинаетсяС(Имя, "e1cib\tempstorage\") Тогда
		// Используем справочник «Дополнительные отчеты и обработки»
		ДлительнаяОперация = ВыполнитьВФонеНаСервереЧерезСправочник();
	Иначе
	    // Помещаем на сервер
    	Описание = Ждать ПоместитьФайлНаСерверАсинх(,,, Имя, УникальныйИдентификатор);
	    Адрес = Описание.Адрес;
	    ДлительнаяОперация = ВыполнитьВФонеНаСервере(Адрес);
	КонецЕсли;

    ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
    ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
    ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;

    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыполенияОбработки", ЭтотОбъект);

    ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
КонецПроцедуры
Показать
53. tkv44 22.05.26 10:54 Сейчас в теме
Спасибо автору. Первая статья, где всё взлетело сразу как надо.
Для отправки сообщения требуется регистрация/авторизация