Графический индикатор процесса в табличной части на Управляемых формах

05.02.14

Разработка - Работа с интерфейсом

Графический индикатор процесса на Управляемых формах, для любой ячейки в табличной части формы

Скачать файлы

Наименование Файл Версия Размер
ШаблонОбработки.epf
.epf 32,37Kb
105
.epf 32,37Kb 105 Скачать

Изначально искал, как сделать индикатор процесса в управляемых формах. Почти все ссылки с интернета идут на этот сайт, в результате понял что индикатор делается через функцию Сообщить().
Но тут задумался, а чего бы не сделать чтоб в таблице на форме в одной колонке можно было вывести индикатор для каждой строки?
оказалось не так и сложно, больше времени ушло на прорисовку графического индикатора для каждого процента (итого 100 картинок)
Дальше встал вопрос как их вместить в обработку и как вызывать?
в результате получилась вот такая вот обработка, которая содержит в себе кучу примеров работы в управляемых формах, а именно:
1. вывод картики в ячейки табличной части через навигационную ссылку
2. обращение к макету и вытаскивание из него картинок
3. создание навигационных ссылок для внешних графических файлов, и подсовование их "на лету" в форму

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

&НаСервере
Функция   ВернутьНовигационнуюСсылку()
	Макет=РеквизитФормыВЗначение("Объект").ПолучитьМакет("Индикатор");
	Возврат Макет;
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	 // подготовим навигационные ссылки из макета
	МакетИндикатор = ВернутьНовигационнуюСсылку();
	НулевойСсылка="";
	Для каждого ЭлРисунок из МакетИндикатор.Рисунки Цикл
		УИД=новый УникальныйИдентификатор;
		СсылкаНаКартинку=ПоместитьВоВременноеХранилище(ЭлРисунок.Картинка,УИД);
		ЭтотОбъект.ПроцентыНавигационныеСсылки.Добавить(СсылкаНаКартинку);
		Если НулевойСсылка="" Тогда
			НулевойСсылка=СсылкаНаКартинку;
		КонецЕсли;
	КонецЦикла;
	// с процентами
	нов =Объект.ТабличнаяЧасть1.Добавить();;
	инд=нов.ПолучитьИдентификатор();
	нов.Реквизит1="1000";
	нов.Реквизит3 ="С процентами";
	нов.Реквизит4=НулевойСсылка;
	
	// без процентов
	нов =Объект.ТабличнаяЧасть1.Добавить();;
	инд=нов.ПолучитьИдентификатор();
	нов.Реквизит1="2000";
	нов.Реквизит3 ="Без процентов";
	нов.Реквизит4=НулевойСсылка;
КонецПроцедуры

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

&НаКлиенте
Процедура ВыполнитьОбработку(Команда)
	ТонкийКлиент = Истина;
	#Если ТолстыйКлиентУправляемоеПриложение Тогда
		ТонкийКлиент = Ложь;
	#КонецЕсли
	
	Состояние("Выполнение запроса...");
	КоличествоЭлементов = ВыполнитьЗапрос(ТонкийКлиент);
	Если КоличествоЭлементов = 0 Тогда
		Возврат;
	КонецЕсли;
	ОчиститьСообщения();

	СПроцентами = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(0);
	
	БезПроцентов = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(1);

	Процент=0;
	Индикатор = ПолучитьИндикаторПроцесса(КоличествоЭлементов);
	Для сч = 0 По КоличествоЭлементов  Цикл
		//ОбработатьРезультатЗапроса(сч, ТонкийКлиент);
		
		ОбработатьИндикатор(Индикатор, сч + 1);
		
		Символов=Цел(Сч / КоличествоЭлементов * 100);
		Если Процент<>Символов Тогда
			Процент=Символов;
			
            //Нов.Реквизит2 =Нов.Реквизит2+"|";
			СПроцентами.Реквизит4 = ЭтотОбъект.ПроцентыНавигационныеСсылки.Получить(Процент);
			СПроцентами.Реквизит2 =Строка(Процент)+"%";//Нов.Реквизит2+"|";

			БезПроцентов.Реквизит4 = ЭтотОбъект.ПроцентыНавигационныеСсылки.Получить(Процент);
	
			Элементы.Таблица1.Обновить();
		КонецЕсли;	
	КонецЦикла;
КонецПроцедуры


надеюсь кому то пригодится, по мне так очень красиво получается если использовать в обработках обмена :) 

на втором рисунке показано как это выглятит если на боевую обработку выгрузки применить, а скриншот самой обработки на первом рисунке. 

Графический индикатор процесса в табличной части Управляемых формах

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61789    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

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

5000 руб.

14.01.2016    54392    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16693    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10729    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9600    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3662    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12075    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Diversus 2306 04.02.14 23:45 Сейчас в теме
Делал подобное, использовал аналогичный подход только для динамического списка и псевдографикой:
Микрографики в динамическом списке 1С 8.2
2. integragirl 05.02.14 07:23 Сейчас в теме
Вы конечно молодец. Но описания не хватает для статьи, опишите код, что куда и откуда.
3. amyd 94 05.02.14 11:23 Сейчас в теме
По просьбе integragirl добавил в описание код.
4. StaticUnsafe 05.02.14 12:21 Сейчас в теме
Очень классно. Спасибо
5. DAnry 8 05.02.14 13:56 Сейчас в теме
Класно. Спасибо за подробное описание. Единственное замечание - обработка подходит для случаев, где важнее "эффект" и красота, а скорость работы на втором плане. В случае сложных, длительных процесов обработка будет тормозить работу.
6. amyd 94 05.02.14 14:10 Сейчас в теме
(5) DAnry,
Почему будет тормозить? все тяжелые расчеты выкидывайте на сервер, красота же только на клиенте отображается.
7. Smaylukk 185 06.02.14 01:30 Сейчас в теме
(6) , Имеется ввиду то, что на вывод информации, типа "Сообщение()", "Состояние()" платформой тратится время, хоть и минимальное. В случае перепроведения документов от 500 шт или проставления реквизитов или еще какой-то операции, которая в цикле будет делать очень много итераций, подобная статистика только замедлит операцию. Но и без информации о текущем положении дел сложновато - в данном случае наиболее оптимальным выбором будет вывод информации о процессе порциями.
10. amyd 94 06.02.14 12:06 Сейчас в теме
(7) Smaylukk,
Вы путаете понятие вывода на клиенте и выполнение на сервере.
никто не мешает создать обработкой фоновое задание и крутить там все проводки и перепроводки, а клиент настроить на чтение и отображение состояния , которое возвращает в результате своей деятельности фоновое задание.
Вот здесь есть очень хороший пример http://forum.infostart.ru/forum26/topic86081/
и в результате вопрос производительности вообще не стоит.
8. DrAku1a 1679 06.02.14 09:09 Сейчас в теме
100 полосок "с процентами" + 100 полосок "без процентов" - не слишком ли это всё ресурсоёмко?
egoludens; veretennikoff; +2 Ответить
9. klel 06.02.14 09:14 Сейчас в теме
Прикольно, большое спасибо за статью, что то возьму на вооружение :)
11. burlakov 79 06.02.14 15:25 Сейчас в теме
весьма полезный материал. до этого встречал только извраты с передачей данных между клиентом и сервером на каждый процент.
12. AllexSoft 06.02.14 15:39 Сейчас в теме
Спасибо, отличная идея, плюсанул
13. bayce 45 06.02.14 22:17 Сейчас в теме
Не совсем понятно, что храниться в макете?
15. amyd 94 07.02.14 09:57 Сейчас в теме
(13) bayce,
в описании написано ж, в макете хранятся 100 картинок для каждого процента индикатора .
14. DoctorRoza 07.02.14 08:08 Сейчас в теме
Плюсую, нужная порою вещь! :)
16. Rothschild 07.02.14 12:18 Сейчас в теме
Оригинальная идея!
А нельзя вместо вставки картинки
изменять цвет фона поля ввода в колонке табличного поля???
17. Rothschild 07.02.14 12:21 Сейчас в теме
(16)
правда в целом внешний вид такого индикатора оставляет желать лутшего.
все-таки целое табличное поле с "заголовками" и "подвалами"
;))))
18. Rothschild 07.02.14 12:25 Сейчас в теме
(0)
предлагаю простенькую альтернативу для прогресс-бара.
я таким вариантом пользовался еще под 1С-7.7:

выводим в поле надписи строку "ggggggggggggg"
число буков "g" наращиваем в коде с ростом счетчика выполнения процесса.

ну и выбираем какой-нибудь шрифт для надписи,
чтобы это "g" отображалось "темным квадратиком".

остается подобрать для красоты цвет текста и размер шрифта.
distorshion; veretennikoff; alevnev; BurSer; +4 Ответить
19. amyd 94 07.02.14 12:49 Сейчас в теме
(18) Rothschild,
обратите внимание на самое первое сообщение. там так и сделано,
20. pakill 43 08.02.14 04:23 Сейчас в теме
Даже не беру во внимание чрезмерность предложенной визуализации.
Хочу обратить внимание на другую принципиальную особенность.

Зададимся вопросом: для чего нужен индикатор прогресса?
Наверно для какой-то длительной обработки данных.

Чем может быть обусловлена длительность обработки?
Вероятно, большим объемом данных и/или алгоритмической трудоемкостью расчетов.

Индикация ради индикации никому не нужна.
Боюсь, здесь именно такой случай.

У Вас в коде нет собственно обработки данных.
Это нормально, к этому претензий нет.
Подразумевается, что какждый читатель добавит ее по своему усмотрению.
Но как?

У Вас цикл обработки делается на клиенте.
Что это значит?

Одно из двух:

1) Весь огромный массив данных качается на клиента, затем на клиенте делается
вся обработка данных, и еще, возможно, полученный результат возвращается на сервер.

2) На клиенте в цикле делается безумное количество обращений к серверу. Но это еще не
все. Нужно приспособить обработку на сервере, чтобы она выдавала результаты порциями.


Не будем далеко ходить. Вот простой пример:


Процедура ДлительнаяОбработка()
Запрос = Новый Запрос("Выбрать .... из ОченьОбъемныйРегистр");
Выборка =Запрос.Выполнить.Выбрать();
Пока Выборка.Следующий() Цикл
....
КонецЦикла;
КонецПроцедуры;



Как прикрутить эту процедуру к Вашему коду?
Напомню, читателям, запросы на клиенте не работают.

Вообще-то, индикатор прогресса реализовать возможно.
Но это дело хлопотное и неблагодарное.

Тут нужно запускать фоновое задание (это только в клиент-серверном варианте)
или вторую копию приложения, в котором будет выполняться обработка данных.
А на клиенте мониторить промежуточные результаты, скажем, раз в 10 секунд.
При этом придется учитывать, всякие коллизии: не убилось ли фоновое задание,
не достигнув результата, или, наоборот, не висит ли фоновое задание, запущенное в
предыдущей сессии. Придется, также продумать, логику поведения, если пользователю надоест
ждать, и он займется другими задачами.


И все это, только ради индикации.

DJ_Codebase; veretennikoff; Confucius; Sam13; Naill99; BurSer; ll13; rayastar; aexeel; Восьмой; director04; nixel; Kostt; Yury1001; Rothschild; +15 Ответить
21. Rothschild 08.02.14 07:32 Сейчас в теме
(20) pakill,
описанная тобой проблемма -
- это отсутствие доступных для разработчика штатных средств обратной связи между сервером и клиентом.
Для управляемого приложение - она становится сущей головной болью:
Довольствуйся дебильными возможностмя функции Состояние() и будь доволен!!!
22. Rothschild 08.02.14 07:32 Сейчас в теме
(21)
Возможно это общая проблемма клиент-серверной концепции.
но скорее всего - пренебрежение со стороны разработчиков платформы.
Поскольку для организации такой обратной связи нужна серьезная поддержка многопоточности,
с которой у 1С традиционно туго (начиная еще с 1С-7.7).
23. amyd 94 10.02.14 15:27 Сейчас в теме
(20) pakill,
если вы пытаетесь в этой обработки найти решение своей задачи, то вы её не найдете
это всего лишь пример создания индикатора в управляемых формах на стороне клиента с кучей дополнительных механизмов.
в ответе 10 есть то что вам нужно. и если соедините две обработки то будет вам счастье!

К примеру я соединил отображение на клиенте и работу на сервере, и уверяю вас, в этом нет ничего сложного, достаточно включить голову и ознакомится с примерами.
24. Sam13 342 03.03.14 10:17 Сейчас в теме
(20) pakill, Абсолютно согласен.
Оставьте свое сообщение