Ленивые запросы SQL (1С++) для 7.7 на русском

12.03.14

Разработка - Инструментарий разработчика

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

Получилось в итоге так, что раскладку переключать вообще не требуется. Запрос набирается просто в русской раскладке :) Почти как в 1С 8.Х!

Операторы и названия таблиц, которые я пропустил, просто добавляются в функции запросПравилаЗаменыИменПолей, запросПравилаЗаменыИменТаблиц, запросПравилаЗаменыОператоров.
Строки, заключенные в кавычки, обрабатываются корректно.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Ленивые запросы
.ert 55,50Kb ver:0.96
3
3 Скачать (1 SM) Купить за 1 850 руб.

Обработка сырая, буду благодарен за советы и обнаруженные баги фичи :)

пример запроса:

ВЫБРАТЬ РАЗЛИЧНЫЕ
!Журнал.(ДатаДок) ДатаДок,
Журнал.%НомерДок НомерДок,
Журнал.%ИДДок /Док Документ.РасходнаяНакладная/,
%РН.Контрагент /Контрагент Справочник.Контрагенты/
%%РН.ТипУчета ТипУчета,
Контрагенты.ТипЦен( %РН.Контрагент, !Журнал.(ДатаДок) )
ТипЦенКонтрагента,
Журнал.%Проведен Проведен

ИЗ
ДокументСтроки.РасходнаяНакладная сРН
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
%Журнал% Журнал ПО Журнал.%ИДДок = сРН.%ИДДок
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Документ.РасходнаяНакладная РН ПО РН.%ИДДок = Журнал.%ИДДок

ГДЕ
Журнал.%ДатаДок между :НачДата 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 #ВременнаяТаблица )

прямые запросы SQL 1C++ 1С++

См. также

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    22291    57    Gvozdod    8    

16

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    168399    1882    Alexoniq    1596    

499

Инструментарий разработчика Программист Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    33411    61    O-Planet    78    

49

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21809    Reptile    5    

35

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.

1 стартмани

14.07.2013    27659    56    adamx    11    

14

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18352    36    MarSeN    14    

17

Инструментарий разработчика Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36352    51    venger    7    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vandalsvq 1588 13.03.14 09:05 Сейчас в теме
эммм... а чем класс "Прямой запрос" плох? ))))) (рекламируюсь немного)
2. vitaliy.ermolenko 52 19.03.14 12:37 Сейчас в теме
Собственно "а зачем"? Если "кодить" в режиме "блокнота" то наверное есть смысл в Вашем подходе, а если иначе - смысла нет. Openconf и все "что с ним связано" позволяют не слабо автоматизировать набор кода прямых запросов в частности, конечно есть некий дискомфорт при переключении раскладки, но это "дешевле" чем набирать код в режиме "блокнота". Имхо.
Оставьте свое сообщение