Обработка на сервере с индикатором (упр. приложение)

05.04.16

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

Обработка на сервере с отображением процесса загрузки и возможностью прерывания

Файлы

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

Наименование Скачано Купить файл
ОбработкаНаСервереСИндикатором83.epf
.epf 7,84Kb
154 1 850 руб. Купить
ОбработкаНаСервереСИндикатором.epf
.epf 7,26Kb
319 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

&НаСервере
Функция ИнициализацияОбработкиСервер()

   
Запрос = Новый Запрос;
   
Запрос.Текст =
   
"ВЫБРАТЬ
    |   Спр.Ссылка
    |ИЗ
    |   Справочник.Банки КАК Спр"
;

   
Данные      = Запрос.Выполнить().Выгрузить();
   
АдресДанных = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);

 
  // Обработка
    // В справочнике ~ 4000 элементов

    Возврат Данные.Количество();

КонецФункции

&НаСервереБезКонтекста
Функция ОбработатьЭлемент(ДанныеЭлемента)

   
СпрОбъект = ДанныеЭлемента.Ссылка.ПолучитьОбъект();

   
// Обработка

   
СпрОбъект.ОбменДанными.Загрузка = Истина;
   
СпрОбъект.Записать();

КонецФункции

&НаСервереБезКонтекста
Функция ОбработатьПорциюНаСервере(Начало, Конец, АдресДанных)

   
Данные = ПолучитьИзВременногоХранилища(АдресДанных);

    Для
Счетчик = Начало - 1 По Конец - 1 Цикл

       
ОбработатьЭлемент(Данные[Счетчик]);

    КонецЦикла;

КонецФункции

&НаКлиенте
Процедура ВыполнитьОбработку(Команда)

   
Количество      = ИнициализацияОбработкиСервер();
   
РазмерШага      = 10;
   
КоличествоШагов = Цел(Количество / РазмерШага);
   
КоличествоЦел   = КоличествоШагов * РазмерШага;

    Если
КоличествоЦел < Количество Тогда
       
Элементы.Индикатор.МаксимальноеЗначение = КоличествоШагов + 1;
    Иначе
       
Элементы.Индикатор.МаксимальноеЗначение = КоличествоШагов;
    КонецЕсли;

    Для
Счетчик = 1 По КоличествоШагов Цикл

       
ОбработатьПорциюНаСервере(РазмерШага * (Счетчик - 1) + 1, РазмерШага * Счетчик, АдресДанных);
       
Индикатор = Счетчик;
       
ОбработкаПрерыванияПользователя();
       
ОбновитьОтображениеДанных();

    КонецЦикла;

    Если
КоличествоЦел < Количество Тогда

       
ОбработатьПорциюНаСервере(КоличествоШагов * РазмерШага + 1, Количество, АдресДанных);
       
Индикатор = Индикатор + 1;

    КонецЕсли;

КонецПроцедуры

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

Скачайте бесплатную обработку "Анализ данных для использования в подсистеме 1С Инфоборды" и узнайте возможность внедрения подсистемы у себя в конфигурации! Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения "Инфоборды". Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране.

28800 руб.

27.03.2025    14420    24    18    

34

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

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

6000 руб.

16.01.2015    66066    45    60    

84

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

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

2400 руб.

29.06.2020    21748    31    6    

48

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    40458    dimanich70    83    

157

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    20831    YA_418728146    8    

174

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

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    6072    92    progmaster    17    

4

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

05.07.2022    12621    kalyaka    8    

35

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

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

3600 руб.

29.04.2022    15407    2    10    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. acsent 1207 30.09.10 17:44 Сейчас в теме
Думал, что самая затратная прцедура будет
Данные = ПолучитьИзВременногоХранилища(АдресДанных);

а оказалось, вызов сервера куда более затратен
2. Evg-Lylyk 5171 01.10.10 17:18 Сейчас в теме
Приблизительно о том же писал здесь http://infostart.ru/public/71407/
3. acsent 1207 01.10.10 17:22 Сейчас в теме
Основная фишка в том, чтобы получить выборку данных на сервере и не передавать ее на клиент
4. Evg-Lylyk 5171 01.10.10 18:00 Сейчас в теме
(3) Согласен это важно. Разумно осуществлять индикацию раз в секунду тогда будет меньше вызовов сервера... упростится код
5. Mopo3 336 07.06.11 19:02 Сейчас в теме
Имх лучше из клиента вызывать обработчик ожидания каждую секунду, который читает из временного хранилища счетчик итераций обработки. Счетчик итераций во временном хранилище обновляет сам обработчик данных. Зная общее количество состояние вывести просто.
dj_serega; f.lex; tulakin_s; leonidol; yandextesting; ll13; +6 1 Ответить
9. KillerMann 187 12.02.14 12:14 Сейчас в теме
(5) Mopo3, идея у автора хорошая. А вот Вашу не поддерживаю. Каким образом отработает обработчик ожидания на клиенте если на серверной части будет крутиться процедура(функция) обработки результата запроса? Если знаете решение, то пример в студию, только заведомо рабочий. А пока минус за ответ, т.к. считаю ответ вводящий в заблуждение.
evseevoleg; +1 Ответить
10. acsent 1207 12.02.14 12:23 Сейчас в теме
(5) Чтоб подключить обработчик нужно запускать фоновое задание. А чтоб его запускать нужно изменять конфигурацию
11. KillerMann 187 12.02.14 12:49 Сейчас в теме
(10) на сколько я понял Mopo3 имел ввиду ПодключитьОбработчикОжидания() в модуле формы, а обработка ожидания не отработает пока не выполнится процедура(функция) на сервере. Или я чего-то не знаю? Речь та не шла за регламентные задания. Если есть решение для не типовой конфигурации и так чтобы можно было воспользоваться методом ПодключитьОбработчикОжидания(), то прошу поподробней описать, в жизни пригодится.
14. doom2good 148 10.11.15 11:55 Сейчас в теме
(5) Mopo3,
Не подскажете, как реализовать через ПодключитьОбработчикОжидания()?
в моем варианте
Процедура ВыполнитьОбработку(Команда)
	
	ПодготовитьДанныеСервер();
	МаксимальноеЗначение = КоличествоДанныхВХранилище();
	
	ПодключитьОбработчикОжидания("ОбновитьСтатус", 1);
	ПодключитьОбработчикОжидания("ОбработатьДокументы", 1, Истина);

КонецПроцедуры
Показать


&НаКлиенте
Процедура ОбновитьСтатус()

	ОстатокЭлементов = КоличествоДанныхВХранилище();
	ВсегоЭлементов = МаксимальноеЗначение;
	
	Состояние("Обработка документов", 100 - ОстатокЭлементов /(ВсегоЭлементов/100), "Документы обрабатываются...");
	
	Если ОстатокЭлементов = 0 Тогда
	
		ОтключитьОбработчикОжидания("ОбновитьСтатус");
		Предупреждение("Обработка завершена!");
	
	КонецЕсли;

КонецПроцедуры
Показать


&НаКлиенте
Процедура ОбработатьДокументы()

	ОбработатьДокументыСервер(АдресХранилищаДанных, АдресХранилищаКоличества);

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОбработатьДокументыСервер(АдресХранилищаДанных, АдресХранилищаКоличества)

	НепроведенныеДокументы = ПолучитьИзВременногоХранилища(АдресХранилищаДанных);
	
	ВсегоДокументов = НепроведенныеДокументы.Количество();
	
	Для Каждого цДокумент Из НепроведенныеДокументы Цикл
		
		обработатьДокумент(цДокумент);
		
		ВсегоДокументов = ВсегоДокументов - 1;
		ПоместитьВоВременноеХранилище(ВсегоДокументов, АдресХранилищаКоличества);
		
	КонецЦикла;

КонецПроцедуры
Показать


В этом случае у меня появляется индикатор, но выполнение уходит на сервер и после выполнения индикатор перескакивает с 0% сразу на 100%.
15. TreeDogNight 22 08.07.16 06:33 Сейчас в теме
(14) doom2good, Меня тоже интересует этот вопрос.Ещё не нашли решение?
6. Yury1001 1476 03.05.12 12:24 Сейчас в теме
Отлично работает с выборкой результата запроса – ничего не сбивается.
Вызов сервера действительно затратный по времени, если делить это тысячи раз, будет ощутимо, и потому можно реализовать возврат по таймеру, ну там раз в 3 секунды, например.
7. Den_D 54 06.06.12 10:13 Сейчас в теме
Мне кажется к данной проблеме нет однозначного подхода и универсального решения.
Однако какие-то решения в определенных условиях являются лучшими.
8. juntatalor 63 08.07.13 02:16 Сейчас в теме
Раньше реализовывал индикацию данных также, как у вас.

Плюсы: точность отображения, легкий вывод сообщений на сервере, общее удобство

Минусы:
Первый и самый важный: Запрос.Выполнить.Выгрузить(). Для больших объемов данных это весьма затратно по временным ресурсам, по объему "отжираемой" памяти. Еще хуже, когда запрос содержит итоги, и нужно, например, выводить данные с группировками (т.е. для таблицы значений вы можете запомнить "текущую" строку, а для дерева - нет, и его все равно приходится переводить в таблицу значений). Это сильно усложняет код, делает его менее понятным и читаемым. Также достаточно велик трафик обмена клиент-сервер.

Сейчас перевел на работу в фоновых заданиях. У них тоже есть свои минусы: запускаются дольше, сложнее получать из них информацию, сложнее отладка, степень индикации не очень точна. Однако, там можно использовать Запрос.Выполнить().Выбрать(), да и в целом чисто "серверный" код без "дерганий" клиент<->сервер работает быстрее.

И насчет Данные = ПолучитьИзВременногоХранилища(АдресДанных) - они скорее всего кешируются в памяти, поэтому и вызов быстрый.
12. E_x 25.03.14 10:49 Сейчас в теме
Благодарю пользователя, это то, что надо. Немного адаптировал под работу со стандартным методом Состояние() и вообще огонь. Еще раз спасибо!
13. Bor_ka 102 20.10.15 23:09 Сейчас в теме
Попробовал, отлично работает. Спасибо автору.
16. Rabin 53 08.03.21 11:11 Сейчас в теме
Подскажите пожалуйста, чем является АдресДанных? Глобальной переменной? Реквизитом формы?
17. acsent 1207 08.03.21 14:58 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация