Версия для печати темы (https://pro1c.org.ua/index.php?s=6177e8eb8a93f876be803558f8820efb&showtopic=45972)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ не работает система оповещения

Автор: kanibal23 30.05.18, 14:19

может кто то скажет почему так происходит

Даю кода

Модуль управляемого приложения

&НаКлиенте
Процедура ОбработатьОжидание()Экспорт    
    
       РезультатПроверкиСообщений = ОбщийМодульЧат.ПроверитьНаличиеСообщенийСервер();
    Если Не РезультатПроверкиСообщений =  "" Тогда
        Сообщить("Сообщение чата " + РезультатПроверкиСообщений);
    КонецЕсли;
КонецПроцедуры


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


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

    Возврат ТекстСообщения;  
  
КонецФункции




Автор: sava1 30.05.18, 14:26

и как часто датаВремя сообщения совпадает с текущейДатой ?

уберите в проверке на клиенте НЕ - посмотрите как работает

Автор: kanibal23 30.05.18, 15:02

sava1 @ Сегодня, 15:26 * ,
по идеи код должин был таким

 |    СообщенияЧата.НачалоПериод <= &ТекущаяДата   
        |    И СообщенияЧата.КонецПериода >= &ТекущаяДата";


Вот только заковырка если так написать то ошибка в ВЫБРАТЬ


если НЕ убрать постоянно спамит пустое сообщение

Автор: Vidocq05 30.05.18, 18:03

Цитата(kanibal23 @ 30.05.18, 16:02) *
Вот только заковырка если так написать то ошибка в ВЫБРАТЬ

Телепатирую. У регистре нету реквизитов "НачалоПериод" и "КонецПериода".

kanibal23 @ Сегодня, 15:19 * ,
В модуле управляемого приложения определяете переменную
Перем глПоследняяДатаВремяЧата Экспорт

Далее
&НаКлиенте
Процедура ПриНачалеРаботыСистемы()
  
    глПоследняяДатаВремяЧата = ТекущаяДата();

    ПодключитьОбработчикОжидания("ОбработатьОжидание",5,);

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

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

    глПоследняяДатаВремяЧата = ТекущаяДата()+1;

    Возврат ТекстСообщения;  
  
КонецФункции


kanibal23 @ Сегодня, 15:19 * ,
Даже лучше так
&НаСервере
Функция ПроверитьНаличиеСообщенийСервер() Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    СообщенияЧата.Текст
                   |ИЗ
                   |    РегистрСведений.СообщенияЧата КАК СообщенияЧата
                   |ГДЕ
                   |    СообщенияЧата.ДатаВремя МЕЖДУ &ДатаНачала И  &ДатаОкончания";
                  
    Запрос.УстановитьПараметр("ДатаНачала", глПоследняяДатаВремяЧата);
    ДатаОкончания = ТекущаяДата();
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);    
    Выборка = Запрос.Выполнить().Выбрать();    
       ТекстСообщения = "";
    Если Выборка.Следующий() Тогда
        ТекстСообщения = Выборка.Текст;
    КонецЕсли;

    глПоследняяДатаВремяЧата = ДатаОкончания + 1;

    Возврат ТекстСообщения;  
  
КонецФункции

Автор: kanibal23 31.05.18, 8:41

Vidocq05 @ Вчера, 19:03 * ,
Ну почти все руль только во так заработало

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

     Возврат ТекстСообщения;


Только один нюанс как остановить спам (спамит последнюю запись)
я понимаю что отработку модуля можно поставить и дольше 5 секунд (я предполагал поставить 120) но все ровно нужно чтоб новое сообщение выдавало аа старое нет как тут лучше поступить

Автор: Batchir 31.05.18, 9:02

Цитата(kanibal23 @ 31.05.18, 9:41) *
Только один нюанс как остановить спам (спамит последнюю запись)
я понимаю что отработку модуля можно поставить и дольше 5 секунд (я предполагал поставить 120) но все ровно нужно чтоб новое сообщение выдавало аа старое нет как тут лучше поступить


Теперь Вам нужно знать кто какое сообщение получил, следовательно в этот регистр должны попадать записи в разрезе каждого пользователя и когда он получает сообщение, то в регистре должна ставиться отметка что запись получена (или просто удаляться)
Идея чата в 1С это древняя идея, многие делали и по разному.
Самый простой вариант (ИМХО) это просто обработка с этим регистром сведений (автообновляемым).
Кто хочет, тот открыл обработку и всё видит, но это всё в прошлом.
1С же поняла необходимость в этом функционале внутри системы и поэтому реализовала это на глобальном уровне
Вы рассматривали в виде варианта решения чата в 1С систему взаимодействия?
http://pro1c.org.ua/redirect.php?https://wonderland.v8.1c.ru/blog/sistema-vzaimodeystviya/
http://pro1c.org.ua/redirect.php?https://infostart.ru/public/665906/
Я лично не ставил ))) но если стоит такая задача. то может стоит развернуть и посмотреть как оно работает.


Автор: kanibal23 31.05.18, 11:29

Batchir @ Сегодня, 10:02 * ,
Проще сделал
Ужал временными рамками
Может конечно не верно сделал но работает и не флудит

конечна интересная тема но ставить для мой базы не вижу смысла и самому интересно довести что то до ума
Установка системы взаимодействия

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua