Для ответственного менеджера автоматически создаются бизнес-процессы Задание "Организовать погашение задолженности" партнера (покупателя). Заданию (задаче) дополнительно может быть назначен проверяющий.
Если по документу, формирующему задолженность, есть невыполненное Задание для исполнителя-ответственного менеджера, то Задание не создается.
Алгоритм аналогичен штатному для формирования уведомлений по почте.
Задолженность фиксируется после отгрузки товаров клиенту. Состояние просроченной задолженности фиксируется в соответствии с указанной датой оплаты плюс 7 календ. дней.
Если отгрузка была оформлена по заказу клиента, то дата задолженности соответствует дате, указанной в этапе оплаты "Кредит (после отгрузки)"; если накладная оформляется без заказа, то в соответствии с той датой оплаты, которая указана в накладной.
Если расчеты ведутся по договорам, то 7 дней не добавляется, задание стартует сразу.
Данные берутся из регистра накопления РасчетыСКлиентами.
Если ответственный менеджер выполнит задачу, а задолженность при этом не будет погашена, то для него будет создана новая задача "Организовать погашение задолженности". Так будет до момента погашения задолженности. То есть кнопку Выполнена в задаче имеет смысл нажимать, когда задолженность действительно погашена.
Задаче может быть назначен проверяющий. Для этого нужно создать элемент справочника "Роли исполнителей" с наименованием «Проверяющий» (Все функции / Роли исполнителей) и этой роли назначить пользователя-исполнителя (в форме элемента справочника или в НСИ и администрирование / Органайзер / Бизнес процессы и задачи / Роли и исполнители задач).
Для расширения безопасный режим должен быть отключен. Следует также отключить безопасный режим для всех "нижележащих" расширений, если они есть.
Расширение тестировалось на "1С:Управление торговлей" 11.3.1.115, 11.3.2.193, 11.4.1.261, 11.4.5.24.
Открываем конфигуратор. Выделяем корень конфигурации и в свойствах смотрим и запоминаем режим совместимости:
Открываем форму "Расширения конфигурации", нажимаем кнопку Добавить, ничего не меняем и нажимаем ОК:
В форме "Расширения конфигурации" в меню Конфигурация выбираем пункт Загрузить конфигурацию из файла:
На все вопросы отвечаем ДА.
Если будет выведено сообщение "Расширение1: Значение контролируемого свойства РежимСовместимости у объекта не совпадает со значением в расширяемой конфигурации", то в свойствах расширения устанавливаем такой же режим совместимости, как у основной конфигурации:
В форме "Расширения конфигурации" снимаем флаги Безопасный режим и Защита от опасных действий:
Ничего опасного в расширении нет, код открыт, его немного, можно посмотреть. Если флаги не снять, то под пользователем без административных прав будет возникать ошибка "Недостаточно прав!", так как задачи формируются в привилегированном режиме.
Все. Можно пользоваться.
В расширении создана обработка ПМВ и захвачена форма МоиЗадачиДляРабочегоСтола задачи ЗадачаИсполнителя.
Код модуля формы:
&НаКлиенте
Процедура РасшКЗ_ОбновитьСписокЗадачПеред(Команда)
СоздатьЗаданияКонтроляЗадолженностиНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СоздатьЗаданияКонтроляЗадолженностиНаСервере()
Обработки.ПМВ.СоздатьЗаданияКонтроляЗадолженности();
КонецПроцедуры
&НаКлиенте
Процедура РасшКЗ_ОбработкаОповещенияПеред(ИмяСобытия, Параметр, Источник)
//Привязался к этим событиям для автоматизации запуска. Можно привязаться к другим
Если ИмяСобытия = "Запись_ЗаказКлиента"
ИЛИ ИмяСобытия = "Запись_СделкиСКлиентами"
ИЛИ ИмяСобытия = "Запись_РеализацияТоваровУслуг"
Тогда
СоздатьЗаданияКонтроляЗадолженностиНаСервере();
КонецЕсли;
КонецПроцедуры
Код модуля менеджера обработки:
//Создает бизнес-процессы Задание "Проконтролировать задолженность" партнера для ответственного
//менеджера по партнеру и предмету
//если есть невыполненное задание по предмету для исполнителя - ответственного менеджера, то Задание не создается
Процедура СоздатьЗаданияКонтроляЗадолженности() Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЗаказКлиентаЭтапыГрафикаОплаты.Ссылка КАК Ссылка,
| ЗаказКлиентаЭтапыГрафикаОплаты.ДатаПлатежа КАК ДатаПлатежа
|ПОМЕСТИТЬ втДатыЗаказа
|ИЗ
| Документ.ЗаказКлиента.ЭтапыГрафикаОплаты КАК ЗаказКлиентаЭтапыГрафикаОплаты
|ГДЕ
| ЗаказКлиентаЭтапыГрафикаОплаты.ВариантОплаты = ЗНАЧЕНИЕ(Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки)
| И НЕ ЗаказКлиентаЭтапыГрафикаОплаты.Ссылка.ПометкаУдаления
| И ЗаказКлиентаЭтапыГрафикаОплаты.Ссылка.Проведен
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Задание.Ссылка КАК Ссылка,
| Задание.Автор КАК Автор,
| Задание.Исполнитель КАК Исполнитель,
| Задание.Предмет КАК Предмет
|ПОМЕСТИТЬ втЗадания
|ИЗ
| БизнесПроцесс.Задание КАК Задание
|ГДЕ
| НЕ Задание.ПометкаУдаления
| И Задание.Наименование ПОДОБНО ""Организовать погашение задолженности%""
| И НЕ Задание.Завершен
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер КАК Партнер,
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер КАК ОсновнойМенеджер,
| СУММА(РасчетыСКлиентамиОстатки.СуммаОстаток) КАК СуммаОстаток,
| СУММА(РасчетыСКлиентамиОстатки.КОплатеОстаток) КАК КОплатеОстаток,
| РасчетыСКлиентамиОстатки.ЗаказКлиента КАК Предмет
|ПОМЕСТИТЬ втЗадолженность
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(&ТекущаяДата, ) КАК РасчетыСКлиентамиОстатки
|ГДЕ
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие)
|
|СГРУППИРОВАТЬ ПО
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер,
| РасчетыСКлиентамиОстатки.АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер,
| РасчетыСКлиентамиОстатки.ЗаказКлиента
|
|ИМЕЮЩИЕ
| ВЫБОР
| КОГДА СУММА(РасчетыСКлиентамиОстатки.СуммаОстаток) >= СУММА(РасчетыСКлиентамиОстатки.КОплатеОстаток)
| ТОГДА СУММА(РасчетыСКлиентамиОстатки.КОплатеОстаток)
| ИНАЧЕ СУММА(РасчетыСКлиентамиОстатки.СуммаОстаток)
| КОНЕЦ > 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| втЗадолженность.Партнер КАК Партнер,
| втЗадолженность.ОсновнойМенеджер КАК ОсновнойМенеджер,
| втЗадолженность.Предмет КАК Предмет,
| втЗадолженность.СуммаОстаток КАК СуммаОстаток,
| втЗадолженность.КОплатеОстаток КАК КОплатеОстаток
|ПОМЕСТИТЬ втДанные
|ИЗ
| втЗадолженность КАК втЗадолженность
| ЛЕВОЕ СОЕДИНЕНИЕ втЗадания КАК втЗадания
| ПО втЗадолженность.ОсновнойМенеджер = втЗадания.Исполнитель
| И втЗадолженность.Предмет = втЗадания.Предмет
|ГДЕ
| втЗадания.Исполнитель ЕСТЬ NULL
| И втЗадания.Предмет ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втДанные.Партнер КАК Партнер,
| втДанные.ОсновнойМенеджер КАК ОсновнойМенеджер,
| втДанные.Предмет КАК Предмет,
| втДанные.СуммаОстаток КАК СуммаОстаток,
| втДанные.КОплатеОстаток КАК КОплатеОстаток,
| ЕСТЬNULL(ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(втДанные.Предмет) = ТИП(Документ.ЗаказКлиента)
| ТОГДА втДатыЗаказа.ДатаПлатежа
| КОГДА ТИПЗНАЧЕНИЯ(втДанные.Предмет) = ТИП(Документ.РеализацияТоваровУслуг)
| ТОГДА втДанные.Предмет.ДатаПлатежа
| ИНАЧЕ ДАТАВРЕМЯ(2001, 1, 1)
| КОНЕЦ, ДАТАВРЕМЯ(2100, 1, 1)) КАК ДатаПлатежа
|ИЗ
| втДанные КАК втДанные
| ЛЕВОЕ СОЕДИНЕНИЕ втДатыЗаказа КАК втДатыЗаказа
| ПО втДанные.Предмет = втДатыЗаказа.Ссылка
|";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
РольИсполнителя = Справочники.РолиИсполнителей.НайтиПоНаименованию("Проверяющий");
Пока Выборка.Следующий() Цикл
Если ТекущаяДатаСеанса() < НачалоДня(Выборка.ДатаПлатежа) + 3600*24*7 Тогда
Продолжить;
КонецЕсли;
Задание = БизнесПроцессы.Задание.СоздатьБизнесПроцесс();
Задание.Дата = ТекущаяДатаСеанса();
Задание.Автор = Выборка.ОсновнойМенеджер;
Задание.Исполнитель = Выборка.ОсновнойМенеджер;
Задание.Предмет = Выборка.Предмет;
Задание.Наименование = "Организовать погашение задолженности " + СокрЛП(Выборка.Партнер) + " по " + СокрЛП(Выборка.Предмет);
Задание.СрокИсполнения = КонецДня(Задание.Дата) + 3600*24*7;
Задание.Содержание = "Имеет место задолженность " +
СокрЛП(Выборка.Партнер) +
" по " + СокрЛП(Выборка.Предмет) + Символы.ВК +
"- сумма остатка: " + Выборка.СуммаОстаток + ";" + Символы.ВК +
"- сумма к оплате: " + Выборка.КОплатеОстаток + Символы.ВК +
?(Выборка.ДатаПлатежа<>Дата(2001,1,1), "Срок оплаты " + Формат(Выборка.ДатаПлатежа,"ДФ=dd.MM.yyyy"),"");
//Проверяющий
Если РольИсполнителя <> Справочники.РолиИсполнителей.ПустаяСсылка()
И БизнесПроцессыИЗадачиСервер.ЕстьИсполнителиРоли(РольИсполнителя)Тогда
Задание.Проверяющий = ВыбратьИсполнителя(РольИсполнителя);
Задание.НаПроверке = Истина;
Задание.СрокПроверки = Задание.СрокИсполнения + 3600*24*1;
КонецЕсли;
//
Задание.Записать();
Задание.Старт();
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры