Имя: Пароль:
1C
1С v8
Как вывести сообщение пользователю при выполнении регламентного задания в 8.3
, , 1c39ru
0 Алексей2014
 
17.10.14
21:55
Не выводится сообщение  при выполнении регламентного задания в 8.3. В 8.2 такой проблемы нет. Т.е. Сообщить() не выполняется.
1 PR
 
17.10.14
22:00
Куда?
2 Рэйв
 
17.10.14
22:02
главный вопрос не КУДА.
Главный вопрос -НАХРЕНА?
3 Мимохожий Однако
 
17.10.14
22:09
У сервера нет глазок и ушек. Достаточно записать в журнал регистрации
4 Алексей2014
 
18.10.14
07:25
куда - на экран.
в журнал регистрации понятно, но в 8.2 выводилось на экран. Зачем - чтобы было наглядно видно его ход выполнения.
5 IamAlexy
 
18.10.14
07:41
(4) дурень, нафиг его на экран выводить, одно же РЕГЛАМЕНТНОЕ....
6 Алексей2014
 
18.10.14
07:45
я же сказал, чтобы видеть его ход выполнения. если нечего сказать, так мне такие советы не нужны.
7 wanderer_ица
 
18.10.14
07:48
как я понимаю, регламентное задание выполняется в фоне на сервере.
Поэтому куда выводить сообщение и кому - не совсем понятно.

Может (в порядке бреда) у Вас раньше работало в файловой версии, а теперь в клиент-серверной?
Я угадала?
8 Алексей2014
 
18.10.14
07:50
вообще-то Сообщить() может выполняться и на сервере. но я сейчас рассматриваю файловый вариант.
9 Gepard
 
18.10.14
08:21
регистр сведения и форма его отображения
10 Gepard
 
18.10.14
08:22
Регистр сведений, форма его для показа пользователю (с автообновлением) + естественно в рз запись в этот регистр)
11 viraboy
 
18.10.14
08:49
Такая задача была на спеца по платформе, сдавал уже на УФ. Сделал регистр сведений, куда писало сообщения регламентное задание. Фоновым заданием проверял регистр и выводил пользователю сообщение.
12 Фокусник
 
18.10.14
08:50
(8) Вопрос не в том, МОЖЕТ или НЕТ выводиться Сообщить() на сервере/в файловой версии, а в том, что ты хочешь делать это для "регламентного задания": которое по своей СУТИ, выполняется БЕЗ участия пользователя, а значит и читать эти сообщения будет НЕ КОМУ... ;)
13 romix
 
18.10.14
09:19
В текстовый лог ИМХО надо писать через FileSystemObject.
Смотреть FAR-ом. :-)
14 PLUT
 
18.10.14
09:28
у фоновых(регламентных) заданий есть ПолучитьСообщениеПользователю(), вот а в обработчике регл.задания нужно сообщитьпользователю()

я делал вывод сообщений пользователю не "клеенте" о завершении фонового (регламентного) задания. ничего сложного
15 PLUT
 
18.10.14
09:42
в процедуре после выполнения регл.задания добавил

Сообщение=Новый СообщениеПользователю();
Сообщение.Текст="Выполнение обмена данными";
Сообщение.Сообщить();

а в обработчике ожидания (который подключается приначалесистемы()) добавил

МассивЗаданий=ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("ИмяМетода","МодульРегламентныхЗаданий.ВыполнитьОбменДаннымиДляНастройкиАвтоматическогоОбменаДанными"));
        
        Если МассивЗаданий.Количество()=0 Тогда
            Возврат;
        КонецЕсли;
        Если МассивЗаданий[0].Состояние<>СостояниеФоновогоЗадания.Завершено Тогда
            Возврат;
        КонецЕсли;
        Если ЗначениеВСтрокуВнутр(ПоследнееФоновоеЗадание)=ЗначениеВСтрокуВнутр(МассивЗаданий[0]) Тогда
            Возврат;
        КонецЕсли;
        Сообщения=МассивЗаданий[0].ПолучитьСообщенияПользователю();
        Если ТипЗнч(Сообщения)=Тип("ФиксированныйМассив") Тогда
            Текст="";
            Если Сообщения.Количество()>0 Тогда
                Для каждого ТекСообщение Из Сообщения Цикл
                    Текст=""+МассивЗаданий[0].Конец+" "+МассивЗаданий[0].Состояние+" "+Символы.ПС+ТекСообщение.Текст+Символы.ПС;
                КонецЦикла;
                Заголовок="Сообщение";

бла-бла-бла. потом можно сообщить(Текст), можно какую-то форму показать...
16 PLUT
 
18.10.14
09:52
(12) есть кому читать канешна, было бы что читать)

ФоновоеЗадание.ПолучитьСообщенияПользователю (BackgroundJob.GetUserMessages)
ФоновоеЗадание (BackgroundJob)
ПолучитьСообщенияПользователю (GetUserMessages)
Синтаксис:

ПолучитьСообщенияПользователю(<УдалятьПолученные>)
Параметры:

<УдалятьПолученные> (необязательный)

Тип: Булево.
Признак необходимости удаления полученных сообщений.
Истина - удалять.
Значение по умолчанию: Ложь
Возвращаемое значение:

Тип: ФиксированныйМассив.

Описание:

Получает массив объектов СообщениеПользователю, которые были выведены в процессе работы фонового задания. Получение сообщений может выполняться как в процессе работы задания, так и по его завершении.

Доступность:

Сервер, толстый клиент, внешнее соединение.

фича или баг? у фоновых заданий почему-то не очищаются полученные сообщения

пришлось костыль вставлять, чтобы не выводить одни и те же сообщения последнего выполненного фонового(регл)задания

Если ЗначениеВСтрокуВнутр(ПоследнееФоновоеЗадание)=ЗначениеВСтрокуВнутр(МассивЗаданий[0]) Тогда
            Возврат;
        КонецЕсли;
17 romix
 
18.10.14
09:55
"Hello, world" непростое. :-)
18 PLUT
 
18.10.14
09:55
+(16) (0) то, что дохтур прописал)))

Получение сообщений может выполняться как в процессе работы задания, так и по его завершении

на здоровье))
19 Алексей2014
 
18.10.14
10:22
Спасибо. Вечером попробую.
20 Алексей2014
 
19.10.14
21:11
Короче говоря, создал в Общем модуле простую процедурку по добавлению в регистр сведений:
Процедура МоеРегЗадание() Экспорт
    Данные=РегистрыСведений.РеглЗадание.СоздатьНаборЗаписей();
    Набор=Данные.Добавить();
    Набор.Период = ТекущаяДата();
    Набор.ТекстРеглЗадания="Задание работает, сейчас "+ТекущаяДата();
    Данные.Записать(Ложь);
КонецПроцедуры

Указал в Регламентном задании в "Имя метода" эту процедурку
Расписание Каждый день каждые 60 сек
Галки Использование и Предопределенное. Однако не работает. 1с аварийно завершается.
Заходим с другой стороны: Щелкаем Конфигурация-Режим совместимости - (меняем с "Не использовать" на "8.2.16"), затем идём в регистр сведений куда будем писать регламентным заданием , открываем модуль формы списка  добавляем код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)    
    ПодключитьОбработчикОжидания("ПриОтрытииНаКлиенте",5);
КонецПроцедуры

&НаКлиенте
Процедура ПриОтрытииНаКлиенте()
    ВыполнитьОбработкуЗаданий();
КонецПроцедуры

Запускаю, работает (пишет в регистр)! Но почему не работает в 8.3? У меня 8.3.5.1119.
21 Алексей2014
 
21.10.14
20:39
Дамы и господа, комрады, мучачес...товарищи! Если у вас появилось что-то вроде того:

"Имя сбойного приложения: 1CV8C.exe, версия: 8.3.5.1231, метка времени: 0x543ec775
Имя сбойного модуля: backend.dll, версия: 8.3.5.1231, метка времени: 0x543ecab7
Код исключения: 0xc0000005
Смещение ошибки: 0x0033a463
Идентификатор сбойного процесса: 0x73f4
Время запуска сбойного приложения: 0x01cfed4a749cd862
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.5.1231\bin\1CV8C.exe
Путь сбойного модуля: C:\Program Files (x86)\1cv8\8.3.5.1231\bin\backend.dll
Идентификатор отчета: e37ddfd3-593d-11e4-bed1-60a44c373b84"

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