Регламентное выполнение внешних обработок с параметрами (при помощи СКД) без изменения конфигурации (на примере УТ 11)

16.11.15

Разработка - СКД

Что, если нужно по расписанию делать что-то, зависящее от кучи параметров?  Например, формировать индивидуальные прайсы и отправлять  их (или сохранять на ftp), предварительно записав в excel. Технология будет полезна тем, кто уже имеет готовую сложную обработку, которую нужно заставить выполняться по расписанию.

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

Наименование Файл Версия Размер
ТестОбработкаПоРасписанию
.erf 13,38Kb
11
.erf 13,38Kb 11 Скачать

Суть заключается в использовании стандартного механизма рассылки отчётов. Внимание, этот механизм есть не во всех конфигурациях, например его нет в БП.

Переделка обработки состоит из трёх обязательных и одного необязательного этапа (в любом порядке)

Хоть я и буду их подробно описывать (и будет много букв), но делается всё это за 5 минут!

1. Превращаем обработку в отчёт (т.к. стандартный механизм работает исключительно с отчетами), делаем его внешним в соответствии с БСП.

2. Добавляем обработке пустую схему СКД с параметрами, соответствующими реквизитам обработки.

3. При компоновке результата превращаем параметры СКД в реквизиты  и выполняем алгоритм обработки.

4. Если нужно унифицировать выполнение по расписанию и ручной запуск обработки, то дописываем в форме обработки изменение параметров СКД при изменении реквизитов формы.

Разберём простой пример. Пусть у нас есть обработка с двумя реквизитами "Каталог" и "ИмяФайла", которая сохраняет файл с текстом "ПРЕВЕД МЕДВЕД".  Обработка очень сложная, давно используется в компании  и зарекомендовала себя. Но вот возникла необходимость запускать её по расписанию с различными параметрами.

2

1

1. Конвертируем обработку в отчёт


В разблокированной конфигурации (можно в копии базы, т.к. эта манипуляция нам нужна только чтобы получить файл erf)

а) в дереве метаданных встаём на любой отчёт и нажимаем пкм -> "Вставить внешнюю обработку, отчёт" , выбираем наш файл epf

3

б) встаём на вновь добавленный отчет и нажимаем пкм -> "Сохранить как внешнюю обработку, отчёт" , выбираем имя файла, получаем файл erf

в) открываем новорожденный отчёт, добавляем ему форму (не делаем её основной) но ставим галочку "использовать СКД". 

Это будет пустая форма, без её создания СКД у меня не заработало.

г) Ну и добавляем в модуль текст, отвечающий за "внешность" нашего отчёта

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

 2. Добавляем схему СКД с параметрами, соответствующими реквизитам обработки

а) Добавляем параметры в схему СКД

4

б) включаем их в пользовательские настройки

5

3. При компоновке результата превращаем параметры СКД в реквизиты

В модуль отчёта добавляем процедуру ПриКомпоновкеРезультата, в неё добавляем немножко кода по преобразованию параметров СКД в реквизиты и сам алгоритм обработки (в неизменном виде)

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

	ТД=Новый ТекстовыйДокумент;
	ТД.ВставитьСтроку(1,"ПРЕВЕД МЕДВЕД");
	ТД.Записать(?(Прав(ЭтотОбъект.Каталог,1)="/",ЭтотОбъект.Каталог,ЭтотОбъект.Каталог+"/")+ ЭтотОбъект.ИмяФайла);
КонецПроцедуры

Да, преобразование реквизитов тут приведено для довольно простого случая, но без труда можно доработать алгоритм для списков значений и т.п. Например, у меня СКД хранится (в виде нескольких списков значений) и преобразовывается целая табличная часть.

Обязательные действия выполнены, можно подключить нашу обработку как внешнюю.

Далее зайти в Органайзер->рассылки отчётов, создать новую рассылку, заполнить обязательные поля, выбрать внешний отчёт (выбирается специальной кнопкой)

 6

Заполняем параметры, настраиваем расписание и наслаждаемся. Проверить выполнение можно кнопкой "Выполнить сейчас"

7

4. Изменение параметров скд при изменении реквизитов формы (тот самый необязательный пункт)

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

Заполним их при создании формы


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

и всем элементам формы добавим событие ПриИзменииЭлементаНаКлиенте, в котором и будем изменять настройки СКД

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

Теперь можно убедиться, что при изменении реквизитов меняются настройки СКД

8

Мы рассмотрели очень простой пример, но метод можно использовать и для сложных обработок. Например, зная принцип, адаптация этого многофункционального прайса к рассылке занимает 15 минут. А настроек у неё море, да и сам алгоритм сложняцкий. 9 

Возможно, есть и более простые способы, или этот уже был озвучен, если так, прошу в комментарии.

На всякий случай прикладываю обработку - пример, превращённую в рассылаемый отчёт.

Спасибо за внимание!

Рассылка Преобразование Регламентное обработка отчет

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122136    670    389    

714

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    4039    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8158    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    4653    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5806    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6701    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4520    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ibrogim 1311 08.10.15 10:56 Сейчас в теме
Жду комментариев и/или конструктивной критики )
16. Mitrill 11.05.17 19:00 Сейчас в теме
(1) А как вывести в поле "Настройки отчета" реквизит типа СпискаЗначений, чтобы можно было задавать несколько значений? Спасибо
17. Ibrogim 1311 12.05.17 08:25 Сейчас в теме
(16) Просто в СКД поставить галочку Доступен список значений. В процедуре ПриКомпоновкеРезультата там где Преобразуем параметры скд в реквизиты обработки
Вставить
Если ИмяПараметра="СписокАдресовРассылки" Тогда
			Если ТипЗНЧ(ЭлементПараметров.Значение) = Тип("СписокЗначений") Тогда  		
				СписокАдресовРассылки=ЭлементПараметров.Значение.Скопировать();
			Иначе
				СписокАдресовРассылки.Очистить();
				СписокАдресовРассылки.Добавить(ЭлементПараметров.Значение);
			КонецЕсли;
			
			
			
		КонецЕсли;
Показать
Прикрепленные файлы:
2. pumbaE 08.10.15 11:10 Сейчас в теме
статьи еще не видно, но там разве не стандартное подсистема подключаемых обработок с возможностью указания запуска с помощью регламентного задания?
3. Ibrogim 1311 08.10.15 11:50 Сейчас в теме
(2) pumbaE, Скажите как? может действительно есть. Ключевой момент, должна быть возможность настройки параметров
4. pumbaE 08.10.15 12:23 Сейчас в теме
(3) вопрос снимается, т.к. если судить по теме, то вам необходимо было регламентное выполнение внешних обработок - это делается без проблем, если говорить про сохранение настроек, то тоже делается без проблем, т.к. можно сохранить из формы по определенному адресу структура с настройками, потом в фоновой задаче восстановить.

Если про рассылку отчетов, то используя типовые средства трудно сделать произвольную настройку.
5. Ibrogim 1311 08.10.15 12:46 Сейчас в теме
(4) pumbaE, Задача именно в том, чтобы быстро сделать из существующей обработки фоновую, с возможностью настройки параметров интерактивно. т.е. не обязательно рассылка.
6. pumbaE 08.10.15 12:54 Сейчас в теме
(5) ну тогда в модуль объекта добавляете сведения о внешней обработке, определяете экспортную процедуру, там загружаете настройки по определенному ключу и выполняете код на сервере. В той же обработке у вас есть форма, которая при сохранении настроек сохраняет их в хранилище значений.
asazonov; Ibrogim; +2 Ответить
7. Ibrogim 1311 08.10.15 13:03 Сейчас в теме
(6) pumbaE, Ваше предложение вполне будет работать но
Если нужно выполнять одну обработку с несколькими настройками ?
Каким образом пользователь будет настраивать расписание с разными настройками?
8. pumbaE 08.10.15 13:08 Сейчас в теме
(7) для различных настроек - это не подойдет. Можно, конечно сделать для себя соглашение, что команда будет равна названию настройки и тогда можно вручную прописывать, но это больше админ.решение, чем пользовательское.
9. wolfsoft 2421 14.10.15 08:19 Сейчас в теме
10. ixijixi 1775 14.10.15 10:24 Сейчас в теме
(0) Все хорошо, но где найти эту рассылку отчетов? В БП 3.0 в органайзере только настройка электронной почты...
11. Ibrogim 1311 14.10.15 10:56 Сейчас в теме
(10) the1, Вероятно в БП3 нет этого функционала. Мне известно что он есть в УТ11 и ERP
12. ixijixi 1775 14.10.15 14:42 Сейчас в теме
(11) вероятно не помешает указать о существенных ограничениях применимости данной методы в публикации? ;)
13. Ibrogim 1311 14.10.15 15:13 Сейчас в теме
(12) the1, Вы правы, хотя я нигде и не писал что это подойдёт для всех конф.
Дописал
Суть заключается в использовании стандартного механизма рассылки отчётов. Внимание, этот механизм есть не во всех конфигурациях, например его нет в БП.
14. maxis33 45 15.10.15 12:20 Сейчас в теме
(10) the1, я внедрил эту подсистему из БСП в БП 3.0 - оказалось очень легко, фактически перенес несколько общих модулей, справочник и регистр сведений и подсистему. Все работает.
15. Ibrogim 1311 15.10.15 16:30 Сейчас в теме
(14) maxis33, Буду знать. Однако в этом случае теряется фишка "без изменения конфигурации"
18. Mitrill 16.05.17 12:05 Сейчас в теме
А какой здесь имеется ввиду тип в ветке "Иначе"? Если он не "СписокЗначений", то возможно у него нет методов "Очистить" и "Добавить".
19. Ibrogim 1311 16.05.17 12:17 Сейчас в теме
(18)СписокАдресовРассылки это реквизит обработки с типом список значений. Если в СКД соответствующий параметр заполнен списком значений, то я копирую его значения. если нет, то просто очищаю.
Оставьте свое сообщение