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

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С 8.3.24)

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

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

1 стартмани

18.03.2024    2898    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    5072    atdonya    22    

51

Переоткрытие внешних обработок

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

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

30.11.2023    4110    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    9412    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2246    25    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16366    142    sapervodichka    112    

130

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7359    quazare    8    

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