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

16.11.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ТестОбработкаПоРасписанию
.erf 13,38Kb
11
11 Скачать (1 SM) Купить за 1 850 руб.

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

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

Хоть я и буду их подробно описывать (и будет много букв), но делается всё это за 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! 15%

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

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

10000 руб.

02.09.2020    159426    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    6996    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    10804    23    John_d    25    

124

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

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

05.12.2023    8017    PROSTO-1C    15    

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

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