Выполнение внешней обработки в фоне с выводом прогресса. Максимум использования БСП
Разработка - Инструментарий разработчика
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
| Наименование | Скачано | Бесплатно |
|---|---|---|
|
Выполнение внешней обработки в фоне с выводом прогресса. Максимум использования БСП:
.epf 8,57Kb
670
|
670 | Скачать бесплатно |
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Дисклеймер. Делаю больше себе шпаргалку на будущее, чтоб не воспроизводить все это руками, когда потребуется. Плюс все что находил тут так или иначе содержит какие-то костыли которые можно не использовать. А тут готовый вариант Ctrl+C Ctrl+V.
Нам потребуется внешняя обработка. Любая.
В модуле объекта нам потребуется процедура или функция, которая будет выполнять нашу длительную операцию. Для примера сделал процедуру имитирующей длительную операцию на минуту.
Процедура ОперацияНаМинуту(Параметры, АдресРезультата) Экспорт
ДатаНачала = ТекущаяДата();
ТекущаяДата = ДатаНачала;
Задержка = 60;
ТекущаяДатаЧерезМинуту = ТекущаяДата + Задержка;
Пока ТекущаяДата < ТекущаяДатаЧерезМинуту Цикл
ТекущаяДата = ТекущаяДата();
РазностьСекунд = ТекущаяДата - ДатаНачала;
// Сообщим прогресс методом БСП
ДлительныеОперации.СообщитьПрогресс(Формат((РазностьСекунд / Задержка) * 100, "ЧДЦ=2"), СтрШаблон( "Прошло %1 секунд из %2", РазностьСекунд, Задержка));
ТекущаяДата = ТекущаяДата();
КонецЦикла;
КонецПроцедуры
Далее у нас есть форма обработки. на ней у нас может быть все что угодно, но нас интересует только кнопка, запускающая нашу длительную операцию.
&НаКлиенте
Асинх Процедура ВыполнитьВФоне(Команда)
// Получаем путь к файлу нашей обработки
Имя = ИмяФайлаОбработки();
// Помещаем на сервер
Описание = Ждать ПоместитьФайлНаСерверАсинх(,,, Имя, УникальныйИдентификатор);
Адрес = Описание.Адрес;
ДлительнаяОперация = ВыполнитьВФонеНаСервере(Адрес);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыполенияОбработки", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция ВыполнитьВФонеНаСервере(АдресФайлаНаСервере)
// Создаем файл в каталоге временных файлов на сервере. Ровно тоже самое будет делать БСП если делать с подключенной обработкой
ИмяФайлаНаСервере = ПолучитьИмяВременногоФайла("epf");
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайлаНаСервере);
ДанныеФайла.Записать(ИмяФайлаНаСервере) ;
ПараметрыВыполненияПроцедуры = ДлительныеОперации.ПараметрыВыполненияПроцедуры();
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ИмяОбработки", ИмяФайлаНаСервере);
ПараметрыВыполнения.Вставить("ИмяМетода", "ОперацияНаМинуту");
ПараметрыВыполнения.Вставить("ЭтоВнешняяОбработка", Истина);
ПараметрыВыполнения.Вставить("ПараметрыВыполнения", Новый Структура); // Тут параметры произвольным значением. Обычно структурой если их несколько
Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
// ДлительныеОперации.ВыполнитьВФоне() устарело. Поэтому используем более современное
// Единственная странность, что у процедуры ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки() нет конструктора параметров как
// ДлительныеОперации.ПараметрыВыполненияПроцедуры() или ДлительныеОперации.ПараметрыВыполненияПФункции()
// Однако параметры по примеру ВыполнитьВФоне(), т.е. их 2. 1 - параметры для процедуры\функции, 2 - адрес результата
Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполненияПроцедуры, "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки", ПараметрыВыполнения, Адрес);
КонецФункции
&НаКлиенте
Процедура ВыполнитьВФонеЧерезСправочник(Команда)
ДлительнаяОперация = ВыполнитьВФонеНаСервереЧерезСправочник();
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыполенияОбработки", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
КонецПроцедуры
&НаСервере
Функция ВыполнитьВФонеНаСервереЧерезСправочник()
ПараметрыВыполненияПроцедуры = ДлительныеОперации.ПараметрыВыполненияПроцедуры();
// Искать лучше по имени объекта, т.к. все остальное можно переопределить в предприятии
ДополнительнаяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", НаименованиеОбработки());
ПараметрыВыполнения = Новый Структура;
//++ В этом случае по факту у этих параметров идет дублирование
ПараметрыВыполнения.Вставить("ИмяОбработки", "ВнешняяОбработка.ОперацияНаМинуту");
ПараметрыВыполнения.Вставить("ИмяМетода", "ОперацияНаМинуту");
//--
ПараметрыВыполнения.Вставить("ЭтоВнешняяОбработка", Истина);
ПараметрыВыполнения.Вставить("ПараметрыВыполнения", Новый Структура); // Тут параметры произвольным значением. Обычно структурой если их несколько
ПараметрыВыполнения.Вставить("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработкаСсылка);
Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
// ДлительныеОперации.ВыполнитьВФоне() устарело. Поэтому используем более современное
// Единственная странность, что у процедуры ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки() нет конструктора параметров как
// ДлительныеОперации.ПараметрыВыполненияПроцедуры() или ДлительныеОперации.ПараметрыВыполненияПФункции()
// Однако параметры по примеру ВыполнитьВФоне(), т.е. их 2. 1 - параметры для процедуры\функции, 2 - адрес результата
Возврат ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполненияПроцедуры, "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки", ПараметрыВыполнения, Адрес);
КонецФункции
Разница между двумя вариантами лишь в том, что через "Файл - открыть" через бсп будет всегда включен безопасный режим.
&НаСервере
Функция ИмяФайлаОбработки()
Возврат РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла;
КонецФункции
&НаСервере
Функция НаименованиеОбработки()
Возврат РеквизитФормыВЗначение("Объект").Метаданные().Имя;
КонецФункции
Ну и пример процедуры ОписаниеОповещения после завершения нашей операции
&НаКлиенте
Процедура ПослеВыполенияОбработки(Результат, ДопПараметры) Экспорт
Текст = "Завершено";
Если Результат = Неопределено Тогда
Текст = "Задание отменено";
ИначеЕсли Результат.Статус = "Ошибка" Тогда
Текст = "Выполение завершилось с ошибкой";
ИначеЕсли Результат.Статус = "Выполнено" Тогда
Текст = "Завершено успешно";
КонецЕсли;
ОбщегоНазначенияКлиент.СообщитьПользователю(Текст);
КонецПроцедуры
Обработка с двумя примерами в закрепе.
Все описанное тестировалось на БСП 3.1.10.х.
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.30.117
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 14178 123 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83575 431 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 286261 1609 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 17099 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44397 123 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 77336 147 41
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28843 104 46
Задачи пользователя Инструментарий разработчика Корректировка данных Закрытие периода Разработчик Аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)
Обработка предназначена для поиска, анализа и исправления отрицательных остатков во всех регистрах накопления информационной базы 1С.
6100 руб.
27.02.2026 3264 19 3
как минимум во всех 3х вариантах платные примеры, что, по моему мнению, полнейшая дичь. Это не уникальный или суперсложный контент чтобы продавать его, да еще и с пачкой костылей в придачу.
так же абсолютно во всех 3х примера есть куча бессмысленного текста(кода) не относящегося к теме вопроса
Да... И тут тоже самое!
Дополнительно в клиент-серверном варианте:
1. файлы, созданные во время работы сеанса, будут удалены в течение 20 минут после завершения сеанса.
2. (недоступно в режиме совместимости 8.3.16 и ниже) файлы, созданные во время серверного вызова, будут удалены через 20 минут после завершения этого вызова.
А внешняя обработка скорее всего есть в демке БСП. Но у меня свои наработки туда нет нужды лезть.
Да и в добавок весь текст и картинки это именно выполнение длительной операции на сервере.
А в самом методе мало того что нет описания которое обычно сверху, так и на итсе тоже ничего нет (именно про внешнюю обработку)
напиши конфу, релиз, платформу, тип клиента. Можешь скрин "о программе" кинуть
Статья для запуска в тонком клиенте УФ
Я там заранее ложу ничего по адресу чтоб получить адрес
ОперацияНаМинуту(Параметры, АдресРезультата) Экспорт
Данные = ТекущаяДата;
ПоместитьВоВременноеХранилище(Данные,АдресРезультата);
АдресРезультата - уже есть, но после выполнения
Результат.АдресРезультата = пустое значение.
как получить его?
В случае обработок же может понадобится сделать что-то объемное разово. Поэтому здесь выполнение в фоне без подключения в справочник имеет смысл.
кури в сторону ОтчетыСервер.ПодключитьСхему() и целом весь этот модуль
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ДвоичныеДанные = ОбработкаОбъект.ПолучитьМакет("ВнешняяОбработкаДД");
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
ПараметрыВыполнения.ЗапуститьВФоне = Истина;
ПараметрыВыполнения.ВнешнийОтчетОбработка = ДвоичныеДанные;
СтруктураФоновогоЗадания = ДлительныеОперации.ВыполнитьФункцию ...
"Результат.АдресРезультата" - там ерунда какая-то.
Я этот адрес
Адрес = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);забираю в метод запуска в фоне и передаю в Описание оповещения.
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьЗавершение", ЭтотОбъект, Адрес);
А уже там извлекаю из хранилища результат вот так
Результат = ПолучитьИзВременногоХранилища(Адрес);и там коллекция, которая мне нужна.
А чтобы она там точно была, в основном методе исполнения, который исполняется в фоне, результат (у меня таблица значений) пакую в массив структур (уход от мутабельности) и помещаю в хранилище. "Адрес результата" - это параметр "Адрес", что описан выше
Если НЕ ПустаяСтрока(АдресРезультата) Тогда
Итог = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТЗ);
ПоместитьВоВременноеХранилище(Итог, АдресРезультата);
Иначе ...
РеквизитФормыВЗначение("ОбъектОбработки").ИмяПроцедуры(Параметр1, Параметры2...);Хорошая статья.
Доработал немного код кнопки, чтобы было универсально:
&НаКлиенте
Асинх Процедура ВыполнитьВФоне(Команда)
// Получаем путь к файлу нашей обработки
Имя = ИмяФайлаОбработки();
Если СтрНачинаетсяС(Имя, "e1cib\tempstorage\") Тогда
// Используем справочник «Дополнительные отчеты и обработки»
ДлительнаяОперация = ВыполнитьВФонеНаСервереЧерезСправочник();
Иначе
// Помещаем на сервер
Описание = Ждать ПоместитьФайлНаСерверАсинх(,,, Имя, УникальныйИдентификатор);
Адрес = Описание.Адрес;
ДлительнаяОперация = ВыполнитьВФонеНаСервере(Адрес);
КонецЕсли;
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыполенияОбработки", ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
КонецПроцедуры
ПоказатьВы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 2313281
Создание 13.02.25 16:30
Обновление 13.02.25 16:30
Просмотры 17770
Загрузки 672
Рейтинг
79
Комментарии 53
Код открыт Да
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация 1С:Библиотека стандартных подсистем
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)