HelpF.pro

Обработка на сервере с индикатором

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

Код 1C v 8.2 УП
 // Автор acsent
&НаСервере
Функция ИнициализацияОбработкиСервер()

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

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

// Обработка
// В справочнике ~ 4000 элементов
Возврат Данные.Количество();

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

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

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

// Обработка

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

КонецЦикла;

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

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

КонецЕсли;

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

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq82/view/1416.html