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

13.02.25

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

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

Скачать файл

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

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

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

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

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

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


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

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

 

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


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

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



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

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



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


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

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

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

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

См. также

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

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

15500 руб.

02.09.2020    180170    1001    403    

954

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

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

8400 руб.

20.08.2024    21590    144    81    

144

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    19413    51    19    

84

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

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

15000 руб.

10.11.2023    13175    55    33    

74

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    29534    101    48    

147

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

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18799    7    32    

43

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1941    2    0    

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

так же абсолютно во всех 3х примера есть куча бессмысленного текста(кода) не относящегося к теме вопроса
randomus; mrChOP93; +2 Ответить
13. alex_sayan 58 16.02.25 13:21 Сейчас в теме
(2) тут банальное использование возможностей БСП
11. user1832003 53 14.02.25 10:18 Сейчас в теме
(1) Делал чисто как шпаргалку для себя, т.к. хранить в "гугле" такие вещи проще.
41. elian 146 22.02.25 02:53 Сейчас в теме
(1) Таких статей куча. Да. Но... У всех какие-то свои косяки... у всех какие-то свои костыли... у всех какие-то свои подходы... у всех чего-то своего наверчено явно лишнего... и у всех по-своему некрасиво и нелаконично...

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

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

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

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

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

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

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

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

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

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

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

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

СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьФункцию ...
Оставьте свое сообщение