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

16.11.15

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

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

Файлы

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

Наименование Скачано Купить файл
ТестОбработкаПоРасписанию
.erf 13,38Kb
11 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    246882    1357    421    

1132

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5157    288    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15977    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

01.07.2025    9310    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8483    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15603    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13180    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9676    AlexeyPROSTO_1C    1    

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

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