Имя: Пароль:
1C
 
Не подскажите как грамотнее написать обработку
0 Klesk666
 
21.04.16
21:52
Знаю что частый вызов сервера, написал порционную обработку, но как то коряво вышло, не подскажите как правильно:

&НаСервере
Процедура ОбработатьНаСервере(НачальноеЗначение,КонечноеЗначение)
    СтруктураПоиска=Новый Структура;
    СтруктураПоиска.Вставить("Выбран",Истина);
    ВыбранныеДляДействия=Объект.ТаблицаАдресов.НайтиСтроки(СтруктураПоиска);    
    Для Сч=НачальноеЗначение по КонечноеЗначение Цикл
        ВыбранныеДляДействия[Сч-1].ТипСправочника="Обработано";
        ВыбранныеДляДействия[Сч-1].Ссылка.ПолучитьОбъект();
        
    КонецЦикла    
КонецПроцедуры

&НаКлиенте
Процедура Обработать(Команда)
    СтруктураПоиска=Новый Структура;
    СтруктураПоиска.Вставить("Выбран",Истина);
    ВыбранныеДляДействия=Объект.ТаблицаАдресов.НайтиСтроки(СтруктураПоиска);
    ОбщееКоличество=ВыбранныеДляДействия.Количество();
    Если ОбщееКоличество=0 Тогда
        Возврат;
    КонецЕсли;    
    Деление=100/ВыбранныеДляДействия.Количество();
    РазмерПорции=Объект.РазмерПорции;
    НачальноеЗначение=1;
    КонечноеЗначение=МИН(РазмерПорции,ОбщееКоличество);
    ВремяНачала=ТекущаяДата();
    Пока НачальноеЗначение<=ОбщееКоличество Цикл
        
    ОбработатьНаСервере(НачальноеЗначение,КонечноеЗначение);
    Состояние("Обработка...",НачальноеЗначение*Деление);

    НачальноеЗначение=КонечноеЗначение+1;
    КонечноеЗначение=МИН(КонечноеЗначение+РазмерПорции,ОбщееКоличество);
    КонецЦикла;
    Сообщение=Новый СообщениеПользователю;
    Сообщение.Текст="Время выполнения: "+Строка(ТекущаяДата()-ВремяНачала)+" сек.";
    Сообщение.Сообщить();
    
КонецПроцедуры
1 Cyberhawk
 
21.04.16
22:04
Фоновое задание + писать прогресс в РС + с клиента периодически читать и отображать этот прогресс
2 CepeLLlka
 
21.04.16
22:06
А чё там? Обработка длится 2 часа что-ли?
3 CepeLLlka
 
21.04.16
22:06
Или соединение с сервером на низкой скорости?
4 CepeLLlka
 
21.04.16
22:08
(1)Хорошая идея кстати. Как-нибудь попробую использовать такое, если вдруг нужно будет кодить чё-нить такое громосткое
5 Klesk666
 
21.04.16
22:09
(2) перепроведение документов,  и надо следить за процессом
6 Shrek_yar
 
21.04.16
22:10
(5) зачем тебе прогресс то, будешь его гипнотезировать?
7 Shrek_yar
 
21.04.16
22:10
(0) Пока НачальноеЗначение<=ОбщееКоличество Цикл ЗАменить на цикл сч= По
8 CepeLLlka
 
21.04.16
22:10
(5)Ну тогда попробуй, то что в (1).. Мне кажется интересно такое реализовать..
(6)Мдее.. Прогресс бар нужная вещь так-то.. Висит, не висит.. сколько ещё осталось и т.д..
9 HEKPOH
 
21.04.16
22:10
(6) оч увлекательное занятие и нужное
10 Klesk666
 
21.04.16
22:10
(6) может оно висит там уже
11 Shrek_yar
 
21.04.16
22:11
(8) ага, если 50 тыщ единиц, и ты так смотреть будешь.
12 Shrek_yar
 
21.04.16
22:13
Сервер тогда уже вызывай без контекста
13 Drac0
 
21.04.16
22:31
(8) (1) БСП на вас нет. Открыть последнюю не судьба? Там даже пример есть для фоновой обработки с прогрессом и получением сообщений пользователю.

(12) Фу, таким быть.
14 Shrek_yar
 
21.04.16
22:36
(12)?? что вам не нравиться в СерверБезКонтекста
15 CepeLLlka
 
21.04.16
22:40
(13)Можно написать совсем по другому..

"Ребят, в БСП отлично решение есть, поглядите! Мне кажется это именно то, что вам нужно"
16 Zamestas
 
21.04.16
22:48
(0) А запросом на сервере точно не собрать?
17 Shrek_yar
 
21.04.16
22:50
(15) )))))) Я когда обработывал справоник номенклатуры запускал 10 фоновых заданий, за неделю обработал
18 mingw
 
21.04.16
23:03
Если в конфе нет нужного функционала. И менять конфу нельзя. Только внешней обработкой удобно никак.
http://xn----1-bedvffifm4g.xn--p1ai/articles/как-ускорить-1с-многопоточность/
http://forum.infostart.ru/forum86/topic118582/
http://forum-1c.ru/index.php?topic=15951.0

Можно использовать ВК. Для передачи данных с сервера на клиент. Если клиент доступен с сервера.
19 Drac0
 
21.04.16
23:06
(14) Если есть хотя бы гипотетическая вероятность, что кто-то запустит эту обработку под Веб-клиентом, то это будет граблями, т.к. большинстов браузеров просто начнут отваливать по тайм-ауту. И если Хром хотя бы предлагает подождать, то Сафари просто предложить грохнуть соединение. (15) Ути-пути, какие мы нежные :)
20 Klesk666
 
22.04.16
01:08
а чем объяснить что в файлов режиме, тоже прирост в скорости если порции больше?
21 Fram
 
22.04.16
01:26
(19) а в случае с контекстом как себя ведут браузеры?
22 hhhh
 
22.04.16
02:04
(20) количество порций тогда меньше, что непонятно?
23 Klesk666
 
22.04.16
02:41
(22) сервера то нет, все на одной машине
24 hhhh
 
22.04.16
03:26
(23) есть там сервер. Куда он по вашему делся? И насчет машины нет разницы, в клиент-серверном варианте тоже можно всё на одной машине запустить.
25 Drac0
 
22.04.16
09:16
(21) Аналогично. В Веб-приложении нельзя делать серверные вызовы дольше нескольких секунд.
26 Cyberhawk
 
22.04.16
09:26
(13) В какой типовой и в каком виде пример? Или на ИТС в документации? Подсистемы название хотя бы скажи ("Длительные операции"?).
P.S. А падение сеанса фонового задания логируется в базе?
27 Drac0
 
22.04.16
11:50
(26) саму БСП смотри. Есть демо обработка в составе, где показываются для примера все возможности подсистемы ДлительныеОперации.
28 Cyberhawk
 
22.04.16
16:08
(27) Ага, посмотрел. Отличие в том, что прогресс хранится во временном хранилище, а не в базе, и только на время, пока это нужно на клиенте.
Для написания примочек к конфигурациям на базе БСП, а особенно к тем, что на замке, вариант оптимальный, ибо все удобства уже встроены и сделаны.
Но если прогресс (и сопутствующие метаданные) нужно иметь возможность получить в других сеансах, то без своих метаданных и хранении результата в базе не обойтись (кажется).