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

1. German_Tagil 43 20.06.23 13:23 Сейчас в теме
Запускаю на клиенте - ставил и до и после серверного вызова.
Может что-то дополнительно надо указать - все что было посмотрел.
Обработка формирует отчет производства за месяц - желательно иметь возможность прервать выполнение программы.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 20.06.23 13:32 Сейчас в теме
и до и после - без разницы! Прерывание пользователя работает только НаКленте
вот в цикле (На Клиенте) например вставили и этот цикл сможете прервать!
то что выполняется на Сервере - не прерывается!
user1619761; starik-2005; +2 Ответить
3. German_Tagil 43 20.06.23 13:38 Сейчас в теме
(2) Счас покажу

    Пока Не ТекДень = КонецВыборки Цикл 
                ОбработкаПрерыванияПользователя();
        текДата=ТекДень;
            СоздатьНаСервере(ТекДень,общкол);

        ТекДень = ТекДень+86400;//Добавим 1 День
        текДата=ТекДень;
        СостояниеОбработки = Формат(ТекДень, "ДЛФ=D");
        инд=инд+окр(пар);
        Индикатор =  инд;
                ОбновитьОтображениеДанных();
            ОбработкаПрерыванияПользователя();
            
    конеццикла;    


Показать
4. user5300 1077 20.06.23 13:50 Сейчас в теме
(3)
СоздатьНаСервере(ТекДень,общкол);

Выполняется на сервере

Можно переделать на "Фоновое выполнение"
7. spacecraft 20.06.23 16:13 Сейчас в теме
(3) как вызывается этот код?
Для прерывания есть ограничения. Они описаны в СП:
Прерывания выполнения допускается если оно инициировано определенным интерактивным действием пользователя. К таким действиям относятся:
нажатие кнопки в форме;
выбор пункта меню или кнопки командной панели в форме;
выбор пункта меню или кнопки панели инструментов интерфейса;
действия инициируемые обработчиками событий "Выбор" элементов управления.
5. truba 20.06.23 14:48 Сейчас в теме
Если в терминале дело - там проблемы с передачей нажатых клавиш.
Но если поищешь по инету то увидишь что этой багофиче лет уже много и никаких подвижек с этой багофичей нет. У меня тоже не работает в нескольких местах, при этом работает в других местах и это на одном и том же клиенте, одном и том же железе, в одних и тех же контекстах.
я опустил руки.
6. German_Tagil 43 20.06.23 15:41 Сейчас в теме
(5) Вот и я думаю что делать.....
8. German_Tagil 43 26.06.23 06:51 Сейчас в теме
9. user5300 1077 26.06.23 08:15 Сейчас в теме
(8)
&НаКлиенте
Процедура Команда1(Команда)
    ПараметрыФоновогоЗадания = Новый Массив;
    ПараметрыФоновогоЗадания.Добавить(ТекущаяДата());    
    ФоновоеЗаданиеЗагрузкаДанных = ФоновыеЗадания.Выполнить("ОбщийМодульСервер.ВыполнитьФоново",ПараметрыФоновогоЗадания);
    ИдентификаторОбменДанных = ФоновоеЗаданиеЗагрузкаДанных.УникальныйИдентификатор;
    
    ПодключитьОбработчикОжидания("ПроверитьФоновыеЗадания",2,Истина);    // Так же можно вызвать форму Длительные операции

КонецПроцедуры



 &НаКлиенте                                                                                                            
Процедура ПроверитьФоновыеЗадания()            
    
    РезультатФЗ = ПроверитьФоновыеЗаданияНаСервере(ИдентификаторОбменДанных);
    Если РезультатФЗ.Выполнено Тогда   
        ПоказатьОповещениеПользователя("Успешно загружены цены на: " + Формат(ТекущаяДата(),"ДЛФ=DD"));  
    ИначеЕсли РезультатФЗ.Выполняется Тогда
        ПодключитьОбработчикОжидания("ПроверитьФоновыеЗадания",5,Истина);
        Возврат;    
    ИначеЕсли ЗначениеЗаполнено(РезультатФЗ.ТекстОшибки) Тогда
        Сообщить("Возникла ошибка при загрузке цен: " + РезультатФЗ.ТекстОшибки);
    КонецЕсли;
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьФоновыеЗаданияНаСервере(ИДЗадания)                
    
    /// Проверка статуса фонового задания  
    РезультатПроверкиФЗ = новый Структура;
    РезультатПроверкиФЗ.Вставить("Выполнено",Ложь);
    РезультатПроверкиФЗ.Вставить("Выполняется",Истина);
    РезультатПроверкиФЗ.Вставить("ТекстОшибки","");    
    
    ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИДЗадания);
    Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
        РезультатПроверкиФЗ.Выполнено     = Истина;
        РезультатПроверкиФЗ.Выполняется = Ложь;    
    ИначеЕсли ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
        РезультатПроверкиФЗ.Выполняется = Ложь;    
        РезультатПроверкиФЗ.ТекстОшибки    = КраткоеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке); 
    ИначеЕсли ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Отменено Тогда
        РезультатПроверкиФЗ.Выполняется = Ложь;
    КонецЕсли;
    
    Возврат РезультатПроверкиФЗ;
    
КонецФункции


Показать
10. German_Tagil 43 26.06.23 08:53 Сейчас в теме +0.5 $m
(4) И куда мне воткнуть - СоздатьНаСервере(ТекДень,общкол);?
11. user5300 1077 26.06.23 08:55 Сейчас в теме
(10) в общий модуль
  ФоновоеЗаданиеЗагрузкаДанных = ФоновыеЗадания.Выполнить("ОбщийМодульСервер.СоздатьНаСервере",ПараметрыФоновогоЗадания);
    ИдентификаторОбменДанных = ФоновоеЗаданиеЗагрузкаДанных.УникальныйИдентификатор;

Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот