helpf.pro
Регистрация
 +2 
Распечатать

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

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

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

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

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

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

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

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

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

// Обработка

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

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

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

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

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

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

КонецЦикла;

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

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

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

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

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

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

КонецЦикла;

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

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

КонецЕсли;

КонецПроцедуры
Разместил:   Версии: | 8.2 УП |  Дата:   Прочитано: 22338
 +2 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C медленно работает по сети с базой на SQL Server 22
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Посмотреть все результаты поиска похожих
Комментарии
scanport
21.01.2015 07:30Комментарий: 3
scanport

Работает, очень помогла статья. Спасибо.

Количество серверных вызовов можно регулировать.

E_Migachev
30.05.2013 16:56Комментарий: 2
E_Migachev
Pelmen, да, данные тут постоянно гуляют клиент - сервер и обратно - но больше это ни как и не реализуешь на текущий момент
Pelmen
30.05.2013 16:25Комментарий: 1
Pelmen
Я так понял, тут происходит куча серверных вызовов?
Неправильно это с точки зрения оптимизации. Хотя, для возможности прерывания процесса, наверное, только такой вариант подойдёт.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.