Расширение для 1С:Управление торговлей 11.3, 11.4, позволяющее автоматически формировать задачи контроля задолженности покупателей ответственным менеджерам

Публикация № 647798

Обработки - Рабочее место

Контроль задолженности задача управление торговлей УТ 11.3 11.4

7
Для ответственного менеджера автоматически создаются задачи контроля просроченной задолженности покупателя.

Для ответственного менеджера автоматически создаются бизнес-процессы Задание "Организовать погашение задолженности" партнера (покупателя). Заданию (задаче) дополнительно может быть назначен проверяющий.

Если по документу, формирующему задолженность, есть невыполненное Задание для исполнителя-ответственного менеджера, то Задание не создается.

Алгоритм аналогичен штатному для формирования уведомлений по почте.

Задолженность фиксируется после отгрузки товаров клиенту. Состояние просроченной задолженности фиксируется в соответствии с указанной датой оплаты плюс 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;
			
		КонецЕсли;
		//
		
		Задание.Записать();
		Задание.Старт();
		
	КонецЦикла;
	
	УстановитьПривилегированныйРежим(Ложь);

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

 

 

7

Скачать файлы

Наименование Файл Версия Размер
КонтрольЗадолженности (режим совместимости 8.3.8)
.cfe 20,33Kb
17.02.19
19
.cfe 25.05.17 20,33Kb 19 Скачать
КонтрольЗадолженности (режим совместимости 8.3.10 и выше)
.cfe 20,48Kb
17.02.19
9
.cfe 17.02.19 20,48Kb 9 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. user909652 14.06.18 17:26 Сейчас в теме
Добрый день! А до 11.4 не будет доработано? а то я что-то скачала, не посмотрев, при установке расширения пишет "(Критичная) : Значение контролируемого свойства РежимСовместимости у объекта не совпадает со значением в расширяемой конфигурации"
2. mvxyz 105 14.06.18 20:36 Сейчас в теме
(1) Поставьте у расширения такой же режим совместимости, как у основной конфигурации.
3. user909652 15.06.18 13:12 Сейчас в теме
4. mvxyz 105 24.06.18 12:13 Сейчас в теме
5. TMV 14 24.09.18 05:18 Сейчас в теме
Зачем устанавливать привилегированный режим, если в запросе используется РАЗРЕШЕННЫЕ?
Зачем вообще здесь привилегированный режим?
6. mvxyz 105 24.09.18 10:45 Сейчас в теме
(5)Чтобы инициировать создание задания контроля задолженности нужно либо запускать регламентное задание, либо привязываться к каким-то событиям. Добавить регламентное задание в расширении мы не можем, поэтому идем вторым путем. Поэтому и нужен привилегированный режим, чтобы независимо от прав пользователя, пусть даже совсем бесправного, просто инициировать выполнение процедуры.
А ВЫБРАТЬ РАЗРЕШЕННЫЕ ставлю автоматом во всех запросах, оно не мешает. В данном случае можно и не ставить, результат будет тот же.
7. gvozditut 18.01.19 08:01 Сейчас в теме
{КонтрольЗадолженности Обработка.ПМВ.МодульМенеджера(110)}: Преобразование значения к типу Дата не может быть выполнено
Если ТекущаяДатаСеанса() < Дата(НачалоДня(Выборка.ДатаПлатежа) + 3600*24*7) Тогда
Управление торговлей, редакция 11 (11.4.6.188)
режим совместимости 8.3.12
9. mvxyz 105 17.02.19 19:23 Сейчас в теме
(7) Да, в УТ 11.4.6 баг имел место. Устранил, протестировал на УТ 11.4.6.207. Файл заменил. Если нужно пишите в личку адрес почты - вышлю.
8. user922056 14.02.19 16:25 Сейчас в теме
Установил, расширение встало, задачи не создались.
Что я сделал не так?
10. mvxyz 105 17.02.19 19:26 Сейчас в теме
(8) Нужно зайти под ответственным менеджером, у которого есть, что контролировать. В демоверсии УТ можно зайти под Гладилиной.
Оставьте свое сообщение