Консоль запросов

15.07.22

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

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

Скачать файлы

Наименование Файл Версия Размер
Консоль запроса
.ert 227,00Kb
54
.ert 1504291554 227,00Kb 54 Скачать

Введение

Данная обработка (далее консоль) позволяет выполнять прямы запросы в среде 1С:Предприятие версии 7.7

Для удоства написания запроса в консоль встроен метапарсер, позволяющий вместо системных имен 1С (вроде SC792 и тому подобных) использовать более понятные (Справочник.Товары и т.п.). Также консоль понимает русскоязычное написание основных служебных слов языка Transact-SQL (SELECT=ВЫБРАТЬ, FROM=ИЗ и т.п.), что позволяет писать запрос на русском языке.

Для работы консоли не нужны абсолютно никакие внешние компоненты (никаких 1C++, FormEx и т.п.). Единственые необходимые условия:

  1. База данных должна быть на сервере SQL
  2. Необходимо один раз запустить 1С:Предприятие от имени администратора (локального или доменного)
  3. Заходить в базу необходимо не в монопольном режиме

Описание

Для написания запроса необходимо не только уметь писать SQL-запросы (https://msdn.microsoft.com/ru-ru/library/bb510741.aspx), но и знать структуру хранения данных в базах данных 1С версии 7.7  (http://www.script-coding.com/v77tables.html)

Ключевые слова

Язык запросов, используемый в консоли, аналогичен языку Transact-SQL. Основные слова имеют  русскоязычные аналоги:

ВЫБРАТЬ = SELECT
ИЗ = FROM
ГДЕ = WHERE
СГРУППИРОВАТЬ ПО = GROUP BY
УПОРЯДОЧИТЬ ПО = ORDER BY
КАК = AS
ПЕРВЫЕ = TOP
[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ = [INNER] JOIN
ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ = LEFT [OUTER] JOIN
ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ = RIGHT [OUTER] JOIN
ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ = FULL [OUTER] JOIN
ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ = CROSS JOIN
ОБЪЕДИНИТЬ [ВСЕ] = UNION ALL
ВЫБОР = CASE
КОГДА = WHEN
ТОГДА = THEN
ИНАЧЕ = ELSE
КОНЕЦ = END
И = AND
ИЛИ = OR
НЕ = NOT
МИНИМУМ = MIN
МАКСИМУМ = MAX
СУММА = SUM
КОЛИЧЕСТВО = COUNT
СРЕДНЕЕ = AVG
ЕСТЬ NULL = IS NULL
ЕСТЬNULL = ISNULL
ПОДОБНО = LIKE
ВРЕГ = UPPER
НРЕГ = LOWER
СРЕД = SUBSTRING
ВЫРАЗИТЬ = CAST
ЦЕЛОЕ = INT
РЕАЛЬНОЕ = REAL
ДАТА = DATE
ДАТАВРЕМЯ = DATETIME

Имена таблиц и полей

Для удобства имена таблиц и полей могут быть заменены именами среды 1С. Символ $ вначале выражения запроса означает, что выражение необходимо преобразовать в написание SQL. 

$Журнал - таблица _1SJOURN
$Журнал.Ссылка - ID документа (IDDOC)
$Журнал.Вид - вид документа (IDDOCDEF), значения:
 - $ВидДокумента.<ИмяДокумента> - вид документа
$Журнал.ДатаВремя - позиция документа (DATE_TIME_IDDOC) в виде <Дата><Время><Ссылка> (пример '20150105A54AG0 2AKT'):
- Дата в формате ГГГГММДД
- Время количество секунд от начала дня * 10000, в 36-ричном формате (A54AG0 = 613260000; 61326 сек = 17:02:06)
- Ссылка документа (IDDOC)
$Журнал.Компоненты - набор компонент, по которым могут делаться движения(проводки). может состоять из нескольких(+) движений:
 - $ПроведенОперУчет
 - $ПроведенРасчет
 - $ПроведенБухУчет
 - $ПроведенПериодическиеРеквизиты
 - $ПроведенОперация
 - $ПроведенДокументОперация
$Журнал.НомерДок - Номер документа (DOCNO)
$Журнал.Проведен - набор компонент, по которым сделаны движения(проводки). значения аналогичны $Журнал.Компоненты
$Журнал.Помечен - пометка удаления документа (ISMARK), значения:
 - $Помечен
 - $НеПомечен
$Журнал.<ИмяОбщегоРеквизита> - Общий реквизит SPxxxx

$Константы - таблица константы (_1SCONST)
$Константы.Ссылка - ID константы. значения:
 - $ВидКонстанты.<ИмяКонстанты> - имя константы
$Константы.Значение - значение константы (VALUE)

$Периодические - таблица периодичесих реквизитов/констант (_1SCONST)
$Периодические.ОбъектСсылка - Ссылка на объект (OBJID). в случае периодической константы равен ' 0'
$Периодические.Ссылка - ID периодической константы или реквизита справочника. значения:
 - $ВидКонстанты.<ИмяКонстанты> - имя константы
 - $РеквизитСправочника.<ИмяСправочника>.<ИмяРеквизита>
$Периодические.Дата - дата значения (DATE);
$Периодические.Значение - значение периодической константы или реквизита справочника (VALUE)
$Периодические.ДокументСсылка - ссылка на документ, установивший периодическое значение (DOCID)
$Периодические.Время - количество секунд от начала дня * 10000, время установки значения (TIME)
$Периодические.НомерСтроки - номер строки документа, к которой привязано значение (LINENO_)

$Справочник.<ИмяСправочника> - таблица справочника SCxxxx
$Справочник.<ИмяСправочника>.<ИмяРеквизита> - реквизит справочника SPxxxx
$Справочник.<ИмяСправочника>.Ссылка - ID справочника
$Справочник.<ИмяСправочника>.Ссылка13 - ID справочника с указанием вида объекта. используется в реквизитах "справочник неопределенного вида"
$Справочник.<ИмяСправочника>.Код - код справочника
$Справочник.<ИмяСправочника>.Наименование - наименование справочника
$Справочник.<ИмяСправочника>.Родитель - ID родителя справочника (PARENTID)
$Справочник.<ИмяСправочника>.ЭтоПапка - признак группы справочника (ISFOLDER), значения:
 - $ЭтоПапка
 - $ЭтоЭлемент
$Справочник.<ИмяСправочника>.Помечен - пометка удаления справочника (ISMARK), значения:
 - $Помечен
 - $НеПомечен

$РегистрДвижения.<ИмяРегистра> - таблица движений регистра RAxxxx
$РегистрДвижения.<ИмяРегистра>.<ИмяРеквизита> - измерение, ресурс или реквизит регистра SPxxxx
$РегистрДвижения.<ИмяРегистра>.Ссылка - ID документа, сделавшего движение (IDDOC)
$РегистрДвижения.<ИмяРегистра>.Вид - вид документа, сделавшего движение (IDDOCDEF), значения:
 - $ВидДокумента.<ИмяДокумента> - вид документа
$РегистрДвижения.<ИмяРегистра>.ДатаВремя - позиция документа (DATE_TIME_IDDOC) в виде <Дата><Время><Ссылка> (пример '20150105A54AG0 2AKT'):
- Дата в формате ГГГГММДД
- Время количество секунд от начала дня * 10000, в 36-ричном формате (A54AG0 = 613260000; 61326 сек = 17:02:06)
- Ссылка документа (IDDOC)
$РегистрДвижения.<ИмяРегистра>.НомерСтроки - номер строки документа, к которой привязано движение (LINENO_)
$РегистрДвижения.<ИмяРегистра>.ПриходРасход - признак прихода или расхода движения (DEBKRED), значения:
 - $Приход
 - $Расход
$РегистрДвижения.<ИмяРегистра>.НомерДвижения - порядковый номер движения (ACTNO)

$РегистрИтоги.<ИмяРегистра> - таблица итогов регистра RGxxxx
$РегистрИтоги.<ИмяРегистра>.Период - период итогов регистра (PERIOD). Итоги хранятся на конец периода или на ТА.
Таким образом, итоги на начала апреля 2015 хранятся на дату 01.03.2015
$РегистрИтоги.<ИмяРегистра>.<ИмяРеквизита> - измерение, ресурс или реквизит регистра SPxxxx

$Документ.<ИмяДокумента> - таблица шапки документа DHxxxx
$Документ.<ИмяДокумента>.Ссылка - ID документа (IDDOC)
$Документ.<ИмяДокумента>.Ссылка13 - ID документа с указанием вида объекта. используется в реквизитах "документ неопределенного вида"
$Документ.<ИмяДокумента>.<ИмяРеквизита> - реквизит(общий реквизит) шапки документа DHxxxx
$ТабличнаяЧасть.<ИмяДокумента> - таблица табличной части документа DTxxxx
$ТабличнаяЧасть.<ИмяДокумента>.Ссылка - ID документа (IDDOC)
$ТабличнаяЧасть.<ИмяДокумента>.НомерСтроки - номер строки документа (LINENO_)
$ТабличнаяЧасть.<ИмяДокумента>.<ИмяРеквизита> - реквизит табличной части документа DTxxxx

$ЖурналРасчетов.<ИмяСправочника> - таблица журнала расчетов CJxxxx
$ЖурналРасчетов.<ИмяСправочника>.<ИмяРеквизита> - реквизит журнала расчетов SPxxxx

$Перечисление.<ИмяПеречисления>.<ЗначениеПеречисления> - значение перечисления

Пример запроса консоли:

ВЫБРАТЬ
    $Товары.Код КодТовара
    ,$Товары.Наименование НаименованиеТовара
ИЗ
    $Справочник.Товары Товары
ГДЕ
    НЕ $Товары.Помечен = $Помечен
УПОРЯДОЧИТЬ ПО
    НаименованиеТовара

преобразуется в SQL-запрос:

SELECT
    Товары.CODE КодТовара
    ,Товары.DESCR НаименованиеТовара
FROM
    BASE1C.dbo.SC2943 Товары
WHERE
    NOT Товары.ISMARK = 1
ORDER BY
    НаименованиеТовара

Заключение

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

Код консоли полностью открытый. Автор не против использования любых программных данных консоли в коммерческих целях кем бы то ни было, но с указанием ссылки на автора данной консоли и авторов, упомянутых в разделе Благодарности (см. ниже).

Благодарности

Спасибо разработчикам в среде 1С, чьими стараниями программа 1С становится более доступной для понимания и более удобной для разработки.

Спасибо Александру Маляеву
e-mail: maljaev@mail.ru
ICQ: 275009000

Спасибо авторам сайта http://www.script-coding.com/

Консоль запросов

См. также

StartManager 1.4 - Развитие альтернативного стартера

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

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

1 стартмани

23.04.2014    165607    1863    Alexoniq    1596    

496

Tray Informer

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

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

1 стартмани

04.09.2013    32866    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

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

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

1 стартмани

13.08.2013    21180    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

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

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

1 стартмани

21.02.2013    18023    35    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 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    36095    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

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

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

10 стартмани

25.11.2012    34944    248    adhocprog    51    

70

Групмейкер для таблицы значений.

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

Универсальная функция и обработка для свертки и группировки таблицы значений. Очень простой способ подвести итоги по призвольным группам в произвольном порядке любой таблицы значений для быстрого вывода на печать нужной пользователю последовательности и детализации группировок.

1 стартмани

20.11.2012    30653    59    dusha0020    15    

24
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Franco 82 30.04.15 12:09 Сейчас в теме
+, однозначно. Такую бы для 8.3
2. Gvozdod 103 30.04.15 13:05 Сейчас в теме
(1) Franco, чтобы из 8.3 подключаться к 7.7? Есть такие планы
3. 1cmod 07.05.15 11:57 Сейчас в теме
(0) Типа запрос по АДО идёт? Провайдер, какой должен быть ?
+ типизации естественно нет, на выходе с запроса, так ?

4. Gvozdod 103 08.05.15 06:25 Сейчас в теме
(3) да, "ADODB.Connection". Провайдер sqloledb. Типизацию можно сделать, просто ваял для выгрузки в другую базу и для загрузки, подключаясь из другой базы. А там типизация - только лишние тормоза.

Но, фича нужная, да. Добавлю в ближайшее время
5. 1cmod 08.05.15 08:56 Сейчас в теме
Имена табличек - парсинг DDS?
7. Gvozdod 103 12.05.15 08:31 Сейчас в теме
(5) нет. В DDS недостаточно информации для разбора метаданных.
(6) $ВидСправочника есть, используется для реквизитов типа справочник неопределенного вида. Добавлю в описание позже.
С неопределенными ещё не делал
6. 1cmod 08.05.15 08:58 Сейчас в теме
Ну и не вижу, есть ли $ВидСправочника и Как работаешь с значениями неопределенного Типа.
Оставьте свое сообщение