Введение
Данная обработка (далее консоль) позволяет выполнять прямы запросы в среде 1С:Предприятие версии 7.7
Для удоства написания запроса в консоль встроен метапарсер, позволяющий вместо системных имен 1С (вроде SC792 и тому подобных) использовать более понятные (Справочник.Товары и т.п.). Также консоль понимает русскоязычное написание основных служебных слов языка Transact-SQL (SELECT=ВЫБРАТЬ, FROM=ИЗ и т.п.), что позволяет писать запрос на русском языке.
Для работы консоли не нужны абсолютно никакие внешние компоненты (никаких 1C++, FormEx и т.п.). Единственые необходимые условия:
- База данных должна быть на сервере SQL
- Необходимо один раз запустить 1С:Предприятие от имени администратора (локального или доменного)
- Заходить в базу необходимо не в монопольном режиме
Описание
Для написания запроса необходимо не только уметь писать 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/