Индикатор выполнения длительных операций на сервере 1С 8.3 (управляемые формы)

03.06.19

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

Индикатор выполнения (отображение прогресса) длительных операций в тонком клиенте 1С:Предприятия 8.3, когда полностью весь код исполняется на сервере, а клиент просто ждёт завершения. Используются внешние средства (либо командное окно Windows, либо приложение Java).

Скачать файл

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

Наименование По подписке [?] Купить один файл
Индикатор выполнения длительных операций на сервере 1С 8.3 управляемые формы:
.zip 10,03Kb ver:1.0
4
4 Скачать (1 SM) Купить за 1 850 руб.

Предисловие

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

Как это работает у меня

Реализовал два варианта.

Первый работает в командном окне Windows. По сути это командный файл, который в процессе работы добавляет строки в консоль. Не очень красиво. Зато просто и работает везде. В архиве это файл progress.cmd.

Второй вариант - это Java-приложение для Java 8 (JRE 1.8). Красивое маленькое окно с прогресс-баром. Нужно устанавливать виртуальную машину Java. В архиве это файл ProgressBar.jar.

Описание

В локальной сети имеем общую сетевую папку с правами на чтение и запись как со стороны Клиента, так и со стороны Сервера. Туда кладём нашу внешнюю программу индикации (progress.cmd или ProgressBar.jar, или оба варианта). Там же будут создаваться временные файлы. Сервер будет создавать файлы и писать в них. Программа с клиентской машины будет читать файлы и затем удалять их.

На клиенте, перед запуском длительной операции, генерируется уникальное имя файла для передачи его на Сервер и в нашу программку. После этого на Клиенте запускается внешнее приложение для индикации, куда в качестве параметра передаётся это имя файла. И уже после этого вызывается серверная процедура, с именем файла в параметрах.

Клиент 1С, скажем так, "подвисает", ожидая завершения операции. Но наша программулина работает и отображается поверх окна 1С.

Код на Клиенте:

Если ПоказыватьПроцентВыполнения И ЗначениеЗаполнено(ОбщаяСетеваяПапка) Тогда
	
	Если СпособИндикации = 0 Тогда
		
		ПрограммаИндикации = ОбщаяСетеваяПапка + ?(Прав(ОбщаяСетеваяПапка, 1) = "\", "", "\") + "progress.cmd";
		
		ФайлПрограммы = Новый Файл(ПрограммаИндикации);
		Если ФайлПрограммы.Существует() Тогда
			
			УникальноеИмяФайла = Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + "_" + Строка(Новый УникальныйИдентификатор) + ".txt";
			ИмяФайлаИндикации = ОбщаяСетеваяПапка + ?(Прав(ОбщаяСетеваяПапка, 1) = "\", "", "\") + УникальноеИмяФайла;
			СтруктураПараметров.Вставить("ИмяФайлаИндикации", ИмяФайлаИндикации);
			
			ЗапуститьПриложение(ПрограммаИндикации + " " + ИмяФайлаИндикации);
			
		КонецЕсли;
		
		ФайлПрограммы = Неопределено;
		
	Иначе
		
		ПрограммаИндикации = ОбщаяСетеваяПапка + ?(Прав(ОбщаяСетеваяПапка, 1) = "\", "", "\") + "ProgressBar.jar";
		
		ФайлJava      = Новый Файл(ПутьКJava);
		ФайлПрограммы = Новый Файл(ПрограммаИндикации);
		
		Если ФайлJava.Существует() И ФайлПрограммы.Существует() Тогда
			
			УникальноеИмяФайла = Формат(ТекущаяДата(), "ДФ=yyyyMMddHHmmss") + "_" + Строка(Новый УникальныйИдентификатор) + ".txt";
			ИмяФайлаИндикации = ОбщаяСетеваяПапка + ?(Прав(ОбщаяСетеваяПапка, 1) = "\", "", "\") + УникальноеИмяФайла;
			СтруктураПараметров.Вставить("ИмяФайлаИндикации", ИмяФайлаИндикации);
			
			ЗапуститьПриложение(ПутьКJava + " -jar " + ПрограммаИндикации + " " + ИмяФайлаИндикации);
			
		КонецЕсли;
		
		ФайлJava      = Неопределено;
		ФайлПрограммы = Неопределено;
		
	КонецЕсли;
	
КонецЕсли;

ЗагрузитьДокументыСервер(СтруктураПараметров);

ПутьКJava должен содержать что-то вроде "c:\Program Files\Java\jdk1.8.0_211\bin\javaw.exe". Это куда установлен JRE на клиентской машине.

ОбщаяСетеваяПапка - например: "\\FileServer\Public".

Код на Сервере

На Сервере создаётся временный файл в кодировке DOS (OEM).

Если ЗначениеЗаполнено(СтруктураПараметров.ИмяФайлаИндикации) Тогда
	ТекстДок = Новый ТекстовыйДокумент;
	ТекстДок.ДобавитьСтроку("Начало чтения файлов");
	Попытка
		ТекстДок.Записать(СтруктураПараметров.ИмяФайлаИндикации, КодировкаТекста.OEM);
	Исключение
	КонецПопытки;
КонецЕсли;

По мере работы процедуры в ПЕРВУЮ строку файла будем писать текущий процент выполнения в виде: 25,0%. Здесь важно поставить знак процента после числа, а перед числом ничего не должно быть, т.е. оно стоит вначале строки. Также можно записывать некоторые короткие информационные сообщения в одну строку.

Индикатор = Индикатор + 1;
Если Индикатор > 0 И Индикатор % 100 = 0 Тогда
	ТекстДок.Очистить();
	ТекстДок.ДобавитьСтроку(?(ВсегоСтрок = 0, "ожидайте", Формат(Индикатор * 100 / ВсегоСтрок, "ЧДЦ=1; ЧГ=0") + "%"));
	Попытка
		ТекстДок.Записать(ПараметрыСервер.ИмяФайлаИндикации, КодировкаТекста.OEM);
	Исключение
	КонецПопытки;
КонецЕсли;

Когда Сервер завершит все свои дела, во временный файл записываем служебное слово "stop". Это будет сигналом к закрытию программы индикации.

ТекстДок.Очистить();
ТекстДок.ДобавитьСтроку("stop");
Попытка
	ТекстДок.Записать(СтруктураПараметров.ИмяФайлаИндикации, КодировкаТекста.OEM);
Исключение
КонецПопытки;
ТекстДок = Неопределено;

Что делает программа индикации. Она через каждые 5 секунд читает временный файл и выводит то, что содержится в первой строке. Вариант с Java при этом преобразовывает считанное в число и показывает прогресс-бар. Как только программа встречает "stop", удаляет временный файл и закрывается.

Надо добавить ещё вот что. Пользователь может раньше времени закрыть программу индикации. Тогда временный файл не будет удалён. Поэтому на Клиенте надо по завершении проверить, не осталось ли чего, и удалить мусор.

P.S. Для скачивания выкладываю только внешние приложения *.cmd и *.jar. Код для 1С весь приведён в описании, поэтому оформлять в тестовую обработку не стал. Всё равно его вставлять кусками в разные места.

индикация прогресс процент выполнение длительный клиент сервер java

См. также

SALE! %

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    164899    914    402    

889

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

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

8400 руб.

20.08.2024    9837    81    36    

90

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

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

22200 руб.

06.10.2023    16240    39    9    

75

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

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

9360 руб.

17.05.2024    24941    81    48    

125

SALE! %

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

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

15000 10000 руб.

10.11.2023    11027    40    27    

66

SALE! %

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

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    189420    1146    0    

916

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

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

2220 руб.

21.02.2023    8291    8    38    

24

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103530    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 03.06.19 11:22 Сейчас в теме
слишком сложно, слишком много если и слишком дорого.

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

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

посему колесико и котик из БСП лично меня устраивает больше чем масса сомнительно кода с вагоном требований и ограничений.
Wdivine; 127.0.0.0; vvp117; Evg-Lylyk; JohnConnor; wowik; IvanBoychuk123; zeegin; shalimski; +9 Ответить
2. D.B.Sokolov 75 03.06.19 12:20 Сейчас в теме
(1) У меня как раз пользователи этим занимаются. Это применяется в обработке, которая загружает в базу кучу документов из другой программы.Колесо и котик как раз не работают. т.к. процедуры обработки запускаются не в фоне. Колесо не крутится, кот не шевелится.
5. Xershi 1553 03.06.19 15:59 Сейчас в теме
(2) переписать на внешнюю обработку. Там и котик и прогресс есть и доп текст тоже! На ИС уже появилась толковая статья, проверял у себя все работает с БСП 2.3.
7. D.B.Sokolov 75 03.06.19 16:13 Сейчас в теме
(5)
На ИС уже появилась толковая статья

Ссылочку бы на статью...
8. Xershi 1553 03.06.19 16:15 Сейчас в теме
(7) добавил в избранное, ловите
https://infostart.ru/public/1058914/
D.B.Sokolov; +1 Ответить
10. D.B.Sokolov 75 03.06.19 16:33 Сейчас в теме
3. D.B.Sokolov 75 03.06.19 15:13 Сейчас в теме
4. Serj1C 483 03.06.19 15:47 Сейчас в теме
Спасибо за идею. Реализовал в своем проекте (на базе cmd)
D.B.Sokolov; +1 Ответить
6. Serj1C 483 03.06.19 16:12 Сейчас в теме
(4) пришлось изрядно повозиться, чтобы победить проблему кодировок
9. D.B.Sokolov 75 03.06.19 16:22 Сейчас в теме
(6) Если писать в КодировкаТекста.OEM, то и проблем, вроде, не должно быть.
11. lazarenko 240 05.06.19 07:59 Сейчас в теме
Система оповещения решает эту задачу
12. D.B.Sokolov 75 05.06.19 11:54 Сейчас в теме
(11) В смысле, "Система взаимодействия" или что-то другое имеете в виду?
13. lazarenko 240 06.06.19 14:32 Сейчас в теме
14. herfis 513 06.06.19 14:38 Сейчас в теме
Или я чего-то не понял, или задача решается без лишних приблуд.
Еще 5 лет назад рисовал: https://infostart.ru/public/274721/
15. D.B.Sokolov 75 06.06.19 18:27 Сейчас в теме
(14) Сначала показалось, что это большие дебри. Вместо того, чтобы влезать в них, решил, что проще писать в TXT и читать оттуда. К тому же БСП постоянно меняется (неожиданно), и зависеть от неё не хотелось.
Потом подумал, что прикольно будет написать на Java. Родилась вот такая идея.
Ещё видел у кого-то вариант, писать в HTML-файл с параметром автообновления страницы. Но запускать целый браузер ради индикации, не очень как-то.
Но теперь всё-таки решил, что надо будет разобраться в стандартных механизмах. Наверное, оно того стоит.
20. herfis 513 07.06.19 09:00 Сейчас в теме
(15)
К тому же БСП постоянно меняется (неожиданно), и зависеть от неё не хотелось.

Поэтому обжегшись пару раз, я постарался свести зависимости к разумному минимуму.
К сожалению, полностью универсально сделать невозможно, так как для запуска в фоне процедуры внешней обработки необходима как минимум функция общего модуля, умеющая запускать произвольный код. В БСП она хоть стандартная.
Но тащить внешние зависимости и жертвовать переносимостью ради прогресс-бара - это эребор для продуктового решения.
В качестве задачки для самообучения с уклоном в смежные технологии - понять могу.
D.B.Sokolov; +1 Ответить
17. D.B.Sokolov 75 06.06.19 19:24 Сейчас в теме
18. independ 1552 06.06.19 20:39 Сейчас в теме
(17) да кстати, пробовал, работает
19. independ 1552 07.06.19 04:41 Сейчас в теме
Оставьте свое сообщение