Пришлось написать несколько процедур для того, чтобы запросы было составлять удобнее, дабы переключение раскладки языков не сломать 🙂
Получилось в итоге так, что раскладку переключать вообще не требуется. Запрос набирается просто в русской раскладке 🙂 Почти как в 1С 8.Х!
Операторы и названия таблиц, которые я пропустил, просто добавляются в функции запросПравилаЗаменыИменПолей, запросПравилаЗаменыИменТаблиц, запросПравилаЗаменыОператоров.
Строки, заключенные в кавычки, обрабатываются корректно.
Обработка сырая, буду благодарен за советы и обнаруженные баги фичи 🙂
пример запроса:
ВЫБРАТЬ РАЗЛИЧНЫЕ
!Журнал.(ДатаДок) ДатаДок,
Журнал.%НомерДок НомерДок,
Журнал.%ИДДок /Док Документ.РасходнаяНакладная/,
%РН.Контрагент /Контрагент Справочник.Контрагенты/
%%РН.ТипУчета ТипУчета,
Контрагенты.ТипЦен( %РН.Контрагент, !Журнал.(ДатаДок) )
ТипЦенКонтрагента,
Журнал.%Проведен Проведен
ИЗ
ДокументСтроки.РасходнаяНакладная сРН
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
%Журнал% Журнал ПО Журнал.%ИДДок = сРН.%ИДДок
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.РасходнаяНакладная РН ПО РН.%ИДДок = Журнал.%ИДДок
ГДЕ
Журнал.%ДатаДок между :НачДата AND :КонДата~
И %сРН.Товар = #Товары
И %%РН.Фирма <> ПустойИД
ИЛИ лТрим(рТрим(%%ДокРН.Основание)) подобно ‘%[%]%’ экран »
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ ПЕРВЫЕ 100
!Журнал.(ДатаДок) ДатаДок,
Журнал.%НомерДок НомерДок,
Журнал.%ИДДок /Док Документ.ПриходнаяНакладная/,
%ПН.Контрагент /Контрагент Справочник.Контрагенты/
%%ПН.ТипУчета ТипУчета,
Контрагенты.ТипЦен( %ПН.Контрагент, !Журнал.(ДатаДок) )
ТипЦенКонтрагента,
Журнал.%Проведен Проведен
ИЗ
ДокументСтроки.ПриходнаяНакладная сПН
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
%Журнал% Журнал ПО Журнал.%ИДДок = сПН.%ИДДок
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.ПриходнаяНакладная ПН ПО ПН.%ИДДок = Журнал.%ИДДок
ГДЕ
Журнал.%ДатаДок между :НачДата AND :КонДата~
И %сПН.Товар = #Товары
И %%ПН.Фирма <> ПустойИД
************** Правила составления ленивого запроса ******************
Вместо $ можно ставить % перед псевдонимами таблиц и полей,
регистров, периодических реквизитов и спецконстант ПустойИД ил ПустойИД13:
%Справочник.Товары
вместо
$Справочник.Товары
%Товары.Цена
вместо
$Товары.Цена
%ДокПриходнаяНакладная.Контрагент
вместо
$ДокПриходнаяНакладная.Контрагент
Обращение к периодическому реквизиту:
%ПоследнееЗначение.Контрагент.Глубина(
или
ПоследнееЗначение.Контрагент.Глубина(
или просто
Контрагент.Глубина(
Вместо
$ПоследнееЗначение.Контрагент.Глубина( и так далее.
В типизации полей и в объявлении таблиц можно вовсе пропускать $ или %:
СпрТовар.ID as [Товар Справочник.Товары]
вместо
СпрТовар.ID as [Товар $Справочник.Товары]
FROM ДокПриходнаяНакладная.Контрагент
вместо
FROM $ДокПриходнаяНакладная.Контрагент
Типизация полей может быть заключена между символами
СпрТовар.ID as /Товар Справочник.Товары/
вместо
СпрТовар.ID as [Товар $Справочник.Товары]
Обращение к общим реквизитам через двойной %
пишем
%%Журнал.ТипУчета
вместо
Журнал.$ОбщийРеквизит.ТипУчета
Преобразование поля Date_Time_IDDoc в дату выглядит так:
!Журнал.(ДатаДок)
в запрос пойдет строка
CAST( Left(Журнал.Date_Time_IDDoc, 8) as DateTime )
Часто импользуемые поля, состоящие из латинских символов заменены на кириллические.
Все правила замен устанавливаются в функции запросПравилаЗаменыИменПолей()
Например, вместо
ДокРасходнаяНакладная.IDDoc
пишем
ДокРасходнаяНакладная.%ИДДок
вместо
СправочникКонтрагенты.isFolder
пишем
СправочникКонтрагенты.%ЭтоГруппа
вместо
ДокПриходнаяНакладная.Closed & 1
пишем
ДокПриходнаяНакладная.%Проведен
Вместо _1SJourn можно писать %Журнал%
Вместо and/or/not можно писать и/или/не
В условиях можно писать
Поле = #ВременнаяТаблица
вместо
Поле in ( select Val from #ВременнаяТаблица )
или
Поле <> #ВременнаяТаблица
вместо
Поле not in ( select Val from #ВременнаяТаблица )
эммм… а чем класс «Прямой запрос» плох? ))))) (рекламируюсь немного)
Собственно «а зачем»? Если «кодить» в режиме «блокнота» то наверное есть смысл в Вашем подходе, а если иначе — смысла нет. Openconf и все «что с ним связано» позволяют не слабо автоматизировать набор кода прямых запросов в частности, конечно есть некий дискомфорт при переключении раскладки, но это «дешевле» чем набирать код в режиме «блокнота». Имхо.