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