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

01.06.20

Разработка - Инструментарий разработчика

Пять вариантов обработки кодом в консоли запросов 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 - обработка результата запроса кодом, выполнение построчно в фоне с индикацией.


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

Пример кода.

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

 

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

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

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

4000 руб.

09.12.2022    30068    12    0    

437

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

18000 руб.

20.06.2023    9877    0    2    

122

SALE! %

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 10000 руб.

02.09.2020    93685    477    380    

532

SALE! 15%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 3060 руб.

14.01.2013    170267    1051    0    

793

Автоматизация труда программиста. Библиотека прикладных функций

Инструментарий разработчика Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Конфигурации 1cv8 Платные (руб)

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12551    3    9    

9

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    96521    234    97    

286

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1439 руб.

21.02.2023    5268    2    33    

14

Программное формирование существующих печатных форм

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    14111    39    RocKeR_13    5    

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

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