Оповещение сотрудников в ЗУП

23.10.26

Задачи пользователя - Адаптация типовых решений

Если необходимо обеспечить уведомление кадровиков, расчетчиков и каких-либо событиях. Например, кадровики завели документ, нужно уведомить расчетчиков, чтобы его рассчитали, проверили...

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО

Наименование Скачано Бесплатно
Оповещение сотрудников в ЗУП
.cfe 29,31Kb
14 Скачать бесплатно

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Здравствуйте. Поступила мне задача/желание наших коллег, чтобы было уведомление в ЗУП о разных событиях.

Например, кадровики завели документ, нужно уведомить расчетчиков, чтобы его рассчитали, проверили... Ну и другие подобные ситуации.

Данная задача была решена в виде расширения конфигурации (рис.1):

 

рис.1

 

Интерфейс имеет следующий вид (рис.2):

 

рис.2

 

Основа данного решения - это справочник сценарии оповещения - рис.3

 

рис.3

 

В данном справочнике мы создаем правила оповещения - запрос на выборку данных. Запрос должен возвращать ссылку на документ.

Если же выбран тип "сложный запрос", то таблицу - подразумевается, что можно в запросе сформировать таблицу оповещений для вывода ее пользователю - рис.4

 

рис.4

 

Далее мы привязываем данные правила пользователям ЗУП - рис.5.

 

рис.5

 

Как принципиально это работает:

1. При входе в систему, а также с помощью обработчика ожидание создается задание на выполнение сценария оповещения.


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

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


 

2. После выполнения оповещения событие записывается в регистр. Это нужно для того, что бы каждое уведомление выполнялось только 1 раз (рис.6).

 

рис.6

 

Все логика находится в серверном модуле Оп_ОповещенияСервер:

&НаСервере
Функция ТекущийПользователь() Экспорт
	Возврат Пользователи.ТекущийПользователь();
КонецФункции 

// выполнить тестирование запроса
&НаСервере
Функция ВыполнитьТестЗапроса(ТекстЗапроса, СложныйЗапрос) Экспорт
	// доступные переменные в запросе
	ТекущаяДата = ТекущаяДата();
	//
	запрос = Новый Запрос;
	запрос.Текст = ТекстЗапроса;
	// обработать текст запроса 
	Если СтрНайти(ТекстЗапроса,"&ТекущаяДата")>0 Тогда
		запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата);	
	КонецЕсли;
	//
	Если СложныйЗапрос = Ложь Тогда
		Попытка
			результат = запрос.Выполнить();
			Если результат.Пустой() Тогда
				Возврат "Успешно, но результат - ПУСТОЙ!";
			Иначе
				Возврат "Успешно!";
			КонецЕсли;
		Исключение
			ОписаниеОшибки = ОписаниеОшибки();
			Возврат ОписаниеОшибки;	
		КонецПопытки;
	Иначе
		Попытка      
			результат = запрос.Выполнить(); 
			счетчик = 0;
			Для Каждого Колонка Из результат.Колонки Цикл
				Если Колонка.Имя = "Ссылка" Тогда
					счетчик = счетчик+1;
				КонецЕсли;
				Если Колонка.Имя = "Сообщение" Тогда
					счетчик = счетчик+1;
				КонецЕсли;
				Если Колонка.Имя = "Объект" Тогда
					счетчик = счетчик+1;
				КонецЕсли;
			КонецЦикла;
			
			Если счетчик = 3 И результат.Пустой() Тогда
				Возврат "Успешно, но результат - ПУСТОЙ!";
			ИначеЕсли счетчик =3 И НЕ результат.Пустой() Тогда
				Возврат "Успешно!";
			Иначе
				Возврат "Ошибка! В результате запроса остуствуют необходимые колонки: Ссылка, Сообщение, Результат";
			КонецЕсли;
		Исключение
			ОписаниеОшибки = ОписаниеОшибки();
			Возврат ОписаниеОшибки;
		КонецПопытки;
	КонецЕсли
	
КонецФункции

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

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

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

#Область РаботаСРегистром
// добавить новую запись в регистр ЖурналОповещений 
&НаСервере
Процедура ДобавитьОповещениеВЖурналОповещений(Период, Пользователь, СсылкаНаДокумент, Оповещение) Экспорт
	НоваяЗапись = РегистрыСведений.Оп_ЖурналОповещений.СоздатьМенеджерЗаписи();
	НоваяЗапись.Период = Период;
	НоваяЗапись.Пользователь = Пользователь;
	НоваяЗапись.СсылкаНаДокумент = СсылкаНаДокумент;
	НоваяЗапись.Оповещение = Оповещение;
	
	НоваяЗапись.Записать();
	
КонецПроцедуры

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






 

Оповещения появляются в "колокольчике", откуда по ссылке можно перейти в нужный документ.

Имеются 2 роли (рис.7)

 

рис.7

 

Роль для всех пользователей - назначается только тем, кого нужно оповещать, а полный доступ - для администратора.

Данную доработку легко можно адаптировать и для других конфигураций 1С.

Распространяю "как есть...", всем спасибо за проявленный интерес!

С уважением.

Проверено на следующих конфигурациях и релизах:

  • Зарплата и управление персоналом КОРП, редакция 3.1, релизы 3.1.37.16

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Разработка Адаптация типовых решений Производство готовой продукции (работ, услуг) Розничная торговля 1С:Управление торговлей 10 Россия Платные (руб)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории в типовую поставку больше не попадают. Доработка закрывает этот пробел: новые виды номенклатуры, обмен с ГИС МТ «Честный Знак». Поставляется в виде файла .cf

14640 руб.

23.04.2026    5272    49    13    

45

Банковские операции Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

12200 руб.

17.06.2025    5278    15    0    

15

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Расширение для УНФ, чтобы автоматически отменять старые резервы и не мешалть эффективно продавать.

9150 руб.

02.08.2023    8955    27    5    

42

Печатные формы Адаптация типовых решений Бухгалтер Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение позволяет вывести в табличном документе факсимиле печати и подписей и/или вывести произвольную картинку из прикреплённых файлов организации для 1С УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3. Вывод факсимиле возможен в табличные документы УПД, УКД, Счёт-фактура, ТОРГ-12 и другие. Возможно настроить вывод для любых типовых макетов (Акт сверки, М-15, ТТН), для этого потребуется отредактировать макет и разместить на нём картинки с соответствующими именами, при выводе на печать в размещённые картинки будут выводиться факсимиле из прикреплённых рисунков. Редактирование осуществляется через типовой механизм в пользовательском интерфейсе.

6000 руб.

07.02.2023    14481    122    25    

78

Адаптация типовых решений 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Расширение, которое в форму списка и форму выбора справочника «Номенклатура» добавляет табличную часть в виде дерева, в которую выводится информация об остатках и доступности выбранной номенклатурной позиции.

6710 руб.

20.04.2026    961    1    0    

3

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    2726    4    0    

5

Адаптация типовых решений 1С 8.3 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Беларусь Россия Платные (руб)

Расширение "Дополнительные документы" предназначено для создания дополнительных документов различного назначения, как форм для внесения данных так и печатных форм в расширяемой конфигурации пользовательскими средствами, без работы в конфигураторе и внесения изменений в структуру данных. Тестировалось для "1С:БП", "1С:УНФ","1С:КА"

21859 руб.

29.12.2025    2152    1    8    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RomanKorotovskikh 27 23.10.26 09:38 Сейчас в теме
Были некоторые проблемы с размещением расширения бесплатно, выкладываю здесь само расширение...
Прикрепленные файлы:
ЗУП_Оповещения_1_4.cfe
Для отправки сообщения требуется регистрация/авторизация