helpf.pro
Регистрация
 0 
Распечатать

Система оповещений Пользователей (универсальная)

Для одного проекта пришлось сделать простую систему оповещений!

Она состоит из:
Общая форма
Общий модуль
Регистр Сведений



Общая Форма
title
На ней поле HTML Документа и Кнопка Ознакомлен (подтверждение что пользователь это видел)
Код 1C v 8.х
 Перем ТекДата, ТипСсылки, ТекСсылка;

Процедура ПриОткрытии()
	ТекДата = Дата;
	ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(Текст);	
КонецПроцедуры

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

Процедура ПолеHTMLДокументаonclick(Элемент, pEvtObj)
	// Отказ от стандартной обработки клика.
	pEvtObj.returnValue = Ложь;
	Если ВРег(pEvtObj.srcElement.tagName) = "A" Тогда
		СсылкаТекст = Сред(pEvtObj.srcElement.href, 4);
		Ссылка = ЗначениеИзСтрокиВнутр(СсылкаТекст);
		Если Ссылка.Пустая()
			Или Ссылка.ПолучитьОбъект() = Неопределено Тогда
			Предупреждение("Ошибка открытия объекта.",, "Ошибка");
			Возврат;
		Иначе
			ОткрытьЗначение(Ссылка);
		КонецЕсли;
	КонецЕсли;

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


В общем Модуле:
Код 1C v 8.х
 Процедура СоздатьОповещение(Получатель,ТекстОповещения, ТипСсылки=Неопределено, Ссылка=Неопределено) Экспорт 
	НаборЗаписей = РегистрыСведений.МЕ_Оповещения.СоздатьНаборЗаписей();
		                                     	
	НовЗапись = НаборЗаписей.Добавить(); 	
	НовЗапись.Период  = ТекущаяДата();     	
	НовЗапись.Получатель = Получатель;        	
	НовЗапись.ТекстОповещения = ТекстОповещения; 	
	Если НЕ ТипСсылки=Неопределено Тогда
		НовЗапись.ТипСсылки = ТипСсылки;
	КонецЕсли;
	Если НЕ Ссылка=Неопределено Тогда
		НовЗапись.Ссылка = Ссылка;
	КонецЕсли;

	НаборЗаписей.Записать(Ложь); 
КонецПроцедуры // СоздатьОповещение()

Процедура ПоказатьОповещение(ТекстОповещения)
	формОповещ = ПолучитьОбщуюФорму("МЕ_Оповещения");
	формОповещ.текст=ТекстОповещения;
	Если Не формОповещ.Открыта() Тогда
		формОповещ.ОткрытьМодально();
	КонецЕсли;   	
КонецПроцедуры
   


Регистр сведений (для хранения сообщений):
title
Думаю что все поля понятны из названия, только ТипСсылки - Строка 35

Проверка непрочитанных сообщений и вызов окна:
Код 1C v 8.х
 //Проверим Оповещения для пользователя
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	МЕ_Оповещения.Период КАК Период,
	|	МЕ_Оповещения.Получатель,
	|	МЕ_Оповещения.ТекстОповещения,
	|	МЕ_Оповещения.ДатаОзнакомления
	|ИЗ
	|	РегистрСведений.МЕ_Оповещения КАК МЕ_Оповещения
	|ГДЕ
	|	МЕ_Оповещения.ДатаОзнакомления = &ДатаОзнакомления
	|	И МЕ_Оповещения.Получатель = &Получатель
	|
	|УПОРЯДОЧИТЬ ПО
	|	Период";
	Запрос.УстановитьПараметр("ДатаОзнакомления", Дата("01.01.0001 0:00:00"));
	Запрос.УстановитьПараметр("Получатель", ПараметрыСеанса.ТекущийПользователь);
	
	Результат = Запрос.Выполнить().Выбрать();
	Пока Результат.Следующий() Цикл
		формОповещ = ПолучитьОбщуюФорму("МЕ_Оповещения");
		формОповещ.дата=Результат.период;
		формОповещ.пользователь=Результат.Получатель;
		формОповещ.текст=Результат.ТекстОповещения;
		Если Не формОповещ.Открыта() Тогда
			Структ = формОповещ.ОткрытьМодально();
			Если Структ = Неопределено Тогда
				// Ничего
			Иначе
				Если СокрЛП(Структ.ТипСсылки) = "ОбработкаЦен" Тогда
					Обр = Обработки.ОбработкаЦен.Создать();
					Обр.Счет = Структ.ТекСсылка;
					Обр.ПолучитьФорму().Открыть();		
				КонецЕсли;
			КонецЕсли;  		
		КонецЕсли;
	КонецЦикла;
   


Пример добавления сообщения:
Код 1C v 8.х
 МЕ_Оповещения.СоздатьОповещение(ТекДоговорКИзменению.Менеджер, "Ваш Договор №"+СокрЛП(ТекДоговорКИзменению.Номер)+
" - Отклонен!!! - "+ИмяПользователя()+"!"+Символы.ПС+" Исправьте его учитывая Комментарии и запустите на Согласование!", "", ТекДоговорКИзменению.Ссылка);

или

//Создадим оповещение с Передачей ссылки
Текст = "" + ПараметрыСеанса.ТекущийПользователь+": Необходимо Доработать цены:<br> <b>"+Счет.Ссылка+"</b>";
МЕ_Оповещения.СоздатьОповещение(СнабженецПоследнееИзменение, Текст, "ОбработкаЦен", Счет.Ссылка);    
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 17101
 0 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
Cообщение: "Не удалось удалить чеки ККМ!" 2
Пользователь с правами Администратор ККМ проводит Закрытие кассовой смены (Z). Выходит сообщение: " Не удалось удалить чеки ККМ!" ФР печатает Z -отчет, но Отчет о рознчничных продажах не формируется. Необходимо дать роли Администратор ККМ прав
Microsift Visual C++ Runtime Library Program ...1cv77s.exe abnormal program termination 0
При запуске 1С 7.7 выдает сообщение: Microsift Visual C++ Runtime Library Program C:Program Files1Cv77BIN1cv77s.exe abnormal program termination Вариант 1. Обычно это происходит, когда повреждается файл регистрации. Точнее, когда не дописывает
Посмотреть все результаты поиска похожих
Комментарии
snfr1c
10.06.2014 13:01Комментарий: 3
snfr1c

К моему сожалению, в нашей конфигурации нет стандартного функционала "задач", привязал через обработку ожидания. Хотя задачи были бы полезны.

E_Migachev
09.06.2014 18:45Комментарий: 2
E_Migachev
Нет, не в регламентном задании.
В конфигурации есть механизм Задачи. При открытии программы справа появляется окно с текущими задачами, список задач обновляется каждую минуту. В эту процедуру обновления задач и добавил вышеуказанный код.
snfr1c
09.06.2014 17:29Комментарий: 1
snfr1c

Здравствуйте!

"Проверка непрочитанных сообщений и вызов окна" в регламентные задания установил? 

С уважением Сергей.

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!