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