Оптимизация персонализированных рассылок отчетов в БСП

10.07.23

Интеграция - Email рассылки

Представленная в публикации разработка позволяет оптимизировать персонализированную рассылку отчетов БСП за счет предварительной выборки получателей отчетов.

Скачать исходный код

Наименование Файл Версия Размер
Оптимизация персонализированных рассылок отчетов в БСП:
.cfe 14,90Kb
1
.cfe 14,90Kb 1 Скачать

Как известно, в состав библиотеки стандартных подсистем (БСП) входит подсистема рассылки отчетов, позволяющая по заданному расписанию осуществлять рассылку отчетов получателям. Одним из режимов работы данного механизма является персонализированная рассылка, когда каждому из указанных получателей отправляется свой отчет, то есть отчет формируется с установкой отбора по получателю. В процедуре рассылки в цикле по каждому из возможных получателей формируется отчет с отбором по получателю и, если он не пустой, отправляется получателю на почту.

Проблема заключается в том, что по большинству получателей будут сформированы пустые отчеты, так как в качестве получателей указываются группы, включающие всех потенциальных получателей отчета (например, группа пользователей "Все пользователи").  В крупных системах количество пользователей в справочнике "Пользователи" может достигать нескольких тысяч, то есть при запуске такой рассылки мы получим огромное количество запросов в цикле, что приведет к избыточной нагрузке на систему.

Таким образом, есть необходимость каким-то способом предварительно отобрать получателей отчета, по которым будут сформированы не пустые отчеты. В данной разработке предлагается следующий подход к решению поставленной задачи.

  1. Создать в отчете новую схему компоновки данных ОтборПолучателейОтчетов для отбора получателей рассылки с учетом возможных установленных отборов/параметров в отчете (то есть продублировать состав параметров/отборов рассылаемого варианта отчета). В качестве альтернативы вместо добавления новой схемы для отбора получателей также можно просто добавить новый вариант отчета с выбором получателей.
  2. В модуль объекта отчета добавить экспортную функцию СформироватьСписокПолучателейРассылки(), возвращающую таблицу получателей отчета. Таблица получателей формируется по СКД ОтборПолучателейОтчетов с учетом переданных пользовательских настроек (параметров/отборов) формируемого отчета.
  3. В процедуру ПередФормированиемСпискаПолучателейРассылки() общего модуля РассылкаОтчетовПереопределяемый добавить вызов функции СформироватьСписокПолучателейРассылки() модуля отчета. Скорректировать список получателей отчета по полученной таблице получателей.

Код процедуры ПередФормированиемСпискаПолучателейРассылки() общего модуля РассылкаОтчетовПереопределяемый:

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

Код функции СформироватьСписокПолучателейРассылки() модуля объекта отчета:

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

В качестве примера к публикации прикладывается расширение, реализующее описанный механизм для отчета _ДемоФайлы из демонстрационной базы БСП.

До подключения расширения список получателей рассылки выглядел таким образом (выводятся все пользователи):

После подключения расширения выводятся только пользователи, по которым будут сформированы не пустые отчеты:

 

Дополнительная информация

Тестирование подсистемы проводилось на версии платформы 8.3.21.1302 (режим совместимости конфигурации 8.3.14). При разработке использовалась Библиотека стандартных подсистем версии 3.1.7.

рассылка отчетов персонализированная оптимизация БСП

См. также

"Акты сверки +" Групповая подготовка и рассылка актов сверки для Бухгалтерии 3.0.

Взаиморасчеты Email рассылки Акт сверки Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Внешняя обработка для Бухгалтерии 3.0 - позволяет автоматически формировать документы «Акт сверки расчетов» с контрагентами за выбранный период с последующей фоновой отправкой на почту контрагента.

3000 руб.

25.11.2020    22506    183    6    

163

Email, SMS, Telegram рассылки из 1С - Директ Маркетинг

Управление взаимоотношениями с клиентами (CRM) Мессенджеры и боты SMS рассылки Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

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

7788 руб.

07.04.2014    84228    42    193    

128

Автоматическая рассылка отчетов из 1С: Управление торговлей 10.3 и 1С:УПП по электронной почте

Email рассылки Оптовая торговля Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием Управленческий учет Платные (руб)

Многим сотрудникам предприятия требуется актуальная и достоверная информация для принятия верных управленческих решений. Получить данную информацию можно при помощи отчетов, существующих в конфигурации «1С: Управление торговлей 10.3» или «1С:УПП». Но не всегда у пользователей есть время, возможность и/или желание формировать отчеты непосредственно в системе. Намного привычней и удобней получать готовые отчеты на электронную почту, не открывая 1С.

12000 руб.

16.04.2014    84594    100    91    

94

Массовая рассылка печатных форм любых документов по электронной почте, в Telegram, в каталог или том

Email рассылки Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Решение для массовой рассылки печатных форм (в том числе и дополнительных) любых документов, и произвольных файлов. Рассылка возможна посредством электронной почты, Telegram и файловой системы. Рассылка пакета документов. Добавление факсимильных печати и подписи. Произвольные шаблоны HTML/Simple text с автозаполнением любыми полями документа. Любые форматы файлов. Упаковка вложений в архив. Транслитерация имен файлов. Разбиение рассылки на произвольные порции. Обход спам-фильтров. Журналирование рассылок.

3600 руб.

30.06.2022    9237    64    88    

27

Групповое создание актов сверок

Взаиморасчеты Email рассылки Акт сверки Платформа 1С v8.3 Бухгалтерский учет 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Обработки предназначены для массового создания актов сверки и отправки их по электронной почте для конфигураций Управление торговлей 10.3. и Бухгалтерия предприятия 3.0. Для Бухгалтерии 3.0 Разработка велась на 1С:Предприятие 8.3 (8.3.15.1830). проверялась на Бухгалтерия предприятия 3.0 (3.0.71.83) и 3.0.76.77 Для Управление торговлей 10.3 Разработка велась на 1С:Предприятие 8.3 релиз конфигурации (10.3.61.2) . РАБОТАЕТ НА БАЗОВЫХ и ПРОФ. ВЕРСИЯХ.

2000 руб.

24.04.2020    30664    121    66    

101

Групповое формирование, согласование, печать и отправка по e-mail актов сверок взаиморасчетов (Бухгалтерия предприятия, ред. 3.0)

Email рассылки Взаиморасчеты Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Указывайте любой период, список организаций, контрагентов, видов договоров (с покупателем, с поставщиком и др.), счетов бухгалтерского учёта, валюту, необходимость детализации по договорам, список печатных форм и форматов их сохранения, а затем формируйте, согласовывайте, контролируйте, печатайте и отправляйте по e-mail готовые акты сверок прямо из 1С: Бухгалтерия предприятия, ред. 3.0.

9000 руб.

03.04.2018    30714    64    24    

64
Оставьте свое сообщение