Как прервать выполнение отчета или обработки 1C? Да никак!

Пожелание

Нужно, чтобы 1С сделала задаваемые пользователем ЛИМИТЫ времени на выполнение и вывод отчетов, на выполнение и вывод запросов в консоли отчетов!

Многие стандартные отчеты конфигурации, если указать подробную детализацию и по ошибке не указать начало периода — будут выполнятся вечно и потребуют вырубания 1С.

Если база малая, однопользовательская, файловая; если есть резервные копии — тогда можем прервать работу 1С. Если база серверная и многопользовательская — тогда звездец?


Пользователи говорят, что это один из примеров убогости 1С.

Программисты оправдываются, что пользователи "сами виноваты".

 



Памятка, чтобы не загрузить 1С выводом многочасового отчета

1. Начальству для вывода отчетов есть смысл давать доступ к вчерашней копии базы, а текущий ввод делать в рабочую базу. Тогда никаких рисков, что начальник "повесит" базу данных, не будет.



2. Вставить в отчеты ограничения: или минимум детализации, или при подробной детализации ограничивать период выборки неделей, месяцем, кваталом.



3. Вывод текстовых сообщений в цикле — операция крайне медленная.

Потому:

- надо делать вывод текстовых сообщений для первых 100 строк цикла и прекращать цикл автоматически или по запросу; или продолжать цикл без вывода текстовых сообщений.

- или не надо выводить текстовые сообщения в цикле.

- или "телеметрию" запросов надо выводить не в сообщения, а в табличные документы. Это делается моментально!



4. При отладке первых версий запросов следует указывать выборку первых N значений.

Создание и отладку запросов делать на копии рабочей базы.



ОбработкаПрерыванияПользователя()

Можно в циклы вставить проверку процедуры нажатия кнопки прерывания! Прерывается код 1С, выполняемый по действиям пользователя! Процедура "ПриОткрытии" не будет прервана! Запросы, вызванные из кода 1С, также не будут прерываны !

Прерывание работы модуля возможно не во всех обработчиках, а только в тех, которые сопровождают явно вызываемые пользователем действия в формах или в глобальном командном интерфейсе. Например, возможно прерывание обработчика Нажатие() элемента управления Кнопка, но невозможно прерывание обработчика формы ПриОткрытии().



ОбработкаПрерыванияПользователя()
Описание:
Предназначен для прерывания работы встроенного языка при нажатии пользователем клавиши Ctrl+Break.
Метод проверяет, была ли нажата пользователем клавиша Ctrl+Break. Если клавиша была нажата, то выполнение встроенного языка прекращается и выдается соответствующее сообщение.

Обычно ставят в цикл, чтобы по Ctrl+Break можно было прервать выполнение.





Обработку прерывания надо вставлять внутрь циклов!

Вот инфа с ИТС

Особенности прерывания пользователем работы модуля

Прерывание работы модуля клавишами Ctrl+Break может быть выполнено пользователем, только если в процессе работы модуля выполняется вызов процедуры глобального контекста ОбработкаПрерыванияПользователя(). Данная процедура проверяет, не было ли нажатия пользователем клавиш Ctrl+Break, и если было, прерывает работу модуля. 

Вызов этой процедуры имеет смысл выполнять внутри циклов, выполнение которых может занять продолжительное время.

Прерывание выполняется безусловно, без запроса подтверждения. Это позволяет использовать данную процедуру и при выполнении длительных транзакций.

Прерывание работы модуля возможно не во всех обработчиках, а только в тех, которые сопровождают явно вызываемые пользователем действия в формах или в глобальном командном интерфейсе. Например, возможно прерывание обработчика Нажатие() элемента управления Кнопка, но невозможно прерывание обработчика формы ПриОткрытии().

Следует учитывать, что прерывание выполняется только в момент вызова процедуры ОбработкаПрерыванияПользователя(). Выполнение длительных операций вызываемых из модулей, например, запросов, не может быть прервано.

https://its.1c.ru/db/metod8dev/content/2599/hdoc





Вот не срабатывало прерывание на какой-то версии платформы 1С

https://forum.infostart.ru/forum9/topic136109/

При нажатии Ctrl+Break ничего не происходит. В чем может быть причины?

&НаКлиенте
Процедура Команда1(Команда)
    ай = 0;
    для ай = 0 по  10000 цикл  
        
        ОбработкаПрерыванияПользователя();
        Сообщить (ай);
        
    КонецЦикла;
    
КонецПроцедуры



Вот чел не мог использовать прерывание

https://forum.mista.ru/topic.php?id=653364