Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Звуковое оповещение о задачах пользователя
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
kosalex
Добрый День. Мучаюсь с оповещением пользователя при появлении задачи. Написал общий модуль. При его вызове в модуле упр. приложения возникает ошибка.




 ! 

Правила, п.13
 


Общий модуль ОповещениеПользователей:

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

Функция ЕстьНовыеЗадачи() Экспорт
    
    Возврат РегистрыСведений.ОповещениеПользователя.ЕстьЗадачиПоИсполнителю();        

КонецФункции // ЕстьНовыеЗадачи()


Процедура ОчиститьОповещенияОЗадачах () Экспорт

    НаборЗаписей = РегистрыСведений.ОповещениеПользователя.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Пользователь.Установить(ПараметрыСеанса.ТекущийПользователь);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();

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


Функция ИспользоватьОповещениеОсновыхЗадачах() Экспорт

    Использование = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ОповещатьОНовыхЗадачах");
    Возврат ?(Использование = Неопределено, Ложь, Использование)

КонецФункции // ИспользоватьОповещениеОновыхЗадачах()


Функция ИнтервалОпросаОНовыхЗадачах() Экспорт

    Интервал = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ИнтервалОпросаОНовыхЗадачах");
    Возврат ?(Интервал = Неопределено, 0, Интервал)    

КонецФункции // ИнтервалОпросаОНовыхЗадачах()


Вызов функция и процедур из общего модуля в модуле управл. приложения:

Процедура ПриНачалеРаботыСистемы()
    Если ОповещениеПользователей.ИспользоватьОповещениеОсновыхЗадачах() Тогда
        ИнтервалОпроса = ОповещениеПользователей.ИнтервалОпросаОНовыхЗадачах();
        Если НЕ  ИнтервалОпроса = 0 Тогда
            ПодключитьОбработчикОжидания("ПроверитьЗадачиПользователя", ИнтервалОпроса);    
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры    

&НаКлиенте
Процедура ПроверитьЗадачиПользователя() Экспорт
    Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
        ПоказатьОповещениеПользователя(НСтр("ru = '1С Документооборот'; uk = '1С Документообіг'"),,
                                                                                НСТр("ru = 'У Вас появились новые задачи!!'; uk = 'У Вас з''явились нові задачі!!'"),
                                                                                БиблиотекаКартинок.Информация32);
        ОповещениеПользователей.ОчиститьОповещенияОЗадачах();
    КонецЕсли;
КонецПроцедуры // ПроверитьНапоминанияПользователя()


Ошибки:
{МодульУправляемогоПриложения(120,7)}: Переменная не определена (ОповещениеПользователей)
Если <<?>>ОповещениеПользователей.ИспользоватьОповещениеОсновыхЗадачах() Тогда (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(121,20)}: Переменная не определена (ОповещениеПользователей)
ИнтервалОпроса = <<?>>ОповещениеПользователей.ИнтервалОпросаОНовыхЗадачах(); (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(130,7)}: Переменная не определена (ОповещениеПользователей)
Если <<?>>ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(132,3)}: Переменная не определена (ОповещениеПользователей)
<<?>>ОповещениеПользователей.ОчиститьОповещенияОЗадачах(); (Проверка: Тонкий клиент)


Почему переменная не определена? Я не понимаю....
В 1С не специалист, учусь!


 ! 

Правила, п.6
 
logist
Цитата(kosalex @ 04.07.13, 9:59) необходимо зарегистрироваться для просмотра ссылки
Почему переменная не определена?

Потому, что модуль, процедуры которого вызываете, не доступен с Клиента. Вам необходимо составить и разместить процедуры для модуля со свойством "Клиент"
kosalex
Цитата(logist @ 04.07.13, 10:12) необходимо зарегистрироваться для просмотра ссылки
Потому, что модуль, процедуры которого вызываете, не доступен с Клиента. Вам необходимо составить и разместить процедуры для модуля со свойством "Клиент"



&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
    ОповещениеПользователейНаСервере();    
КонецПроцедуры    


&НаСервере
Процедура ОповещениеПользователейНаСервере()
    
Если ОповещениеПользователей.ИспользоватьОповещениеОсновыхЗадачах() Тогда
        ИнтервалОпроса = ОповещениеПользователей.ИнтервалОпросаОНовыхЗадачах();
        Если НЕ  ИнтервалОпроса = 0 Тогда
            ПодключитьОбработчикОжидания("ПроверитьЗадачиПользователя", ИнтервалОпроса);    
        КонецЕсли;
    КонецЕсли;    
    
    
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьЗадачиПользователя() Экспорт
    ПроверитьЗадачиПользователяНаСервере();
КонецПроцедуры // ПроверитьНапоминанияПользователя()  


&НаСервере
Процедура ПроверитьЗадачиПользователяНаСервере()
    
Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
        ПоказатьОповещениеПользователя(НСтр("ru = '1С Документооборот'; uk = '1С Документообіг'"),, НСТр("ru = 'У Вас появились новые задачи!!'; uk = 'У Вас з''явились нові задачі!!'"),БиблиотекаКартинок.Информация32);
        ОповещениеПользователей.ОчиститьОповещенияОЗадачах();
    КонецЕсли;
    
    
КонецПроцедуры


Всё равно ошибки...можно пример?
logist
В свойствах модуля ОповещениеПользователей стоит флаг "Клиент"?
kosalex
не стоял.
поставил - ошибка та же
logist
Цитата(kosalex @ 04.07.13, 10:29) необходимо зарегистрироваться для просмотра ссылки
ошибка та же

Значит вы используете серверные методы в клиентских процедурах. Например код приведенный выше, если я правильно понимаю взят из Модуля управляемого приложения - процедуры &НаСервере работать в нем не будут.
kosalex
ЗДРАВСТВУЙТЕ. Получилось написать это оповещение когда у пользователя появляются задачи.

Осталось только одно НО. Когда показывается сообщение "У Вас есть новые задачи" и проиграыется звук. То сообщение остаётся на экране, чрез 5 сек опять вылазит сообщение и проигрывается звук.
Подскажите как сделать чтобы сообщение вылазило только раз, а звук проигрывался каждые 5 сек,пока пользователь не закроет сообщение??

Процедура ПриНачалеРаботыСистемы()
    ИнтервалОпроса = 5;
        Если НЕ  ИнтервалОпроса = 0 Тогда
            ПодключитьОбработчикОжидания("ПроверитьЗадачиПользователя", ИнтервалОпроса);    
        КонецЕсли;
КонецПроцедуры    


&НаКлиенте
Процедура ПроверитьЗадачиПользователя() Экспорт
        
    Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
        Сигнал();
        Предупреждение("У Вас есть новые задачи!");
        
        ОповещениеПользователей.ОчиститьОповещенияОЗадачах();
        
    КонецЕсли;

КонецПроцедуры // ПроверитьНапоминанияПользователя()

logist
Цитата(kosalex @ 08.07.13, 11:23) необходимо зарегистрироваться для просмотра ссылки
как сделать чтобы сообщение вылазило только раз, а звук проигрывался каждые 5 сек,пока пользователь не закроет сообщение??

Используйте для оповещения отдельную форму, а не Предупреждение. И "сигнальте" пока форма открыта.
kosalex
Цитата(logist @ 08.07.13, 11:30) необходимо зарегистрироваться для просмотра ссылки
Используйте для оповещения отдельную форму, а не Предупреждение. И "сигнальте" пока форма открыта.



Форма же будет вызываться каждые 5 секунд. ИнтревалОпроса = 5; Как быть?
logist
Цитата(kosalex @ 08.07.13, 11:51) необходимо зарегистрироваться для просмотра ссылки
Форма же будет вызываться каждые 5 секунд. ИнтревалОпроса = 5; Как быть?

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

Есть функция в общем модуле, которая должна вызываться из модуля управляемого приложения:
УПРАВЛ. ПРИЛОЖЕНИЕ:

&НаКлиенте 
Процедура ПроверитьЗадачиПользователя() Экспорт
    Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
        Сигнал();
        Если НЕ ФормаОповещенияОткрыта Тогда
            ОткрытьФормуМодально("ОбщаяФорма.ОповещениеПользователяНовыеЗадачи");
            ОповещениеПользователей.ОчиститьОповещенияОЗадачах();
        КонецЕсли;
    КонецЕсли;
    
        

КонецПроцедуры // ПроверитьНапоминанияПользователя()


ОБЩИЙ МОДУЛЬ:

&НаСервере 
Функция ЕстьНовыеЗадачи() ЭКСПОРТ
    
    Возврат РегистрыСведений.ОповещениеПользователя.ЕстьЗадачиПоИсполнителю();        

КонецФункции // ЕстьНовыеЗадачи()



СВОЙСТВА ОБЩЕГО МОДУЛЯ(отмечены):
Сервер
Вызов сервера
Повторное использование возвращаемых значений = на время сеанса


Почему не вызывается функция с общего модуля
ЕстьНовыеЗадачи()



 ! 

Правила: 13
 


Если в общем модуле включить ещё и Клиент(управл.приложение), то возникает ошибка:
{МодульУправляемогоПриложения(134)}: Метод объекта не обнаружен (ЕстьНовыеЗадачи)
Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
Vofka
kosalex, ещё раз (последний) обращаю внимание на 13 пункт правил! И если вам 20 минут никто не ответил - не надо писать с залипшим капсом ПОМОГИТЕ.
kosalex
Сори за п.13

А помощь нужна!
logist
kosalex,
Зачем Вы страдаете фигней? Открывайте форму на старте, а уже ПриСозданииНаСервере формы проверяйте выводить туда что-то или нет, если нет или форма открыта - делайте отказ открытия, там же очищайте, и все. Делайте все в этой форме, а из модуля упр.прил только вызывайте открытие этой формы.
kosalex
В смысле фигнёй?
Мне нужно вызвать из управляемого приложения функцию из общего модуля. Она не вызывается. а должна же.

Если б вы привели пример,кодом...
Я не спец.
logist
Давайте вашу конфигурацию.
kosalex
необходимо зарегистрироваться для просмотра ссылки

пароль 1234567
logist
Работает все, или я не понял в чем проблема? Вы же это хотите увидеть:
kosalex
да)но работает на файловом варианте без проблем!
не работает на серверном. выше писал.

 Если ОповещениеПользователей.ЕстьНовыеЗадачи() Тогда
вот здесь всё время ЛОЖЬ. Не хочет вызывать функцию
ЕстьНовыеЗадачи()
из общего модуля
ОповещениеПользователей


logist
Цитата(kosalex @ 09.07.13, 10:54) необходимо зарегистрироваться для просмотра ссылки
не работает на серверном. выше писал.

И ГДЕ выше писал?
kosalex
только подумал,но не написал что в серверном варианте не заходит.

по этому не догадаться?)))
СВОЙСТВА ОБЩЕГО МОДУЛЯ(отмечены):
Сервер
Вызов сервера
Повторное использование возвращаемых значений = на время сеанса


Вы подскажите что нужно для серверного варианта,чтобы вызывалась функция из общего модуля?
logist
Цитата(kosalex @ 09.07.13, 11:00) необходимо зарегистрироваться для просмотра ссылки
по этому не догадаться?)))

Нет не догадаться. Свойства модуля и работа базы в серверном варианте это разные вещи.

Цитата(kosalex @ 09.07.13, 11:00) необходимо зарегистрироваться для просмотра ссылки
Вы подскажите что нужно для серверного варианта,чтобы вызывалась функция из общего модуля?

Ничего не нужно, она у вас вызывается нормально. Теперь идем в первый класс, и читаем: В базах установленных на сервере, отладчик не заходит в серверные процедуры. (он может заходить, но после танцев с бубном).
kosalex
И что это за танец?)
Подскажите как реализовать без бубна,или одолжите бубен)
Vofka
Цитата(kosalex @ 09.07.13, 11:13) необходимо зарегистрироваться для просмотра ссылки
Подскажите как реализовать без бубна,или одолжите бубен)

Бубен одалживается путем использования поиска по сайту. Я размещал описание как это сделать.
kosalex
ищу...не нахожу вашего описания...
logist
Цитата(kosalex @ 09.07.13, 13:06) необходимо зарегистрироваться для просмотра ссылки
ищу..

плохо ищу значит, или не ищу совсем... необходимо зарегистрироваться для просмотра ссылки
kosalex
искал, до 17 страници по сообщениям Vofka.

только смысл от этих манипуляций? Отладчик не заходит, но предприятие должно ж заходить в общий модуль и выполнять там функцию, которая возвращает значение в модуле управляемого приложения,правильно?
logist
Цитата(kosalex @ 09.07.13, 13:16) необходимо зарегистрироваться для просмотра ссылки
искал, до 17 страници по сообщениям Vofka.

Есть поиск по форуму, вообще-то.

Цитата(kosalex @ 09.07.13, 13:16) необходимо зарегистрироваться для просмотра ссылки
только смысл от этих манипуляций?

Ну Вы же хотите туда отладчиком зайти, или в чем у вас проблема?

Цитата(kosalex @ 09.07.13, 13:16) необходимо зарегистрироваться для просмотра ссылки
но предприятие должно ж заходить в общий модуль и выполнять там функцию, которая возвращает значение в модуле управляемого приложения,правильно?

Так оно туда заходит. Я же взял вашу конфигурацию и проверил работоспособность вашего кода, и в файловом и в серверном варианте он отрабатывает, о чем свидетельствует появление окна формы (я его выложил на предыдущей странице). Если в регистре нет записи пользователя, то ничего не появляется, если сделать запись - то выводится окно. Что не так? Опишите внятно проблему.
kosalex
У меня отрабатывает только в файловом варианте. В серверном не отрабатывает(Не вылазит окошко). Или для того что бы отработало нужно сделать это необходимо зарегистрироваться для просмотра ссылки
logist
Цитата(kosalex @ 09.07.13, 13:42) необходимо зарегистрироваться для просмотра ссылки
В серверном не отрабатывает(Не вылазит окошко).

Какое окошко? Форма оповещения пользователя или отладчик?
kosalex
форма оповещения пользователя
logist
Цитата(logist @ 09.07.13, 13:37) необходимо зарегистрироваться для просмотра ссылки
Я же взял вашу конфигурацию и проверил работоспособность вашего кода, и в файловом и в серверном варианте он отрабатывает, о чем свидетельствует появление окна формы (я его выложил на предыдущей странице).


Давайте разбираться почему у вас не работает. Пишите всё пошагово, что вы делаете в режиме предприятия, для того что бы это окно отобразилось.
kosalex
Создаю бизнес процесс "Поручение", "Исполнение", "Рассмотрение" и т.д. Потом жду сообщения, проходит 10 сек, а его нет((
logist
Цитата(kosalex @ 09.07.13, 14:02) необходимо зарегистрироваться для просмотра ссылки
Создаю бизнес процесс "Поручение", "Исполнение", "Рассмотрение" и т.д. Потом жду сообщения, проходит 10 сек, а его нет((

Вопрос №2, а после создания БП в том регистре, откуда должны получаться данные, есть запись с текущим пользователем?
kosalex
о боже...нет записи(( как так?
logist
Цитата(kosalex @ 09.07.13, 14:22) необходимо зарегистрироваться для просмотра ссылки
как так?

Ну наверное в БП (или задачах) не прописано ничего, что бы заполняло этот регистр?

Даже не наверное, а точно.

Итого 37 сообщений ни о чем, и все потому, что не умеете описывать проблему.
kosalex
Ребята сори!!!Моя тупка. Забыл при объединении конфигураций перенести "ПодпискуНаСобытия"

Огромное спасибо что не бросили в беде =) Всем хорошего дня!

Цитата(logist @ 09.07.13, 14:33) необходимо зарегистрироваться для просмотра ссылки
Ну наверное в БП (или задачах) не прописано ничего, что бы заполняло этот регистр?

Даже не наверное, а точно.

Итого 37 сообщений ни о чем, и все потому, что не умеете описывать проблему.




Сори. Я не проблему не мог описать) надо было сразу регистр посмотреть. Мне почему то думалось, что весь сыр бор из-за вызова процедуры на сервере и на клиенте.

Ещё раз сори за Ваше потраченное время!
logist
Цитата(kosalex @ 09.07.13, 14:41) необходимо зарегистрироваться для просмотра ссылки
Ещё раз сори за Ваше потраченное время!

Да ничего страшного. С Вас пиво и экскурсия по Тихому переулку wink.gif
kosalex
Цитата(logist @ 09.07.13, 15:03) необходимо зарегистрироваться для просмотра ссылки
Да ничего страшного. С Вас пиво и экскурсия по Тихому переулку wink.gif


Пиво не вопрос) icon_beer17.gif

а на счет экскурсии это не ко мне))) я только с девочками))
logist
Цитата(kosalex @ 09.07.13, 15:22) необходимо зарегистрироваться для просмотра ссылки
а на счет экскурсии это не ко мне))) я только с девочками))

Тихий это название (оно с большой буквы написано, если, что), раз не понял, значит я городом ошибся.
kosalex
я понял что это название)
раньше жил в харькове) ,но не помню что это))
без обид)
logist
Цитата(kosalex @ 09.07.13, 15:51) необходимо зарегистрироваться для просмотра ссылки
раньше жил в харькове)

Да я и не про Харьков, ну да ладно, проехали, шутка не удалась.
kosalex
Цитата(logist @ 09.07.13, 15:53) необходимо зарегистрироваться для просмотра ссылки
Да я и не про Харьков, ну да ладно, проехали, шутка не удалась.



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