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

05.02.14

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
ШаблонОбработки.epf
.epf 32,37Kb
109
109 Скачать (1 SM) Купить за 1 850 руб.

Изначально искал, как сделать индикатор процесса в управляемых формах. Почти все ссылки с интернета идут на этот сайт, в результате понял что индикатор делается через функцию Сообщить().
Но тут задумался, а чего бы не сделать чтоб в таблице на форме в одной колонке можно было вывести индикатор для каждой строки?
оказалось не так и сложно, больше времени ушло на прорисовку графического индикатора для каждого процента (итого 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 Платные (руб)

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

6000 руб.

16.01.2015    63637    44    59    

82

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

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

2400 руб.

29.06.2020    19505    27    6    

42

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

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

1500 руб.

06.10.2020    10733    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    20531    mrXoxot    44    

127

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    10101    smielka    37    

104

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

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

27.12.2023    17665    1220    elcoan    53    

125

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

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

3 стартмани

10.04.2023    12458    166    acces969    31    

126
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Diversus 2330 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 9 05.02.14 13:56 Сейчас в теме
Класно. Спасибо за подробное описание. Единственное замечание - обработка подходит для случаев, где важнее "эффект" и красота, а скорость работы на втором плане. В случае сложных, длительных процесов обработка будет тормозить работу.
6. amyd 94 05.02.14 14:10 Сейчас в теме
(5) DAnry,
Почему будет тормозить? все тяжелые расчеты выкидывайте на сервер, красота же только на клиенте отображается.
7. Smaylukk 186 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 1748 06.02.14 09:09 Сейчас в теме
100 полосок "с процентами" + 100 полосок "без процентов" - не слишком ли это всё ресурсоёмко?
egoludens; veretennikoff; +2 Ответить
9. klel 06.02.14 09:14 Сейчас в теме
Прикольно, большое спасибо за статью, что то возьму на вооружение :)
11. burlakov 83 06.02.14 15:25 Сейчас в теме
весьма полезный материал. до этого встречал только извраты с передачей данных между клиентом и сервером на каждый процент.
12. AllexSoft 06.02.14 15:39 Сейчас в теме
Спасибо, отличная идея, плюсанул
13. bayce 49 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 347 03.03.14 10:17 Сейчас в теме
(20) pakill, Абсолютно согласен.
Оставьте свое сообщение