Дамп временных таблиц для ЗапросВСтрокуXML(...)

25.08.22

Разработка - БСП (Библиотека стандартных подсистем)

Облегчаем отладку запросов.

На текущий момент для отладки запросов, в основном, использую консоль запросов из поставки БСП. В этой консоли удобно пользоваться "импортом" запроса из XML. Этот XML предоставляет типовая ф-я БСП ОбщегоНазначения.ЗапросВСтрокуXML(...).

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

Матюкнувшись в очередной раз, решил написать обертку над штатной ЗапросВСтрокуXML(...), чтобы в сериализуемом запросе зафиксировать данные временных таблиц.

// Выгружает запрос в строку XML, которую можно вставить в Консоль запросов.
// Работает с помощью одноименного метода БСП ОбщегоНазначения.ЗапросВСтрокуXML(...).
// В дополнение к ее функционалу, реализовано снятие дампа временных таблиц и внедрение в запрос кода и параметров для 
// заполнения временных таблиц на основании параметров запроса типа ТаблицаЗначений.
//
// Параметры:
//  Запрос						 - Запрос	 - запрос, который необходимо выгрузить в формат строки XML.
//  ЗаполнитьВременныеТаблицы	 - Булево, Неопределено	 - Нужно ли дополнять запрос кодом и данными для создания временных таблиц.
//		При значении =Неопределено, необходимость определяется автоматически, исходя из наличия менеджера временных таблиц у Запроса, 
//		и есть ли временные таблицы, управляемые менеджером.
// 
// Возвращаемое значение:
//   Строка - строка в формате XML, которую можно извлечь при помощи метода "ОбщегоНазначения.ЗначениеИзСтрокиXML".
//       После извлечения получится объект типа "Структура" с полями:
//       * Текст     - Строка - текст запроса.
//       * Параметры - Структура - параметры запроса.
//
Функция ЗапросВСтрокуXML(Запрос, Знач ЗаполнитьВременныеТаблицы = Неопределено) Экспорт

	// Авто-определение необходимости заполнения.
	ЗаполнитьВТ = Запрос.МенеджерВременныхТаблиц<>Неопределено И Запрос.МенеджерВременныхТаблиц.Таблицы.Количество()<>0;
	// Уточняем исходя из значения параметра ЗаполнитьВременныеТаблицы.
	Если ТипЗнч(ЗаполнитьВременныеТаблицы)=Тип("Булево") Тогда 
		ЗаполнитьВТ = ЗаполнитьВТ И ЗаполнитьВременныеТаблицы;
	КонецЕсли;
	
	Если Не ЗаполнитьВТ Тогда
		Возврат ОбщегоНазначения.ЗапросВСтрокуXML(Запрос); // Внимание! Ранний возврат.
	КонецЕсли;
	
	// Будем работать с копией Запроса
	КопияЗапроса = Новый Запрос;
	КопияЗапроса.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
	
	СоставТекстаЗапроса = Новый Массив; // Здесь будем собирать все части будущего запроса с дампами таблиц.
	Для Каждого ОписаниеТаблицы Из КопияЗапроса.МенеджерВременныхТаблиц.Таблицы Цикл
		
		// Снимаем дамп временной таблицы.
		КопияЗапроса.Текст = СтрШаблон("ВЫБРАТЬ * ИЗ %1", ОписаниеТаблицы.ПолноеИмя);
		ДанныеТаблицы = КопияЗапроса.Выполнить().Выгрузить();
		// Устанавливаем полученную таблицу в параметр запроса.
		ИмяПараметраТаблица = "Внеш" + ОписаниеТаблицы.ПолноеИмя;
		КопияЗапроса.УстановитьПараметр(ИмяПараметраТаблица, ДанныеТаблицы);
		// Конструируем текст запроса для помещения таблицы значений во временную таблицу.
		ИменаПолейТаблицы = Новый Массив;
		Для Каждого Колонка Из ОписаниеТаблицы.Колонки Цикл
			// Увы, но есть проблема с "виртуальными" полями. 
			// Поэтому обрабатывать УИДы и хранилища значений не будем.
			// https://its.1c.ru/db/v8312doc/bookmark/dev/TI000001778
			Если Колонка.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор"))
				Или Колонка.ТипЗначения.СодержитТип(Тип("ХранилищеЗначения"))
			Тогда
				Продолжить;
			КонецЕсли;
			ИменаПолейТаблицы.Добавить("вн." + Колонка.Имя);
		КонецЦикла;
		// Собираем строка запроса пакета запросов, добавляем ее в массив составляющих.
		СтрокаИменПолей = СтрСоединить(ИменаПолейТаблицы, ", ");
		СоставТекстаЗапроса.Добавить(СтрШаблон("ВЫБРАТЬ %1 ПОМЕСТИТЬ %2 ИЗ &%3 КАК вн;", 
			СтрокаИменПолей, ОписаниеТаблицы.ПолноеИмя, ИмяПараметраТаблица));
		
	КонецЦикла;
	// В финале добавляем исходный запрос.	
	СоставТекстаЗапроса.Добавить(Запрос.Текст);	
	КопияЗапроса.Текст = СтрСоединить(СоставТекстаЗапроса, "
	|");
	// Заполняем параметры
	Для Каждого ОписаниеПараметра Из Запрос.Параметры Цикл
		КопияЗапроса.УстановитьПараметр(ОписаниеПараметра.Ключ, ОписаниеПараметра.Значение);
	КонецЦикла;
	КопияЗапроса.МенеджерВременныхТаблиц = Неопределено; // Ну на всякий случай.
	// Вызываем оригинальный метод.
	Возврат ОбщегоНазначения.ЗапросВСтрокуXML(КопияЗапроса);
	
КонецФункции

Будет работать на платформах с 8.3.8. Версия БСП может быть использована любая.

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Адаптация типовых решений БСП (Библиотека стандартных подсистем) Кадровый учет ЭДО и ОФД 1C:Бухгалтерия 1С:Зарплата и кадры 7.7 1C:ERP 1С:ЗУП 1С:УТ 1С:ДО Платные (руб)

Наше расширение 1С Госключ обеспечивает интеграцию любой конфигурации 1С на базе БСП с мобильным приложением «Госключ», позволяя сотрудникам подписывать кадровые документы (КЭДО) и документы материальной ответственности (МОЛ, ПБ) усиленной электронной подписью прямо со смартфона. Решение автоматизирует формирование и отправку документов на подпись, отслеживает статусы подписания и хранит подписанные файлы непосредственно в базе 1С

25000 руб.

06.03.2026    2177    4    0    

5

БСП (Библиотека стандартных подсистем) Разработчик Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

3254 руб.

21.11.2024    14267    51    30    

59

БСП (Библиотека стандартных подсистем) Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Россия Абонемент ($m)

Все мы когда-то писали свои функции для получения реквизита через точку или парсинга строк. В этой статье собрана выжимка самых полезных и ежедневно необходимых процедур и функций БСП. Никакой сухой документации ИТС — только жизненные кейсы, чистый код и разбор ситуаций, когда стандартные подсистемы делают работу за нас.

1 стартмани

30.07.2026    8181    Elya_Elya    14    

20

БСП (Библиотека стандартных подсистем) Разработчик Стажер 1С:Предприятие 8 1С:Библиотека стандартных подсистем Бесплатно (free)

Часто требуется вывести понятное пользователю сообщение, ткнув его в конкретный проблемный реквизит, что называется, "носом"... И вот тут довольно часто приходится перечитывать параметры функции ОбщегоНазначения[Клиент].СообщениеПользователю. Решила написать для себя шпаргалку и поделиться с сообществом.

24.07.2026    2550    check2    2    

10

БСП (Библиотека стандартных подсистем) Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Каждый раз, когда разработчик 1С пишет очередной цикл для свертки массива или использует конструкцию Попытка / Исключение для проверки наличия реквизита, где-то грустит один архитектор фирмы «1С». Мы привыкли изобретать велосипеды там, где в Библиотеке стандартных подсистем (БСП) уже давно лежат готовые, оптимизированные и протестированные на тысячах баз решения. Ниже — практическая подборка из 8 методов актуальных релизов БСП (3.X), которые сделают ваш код чище, быстрее и профессиональнее. Разберем на примерах «Было / Стало».

04.06.2026    12870    Kaliostr0    21    

36

БСП (Библиотека стандартных подсистем) Универсальные функции Разработчик 1С 8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Когда появляется необходимость сделать подключаемую внешнюю обработку, будь это печатная форма или отчет - нам всегда приходится прописывать сведения о внешней обработке для подключения их в соответствующий справочник. И это занимает некоторое время, что не очень удобно. Как для себя, так и для вас - я подготовил ряд примеров использования этой функции, можете выбрать один из них, чтобы в дальнейшем использовать их в шаблонах текста. Комментарии по дополнению и исправлению статьи - приветствуются.

06.02.2026    22072    manul1c    7    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1986 25.08.22 11:18 Сейчас в теме
сколько врем. таблиц можно передать?
2. ImHunter 350 25.08.22 11:24 Сейчас в теме
(1) Сколь угодно. Лишь бы потом Строка все содержимое вместила.
3. triviumfan 103 29.08.22 21:27 Сейчас в теме
На текущий момент для отладки запросов, в основном, использую консоль запросов из поставки БСП.

Дальше не осилил. Извини.
Для отправки сообщения требуется регистрация/авторизация