Сохранение настроенного запроса набора данных СКД

18.03.21

Разработка - Универсальные функции

Как сохранить запрос набора данных СКД в том виде, каким он будет выполнен системой для открытия в консоли запросов с диска ИТС.

Предисловие

В своей предыдущей публикации я поделился своим способом сохранять настроенные запросы (с параметрами и временными таблицами) для открытия в консоли запросов с диска ИТС. Сегодня я расскажу (и поделюсь кодом) как сделать это для набора данных СКД.

Извлечение настроенного запроса СКД

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

Напишем несколько простых функций:

//Возвращает запрос указанного набора данных из объекта МакетКомпоновкиДанных
Функция ЗапросИзМКД(МакетКомпоновкиДанных, ИмяНабораДанных=Неопределено)
	
	ЗапросРезультат = Новый Запрос;
	
	ИспользуемоеИмяНабораДанных = ИмяНабораДанных;
	Если МакетКомпоновкиДанных.НаборыДанных.Количество() = 1 Тогда
		ИспользуемоеИмяНабораДанных = МакетКомпоновкиДанных.НаборыДанных[0].Имя;
	КонецЕсли;
	Если ИспользуемоеИмяНабораДанных = Неопределено Тогда
		Возврат "Не удалось определить требуемый набор данных, вероятно их несколько, укажите имя набора данных";
	КонецЕсли;
	
	Если СтрНайти(ИспользуемоеИмяНабораДанных, ".") > 0 Тогда
		ЧастиИмени = СтрРазделить(ИспользуемоеИмяНабораДанных, ".");
		Если ЧастиИмени.Количество() = 2 Тогда
			ЗапросРезультат.Текст = МакетКомпоновкиДанных.НаборыДанных[ЧастиИмени[0]].Элементы[ЧастиИмени[1]].Запрос;
		Иначе
			Возврат "Непредусмотренная вложенность наборов данных";
		КонецЕсли;
	Иначе
		ЗапросРезультат.Текст = МакетКомпоновкиДанных.НаборыДанных[ИспользуемоеИмяНабораДанных].Запрос;
	КонецЕсли;
	
	Для Каждого ТекПараметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
		Если СтрНайти(ЗапросРезультат.Текст, "&"+ТекПараметр.Имя) > 0 Тогда
			ЗапросРезультат.УстановитьПараметр(ТекПараметр.Имя, ТекПараметр.Значение);
		КонецЕсли;
	КонецЦикла;
	
	Возврат ЗапросРезультат;
	
КонецФункции

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

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

Как это использовать?

Создайте серверный общий модуль (или модуль расширения) и скопируйте туда эти функции. Также туда нужно скопировать функции из предыдущей публикации. Пусть общий модуль называется, например "Отладка". Затем нужно будет определить точку останова. Если отчет полностью формируется платформой то останавливаем в процедуре ПриКомпоновкеРезультата() модуля объекта отчета (если в отчете нет такой процедуры, то придется её создать). Если отчет формируется программно, то ищем момент создания объекта МакетКомпоновкиДанных и останавливаем в строке, следующей за ней.

Далее нажимаем Shift+F9 и пишем 

1) Отладка.СохранитьЗапросСКД(ЭтотОбъект, "<ИмяНабораДанных>", "\\Host\Share")

либо 

2) Отладка.СохранитьЗапросСКД(МакетКомпоновкиДанных, "<ИмяНабораДанных>", "\\Host\Share")

Вариант 1 используем если отчет полностью формируется платформой - первым параметром передаем ОтчетОбъект, вариант 2 используем если есть программное создание объекта МакетКомпоновкиДанных.

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

\\Host\Share - имя сетевого каталога, куда будет сохранен запрос (этот каталог должен быть доступен для записи пользователем, под которым запущен сервер 1С Предприятие).

Запрос со всеми параметрами будет сохранен в файл \\Host\Share\Запрос_{ТекущаяДатаИВремя}.q1c. При открытии файла *.q1c в консоли запросов запрос и все параметры будут восстановлены. Файл *.q1c открывается консолью запросов, которое идет в комплекте с БСП. 

Тестовое окружение

Работа функций проверялась на платформе 8.3.16.

отчет СКД запрос извлечь сохранение параметры консоль

См. также

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

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20118    dimanich70    81    

144

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    4091    3    John_d    11    

57

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    18051    atdonya    24    

56

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

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5501    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14729    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3579    56    progmaster    8    

4

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

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18478    171    sapervodichka    112    

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