Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Решил создать отдельный топик)
Я запускаю фоновое задание (ФЗ) Знаю его ИдентификаторЗадания. Хотелось бы в случае ошибки, выдать юзеру сообщение. Сложность в том, что клиента (Форма например, инициирующего ФЗ, может уже не быть. Что понял, в результате изучения и экспериментов. Использовать следует, как подсказали - ПодключитьОбработчикОжидания Из хелпа видим Цитата: Вот тут и начинается мой гимор, и не понимание) Делаю обработку, которая в ФЗ запускает нужные методы общего модуля. Но обратиться то к обработке, могу только с серверной части. А серверная часть, не может работать с собственной формой. Запустить сразу форму обработки? Через ОткрытьФорму? Ну тогда открывается форма. Причем совершенно не понятная для юзера))) Наверное стоит пояснить как я понимаю. С клиента можно запустить код на севере и на клиенте, с сервера только серверный. Вопрос в общем наверное такой, как запустить клиентский код, какого то общего модуля, без формы, что бы он при необходимости, мог вызвать свою форму. Думаю весь ответ где то здесь
Но я не до конца понимаю. При запуске приложения, в методе ПриНачалеРаботыСистемы запускаю какой то свой общий модуль? Ок. Предположим МодульФоновыхЗаданий А в нем что, как? Вообще, как я вижу задачу. Мне нужен какой то общий клиентский модуль, который могу с клиента создать, и пусть он себе крутится. А он уже все сделает, и если надо, запустит форму сообщения об ошибке. В общем каша в голове) Помогите, чем можете))) ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Какому? Где в ФЗ нашел юзера? Цитата:И даже вообще могло не быть. ФЗ не обязаны запускаться только из формы. Цитата:В ФЗ? Или само ФЗ? Из обработки обращаешься к ФЗ? Цитата:Так К обработке или ИЗ обработки? Цитата:И с несобственно тоже. Ибо форм на сервере нет никаких, ни собственнных, ни несобственных. Цитата:Какую? Зачем? Цитата:Разумеется. Цитата:Именно. Цитата:Это называется выполнить команду. Цитата:Ну вот же, сам же выделил ПриНачалеРаботыСистемы. ФЗ кладет данные в общедоступное место, например какой-нить РегистрСведений, а запущенный из ПриНачалеРаботыСистемы твой обработчик их читает и показывает пользователю. Как и написали ранее. И не надо никаких извращений. ------------------ Лень - это неосознанная мудрость. |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Но так и осталось непонятным. Предположим _АсинхронныеОбработчики запускаю из ПриНачалеРаботыСистемы. (Как это сделать отдельный вопрос , но надеюсь разберусь) Так _АсинхронныеОбработчики это мой общий модуль? В его свойствах ставлю галочки Клиент и сервер. Для проверки, запускаю его из внешней обработки. А тут у меня чудеса начинаются(((
Синтаксических ошибок нет. Но в рантайме, ругается {ОбщийМодуль._АсинхронныеОбработчики.Модуль(25)}: Метод объекта не обнаружен (ВыполнитьНаСервере) ИдентификаторЗадания = _АсинхронныеОбработчики.ВыполнитьНаСервере(); До ожидания и не доходит. Что не так?( ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Не надо делать клиент-серверные модули. Там очень много нюансов, которые надо знать. Отдельно клиентский модуль, отдельно серверный модуль. Клиентскому разрешать вызов сервера, раз уж есть такая необходимость.
|
Re: Отлов ошибки в фоновом задании | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Всё не так. ФЗ - это ФЗ и ЗАПУСК его никакого отношения к твоим обработкам не имеет. Вообще! НИКАКОГО. ФЗ запускается неизвестно где, когда и кем и как. Твой обработчик ожидания только читает записанные ФЗ данные и записанные их пользователю. НИКАКХ ФЗ она запускать не должна. Это как с веб-сайтом. Для чтения данных с сайта ты же не запускаешь что-то создающее информацию на нужном тебе сайте? ------------------ Лень - это неосознанная мудрость. |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Некоторое просветление, по разделению кода появилось. Но только некоторое)))
По Подсказке Паши, воспроизвел пример с infostart.ru Т.е. там есть &НаКлиенте Процедура ВыполнитьДлительнуюОперациюАсинхронно(Команда) Объект.ИдентификаторЗадания = ВыполнитьДлительнуюОперациюАсинхронноНаСервере(); - запуск ФЗ ПодключитьОбработчикОжидания("ОжиданиеЗавершения",0.1,Истина); &НаСервере Функция ВыполнитьДлительнуюОперациюАсинхронноНаСервере() Добавил туда &НаКлиенте Процедура ОжиданиеЗавершения() Экспорт и &НаСервере Функция ОжиданиеНаСервере(ИдентификаторЗадания) Все работает. Теперь хочу что бы ожидание, работало независимо от запустившей ФЗ формы. Спасибо ssa, тут я понял, что Вызывать обработку ожидания надо как то иначе, и именно с нею работать дальше. Вот тут то и заткнулся( В принципе понимаю, что модуль ожидания, может крутиться постоянно, и опрашивать ФЗ Например:
Это часть работает на сервере. Но вызываться должна с клиента. Который и хочется создать.
Сообщить там, для отладки. Вот не могу такой модуль создать, что бы можно было его вызвать откуда хошь. (С клиента) ------------------ Исправлено 2 раз(а). Последнее : Аспид, 15.08.16 14:06 |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Без комментариев разберётесь?
МодульУправляемогоПриложения, ОбщийМодуль.АсинхронныеОбработчикиСервер, Обработка.ЗапускПродолжительногоЗадания |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Просто ОГРОМНОЕ СПАСИБО!
Разбераюсь! Что классно, только нужное мне) ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Оно на уровне сеанса того пользователя, под которым запущено задание. Если сеанс закрыть, то всё уйдет в никуда. Поэтому, лучше логгировать ошибки в какой-нибудь дополнительный регистр сведений или в журнал регистрации. |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Ну может когда и доберусь) Пока и с этим супер. Сразу все ясно стало. Задумался, а что же не получалось. Ты сразу говорил, что в глобальном модуле ожидание делать. Но я даж не знал, с какого боку к этому подлезть. И все пытался, в каких то своих, для отладки модулях сделать. Теперь все встало. И Пашет) даже и вопросов нет) С меня пиво (Уж скока я тебе задолжал...)))) ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
В ЖР предпочтительней - все же лучше не засирать БД лишний раз, если можно не засирать)) |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
У меня здесь прямо противоположная точка зрения. В ЖР срут все, искать там потом что-нибудь иногда заколебешься. А свой регистр болтается себе и не мешает особо. Не надо - грохнул. |
Re: Отлов ошибки в фоновом задании | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Да, это минус, но терпимый. Я частенько лог для каких-то отладочных нужд вообще пишу в текстовый файл. |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Я как то заглнул в ЖР. Там и вправду черт ногу сломит)
Но это пока опущу. Надо созреть. Да и проблем с этим не вижу) Спасибо Паша, дал отличный проводник по пути) Я убрал вызов ПодключитьОбработчикОжидания из глобального модуля. Вызывается из обработки ПодключитьОбработчикОжидания("ПроверкаВыводаФоновыхЗаданий", глИнтервал,Истина); И в ПроверкаВыводаФоновыхЗаданий
Теперь как бы, все под моим управлением, и попусту не будет срабатывать. Без подсказки, еще бы долго к этому шел (потому как с другой стороны заходил). Я идеологически нигде ничего не... ? ))) ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Ааа... Понял ход конём. Вообще, вызов обработчика ожидания из самого себя это чревато переполнением стека. Так что лучше третий параметр оставить ложь, а делать ОтключитьОбработчикОжидания. Зачем вам случайное падение серверного процесса?
|
Re: Отлов ошибки в фоновом задании | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Здесь же нет вызова самого себя, только повторное подключение обработчика. И третий параметр должен быть Истиной в любом случае, если интервал < 1 |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
В том то и дело, что третий параметр (истина) даёт разовый однократный вызов обработчика. А Владимир эмулирует периодический вызов обработчика тем, что повторно его вызывает в "ПроверкаВыводаФоновыхЗаданий" и тоже однократно. Эта ситуация много раз рассматривалась на ИТСах. Такая конструкция бомбит в стек с периодичностью в глИнтервал. Программных ограничений по размеру стека у платформы нет. Но 1С рекомендует ограничивать глубину таких алгоритмов на десятки, максимум сотни итераций. В общем. Не надо так делать. Не рекомендуется. Работает, конечно. Но производитель не гарантирует устойчивой работы. |
Re: Отлов ошибки в фоновом задании | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Да? Ну я в тред не вчитывался, офк)) |
Re: Отлов ошибки в фоновом задании | |
---|---|
Аспид Автор Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Предупреждению внял, и сделаю так. Но в теории не ясно. Ведь засылаю в стек ПроверкаВыводаФоновыхЗаданий Он сработав, выбрал себя из стека. И снова записал если надо. итого, в стеке всегда только один вызов. Или тут что то другое. Какие то механизмы 1С... это уже чисто теоретически интересно))) Сделаю конечно по совету Паши. разницы то в коде нет. Вместо перезапуска, остановка. ------------------ |
Re: Отлов ошибки в фоновом задании | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
В теории мне тоже до конца не ясно. Принял как данность. Может, там свой стек. Может еще что-то.
|
© 2000-2024 Fox Club  |