Имя: Пароль:
1C
1С v8
Обработчик ожидания в 8.2
0 FuriKuri
 
26.06.13
13:01
Недавно начала разбираться с 8.2. И нужно сделать такую задачу. При запуске системы на тонком клиенте проверяло есть ли просроченные задачи у пользователя.

В модуле управляемого приложения написал такой код:

Процедура ПриНачалеРаботыСистемы()
   
   ПроверитьПодключениеОбработчикаОжиданияУпр();
КонецПроцедуры

 Процедура ПроверитьПодключениеОбработчикаОжиданияУпр() Экспорт

   ИнтервалПроверкиНапоминанийВСекундах = ПолучитьИнтервалНапоминания();
   
   Если ИнтервалПроверкиНапоминанийВСекундах > 0 Тогда
       
       ПодключитьОбработчикОжидания("ПроверитьНапоминанияПользователяУпр", ИнтервалПроверкиНапоминанийВСекундах);

   Иначе

       ОтключитьОбработчикОжидания("ПроверитьНапоминанияПользователяУпр");

   КонецЕсли;

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


И создал Общий модуль с галками "Глобальный" и "сервер" и "вызовсервера" с кодом

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

Функция ПолучитьИнтервалНапоминания() Экспорт
   
     Запрос = Новый Запрос;
   
   Запрос.Текст =  "ВЫБРАТЬ
    |    Константы.ИнтервалПроверкиНапоминанийВСекундах
    |ИЗ
    |    Константы КАК Константы";
   
   Результат = запрос.Выполнить().Выгрузить();
   
   Для каждого стр из Результат цикл
   ИнтервалПроверкиНапоминанийВСекундах = стр;
   КонецЦикла;

   возврат ИнтервалПроверкиНапоминанийВСекундах;
КонецФункции

Функция ВыбратьЗадачиПользователя(ВыбПользователь) экспорт
   
   Запрос = Новый Запрос;
   
   Запрос.Текст = "
       |ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    *
       |ИЗ
       |    Задача.ЗадачиПользователя.ЗадачиПоИсполнителю(&ТекПользователь,
       |        Выполнена = ЛОЖЬ И Оповещение = ИСТИНА И СрокОповещения < &ДатаСреза)
       |";
       
   Запрос.УстановитьПараметр("ТекПользователь", ВыбПользователь);
   Запрос.УстановитьПараметр("ДатаСреза"      , ТекущаяДата());
       
   РезультатЗапроса = Запрос.Выполнить();
   
   Возврат РезультатЗапроса;
КонецФункции


Но при запуске вылазят разные ошибки, например что процеура ПолучитьФорму не определена. В чем мои косяки?
1 Mitriy
 
26.06.13
13:02
сервер понятия не имеет, что такое есть форма...
2 FuriKuri
 
26.06.13
13:05
(1) тогда нужно эту процедуру поместить в другой клиентский общий модуль?
3 kosts
 
26.06.13
13:08
(2) Может и не всю процедуру, но какую-то ее часть (разделить на несколько).
4 FuriKuri
 
26.06.13
13:17
(3) не могу понять куда ее поместить, какие галки должны стоять у модуля, чтоб процедура выполнялась на клиенте и была видна из глобального модуля?
5 kosts
 
26.06.13
13:22
(4) Клиент может вызвать сервер. Сервер вызывать клиента не может.
Прочитав что-то с помощью сервера, можно затем что-то отобразить на клиенте.
Как-то так.
Программист всегда исправляет последнюю ошибку.