Обработка кодом результата запроса в Консоли запросов 9000

Публикация № 1243948

Разработка - Инструментарий разработчика - Консоль запросов

Консоль запросов 9000 обработка результата кодом выполнение индикацией построчное фоне инструменты разработчика прогресс выполнения время

Пять вариантов обработки кодом в консоли запросов 9000: простое выполнение, построчно без индикации, построчно с индикацией, простое в фоне, построчно в фоне с индикацией.

Консоль запросов 9000 задумана как простой, удобный и эффективный инструмент, который работает на любой операционной системе и любой конфигурации без ее модификации, без возни с расширениями. Пришел, достал из кармана (или яндекс-диска :) - запустил и работаем!

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

Сама обработка кодом реализована достаточно просто. Нужно открыть страницу "Алгоритм", разместить код, выбрать метод выполнения и запустить. В зависимости от метода выполнения, может отображаться прогресс-бар внизу или рядом с кнопкой запуска. Или совсем отсутствовать, если выбранный режим не поддерживает отображения прогресса.
 

Консоль запросов 9000 - обработка результата запроса кодом

 

Давайте рассмотрим режимы запуска кода в консоли запросов 9000 подробнее.

 

Простое выполнение

В этом простейшем варианте код просто выполняется на сервере, выполнение происходит один раз. В этом режиме на клиенте нет никакой индикации прогресса выполнения. Обход результата запроса необходимо организовать самостоятельно. В коде можно использовать Сообщить, но сообщения можно будет увидеть только после завершения выполнения. Прерывание обработки в этом режиме невозможно. Можно рекомендовать такой вариант, если обработка выполняется достаточно быстро.
В коде доступна переменная Выборка - выборка из результата запроса.


Пример кода.

Пока Выборка.Следующий() Цикл
    Выборка.Ссылка.ПолучитьОбъект().Удалить();
КонецЦикла;

 

Построчно без индикации

В этом режиме код вызывается для каждой строки результата запроса. Нет необходимости организовывать обход результата запроса. Так же можно использовать Сообщить, сообщения можно будет увидеть только после завершения выполнения. Прерывание обработки в этом режиме так же невозможно.
Доступ к результату запроса так же происходит через переменную Выборка, однако, в отличие от предыдущего варианта, выборка будет уже спозиционирована на обрабатываемую запись.


Пример кода.

    Выборка.Ссылка.ПолучитьОбъект().Удалить();


Построчно с индикацией

В отличие от "Построчно без индикации", на клиенте виден прогресс выполнения, прошедшее время выполнения, прогноз на оставшееся время. 
 

Консоль запросов 9000 - обработка кодом, режим выполнения построчно с индикацией.

 

При необходимости можно прервать выполнение нажатием Ctrl+Break. Но за удобство есть плата - для каждого обновления прогресса происходит серверный вызов. Это происходит с периодом, установленным в "Опциях", по умолчанию там стоит одна секунда. Для уменьшения потерь времени на индикацию этот период можно увеличить.

Так же можно использовать Сообщить, но сообщения будут отображены только по завершению выполнения. Код алгоритма пишется точно так же, что и в варианте "Построчно без индикации". Это самый удобный вариант, если в конфигурации нет БСП 2.3 и подходит построчный вариант обхода.


Простое в фоне (БСП 2.3)

Этот вариант будет работать, если в конфигурации присутствует БСП с версией не ниже 2.3. Код выполняется в фоновом задании, целиком. Обход результата запроса нужно организовывать самостоятельно. На клиенте отображается только время выполнения. Поскольку выполнение происходит в фоне, на клиенте можно продолжать работу. В этом режиме так же можно прерывать выполнение с помощью нажатия кнопки "Прервать" (Ctrl+F5). И еще одно преимущество - можно использовать Сообщить, и сообщения видны на клиенте почти сразу, с периодом обновления отображения состояния. Период обновления отображения состояния по умолчанию одна секунда, его можно изменить в "Опциях".

Код пишется точно так же, как и в первом варианте, доступна переменная Выборка

Но, в отличие от первого варианта тут есть бонус - можно организовать прогресс. Для этого нужно использовать вызов процедуры СообщитьПрогресс.


Код с прогрессом в этом варианте выглядит так.

й = 0;
КоличествоВсего = Выборка.Количество();
ВремяНачалаВМиллисекундах = ТекущаяУниверсальнаяДатаВМиллисекундах();
Пока Выборка.Следующий() Цикл
    
    Объект = Выборка.Ссылка.ПолучитьОбъект();
    Объект.Удалить();
     
    й = й + 1;
    //Передаём прогресс один раз на 10 записей, что бы меньше тормозить основную обработку.
    Если й % 10 = 0 Тогда
        СообщитьПрогресс(й, КоличествоВсего, ВремяНачалаВМиллисекундах, ПризнакПрогресса);
    КонецЕсли;
    
КонецЦикла;

 

Разберем этот код. Для отображения прогресса потребуется счетчик обработанных записей (й), количество записей всего (КоличествоВсего) и время начала выполнения (ВремяНачалаВМиллисекундах). Все эти значения достаточно указать при вызове СообщитьПрогресс, и на клиенте появится прогресс выполнения. Еще для СообщитьПрогресс нужен служебный параметр ПризнакПрогресса, он уже есть в контексте выполнения, его нужно просто передать без изменений. В приведенном примере СообщитьПрогресс вызывается один раз на 10 обработанных записей, что бы отображение прогресса не тормозило основную обработку. Если записи обрабатываются быстро, можно увеличить это значение и вызывать СообщитьПрогресс один раз на 100 или даже 1000 записей.
Это вариант следует использовать, если не устраивает простой построчный обход результата. А если устраивает - тогда используем следующий вариант, где обход и отображение прогресса уже реализовано.


Построчно в фоне с индикацией (БСП 2.3)

Как следует из названия, для этого варианта так же требуется БСП с версией не ниже 2.3. Работает точно так же, как "Построчно с индикацией", но выполнение происходит в фоне. Код вызывается для каждой записи. Прогресс обновляется с периодом, указанном в опциях (по умолчанию одна секунда). Можно использовать Сообщить, сообщения отображаются на клиенте с обновлением прогресса. В момент выполнения обработки на клиенте можно продолжать работу. Так же, как и в предыдущем варианте, возможно прерывание. Это самый удобный вариант, если есть БСП 2.3 и подходит построчный вариант обхода. Отображение прогресса в этом варианте выглядит так:
 

Консоль запросов 9000 - обработка результата запроса кодом, выполнение построчно в фоне с индикацией.


Ну а что бы не забыть, как работает какой вариант, тут же есть кнопка Справка, где кратко и с примерами описаны все пять режимов работы.

Пример кода.

Объект = Выборка.Ссылка.ПолучитьОбъект();
Сообщить(Объект);
Объект.Удалить();

 

На этом все, всем быстрых запросов!

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 2952 01.06.20 09:42 Сейчас в теме
Подобный более функциональный механизм
Не нужно в алгоритме обработки прописывать индикацию, цикл, транзакцию
Подробная индикация, помощь в написании алгоритма, сбор сообщений, повторная обработка ошибочных
2. kuza2000 123 01.06.20 13:18 Сейчас в теме
(1) Ну так тут в двух вариантах так же не нужно прописывать индикацию и цикл. Про транзакцию - это отдельный разговор, тут могут быть варианты.
3. Evg-Lylyk 2952 01.06.20 13:29 Сейчас в теме
(2) а нужно ли оно без индикации. Как сделана индикация без фоновых заданий?
4. kuza2000 123 01.06.20 13:42 Сейчас в теме
(3)
Если нет возможности выполнить в фоне, и нужен довольно сложный код со своим обходом, то простой запуск без индикации - единственный вариант. По крайней мере, когда нужно сделать быстро. А эта консоль именно для таких случаев.

Без фоновых заданий с индикацией выполнение происходит порциями, периодически возвращаясь на клиент для индикации.
5. kuzyara 1037 05.06.20 11:10 Сейчас в теме
КонсольЗапросов9000(kuza2000) мне больше нравится чем УправляемаяКонсольОтчетов 3.5.2(Evg-Lylyk). Спасибо за труд, очень часто пользуюсь вашей консолью.
6. kuzyara 1037 05.06.20 11:11 Сейчас в теме
Можно было бы ещё пулл-реквесты присылать...
7. kuza2000 123 10.06.20 00:11 Сейчас в теме
Оставьте свое сообщение

См. также

Подсистема "COMExchange": консоль запросов в режиме «Консоль кода». Промо

Консоль запросов v8 1cv8.cf Россия Бесплатно (free)

Описана возможность использования обработки «Консоль запросов 1С+ADO» в качестве «консоли кода». При этом имеется возможность помещения результатов вычислений в «табло формул». Кроме результатов вычислений в это «табло» можно также вывести время выполнения и описание обработанных ошибок времени исполнения.

03.04.2014    25962    yuraos    2    

Консоль кода и зачем она нужна

Прочие инструменты разработчика v8 Бесплатно (free)

Когда использовать, обзор консолей кода: плюсы - минусы.

27.07.2020    3373    Evg-Lylyk    45    

Управляемая консоль отчетов – новый функциональный инструмент для работы с запросами и СКД в управляемых формах

Прочие инструменты разработчика Консоль запросов v8::УФ v8::Запросы v8::СКД Бесплатно (free)

Консоль запросов и СКД – один из наиболее часто используемых программистом инструментов. Как с его помощью можно упростить разработку, в своем докладе на конференции Infostart Event 2019 Inception рассказал Евгений Люлюк, ведущий программист компании GLT.

06.04.2020    6238    Evg-Lylyk    0    

[8.3] Анализ планов запросов (Управляемая консоль отчетов)

Консоль запросов v8 1cv8.cf Бесплатно (free)

Новый инструмент! Позволяет удобно работать с планами запросов, анализ планов в файловой базе.

19.11.2018    19135    Evg-Lylyk    6    

Подсистема "COMExchange", "Консоль запросов 1C + ADO" - сервис обработки выборки запроса: грузим курс «бакса» ЦБРФ из файла *.dbf или *.xlsx. Промо

Консоль запросов v8 КА1 УТ10 УПП1 Россия Бесплатно (free)

На примере загрузки курса валюты продемонстрированы возможности консоли запросов в составе подсистемы "COMExchange" для обработки данных из внешних файлов и их синхронизации с данными информационной базы 1С.

10.03.2013    33182    yuraos    3    

Консоль запросов для УФ с возможностью передачи готовой ТЗ в качестве параметра

Консоль запросов v8 v8::УФ Россия Бесплатно (free)

Небольшая статья о том, как передать готовую таблицу значений в качестве параметра запроса в консоли запросов.

11.07.2016    14820    vadim1011985    7    

Консоль запросов. Очередная гайка.

Консоль запросов v8 1cv8.cf Бесплатно (free)

Небольшое дополнение к консоли запросов. Позволяет создавать функцию вместе с текстом запроса.

23.07.2014    8190    mdmdvd    3    

Подсистема "COMExchange", консоль запросов, сервис обработки выборки запроса: корректируем регистры или «Берём банк, кассу, экспроприируем экспроприаторов». Промо

Консоль запросов v8 1cv8.cf Россия Бесплатно (free)

На примере шуточного примера продемонстрированы не шуточные возможности консоли запросов в составе подсистемы "COMExchange" для работы с регистрами, подчинёнными регистратору («обнуление» регистров, ввод начальных итогов (сведений), корректировка итогов).

31.03.2013    22425    yuraos    7