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

См. также

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

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

12000 руб.

02.09.2020    169341    937    403    

905

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    12640    99    42    

102

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26547    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16838    41    15    

75

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

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

15000 руб.

10.11.2023    11402    40    27    

66

SALE! %

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

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

4800 3840 руб.

14.01.2013    190562    1150    0    

918

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    796    2    0    

4

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

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

5000 руб.

07.02.2018    103937    244    100    

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

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