ru.j1c
Class RecordSet

java.lang.Object
  extended by ru.j1c.RecordSet
All Implemented Interfaces:
Statement, Wrapper

public class RecordSet
extends Object
implements Statement

Класс используется для работы с данными 1С "напрямую", посредством SQL языка.
Так как класс реализует интерфейс Statement доступна вся функциональность выражений SQL для работы с данными. Кроме того имеется возможность использования метаимен.
Метаимена - это расширение SQL языка, облегчающие работу с данными 1С. Синтаксис метаимен совместим в большей части с синтаксисом языка запросов 1CPP.
Пример работы:
String statement = "SELECT Обороты.Период
, Обороты.Номенклатура as [Товар $Справочник.Номенклатура]
FROM $РегистрОбороты.ОстаткиНаСкладах(:НачДата" +
",:КонДата,Неделя"+
",LEFT JOIN $Справочник.Номенклатура AS Товар" +
",Товар.id = $Остатки.Номенклатура,,) AS Обороты";

RecordSet1C recordSet = getV7().getRecordSet();
ResultSet res = recordSet.executeQuery(statement);

while(res.next()){
CatalogReference ref = res.getObject("Товар");
System.out.println(ref);
}

recordSet.close();

Далее описывается расширение языка запросов.

Типизация колонок типами 1С в тексте запроса

Для получения в наборе данных агрегатных типов 1С, возможна типизация колонок в тексте запроса. Для этого необходимо использовать специальный типизирующий псевдоним (алиас) колонки.
Формат типизирующего псевдонима:
[<ИмяПоля> $<Тип1С>]
Спецификация типизирующих имен
Типизирующее имяДопустимые SQL типы в наборе данныхЦелевой тип j1c
{Справочник|Reference} char(13) CatalogReference
{Справочник|Reference}<Справочник> char(9) CatalogReference
{Документ|Document}<Справочник>
  • char(13)
  • Char(9) - Идентификатор объекта, кроме того, в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов документов.
    Тип колонки SQL: int, DBF: char(4).
DocumentReference
{ВидДокумента|DocumentKind}
  • int - вид документа SQL формат
  • char(4) - вид документа SQL формат (база 36)
Document
{Перечисление|Enum}<ВидПеречисления> char(9) EnumerationReference
{Неопределенный|Undefine} char(23) Undefine
{ВидРасчета|CalculationKind}
  • int - идентификатор в журнале расчетов SQL формат
  • char(13) - в остальных таблицах, где вид расчета содержится как реквизит.
пока не реализовано
{Календарь|Calendar} char(13) CalendarReference
{Субконто|Subconto} char(13) - идентификатор значения субконто (с видом или без вида). Типизируется в значение субконто, кроме того в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов субконто. Тип колонки SQL: int, DBF: char(4). Типизация субконто простых типов (число, строка, дата) не поддерживается. Object
{ВидСубконто|SubcontoKind}
  • int - идентификатор вида субконто в SQL формат в бухгалтерских таблицах
  • char(4) - идентификатор вида субконто в SQL формат в бухгалтерских таблицах
  • char(9) - идентификатор вида субконто в реквзитах других элементов
Metadatas.SubcontoKind

Получение имен таблиц


Получение имен полей


Получение внутренних идентификаторов


Правила обозначения модификаторов

В тексте запроса модификаторы обозначаются символами "~" или "*" после имени параметра. Количество символов "~" после имени параметра определяет номер модификатора. Если после имени параметра не указан модификатор, то номер модификатора равен 0. Так как типом "Неопределенный" (char(23)) можно выразить любой тип 1С, для этого существует специальный модификатор, обозначаемый символом "*", который определен для любого передаваемого типа 1С. Модификаторы определены для следующих типов 1С:
Строка: String
  1. char() - строка как есть
Дата: Date
  1. char(8) - каноническое представление даты
  2. char(9) - каноническое представление даты + символ "Z" (используется для обозначения момента времени конца этой даты)
  3. datetime - odbc формат представления даты вида {d'yyyy-MM-dd'}
Число: Integer, BigDecimal
  1. char() - число как есть в строковом представлении
  2. Зависит от формата ИБ
  3. Зависит от формата ИБ
Позиция: Position
  1. char(23) - cтрока вида date_time_iddoc yyyyMMddXXXXXXIIIIIIIII
Агрегатные типы: EnumerationReference, DocumentReference, CatalogReference, AccountReference:
  1. char(9) - внутренний идентификатор объекта (короткая строка 6+3)
  2. char(13) - внутренний идентификатор объекта с видом (длинная строка 4+6+3)
  3. char(15) - внутренний идентификатор объекта с видом и типом (2+4+6+3) (на самом деле такой тип нигде в 1С не используется, модификатор существует исключительно для обратной совместимости)
  4. Зависит от формата ИБ
  5. char(23) - cтрока вида date_time_iddoc yyyyMMddXXXXXXIIIIIIIII. Должен быть передан DocumentReference
Метаданные: Metadatas.Qualifier
  1. Зависит от формата ИБ

Виртуальные таблицы оперативного учета

Виртуальная таблица остатков

Синтаксис

$РегистрОстатки.<ИмяРегистра>([<ГраницаРасчета>][,
<Соединение>][,
<Условие>][,
<Измерение>][,<Ресурс>]
) [as <Алиас>]

Параметры

Параметры

Оптимизация расчета:

Виртуальная таблица оборотов

Синтаксис:

$РегистрОбороты.<ИмяРегистра>([<НачалоПериода>][, <КонецПериода>][,<Периодичность>][,
<Соединение>][,
<Условие>][,
<Измерение>][,<Ресурс>]
) [as <Алиас>]

Параметры

Оптимизация расчета

Виртуальная таблица остатков и оборотов

Синтаксис:

$РегистрОбороты.<ИмяРегистра>([<НачалоПериода>][, <КонецПериода>][,<Периодичность>][,<МетодДополнения>][,
<Соединение>][,
<Условие>][,
<Измерение>][,<Ресурс>]
) [as <Алиас>]

Параметры

Оптимизация расчета


Виртуальные таблицы бухгалтерии

Таблица субконто (по которым устанвлен принзнак отбора)

Синтаксис

$БИСубконто [AS <Алиас>]

Поля:

Описание:

Таблица отбора проводок по значению субконто. Связь с таблицей проводок рекомендуется по полям ПозицияДокумента, НомерПроводки, НомерКорреспонденции. Поле Вид определяет вид субконто данного значения. ВТ содержит информацию только по тем видам субконто, по которым в конфигураторе включён отбор. Базовая таблица (_1SSBSEL) не привязана к планам счетов, поэтому синтаксис не включает в себя идентификатор плана.

Пример использования:

См. пример к ВТ БИДвиженияССубконто.

Таблица движений с субконто

Синтаксис

$БИДвиженияССубконто.<ПланСчетов>([<НачалоПериода>], [<КонецПериода>], [<Соединение>], [<Условие>]) [AS <Алиас>]

Параметры:

Поля:

Пример использования:

SELECT ПозицияДокумента
, СчетДт [СчетДт $Счет.Основной]
, СчетКт [СчетКт $Счет.Основной]
, Валюта [Валюта $Справочник.Валюты]
, СубконтоДт1 [СубконтоДт1 $Субконто]
, СубконтоДт1_вид
, СубконтоДт2 [СубконтоДт2 $Субконто]
, СубконтоДт2_вид
, СубконтоДт3 [СубконтоДт3 $Субконто]
, СубконтоДт3_вид
, СубконтоКт1 [СубконтоКт1 $Субконто]
, СубконтоКт1_вид
, СубконтоКт2 [СубконтоКт2 $Субконто]
, СубконтоКт2_вид
, СубконтоКт3 [СубконтоКт3 $Субконто]
, СубконтоКт3_вид
, Сумма
, ВалютнаяСумма
, Количество
, СодержаниеПроводки
FROM $БИДвиженияССубконто.Основной({d'2001-01-01'},,
INNER JOIN $БИСубконто БИС ON (ПозицияДокумента = БИС.ПозицияДокумента)
AND (НомерПроводки = БИС.НомерПроводки)
AND (НомерКорреспонденции = БИС.НомерКорреспонденции),
(БИС.Вид = $ВидСубконто.Контрагенты)
AND(Активность = ' ')
) Проводки


Виртуальные значения

Получение начала периода

Синтаксис:

$НачалоПериода|BeginPeriod.<Период>(<ИсходнаяДата>[,<ТипПредставления>])

<Период> - ключевое слово:

Параметры

Получение начала следующего периода

Синтаксис:

$СледующийПериод|NextPeriod.<Период>(<ИсходнаяДата>[,<ТипПредставления>])

<Период> - ключевое слово:

Параметры

Получение наиболее позднего периодического значения

Синтаксис:

$ПоследнееЗначение.{<ИмяСправочника> | Константа}.{<ИмяРеквизита | ИмяКонстанты>}(
<ИдОбъекта>, <Дата>[, <Время>[, <ИДДокумента>]]
)

Параметры

Author:
max

Field Summary
 
Fields inherited from interface java.sql.Statement
CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO
 
Method Summary
 void addBatch(String sql)
           
 void cancel()
           
 void clearBatch()
           
 void clearWarnings()
           
 void close()
           
 boolean execute()
           
 boolean execute(String sql)
           
 boolean execute(String sql, int autoGeneratedKeys)
           
 boolean execute(String sql, int[] columnIndexes)
           
 boolean execute(String sql, String[] columnNames)
           
 int[] executeBatch()
           
 ResultSet1C executeQuery()
          Выполнить запрос.
 ResultSet1C executeQuery(String sql)
           
 int executeUpdate()
          Выполнить запрос.
 int executeUpdate(String sql)
           
 int executeUpdate(String sql, int autoGeneratedKeys)
           
 int executeUpdate(String sql, int[] columnIndexes)
           
 int executeUpdate(String sql, String[] columnNames)
           
 Connection getConnection()
           
 int getFetchDirection()
           
 int getFetchSize()
           
 ResultSet getGeneratedKeys()
           
 int getMaxFieldSize()
           
 int getMaxRows()
           
 boolean getMoreResults()
           
 boolean getMoreResults(int current)
           
 Object getParameter(String key)
          Получить текстовый параметр
 int getQueryTimeout()
           
 ResultSet1C getResultSet()
           
 int getResultSetConcurrency()
           
 int getResultSetHoldability()
           
 int getResultSetType()
           
 String getText()
          Получить текст запроса
 int getUpdateCount()
           
 V7 getV7()
           
 SQLWarning getWarnings()
           
 boolean isClosed()
           
 boolean isPoolable()
           
 boolean isWrapperFor(Class<?> iface)
           
 String parse(String textQuery)
          Преобразовать текст запроса из нотации j1c в t-sql Если какие параметры не установлены - вызывается исключение приложения
 String parseBatch(String textQuery)
          Преобразовать текст запроса из нотации j1c в t-sql Если какие параметры не установлены - вызывается исключение приложения
 void setCursorName(String name)
           
 void setEscapeProcessing(boolean enable)
           
 void setFetchDirection(int direction)
           
 void setFetchSize(int rows)
           
 void setMaxFieldSize(int max)
           
 void setMaxRows(int max)
           
 void setParameter(String key, Object value)
          Установить текстовый параметр запроса.
 void setPoolable(boolean poolable)
           
 void setQueryTimeout(int seconds)
           
 void setRPC(boolean modRPC)
          Переводит объект в специальный режим выполнения запросов.
 void setText(String value)
          Установить текст запроса
<T> T
unwrap(Class<T> iface)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getV7

public V7 getV7()

close

public void close()
           throws SQLException
Specified by:
close in interface Statement
Throws:
SQLException

setRPC

public void setRPC(boolean modRPC)
Переводит объект в специальный режим выполнения запросов. Когда этот режим включен, выполнение запроса происходит с помощью RPC вызова хранимой процедуры sp_executesql. (Подробнее о назначении этой ХП можно прочитать в BOL (Books Online)). В сущности это - режим парсера, а не режим этого объекта.
Метод допустимо применять только для источника данных Microsoft SQL Server; так как выполнение происходит по средствам вызова хранимой процедуры, в силе все особенности выполнения в теле хранимой процедуры. Например, если создавать временную таблицу, то запрос отработает, но таблица будет удалена сервером сразу после выполнения запроса (батча).

Parameters:
modRPC - Режим RPC. true - режим включен, false - выключен (по умолчанию, режим выключен)

parseBatch

public String parseBatch(String textQuery)
Преобразовать текст запроса из нотации j1c в t-sql Если какие параметры не установлены - вызывается исключение приложения

Parameters:
textQuery - запрос на j1c
Returns:
Запрос на t-sql
See Also:
ExceptionAPI

parse

public String parse(String textQuery)
Преобразовать текст запроса из нотации j1c в t-sql Если какие параметры не установлены - вызывается исключение приложения

Parameters:
textQuery - запрос на j1c
Returns:
Запрос на t-sql
See Also:
ExceptionAPI

setParameter

public void setParameter(String key,
                         Object value)
Установить текстовый параметр запроса. В запросе такой параметр предваряется ":". Например:

select * from $Справочник.Номенклатура as спр where спр.id=:Перем

Parameters:
key - Имя параметра в тексте запроса (без ":")
value - Значение параметра.

getParameter

public Object getParameter(String key)
Получить текстовый параметр

Parameters:
key - Имя параметра
Returns:
Значение параметра. Если параметр не установлен - null

getText

public String getText()
Получить текст запроса

Returns:
Текст запроса

setText

public void setText(String value)
Установить текст запроса

Parameters:
value - Текст запроса

executeUpdate

public int executeUpdate()
                  throws SQLException
Выполнить запрос. Используется в конструкциях с INSERT, UPDATE, DELETE Перед вызовом метода необходщимо установить методом setText(String)

Returns:
Количество обработанных строк
Throws:
SQLException

executeUpdate

public int executeUpdate(String sql)
                  throws SQLException
Specified by:
executeUpdate in interface Statement
Throws:
SQLException

execute

public boolean execute()
                throws SQLException
Throws:
SQLException

execute

public boolean execute(String sql)
                throws SQLException
Specified by:
execute in interface Statement
Throws:
SQLException

getResultSet

public ResultSet1C getResultSet()
                         throws SQLException
Specified by:
getResultSet in interface Statement
Throws:
SQLException

getUpdateCount

public int getUpdateCount()
                   throws SQLException
Specified by:
getUpdateCount in interface Statement
Throws:
SQLException

executeQuery

public ResultSet1C executeQuery()
                         throws SQLException
Выполнить запрос. Используется в конструкциях SELECT Перед вызовом метода необходщимо установить методом setText(String)

Returns:
Результат запроса
Throws:
SQLException

executeQuery

public ResultSet1C executeQuery(String sql)
                         throws SQLException
Specified by:
executeQuery in interface Statement
Throws:
SQLException

addBatch

public void addBatch(String sql)
              throws SQLException
Specified by:
addBatch in interface Statement
Throws:
SQLException

cancel

public void cancel()
            throws SQLException
Specified by:
cancel in interface Statement
Throws:
SQLException

clearBatch

public void clearBatch()
                throws SQLException
Specified by:
clearBatch in interface Statement
Throws:
SQLException

clearWarnings

public void clearWarnings()
                   throws SQLException
Specified by:
clearWarnings in interface Statement
Throws:
SQLException

execute

public boolean execute(String sql,
                       int autoGeneratedKeys)
                throws SQLException
Specified by:
execute in interface Statement
Throws:
SQLException

execute

public boolean execute(String sql,
                       int[] columnIndexes)
                throws SQLException
Specified by:
execute in interface Statement
Throws:
SQLException

execute

public boolean execute(String sql,
                       String[] columnNames)
                throws SQLException
Specified by:
execute in interface Statement
Throws:
SQLException

executeBatch

public int[] executeBatch()
                   throws SQLException
Specified by:
executeBatch in interface Statement
Throws:
SQLException

executeUpdate

public int executeUpdate(String sql,
                         int autoGeneratedKeys)
                  throws SQLException
Specified by:
executeUpdate in interface Statement
Throws:
SQLException

executeUpdate

public int executeUpdate(String sql,
                         int[] columnIndexes)
                  throws SQLException
Specified by:
executeUpdate in interface Statement
Throws:
SQLException

executeUpdate

public int executeUpdate(String sql,
                         String[] columnNames)
                  throws SQLException
Specified by:
executeUpdate in interface Statement
Throws:
SQLException

getConnection

public Connection getConnection()
                         throws SQLException
Specified by:
getConnection in interface Statement
Throws:
SQLException

getFetchDirection

public int getFetchDirection()
                      throws SQLException
Specified by:
getFetchDirection in interface Statement
Throws:
SQLException

getFetchSize

public int getFetchSize()
                 throws SQLException
Specified by:
getFetchSize in interface Statement
Throws:
SQLException

getGeneratedKeys

public ResultSet getGeneratedKeys()
                           throws SQLException
Specified by:
getGeneratedKeys in interface Statement
Throws:
SQLException

getMaxFieldSize

public int getMaxFieldSize()
                    throws SQLException
Specified by:
getMaxFieldSize in interface Statement
Throws:
SQLException

getMaxRows

public int getMaxRows()
               throws SQLException
Specified by:
getMaxRows in interface Statement
Throws:
SQLException

getMoreResults

public boolean getMoreResults()
                       throws SQLException
Specified by:
getMoreResults in interface Statement
Throws:
SQLException

getMoreResults

public boolean getMoreResults(int current)
                       throws SQLException
Specified by:
getMoreResults in interface Statement
Throws:
SQLException

getQueryTimeout

public int getQueryTimeout()
                    throws SQLException
Specified by:
getQueryTimeout in interface Statement
Throws:
SQLException

getResultSetConcurrency

public int getResultSetConcurrency()
                            throws SQLException
Specified by:
getResultSetConcurrency in interface Statement
Throws:
SQLException

getResultSetHoldability

public int getResultSetHoldability()
                            throws SQLException
Specified by:
getResultSetHoldability in interface Statement
Throws:
SQLException

getResultSetType

public int getResultSetType()
                     throws SQLException
Specified by:
getResultSetType in interface Statement
Throws:
SQLException

getWarnings

public SQLWarning getWarnings()
                       throws SQLException
Specified by:
getWarnings in interface Statement
Throws:
SQLException

isClosed

public boolean isClosed()
                 throws SQLException
Specified by:
isClosed in interface Statement
Throws:
SQLException

isPoolable

public boolean isPoolable()
                   throws SQLException
Specified by:
isPoolable in interface Statement
Throws:
SQLException

setCursorName

public void setCursorName(String name)
                   throws SQLException
Specified by:
setCursorName in interface Statement
Throws:
SQLException

setEscapeProcessing

public void setEscapeProcessing(boolean enable)
                         throws SQLException
Specified by:
setEscapeProcessing in interface Statement
Throws:
SQLException

setFetchDirection

public void setFetchDirection(int direction)
                       throws SQLException
Specified by:
setFetchDirection in interface Statement
Throws:
SQLException

setFetchSize

public void setFetchSize(int rows)
                  throws SQLException
Specified by:
setFetchSize in interface Statement
Throws:
SQLException

setMaxFieldSize

public void setMaxFieldSize(int max)
                     throws SQLException
Specified by:
setMaxFieldSize in interface Statement
Throws:
SQLException

setMaxRows

public void setMaxRows(int max)
                throws SQLException
Specified by:
setMaxRows in interface Statement
Throws:
SQLException

setPoolable

public void setPoolable(boolean poolable)
                 throws SQLException
Specified by:
setPoolable in interface Statement
Throws:
SQLException

setQueryTimeout

public void setQueryTimeout(int seconds)
                     throws SQLException
Specified by:
setQueryTimeout in interface Statement
Throws:
SQLException

isWrapperFor

public boolean isWrapperFor(Class<?> iface)
                     throws SQLException
Specified by:
isWrapperFor in interface Wrapper
Throws:
SQLException

unwrap

public <T> T unwrap(Class<T> iface)
         throws SQLException
Specified by:
unwrap in interface Wrapper
Throws:
SQLException


Copyright © 2011 J1C corp. All Rights Reserved.