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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159389    872    399    

861

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7764    55    22    

66

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

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

9360 руб.

17.05.2024    23430    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10412    36    20    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15395    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187970    1138    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17301    6    32    

42

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

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

1800 руб.

21.02.2023    7694    8    35    

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

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