Преобразование обычного запроса в схему запроса и наоборот

13.10.14

Разработка - Запросы

Хотите понять, что такое Схема запроса? Научиться формировать запросы по-новому? Редактировать их? Использовать все удобства нового функционала 1с в работе?

Скачать исходный код

Наименование Файл Версия Размер
Преобразователь Запрос в СхемуЗапроса 1.6 .epf
.epf 33,64Kb
156
.epf 1.2 33,64Kb 156 Скачать

Новая версия 1.3  

В версии 8.3.5 появился конструктор запроса, а также объектная модель запроса. В принципе, все понятно, запрос разбивается на составляющие и редактируется. Для изучения этого нового функционала написал обработку, которая преобразует запрос в его текстовом виде в код с использованием объектной модели запроса Схемы запроса. Преобразование возможно в оба направления: из текста в схему и наоборот специально для проверки правильности преобразования. 
Обработка позволяет разобраться с СхемойЗапросов, а также позволяет выполнять отладку. т.е., изменяя код формирования схемы запроса, можно увидеть привычный запрос в тексте. Изменяя текст запроса, можно отследить, как меняется схема запроса.
Конструктор запроса дает возможность формировать запросы прямо в пользовательском интерфейсе.

В Версии 1.2 устранены ошибки 

1. Если поле запроса текст

2. Если поле запроса это табличная часть

3. Если источник запроса Виртуальная таблица с параметрами

Добалена возможность формировать код схемы запроса с минумум коментариев и без установки данных равных данным по умолчанию.

В Версии 1.3 устранены ошибки 


СхемаЗапроса

См. также

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

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

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

10000 руб.

02.09.2020    125087    683    389    

732

Пример использования объекта "Схема запроса" в реальном проекте

Запросы Платформа 1С v8.3 Бесплатно (free)

Разберём решение задачи реального проекта: контекст, логика решения, само решение. Рассмотрим возможности объекта СхемаЗапроса.

03.06.2021    6853    maraton1185    32    

33

Однопальцевое преобразование "одинэсного" запроса в запрос на SQL v 1.0

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

Обработка предназначена для преобразования "одинэсных" запросов в запросы на SQL средствами встроенного языка. Разработка не претендует на то, чтобы на 100% повторить то, что разработчики видят при трассировке запросов в инструментах вроде Profiler. Но во многих случаях результат преобразования можно будет без дополнительной ручной обработки выполнить, например, в Managment studio. Актуальные ограничения и проблемы преобразователя описаны в статье. Работает с версией платформы не ниже 8.3.10.

2 стартмани

17.04.2021    11260    51    kser87    26    

20

Модель запроса

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

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

1 стартмани

01.03.2021    7301    kalyaka    26    

55

Последний раз про срез последних (на каждую дату в запросе)

Запросы Платформа 1С v8.3 Запросы Бесплатно (free)

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

15.02.2021    57381    randomus    47    

171

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С)

Запросы Платформа 1С v8.3 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    11470    Eugen-S    26    

76

Имитация sql выражения LIMIT в запросе 1С

Запросы Платформа 1С v8.3 Бесплатно (free)

Всем известно, что в SQL синтаксисе есть выражение LIMIT. Очень полезное выражение для постраничной навигации. Но его нет в запросах 1С. Кто-то может сказать, что есть ПЕРВЫЕ, но ПЕРВЫЕ не подходит для постраничной навигации. Рассмотрим в статье, как можно имитировать LIMIT в запросах 1С.

08.12.2020    4563    opx    51    

21

Итоги по объединенной совокупности группировок в запросе

Запросы Платформа 1С v8.3 Бесплатно (free)

Способ формирования итогов в запросе по совокупности группировок, объединенных в единый набор, при помощи функции АВТОНОМЕРЗАПИСИ.

18.11.2020    18125    antonivan    21    

105
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4723 13.10.14 11:29 Сейчас в теме
Что, и всякие криво-косо написанные запросы тоже берёт?
А то конструктор запроса, бывает, сам такое состряпает, что сам же прочитать не в силах, ошибается и жалуется.
2. sassas 126 13.10.14 12:04 Сейчас в теме
(1) Yashazz, Проблемы с конструктором только бывают если одни и теже псевдонимы используешь в разных местах.. Если конструртор запроса схавает твой запрос то и здесь он пройдет.
4. Yashazz 4723 13.10.14 16:50 Сейчас в теме
(2) Да ну? Мало вы работали с конструктором запроса, значит. Попробуйте сделать простейшее условие на пустую строку и посмотрите, как он себя поведёт. При разных значениях флажка произвольности.
6. DrAku1a 1715 15.10.14 07:09 Сейчас в теме
(4) Работаю с запросами плотно и много. Глюки в конструкторе - вещь очень редкая. В большинстве случаев, он перед сохранением запросов - выдает предупреждение (например, пытаемся проиндексировать выборку или наоборот получить итоги / отсортировать создаваемую внутреннюю таблицу).
Проигнорируете предупреждение - и он сформирует текст запроса с ошибкой.
Попробуйте сделать простейшее условие на пустую строку и посмотрите, как он себя поведёт. При разных значениях флажка произвольности.
Это не ошибка. Просто поле условий так создано, что справа указывается имя переменной, а не значение. Как раз для того, чтобы можно было извратиться и указать значение - и придуман флажок произвольности.
Дмитрий74Чел; iov; +2 Ответить
3. dj_serega 391 13.10.14 16:23 Сейчас в теме
Занимательно. Надеюсь пригодится в быту :)
5. ekaruk 4904 14.10.14 02:25 Сейчас в теме
Вцелом идея красивая.
Не всегда работает.
Попробовала на запросе из этого поста http://infostart.ru/public/307045/
Сначала ругнулся на синтаксическую ошибку в сформированном тексте.
Покопавшись, нашла в тексте строку
НовыйПорядок=НовыйПакет.Порядок.Добавить(НовыйПакет.Колонки[1));
Исправила.
При запуске выдает ошибку "Переменная не определена (СхемаПриемник)"
Попыталась сформировать конструктором несколько запросов.
Простые преобразует. Более сложные нет.
7. пользователь 15.10.14 10:53
Сообщение было скрыто модератором.
...
8. PiccaHut001 15.10.14 13:14 Сейчас в теме
Схемы запросов - реинкарнация построителя отчётов. Сейчас, когда есть СКД, построитель бесполезен.
9. xten 47 16.10.14 00:23 Сейчас в теме
Я правильно понял, что ниже версии платформы 8.3.5 работать не будет ?
10. sassas111 17.10.14 15:05 Сейчас в теме
Воровать нехорошо. Это моя обработка. В обработке две ошибки 1. Если таблица запроса это табличная часть 2. если поле запроса это строка. Я бы выложил исправленную но .......
11. qwed557 30 19.10.14 19:46 Сейчас в теме
(10) давай выкладывай, с удовольствием скачаю, хотя пока нигде на практике не применял схему запроса
12. sassas111 19.10.14 20:12 Сейчас в теме
(11) qwed557, На практике я вижу одно применение. Это если неохото менять типовой запрос, запихиваешь его в схему , изменяешь и достаешь обратно. Есть шанс что даже при изменении типового запроса нечего не придется корректировать..
Хорошо работает если хочешь программно изменить динамический список с произволным запросом. а на форме менят нечего не охота.
13. PiccaHut001 20.10.14 12:13 Сейчас в теме
(12) чёт не понял, чем в вашем случае схема лучше стрзаменить? Если любимые разработчики типовых уберут из типового запроса таблицу, то стрзаменить и схемы запросов перестанут добавлять поля в выборку/условия. Выгоды не заметил
14. userGJ 20.10.14 13:42 Сейчас в теме
Не работает для объединения таблиц.
Например:

ВЫБРАТЬ
  Банки.Наименование КАК Наименование
ИЗ  Справочник.Банки КАК Банки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
  Валюты.Код
ИЗ  Справочник.Валюты КАК Валюты


генерит такой код:

Схема=Новый СхемаЗапроса();
	НовыйПакет= Схема.ПакетЗапросов[0];
	НовыйПакет.Операторы[0].Источники.Добавить("Справочник.Банки","Банки");  
	НовыйПакет.Операторы[0].ВыбираемыеПоля.Добавить("Банки.Наименование");  
	НовыйПакет.Операторы.Добавить();  //Тип: ОператорВыбратьСхемыЗапроса.  
	НовыйПакет.Операторы[1].Источники.Добавить("Справочник.Валюты","Валюты");
	НовыйПакет.Операторы[1].ВыбираемыеПоля.Добавить("Валюты.Код");


что выдаст такой запрос:

ВЫБРАТЬ
	Банки.Наименование,
	NULL КАК Код
ИЗ  Справочник.Банки КАК Банки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
	NULL,
	Валюты.Код
ИЗ  Справочник.Валюты КАК Валюты
Показать


чтобы исправить, надо строку:
НовыйПакет.Операторы[1].ВыбираемыеПоля.Добавить("Валюты.Код");
заменить на:
  НовыйПакет.Колонки[0].Поля.Установить(1, НовыйПакет.Операторы[1].ВыбираемыеПоля.Добавить("Валюты.Код"));
15. sassas 126 21.10.14 11:30 Сейчас в теме
(14) userGJ, иногда и ваш вариант не проходит. Приходится создавать поля источника а потом их все устанавливать . В версии 1.3 ошибка исправлена
16. serg_khv 19 22.10.14 13:11 Сейчас в теме
При попытке конвертации Индекса Временной таблицы вылетела ошибка:
{Форма.Форма.Форма(1152)}: Значение не является значением объектного типа (Колонки)
Приемник.Индекс.Добавить(НовыйПакет.Колонки[ИндексКолонки]);
Конвертировалась Временная таблица, получаемая объединением двух запросов из разных регистров. Индекс по полю Номенклатура, одинаковому в обоих регистрах.
При просмотре по точке останова НовыйПакет - это строка "НовыйПакет" и Колонок у нее быть не может. (
17. sassas 126 22.10.14 13:19 Сейчас в теме
(16) serg_khv, Укажите версию обработки и сам запрос
18. serg_khv 19 24.10.14 07:46 Сейчас в теме
Версия 1.6 разобрала мой запрос без ошибок. Спасибо! ))
19. serg_khv 19 24.10.14 08:47 Сейчас в теме
Еще нашел... )При удалении ВТ надо сделать чтоб вместо:
НовыйПакет=Схема.ПакетЗапросов.Добавить(Новый ОписаниеТипов("ЗапросУничтоженияТаблицыСхемыЗапрос"));
было:
НовыйПакет=Схема.ПакетЗапросов.Добавить(Тип("ЗапросУничтоженияТаблицыСхемыЗапроса"));
Тогда не выдает ошибку.
20. sashocq 193 30.10.14 18:24 Сейчас в теме
Еще не пробовал, но "+" однозначно. Как-то возникла необходимость модификации запроса программно через схему и голову сломал, пока нашел, как это делается. Очень мало примеров в синтакс-помощнике.
21. jafariuse 30.06.16 14:05 Сейчас в теме
В версии 1.6 ошибка.
в запросе вида
ВЫБРАТЬ
	Таб.К КАК К
ПОМЕСТИТЬ Вт_Данные
ИЗ
	&Таб КАК Таб 

формирует строку
Таб=НовыйПакет.Операторы[0].Источники.Добавить(Тип("ОписаниеВременнойТаблицыСхемыЗапроса"),"Таб"); 

а следует
Таб=НовыйПакет.Операторы[0].Источники.Добавить(Тип("ОписаниеВременнойТаблицыСхемыЗапроса"),"&Таб","Таб"); 
22. Sam13 342 05.12.23 11:39 Сейчас в теме
Автору невероятный респект. Эта обработка очень часто спасает.
Запомнить все тонкости схемы запроса просто невозможно.
Обработка очень полезная
23. Sam13 342 08.12.23 11:05 Сейчас в теме
(21) Все верно. В строке 692 формы обработки вместо
Код=Псевдоним+"="+НовыйОператор+".Источники.Добавить(Тип(""ОписаниеВременнойТаблицыСхемыЗапроса""),"""+Псевдоним+"""); "; ДобавитьКОД(ПФ,0,КОД);
подставить
ИмяТаблицы = пакет.Операторы[ОператорИндекс].Источники[ИсточникИндекс].Источник.ИмяТаблицы;
Код=Псевдоним+"="+НовыйОператор+".Источники.Добавить(Тип(""ОписаниеВременнойТаблицыСхемыЗапроса""),"""+ИмяТаблицы+""","""+Псевдоним+"""); "; ДобавитьКОД(ПФ,0,КОД);

Должно помочь
Оставьте свое сообщение