свернуть

Прямой доступ через ODBC

Автор: Дмитрий Ощепков aka DmitrO, mailto: dmitro@russian.ru

Для прямого доступа в родную базу данных а также для доступа к другим источникам данных через драйверы ODBC применяются объекты:

  • ODBCDataBase - используется как объект соединения с источником данных;
  • ODBCRecordSet - используется как объект c помошью которого передаются SQL инструкции и возвращаются результаты запросов, в тексте запросов допустимо использовать метаимена (См. Приложение А);
  • MetaDataWork - используется для преобразования объектных типов 1С во внутренние идентификаторы, хранимые в БД, а также для доступа к внутренним идентификаторам метаданных;
  • SQLLock - используется для получения новых идентификаторов объектов данных.

ODBCDataBase

Данный класс представляет собой сущность для подключения и настройки некоторых параметров к источникам данных, через записи DSN и с использованием драйверов ODBC.

Замечание: По умолчанию, в SQL - версии 1С созданный объект подключен к текущему соединению программы 1С:Предприятие.

Используется в паре с объектом ODBCRecordSet. К одному объекту ODBCDataBase может быть подключено несколько объектов ODBCRecordSet.

Методы

Закрыть / Close

Синтаксис: Закрыть()

Описание: закрывает установленное ранее соединение.

Соединение / DriverConnect

Синтаксис: Соединение(СтрокаСоединения)

Параметры:

Описание: позволяет соединиться с указанным источником данных по указанной строке подключения.

ПолучитьЗначениеТаймаута / GetConnectionTimeout

Синтаксис: ПолучитьЗначениеТаймаута()

Возвращает: тип: Число. Значение таймаута в секундах.

Описание: позволяет получить значение таймаута подключения.

ПолучитьОписаниеОшибки / GetLastError

Синтаксис: ПолучитьОписаниеОшибки()

Возвращает: тип: Строка. Описание ошибки.

Описание: позволяет получить описание последней возникшей ошибки.

ЕстьСоединение / IsConnected

Синтаксис: ЕстьСоединение()

Возвращает: тип: Число. 1 - объект подключен к источнику данных, 0 - не подключен.

Описание: проверяет - установлено ли соединение.

Открыть / Open

Синтаксис: Открыть(ИмяСоединения, ИмяПользователя, Пароль)

Параметры:

  • ИмяСоединения - тип: Строка. Строка соединения. См. Соединение / DriverConnect.;
  • ИмяПользователя - тип: Строка. Имя пользователя;
  • Пароль - тип: Строка. Пароль пользователя;

Возвращает: тип: Число. 1 - удалось подключиться, 0 - не удалось.

Описание: позволяет соединиться с указанным источником данных по указанной строке подключения. В отличии от метода Соединение / DriverConnect имя пользователя и пароль можно указать отдельными параметрами.

УстЗначениеТаймаута / SetConnectionTimeout

Синтаксис: УстЗначениеТаймаута(чЗначение)

Параметры:

  • чЗначение - тип: Число. Значение таймаута.

Описание: устанавливает таймаут подключения.

УстЗначениеТаймаутаЛогина / SetConnectionTimeout

Синтаксис: УстЗначениеТаймаутаЛогина(чЗначение)

Параметры:

  • чЗначение - тип: Число. Значение таймаута.

Описание: устанавливает таймаут логина пользователя.

УстТолькоЧтение / SetReadOnly

Синтаксис: УстТолькоЧтение(чЗначение)

Параметры:

  • чЗначение - тип: Число. Признак ограничения доступа только чтением.

Описание: позволяет установить соединение в режим "Только чтение".

Присоединить1С / Attach1C

Синтаксис: Присоединить1С()

Описание: позволяет установить в качестве текущего соединения - соединение 1С:Предприятия для SQL.

КонфигурироватьИсточник / ConfigDataSource

Синтаксис: КонфигурироватьИсточник()

Описание: позволяет конфигурировать источник данных.

ПолучитьВерсиюДрайвера / GetDriverVer

Синтаксис: ПолучитьВерсиюДрайвера()

Возвращает: тип: Строка. Версия драйвера.

Описание: позволяет получить версию драйвера ODBC.

ПолучитьВерсиюODBC / GetODBCVer

Синтаксис: ПолучитьВерсиюODBC()

Возвращает: тип: Строка. Версия менеджера драйверов ODBC.

Описание: позволяет получить версию менеджера драйверов ODBC.

ReconnectNative / ReconnectNative

Синтаксис: ReconnectNative()

Описание: специальный метод для решения проблемы с MSSQL 2000 (Bug #: 472280) Выполняет отключение и подключение родного соединения программы с сервером. При этом не должно быть открытых форм списков, форм объектов, прочих объектов языка на основе курсора, подготовленных или перебираемых объектов ODBCRecordset (через родное соединение, разумеется). Не допускается вызывать этот метод в транзакции явной или неявной.

ПрисоединитьИБ / AttachIB

Синтаксис: ПрисоединитьИБ(КаталогИБ, [ИмяПользователя], [Пароль], [СтрокаСоединения])

Параметры:

  • КаталогИБ - тип: Строка. Путь к каталогу информационной базы. Должен заканчиваться "".

  • ИмяПользователя - тип: Строка. Имя пользователя информационной базы как оно задано в конфигураторе. Значение по умолчанию - имя текущего пользователя.

  • Пароль - тип: Строка. Пароль на имя пользователя информационной базы как он задан в конфигураторе. Значение по умолчанию - пароль текущего пользователя.

  • СтрокаСоединения - тип: Строка. Строка соединения по спецификации ODBC. Значения по умолчанию:
    • для ИБ sql-формата: "Driver={SQL Server};Server= (undefined: proc) 1;Database= (undefined: proc) 2;Uid= (undefined: proc) 3;Pwd= (undefined: proc) 4;",где  (undefined: proc) 1 - имя sql-сервера,  (undefined: proc) 2 - имя базы данных,  (undefined: proc) 3 - имя пользователя БД,  (undefined: proc) 4 - пароль, взятые из параметров, сохраненных в каталоге ИБ.
    • для ИБ dbf-формата: "DRIVER={Microsoft Visual FoxPro Driver};Deleted=No;Null=Yes;Collate=RUSSIAN;Exclusive=No;SourceType=DBF;SourceDB= (undefined: proc) 1", где  (undefined: proc) 1 - переданный КаталогИБ;

Описание: позволяет загрузить метаданные из указанного каталога ИБ и соединиться с источником данных по строке соединения. В дальнейшем, после установки соединения для объекта ODBCRecordset методом УстБД, при выполнении запросов, парсер будет разрешать метаимена по подключенным метаданным.

Примечание: имя пользователя и пароль проходят проверку только при подключении к ИБ sql-формата. (При подключении к ИБ dbf-формата значения не имеют.)

Пример:

ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ("serverКаталогИБ");
рс=СоздатьОбъект("ODBCRecordset");
рс.УстБД(ИБ);
Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);

ODBCRecordSet

Данный класс предназначен для получения данных из внешних источников, таких как различные БД, имеющие в своем распоряжении драйвера ODBC, файлы данных (*.txt, *.csv и т.д.).

Замечание: По умолчанию, в SQL - версии 1С созданный объект подключен к текущему соединению программы 1С:Предприятие и пригоден к работе без установки соединения (ODBCDatabase). В остальных случаях для перевода объекта в рабочее состояние требуется воспользоваться методом УстБД или УстБД1С.

В тексте запросов, допускается использование метаимен, которые транслируются (заменяются прямо в тексте запроса) в следующие виды имен:

  • реальные имена таблиц 1С:Предприятия для SQL;
  • реальные имена полей таблиц 1С:Предприятия для SQL;
  • параметры запроса;
  • виртуальные таблицы (подзапросы, имена предварительно подготовленных временных таблиц);
  • виртуальные значения (корреляционные подзапросы, выражения MS T-SQL).

Спецификация метаимен приводится в Приложении А.

Набор данных результата запроса (выборка) будет типизирован по умолчанию соответствующими типами 1С.

Замечание: Существует ряд неочевидных соответствий типов ODBC и типов 1С:
  • SQL_BINARY(16) - объект типа GUID.

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

Пример запроса который получает наименование, и ряд реквизитов справочника Номенклатура:

select
        Номенклатура.descr as Наименование,
        $Номенклатура.ВидНоменклатуры as [ВидНоменклатуры $Перечисление.ВидыНоменклатуры],
        $Номенклатура.ОсновнойПоставщик as [Поставщик $Справочник.Контрагенты],
        $Номенклатура.Цена as Цена
from $Справочник.Номенклатура as Номенклатура (nolock)
where Номенклатура.isfolder = 2

Формат типизирующего псевдонима

Формат (в данном случае квадратные скобки являются элементом формата, а не признаком неоязательности заключенной в них конструкции):

[<ИмяПоля> $<Тип1С>]
<ИмяПоля> ::= <имя, которое будет доступно для обращения к полю методами этого класса>
<Тип1С> ::= <строка, представляющая тип 1С>

Тип1С - будет назначен полю, в формате применяющемся в методе УстТипыКолонок1С.

Свойства

мд / md

Доступ: только чтение.

Тип: MetaDataWork.

Описание: свойство содержит статический объект типа MetaDataWork.

Методы

Отладка / Debug

Синтаксис: Отладка([бВклВыкл])

Параметры:

  • бВклВыкл - тип: Число. 1 - вкл. Отладку; 0 - откл. отладку. По умолчанию - 1.

Описание: включает/отключает отладочный режим, в котором проверяются на допустимость параметры методов. По умолчанию класс находится в рабочем, а не отладочном режиме, включить отладку можно просто - вызвав данный метод, без передачи в него аргумента.

УстБД / SetDatabase

Синтаксис: УстБД(БазаДанных)

Параметры:

  • БазаДанных - тип: ODBCDataBase. Cоединение, объект соединения.

Описание: Устанавливает соединение для объекта ODBCRecordset.

УстБД1С / SetDatabase1C

Синтаксис: УстБД1С()

Описание: для SQL версии устанавливает родное соединение 1С:Предприятия.

Закрыть / Close

Синтаксис: УстБД1С()

Описание: позволяет закрыть текущую открытую выборку.

Выполнить / Execute

Синтаксис: Выполнить(ТекстSQL)

Параметры:

  • ТекстSQL - тип: Строка. SQL запрос не возвращающий результат набор данных.

Возвращает: тип: Число. 1 - запрос выполнился успешно, 0 - безуспешно, описание ошибки можно получить, вызвав метод ПолучитьОписаниеОшибки.

Описание: позволяет выполнить SQL запрос, без возврата результата выборки. Метод в основном предназначен для выполнения запросов вставки, обновления, вызова процедур.

ПолучитьОписаниеОшибки / GetLastError

Синтаксис: ПолучитьОписаниеОшибки()

Возвращает: тип: Строка. Описание ошибки.

Описание: позволяет получить описание последней ошибки в виде строки.

УстСвойстваКурсора / SetPropertyCursor

Синтаксис: УстСвойстваКурсора(CURSOR_TYPE, CURSOR_SCROLLABLE, CURSOR_SENSITIVITY, CONCURRENCY)

Параметры: если передается значение = 0 - соотв атрибут объекта запроса не меняется. Приводится только соответствие числовых значений параметров константам ODBC. Для изучения функционального назначения соответствующих этим константам установок, следует обратиться к MSDN.

  • CURSOR_TYPE - тип: Число. SQL_ATTR_CURSOR_TYPE - константа ODBC.

    • 1 - SQL_CURSOR_FORWARD_ONLY;
    • 2 - SQL_CURSOR_STATIC;
    • 3 - SQL_CURSOR_KEYSET_DRIVEN;
    • 4 - SQL_CURSOR_DYNAMIC.
  • CURSOR_SCROLLABLE - тип: Число. SQL_ATTR_CURSOR_SCROLLABLE - константа ODBC.

    • 1 - SQL_NONSCROLLABLE;
    • 2 - SQL_SCROLLABLE.
  • CURSOR_SENSITIVITY - тип: Число. SQL_ATTR_CURSOR_SENSITIVITY - константа ODBC.

    • 1 - SQL_UNSPECIFIED;
    • 2 - SQL_INSENSITIVE;
    • 3 - SQL_SENSITIVE.
  • CONCURRENCY - тип: Число. SQL_ATTR_CONCURRENCY - константа ODBC.

    • 1 - SQL_CONCUR_READ_ONLY;
    • 2 - SQL_CONCUR_LOCK;
    • 3 - SQL_CONCUR_ROWVER;
    • 4 - SQL_CONCUR_VALUES.

Описание: позволяет установить/изменить свойства курсора.

УстРазмерМножестваСтрок / SetRowsetSize

Синтаксис: УстРазмерМножестваСтрок(чРазмер)

Параметры:

  • чРазмер - тип: Число. Размер множества строк.

Описание: устанавливает размер блока выборки (в виде количества строк), который будет получен драйвером ODBC за одно обращение в к источнику данных. Уменьшает количество обращений к источнику, за счет получение получения больших порций данных. Использовать данный метод имеет смысл только до вызова метода Открыть.

Подготовить / Prepare

Синтаксис: Подготовить(ТекстЗапроса)

Параметры:

  • ТекстЗапроса - тип: Строка. Текст запроса.

Возвращает: тип: Число. 1 - подготовка запрос проведена успешно; 0 - безуспешно. Текст ошибки можно получить вызвав метод ПолучитьОписаниеОшибки.

Описание: позволяет подготовить SQL запрос. Примняется в основном для параметризированных запросов. Параметризированный запрос может иметь параметры (скалярные значения некоторых констант в запросе заменяют символами подстановки "?" (SQL параметры)). В последствии предварительно изменяя значения параметров подготовленный запрос можно выполнить несколько раз. Так обеспечивается наиболее оптимальное выполнение нескольких запрсов отличающихся скалярными характеристиками.

ПостроитьПараметры / BuildParams

Синтаксис: ПостроитьПараметры()

Возвращает: тип: Число. 1 - подготовка запрос проведена успешно; 0 - безуспешно.

Описание: формирует SQL параметры на основе подготовленного методом Prepare параметризированного запроса, где места вставки параметров указываются знаком "?". Этот метод позволяет автоматически определить типы SQL параметров.

Примечание: это альтернатива методу ДобПараметр; не каждый запрос и не на каждый драйвер сможет построить параметры автоматически; как правило только самые простые запросы. Кроме того применение этого метода приводит к лишней обработке текста запроса сервером и/или драйвером.

Например:

rc.Prepare("INSERT INTO MyTable (NAME, AGE, SALARY, DATEOFBIRTH) VALUES(?, ?, ?, ?)");
if rc.BuildParams() = 1 then
        rc.SetParam(1, "Авраам Козлевич");
        rc.SetParam(2, 28);
        rc.SetParam(3, 1250.25);
        rc.SetParam(4, '17.11.1974');
        rc.Execute();
endif;

ДобПараметр / AddParam

Синтаксис: ДобПараметр(IOType, nSQLType, nLen, nDec, [pname])

Параметры:

  • IOType - тип: Число. Тип направления параметра:

    • 1 - SQL_PARAM_INPUT;
    • 2 - SQL_PARAM_OUTPUT;
    • 3 - SQL_PARAM_INPUT_OUTPUT.
  • nSQLType - тип: Число. SQL тип параметра:

    • 1 - SQL_BIT
    • 2 - SQL_TINYINT
    • 3 - SQL_SMALLINT
    • 4 - SQL_INTEGER
    • 5 - SQL_REAL
    • 6 - SQL_FLOAT
    • 7 - SQL_DOUBLE
    • 8 - SQL_TYPE_DATE
    • 9 - SQL_TYPE_TIME
    • 10 - SQL_TYPE_TIMESTAMP
    • 11 - SQL_NUMERIC
    • 12 - SQL_DECIMAL
    • 13 - SQL_BIGINT
    • 14 - SQL_CHAR
    • 15 - SQL_VARCHAR
    • 16 - SQL_LONGVARCHAR
    • 17 - SQL_BINARY
    • 18 - SQL_VARBINARY
    • 19 - SQL_LONGVARBINARY
  • nLen - тип Число. Длина;

  • nDec - тип Число. Точность;

  • pname - тип Число. - именованный параметр вида "@Par1". Необязательный параметр, по умолчанию "".

Описание: добавляет описание SQL параметра для параметризированного запроса.

КолвоПараметров / ParamCount

Синтаксис: КолвоПараметров()

Возвращает: количество построенных и/или добавленных SQL параметров.

Описание: позволяет получить количество добавленных параметров.

УстПараметр / SetParam

Синтаксис: УстПараметр(НомерПараметра, Значение)

Параметры:

  • НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.
  • Значение - тип: Любой. Значение параметра.

Описание: установить значение SQL параметра.

ПолучПараметр / GetParam

Синтаксис: ПолучПараметр(Параметр, Тип1С)

Параметры:

  • НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.

  • Тип1С - тип: Строка. Тип получаемого параметра. Допустимые значения:

    • "Справочник/Reference" - полученное значение параметра преобразуется из длинного формата представления элементов справочников: [Kind(4)][ID(6)][Sign(3)] = 13 символов, в конкретный элемент справочника.
    • "Справочник/Reference.*" - где "*" - любой вид справочника, как он определен в конфигураторе (Идентификатор), существующий в ИБ 1С. Преобразует короткую строку, полученную из параметра в конкретный элемент: [ID(6)][Sign(3)] = 9 символов.
    • "Документ/Document" - преобразование длинной (13) строки в конкретный элемент документа.
    • "Документ/Document.*" - где "*" - любой вид документа, как он определен в конфигураторе (Идентификатор). Строка, полученная из параметра, преобразуется в конкретный элемент документа.
    • "Перечисление/Enum" - преобразование длинной строки (13) в конкретный элемент перечисления.
    • "Перечисление/Enum.*" - преобразование короткой строки (9) в конкретный элемент перечисления.
    • "Неопределенный/Undefine" - преобразование строки [Type(2)][Kind(4)][ID(6)][Sign(3)] = 15 символов в конкретный тип и конкретный элемент представленный в ней для реквизитов, тип у которых не определен.

Возвращает: тип: Любой. Значение параметра.

Описание: позволяет получить значение SQL параметра, если вторым параметром метода указан тип, то происходит типизация значения агрегатным типом 1С.

ВыполнитьSQL_ИзТЗ / ExeSQL_FromTV

Синтаксис: ВыполнитьSQL_ИзТЗ(Таблица, КоличествоСтрок)

Параметры:

  • Таблица - тип: ТаблицаЗначений. Источник данных для параметров подготовленного запроса. Имена колонок не имеют значения, берется в расчет позиция колонки, т.е. значения первой колонки подставляются в качестве первого параметра запроса, вторая колонка соответствует второму параметру и т.д.;
  • КоличествоСтрок - тип: Число. Необязателен, по умолчанию равен 0. Данный параметр определяет размер блока, который будет заполняется параметрами из таблицы, без пересылки на сервер базы, как только количество строк в блоке достигнет указанного - в параметре производится пересылка данных на сервер с последующем очищением буфера. Если передано нулевое значение данного параметра, то расчет размера блока производится по следующей формуле: всего общее количество строк переданной таблицы умножается на 0.1 ( т.е. 10 (undefined: proc)  от общего числа строк).

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

Параметры могут быть добавлены методом ДобПараметр / AddParam или построены ПостроитьПараметры / BuildParams. В случае если количество параметров равно нулю, происходит попытка построить параметры автоматически.

Допустимо чтобы значения параметров были агрегатного типа, при этом происходит их преобразование к идентификаторам соответственно типам SQL параметров.

Пример:

rc = СоздатьОбъект("ODBCRecordSet");
rc.Execute("DELETE FROM [TestSQL].[dbo].[MyTable]");
rc.Close();

rc.Prepare("INSERT INTO MyTable (NAME, AGE, SALARY, DATEOFBIRTH) VALUES(?, ?, ?, ?)");
тз = СоздатьОбъект("ТаблицаЗначений");

тз.НоваяКолонка("NAME","Строка");
тз.НоваяКолонка("AGE","Число",4);
тз.НоваяКолонка("SALARY","Число",18,2);
тз.НоваяКолонка("DATEOFBIRTH","Дата");

for i = 1 to 10 do
тз.НоваяСтрока();
        тз.NAME        = "Панферов Вартан";
        тз.AGE         = 28;
        тз.SALARY      = 1453.12;
        тз.DATEOFBIRTH = '17.11.1974';
        тз.НоваяСтрока();
        тз.NAME        = "Гусев Дмитрий";
        тз.AGE         = 23;
        тз.SALARY      = 1233.99;
        тз.DATEOFBIRTH = '09.03.1980';
enddo;
rc.ExeSQL_FromTV(тз);

УдалитьПараметры / ClearParams

Синтаксис: УдалитьПараметры()

Описание: удаляет ранее установленные SQL параметры.

УдалитьПараметр / DeleteParam

Синтаксис: УдалитьПараметр(НомерПараметра)

Параметры:

  • НомерПараметра - тип: Число. Номер параметра, отсчет идет от 1.

Описание: удаляет ранее установленный SQL параметр по номеру.

Открыть / Open

Синтаксис: Открыть([ТекстЗапроса], [ИспКурсор], [Подготовлен])

Параметры:

  • ТекстЗапроса - тип: Строка. Текст SQL запроса. Если строка пустая, то выборка открывается для подготовленного ранее запроса методом Подготовить / Prepare. Необязателен, по умолчанию - пустая строка;
  • ИспКурсор - тип: Число. 1 - открыть курсор, только для запроса указанного в первом параметре метода (если запрос подготавливался ранее командой "Prepare", тогда разрешить использовать курсор уже нельзя, для установки курсора и его типа воспользуйтесь методом УстСвойстваКурсора / SetPropertyCursor), 0 - не открывать курсор. Если ранее был использован метод SetPropertyCursor, то значение данного параметра игнорируется. Необязателен, по умолчанию равен 0;
  • Подготовлен - тип: Число. 1 - открыть ранее подготовленный методом Подготовить / Prepare запрос. 0 - использовать первый параметр как запрос на выполнение. Необязателен, по умолчанию равен 0, если в первом параметре есть текст запроса и равен 1, если передан пустой текст запроса.

Возвращает: тип: Число. 1 - запрос выполнен успешно, и выборка была открыта. 0 - произошла ошибка.

Описание: выполняет запрос и открывает выборку - результат переданного SQL запроса. Метод только открывает выборку: после успешного вызова метода, в памяти нет всей выборки, она будет получаться с сервера по мере перебора результата запроса. Основное применение метода: при работе с курсорами.

Замечание: если запрос выполнен успешно, но при этом не получено ни одной записи (результат запроса не содержит записей) - это считается ошибкой, т.к. в таком случае выборка не может быть открыта.

УстТипыКолонок1С / SetTypeColumn1C

Синтаксис: УстТипыКолонок1С(ТипыКолонок)

Параметры:

  • ТипыКолонок - тип: Строка. Типы, разделенными запятыми. Каждый тип соответствует номеру колонки, начиная с первой и заканчивая количеством полей. Все типы, которые превышают номер последнего столбца - игнорируются.

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

Синтаксис строки типов:

type_string ::= empty-string[,] | type[,] | type, type_string
empty-string ::=""
type ::=
 | Строка
 | Дата
 | Число
 | Справочник[.*] | Reference[.*]
 | Документ[.*] | Document[.*]
 | Перечисление[.*] | Enum[.*]
 | Счет[.*] | Account[.*]
 | Неопределенный | Undefine
Справочник | Reference - полученное значение параметра преобразуется из длинного формата представления
элементов справочников: [Kind(4)][ID(6)][Sign(3)] = 13 символов, в конкретный элемент справочника;
Справочник.* | Reference.* - где "*" - любой вид справочника, как он определен в конфигураторе (Идентификатор),
существующий в ИБ 1С. Преобразует короткую строку, полученную из параметра в конкретный элемент:
[ID(6)][Sign(3)] = 9 символов.
Документ | Document - преобразование длинной (13) строки в конкретный элемент документа.
Документ.* | Document.* - где "*" - любой вид документа, как он определен в конфигураторе (Идентификатор).
Строка, полученная из параметра, преобразуется в конкретный элемент документа.
Перечисление | Enum - преобразование длинной строки (13) в конкретный элемент перечисления.
Перечисление.* | Enum.* - преобразование короткой строки (9) в конкретный элемент перечисления.
Счет | Account - преобразование длинной строки (13) в конкретный счет.
Счет.* | Account.* - преобразование короткой строки (9) в конкретный счет.
Неопределенный | Undefine - преобразование строки [Type(2)][Kind(4)][ID(6)][Sign(3)] = 23 символов
в конкретный тип и конкретный элемент, представленный в ней для реквизитов, тип у которых не определен.

Пример:

rc.SetTypeColumn1C("Строка, Число, Дата, Справочник.Тест_2, Справочник,
|Перечисление._ТестПакеты, Документ, Документ.Док_2");

ВыборкаОткрыта / IsOpen

Синтаксис: ВыборкаОткрыта()

Возвращает: тип: Число. 1 - если выборка открыта, иначе 0.

Описание: позволяет проверить открыта выборка или нет.

След / MoveNext

Синтаксис: След()

Возвращает: тип: Число. Если достигнут конец выборки возвращает 0, иначе 1.

Описание: продвигает курсор на следующую позицию.

Пред / MovePrevious

Синтаксис: Пред()

Возвращает: тип: Число. Если текущая строка была первая на момент выполнения метода, то метод вернет 0, иначе 1.

Описание: продвигает курсор на предыдущую позицию.

ВНачало / MoveFirst

Синтаксис: ВНачало()

Описание: двигает курсор в начало выборки.

ВКонец / MoveLast

Синтаксис: ВКонец()

Описание: двигает курсор в конец выборки.

КолвоПолей / GetFieldCount

Синтаксис: КолвоПолей()

Возвращает: тип: Число. Количество полей.

Описание: позволяет получить количество столбцов (полей) в выборке.

Начало / IsBOF

Синтаксис: Начало()

Возвращает: тип: Число. 1, когда курсор перешел за начало выборки, иначе 0.

Описание: позволяет проверить положение курсора.

Конец / IsEOF

Синтаксис: Начало()

Возвращает: тип: Число. 0, пока курсор не пройдет последнюю строку выборки, 1 - курсор находится за последней строкой выборки.

Описание: позволяет проверить положение курсора.

ИндексПоля / GetFieldIndex

Синтаксис: ИндексПоля(ИмяПоля)

Параметры:

  • ИмяПоля - тип: Строка. Имя поля.

Возвращает: тип: Число. Индекс поля (от нуля). Если такого поля не существует возвращается -1.

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

СтрокОбработанно / GetRowsAffected

Синтаксис: СтрокОбработанно()

Возвращает: тип: Число. Количество строк, обработанных SQL инструкцией.

Описание: позволяет получить результат запроса - количество обработанных строк (результат запроса типа rowcount).

ПолучитьЗначение / GetValue

Синтаксис: ПолучитьЗначение(Поле)

Параметры:

  • Поле - тип: Число, Строка. Номер поля (от 1) или имя поля.

Возвращает: тип: Любой. Значение поля в текущей строке.

Описание: позволяет получить значение поля.

ПолучитьЗначения / GetValues

Синтаксис: ПолучитьЗначение(...)

Параметры: переменные для приема значений полей.

Описание: возвращает значения колонок по текущей строке выборки. Количество параметров неограниченно, но будут заполнены значениями из выборки только те параметры, которые окажутся в диапазоне от 1 до количества полей.

ПолучитьЗначенияСЗ / GetValuesInSV

Синтаксис: ПолучитьЗначенияСЗ(Колонки)

Параметры:

  • Колонки - тип: Число, Строка. Номер поля (от 1) или названия колонки или колонок, разделенные запятыми.

Возвращает: тип: СписокЗначений, Структура. Объект со значениями полей.

Описание: позволяет получить значения поля. Если в парметр передается число, возвращается список значений, со значениями переданного поля каждой строки. Структура возвращается всегда, когда в качестве параметра метода передавалась строка с названием или названиями колонок. В структуре определяются свойства с именами колонок, полученных из строки и существующих в выборке, далее в эти свойства записываются списки значений, содержащие значения колонок из всех строк текущей выборки.

ПолучитьРезультатыВ_ТЗ / GetResultsInVT

Синтаксис: ПолучитьРезультатыВ_ТЗ(Таблица, Очищать)

Параметры:

  • Таблица - тип: ТаблицаЗначений, наследник объекта ТаблицаЗначений. Таблица значений для приема данных выборки.
  • Очищать - тип: Число. 1 - очистить таблицу и создать колонки автоматически, 0 - не очищать таблицу, а использовать существующие колонки, соответствие между колонками таблицы и колонками выборки проводится по порядковым номерам, т.е. первая колонка таблицы заполняется значениями из первой колонки выборки и так далее.

Описание: загружает результаты выборки в переданную таблицу значений или в класс производный от класса ТаблицаЗначений.

Замечание: метод является устаревшим, вместо него рекомендуется использовать ВыполнитьИнструкцию / ExecuteStatement.

УстановитьТекстовыйПараметр / SetTextParam

Синтаксис: УстановитьТекстовыйПараметр(ИмяПараметра, ЗначениеПараметра)

Параметры:

  • ИмяПараметра - тип: Строка. Имя параметра;
  • ЗначениеПараметра - тип: Любой. Значение параметра.

Описание: устанавливает текстовый параметр. Необходимо вызывать до передачи текста запроса.

ПолучитьПараметрыПоля / GetFieldDefs

Синтаксис: ПолучитьПараметрыПоля(Поле, [Тип1С], [Длина1С], [Точность1С], [ТипSQL], [ДлинаSQL], [ТочностьSQL], [МожетБытьNULL])

Параметры:

  • Поле - тип: Число, Строка. Номер или имя поля;
  • Тип1С - тип: Строка. Обозначение типа в 1С;
  • Длина1С - тип: Число. Обозначение длины в 1С;
  • Точность1С - тип: Число. Обозначение точности в 1С;
  • ТипSQL - тип: Число. Номер типа в ODBC;
  • ДлинаSQL - тип: Число. Длина типа в ODBC;
  • ТочностьSQL - тип: Число. Точность типа в ODBC;
  • МожетБытьNULL - тип: Число. Допустимость значений NULL в ODBC. 1 - допустимы, 0 - не допустимы.

Возвращает: тип: Число, Строка. Если первым параметром передан номер поля - возвращается его имя, если передано имя - возвращается номер поля.

Описание: позволяет получить параметры поля.

АвтоТипизация / AutoTypification

Синтаксис: АвтоТипизация(Включить)

Параметры:

  • Включить - тип: Число. Признак включения режима автотипизации. 1 - включить, 0 -выключить.

Описание: устанавливает или снимает режим работы объекта, в котором происходит происходят автоматическая типизация и именование полей полученной выборки на основании исходных имен полей типа spXXX. Происходит именование поля идентификатором 1С (как он задан в конфигураторе), а также назначение полю типа 1С по метаданным. Сразу после создания объекта (по умолчанию) режим выключен для обратной совместимости.

УложитьСписокОбъектов / PutObjectList

Синтаксис: УложитьСписокОбъектов(Список, ИмяТаблицы, [ВидЭлементов])

Параметры:

  • Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка. Допустимо также передавать группу справочника, элемент справочника, группу счетов, счет - в этом случае во временную таблицу поступает переданное значение, однако если указан ВидЭлементов (вид справочника, или план счетов), то будет попытка включить в таблицу все подчененные элементы.
  • ИмяТаблицы - тип: Строка. Имя временной таблицы.
  • ВидЭлементов - тип: Строка. Вид справочника для иерархического включения элементов или вид плана счетов для иерархического включения счетов. Если параметр не указан, иерархического включения не происходит.

Описание: сохраняет список внутренних идентификаторов объектов во временной таблице MS SQL. Идентификаторы объектов из списка сохраняются во временной таблице в поле val char(9). Имя таблицы должно начинаться с символа "#".

Если указан вид ВидЭлементов - идентификатор иерархического справочника, то таблица будет содержать элементы, иерархически принадлежащие группам переданным в списке. (Подобно оператору "в" стандартного языка запросов 1С.)

Замечание: метод допустимо применять только для источника данных Microsoft SQL Server.

УстТаймаутЗапроса / SetQueryTimeout

Синтаксис: УстТаймаутЗапроса(Таймаут)

Параметры:

  • Таймаут - тип: Число. Таймаут запроса в секундах.

Описание: устанавливает таймаут выполнения запроса в секундах. Если выполнение запроса не заканчивается до истечения таймаута - выполнение всех методов выполнения запросов заканчивается с соответствующей ошибкой (SQLSTATE = HYT00). Значение таймаута в 0 секунд означает, что нет никакого таймаута выполнения запроса, и запрос будет выполняться бесконечно. Это значение действует по умолчанию.

ИстекТаймаут / IsQueryTimeoutExpired

Синтаксис: ИстекТаймаут()

Возвращает: тип: Число. 1 - было завершение по таймауту, иначе 0.

Описание: позволяет проверить - является ли последняя ошибка выполнения запроса ошибкой завершения по таймауту. Метод допустимо вызывать только после вызова метода ПолучитьОписаниеОшибки.

ОбратныйРасчетОтТА / BackFromTAEnabled

Синтаксис: ОбратныйРасчетОтТА()

Возвращает: тип: Число. 1 - разрешено, иначе 0.

Описание: разрешает оптимизацию расчета остатков от ТА. По умолчанию такая оптимизация запрещена, т.к. запросы ВТ выполняются грязным чтением. Ее полезно включать, имея гарантию того, что остатки на ТА досчитаны до конца, например - в модуле проведения.

ВыполнитьИнструкцию / ExecuteStatement

Синтаксис: ВыполнитьИнструкцию([ТекстЗапроса], [ОбъектРезультатов], [Очищать])

Параметры:

  • ТекстЗапроса - тип: Строка. Текст запроса, если пустая строка - запрос считается параметризированным. Необязателен, по умолчанию - пустая строка.
  • ОбъектРезультатов - тип: любой из ТаблицаЗначений, СписокЗначений, ИндексированнаяТаблица или наследник от любого из них. (Это должен быть объект какого-либо из перечисленных типов, а не объект, реализующий их интерфейс.) Если параметр передан, то он и будет возвращаемым значением. Необязателен, по умолчанию пустое значение, в этом случае будет возвращен объект типа ТаблицаЗначений.
  • Очищать - тип: Число. 1 - очистить переданный ОбъектРезультатов и создать колонки если его тип ТаблицаЗначений или ИндексированнаяТаблица. 0 - не очищать. Необязателен, по умолчанию - 1.

Возвращает: тип: ТаблицаЗначений, СписокЗначений, ИндексированнаяТаблица или наследник от любого из них, Число. Объект с результатом запроса, или число - количество обработанных строк.

Описание: Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Если запрос возвращает набор строк, метод возвращает объект с результатом запроса, если запрос не возвращает набор строк (не select, а DML или прочий) - возвращается количество обработанных строк. Если запрос содержит несколько SQL инструкций (multistatement batch), результаты возвращаются только от первой инструкции. Однако, на драйвер уходит весь текст запроса (По спецификации ODBC, будут ли выполнены остальные инструкции в пакете - зависит от драйвера. Для драйвера SQL Server они выполняются), остальные результаты игнорируются. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки - это не является ошибкой. Если запрос не параметризированный - метод гарантированно закрывает курсор. Если передан ОбъектРезультатов типа ТаблицаЗначений или ИндексированнаяТаблица или наследник и параметр Очишать = 0, то колонки объекта и поля результата совмещаются по порядку. Если передан ОбъектРезультатов типа СписокЗначений, то значения из первого поля результата помещаются в значения списка. Если существует второе поле результата и оно типа Строка, то значения этого поля помещается в представление списка. Если существует третье поле результата и оно типа Число, то значения этого поля помещается в признак пометки значений.

ВыполнитьСкалярный / ExecuteScalar

Синтаксис: ВыполнитьСкалярный([ТекстЗапроса])

Параметры:

  • ТекстЗапроса - тип: Строка. Текст запроса, если пустая строка-запрос считается параметризированным. Необязателен, по умолчанию - пустая строка.

Возвращает: тип: Любой, Структура. Если значение поля результата запроса, или зачения полей результата запроса.

Описание: Выполняет SQL запрос, при ошибке парсинга или при ошибке на ODBC драйвере формируется исключение. Запрос может возвращать количество обработанных строк: в этом случае возвращается это значение. Запрос может возвращать набор данных, состоящий из одной строки, при этом если в наборе данных одна колонка - возвращается значение из нее, если запрос возвращает несколько колонок - возвращается объект Структура, заполненный полями и именами ключей, соответствующими именам колонок и значениями из этих колонок. Если запрос возвращает набор данных, и в наборе данных нет ни одной строки - это не является ошибкой, в этом случае возвращается пустое значение типа, определенного в первой колонке, или объект Структура, заполненный соответствующим образом. Если запрос не параметризированный - метод гарантированно закрывает курсор.

ВыполнитьXML / ExecuteXML

Синтаксис: ВыполнитьXML([ТекстЗапроса], [ОбъектПриемник])

Параметры:

  • ТекстЗапроса - тип: Строка. Текст запроса, если пустая строка-запрос считается параметризированным. Необязателен, по умолчанию - пустая строка.
  • ОбъектПриемник - тип: BinaryData. Объект для получения результата запроса. Необязателен, по умолчанию - пустое значение.

Возвращает: тип: Строка, ПустоеЗначение. Результат запроса или, если передан объект приемник - возвращается ПустоеЗначение.

Описание: выполняет запрос и получает результат как XML данные. Если вторым параметром передан объект BinaryData, то результат записывается в этот объект (с учетом текущей кодировки и текущей позиции в файле), при этом возвращаемое значение метода не определено, если второй параметр - пустое значение, метод возвращает строку - результат запроса.

РежимRPC / RPCMode

Синтаксис: РежимRPC(Режим)

Параметры:

  • Режим - тип: Число. 1 - включить режим, 0 - выключить режим.

Описание: переводит объект в специальный режим выполнения запросов. Когда этот режим включен, выполнение запроса происходит с помощью RPC вызова хранимой процедуры sp_executesql. (Подробнее о назначении этой ХП можно прочитать в BOL (Books Online)). В сущности это - режим парсера, а не режим этого объекта. Не применимо для параметризированных запросов. По умолчанию этот режим выключен.

Смысл этого метода в том, что текстовые параметры в тексте запроса заменяются не на их значение, а на T-SQL переменные. Кроме того, на T-SQL переменные заменяются метаимена, разрешающиеся в идентификаторы. В результирующих запросах виртуальных таблиц все параметры также будут заменены на T-SQL переменные. Таким образом, при выполнении различных запросов, отличающихся только значениями текстовых параметров, текст запроса, который уходит на сервер, остается одинаковым (если, конечно, он не изменяется качественно вследствие разрешения какой-либо виртуальной таблицы) и будет происходить эффективное использование кэша планов выполнения запросов (сервер будет выполнять меньше компиляций).

Рекомендации по использованию: В общем-то, его лучше ставить всегда, или в таких случаях, где неудобно использовать параметризированные запросы (они все же быстрее), особенно в потенциально частых запросах (применяющихся в модуле проведения, например).

Ограничения: метод допустимо применять только для источника данных Microsoft SQL Server; так как выполнение происходит по средствам вызова хранимой процедуры, в силе все особенности выполнения в теле хранимой процедуры. Например, если создавать временную таблицу, то запрос отработает, но таблица будет удалена сервером сразу после выполнения запроса (батча).

УложитьСписокОбъектов13 / PutObjectList13

Синтаксис: УложитьСписокОбъектов13(Список, ИмяТаблицы)

Параметры:

  • Список - тип: СписокЗначений, Справочник, Счет. Объект, содержание которого будет отправляться на сервер. Если передан список значений, во врем. таблицу попадает содержимое списка.
  • ИмяТаблицы - тип: Строка. Имя временной таблицы.

Описание: сохраняет список объектов во временной таблице MS SQL. Идентификаторы объектов из списка сохраняются во временной таблице. Таблица имеет единственное поле val char(13). Имя таблицы должно начинаться с символа "#".

MetaDataWork

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

В описании этого класса часто применяются термин номер объектов метаданных - под ним следует понимать номер соответствующего объекта от 1 в порядке объявления их в конфигураторе. В описании этого класса часто применяются термин имя объектов метаданных - под ним следует понимать строковый идентификатор объекта метаданных.

Свойства

Метаданные / Metadata

Доступ: только чтение.

Тип: Метаданные.

Описание: свойство содержит ссылку на объект Метаданные. Для присоединенного md-файла будет выдаваться ссылка на объект Метаданные для этого файла/конфигурации.

Важно: Время жизни свойства совпадает со временем жизни объекта MetaDataWork.
Пример

MetaDataWork = СоздатьОбъект("MetaDataWork"); MetaDataWork.ПрисоединитьМД("c:1sbase1cv7.md");

МД = MetaDataWork.Метаданные; // сохраняю ссылку MetaDataWork=""; // сбрасываю родителя

и теперь ТипЗначения(МД) равен нулю, т.е. пустому значению. Использователь подобный объект МД уже бесполезно.

Методы

ИДКонстанты / GetConstID

Синтаксис: ИДКонстанты(Константа)

Параметры:

  • Константа - тип: Число, Строка. Номер константы или имя константы.

Возвращает: тип: Число. Внутренний идентификатор константы.

Описание: позволяет получить внутренний идентификатор константы.

ИДСправочника / GetRefID

Синтаксис: ИДСправочника(Справочник)

Параметры:

  • Справочник - тип: Число, Строка. Номер справочника или имя справочника (вид).

Возвращает: тип: Число. Внутренний идентификатор справочника.

Описание: позволяет получить внутренний идентификатор справочника.

ИДРеквизитаСправочника / GetRefFieldID

Синтаксис: ИДРеквизитаСправочника(Справочник, Реквизит)

Параметры:

  • Справочник - тип: Число, Строка. Номер справочника или имя справочника (вид).
  • Реквизит - тип: Число, Строка. Номер реквизита справочника или имя реквизита справочника.

Возвращает: тип: Число. Внутренний идентификатор рекувизита справочника.

Описание: позволяет получить внутренний идентификатор рекувизита справочника.

ИмяТаблицыСправочника / GetRefTableName

Синтаксис: ИмяТаблицыСправочника(Справочник, Реквизит)

Параметры:

  • Справочник - тип: Число, Строка. Номер справочника или имя справочника (вид).

Возвращает: тип: Строка. Имя таблицы справочника в базе данных.

Описание: позволяет получить имя таблицы справочника в базе данных.

ИДДокумента / GetDocID

Синтаксис: ИДДокумента(Документ)

Параметры:

  • Документ - тип: Число, Строка. Номер документа или имя документа (вид).

Возвращает: тип: Число. Внутренний идентификатор документа.

Описание: позволяет получить внутренний идентификатор документа.

ИДРеквизитаШапки / GetDocHeadFieldID

Синтаксис: ИДРеквизитаШапки(Документ, Реквизит)

Параметры:

  • Документ - тип: Число, Строка. Номер документа или имя документа (вид).
  • Реквизит - тип: Число, Строка. Номер реквизита шапки документа или имя реквизита шапки документа.

Возвращает: тип: Число. Внутренний идентификатор реквизита шапки документа.

Описание: позволяет получить внутренний идентификатор реквизита шапки документа.

ИмяТаблицыШапки / GetDocHeadTableName

Синтаксис: ИмяТаблицыШапки(Документ)

Параметры:

  • Документ - тип: Число, Строка. Номер документа или имя документа (вид).

Возвращает: тип: Строка. Имя таблицы шапки документа в базе данных.

Описание: позволяет получить имя таблицы шапки документа в базе данных.

ИДРеквизитаТабличнойЧасти / GetDocTblFieldID

Синтаксис: ИДРеквизитаТабличнойЧасти(Документ, Реквизит)

Параметры:

  • Документ - тип: Число, Строка. Номер документа или имя документа (вид).
  • Реквизит - тип: Число, Строка. Номер реквизита табличной части документа или имя реквизита табличной части документа.

Возвращает: тип: Число. Внутренний идентификатор реквизита табличной части документа.

Описание: позволяет получить внутренний идентификатор реквизита табличной части документа.

ИмяТаблицыТабличнойЧасти / GetDocTblTableName

Синтаксис: ИмяТаблицыТабличнойЧасти(Документ)

Параметры:

  • Документ - тип: Число, Строка. Номер документа или имя документа (вид).

Возвращает: тип: Строка. Имя таблицы табличной части документа в базе данных.

Описание: позволяет получить имя таблицы табличной части документа в базе данных.

ИДЖурналаРасчетов / GetCJID

Синтаксис: ИДЖурналаРасчетов(Журнал)

Параметры:

  • Журнал - тип: Число, Строка. Номер журнала расчетов или имя журнала расчетов.

Возвращает: тип: Число. Внутренний идентификатор журнала расчетов.

Описание: позволяет получить внутренний идентификатор журнала расчетов.

ИДРеквизитаЖР / GetCJFieldID

Синтаксис: ИДРеквизитаЖР(Журнал, Реквизит)

Параметры:

  • Журнал - тип: Число, Строка. Номер журнала расчетов или имя журнала расчетов.
  • Реквизит - тип: Число, Строка. Номер реквизита журнала расчетов или имя реквизита журнала расчетов.

Возвращает: тип: Число. Внутренний идентификатор реквизита журнала расчетов.

Описание: позволяет получить внутренний идентификатор реквизита журнала расчетов.

ИмяТаблицыЖР / GetCJTableName

Синтаксис: ИмяТаблицыЖР(Журнал)

Параметры:

  • Журнал - тип: Число, Строка. Номер журнала расчетов или имя журнала расчетов.

Возвращает: тип: Строка. Имя таблицы журнала расчетов в базе данных.

Описание: позволяет получить имя таблицы журнала расчетов в базе данных.

ИДРегистра / GetRegID

Синтаксис: ИДРегистра(Регистр)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.

Возвращает: тип: Число. Внутренний идентификатор регистра.

Описание: позволяет получить внутренний идентификатор регистра.

ИДИзмеренияРегистра / GetRegDimensionID

Синтаксис: ИДИзмеренияРегистра(Регистр, Измерение)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.
  • Измерение - тип: Число, Строка. Номер измерения регистра или имя измерения регистра.

Возвращает: тип: Число. Внутренний идентификатор измерения регистра.

Описание: позволяет получить внутренний идентификатор измерения регистра.

ИДРесурсаРегистра / GetRegResourceID

Синтаксис: ИДИзмеренияРегистра(Регистр, Ресурс)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.
  • Ресурс - тип: Число, Строка. Номер ресурса регистра или имя ресурса регистра.

Возвращает: тип: Число. Внутренний идентификатор ресурса регистра.

Описание: позволяет получить внутренний идентификатор ресурса регистра.

ИДРеквизитаРегистра / GetRegAttributeID

Синтаксис: ИДРеквизитаРегистра(Регистр, Реквизит)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.
  • Реквизит - тип: Число, Строка. Номер реквизита регистра или имя реквизита регистра.

Возвращает: тип: Число. Внутренний идентификатор реквизита регистра.

Описание: позволяет получить внутренний идентификатор реквизита регистра.

ИмяТаблицыДвижений / GetRegActsTableName

Синтаксис: ИмяТаблицыДвижений(Регистр)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.

Возвращает: тип: Строка. Имя таблицы движений регистра в базе данных.

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

ИмяТаблицыИтогов / GetRegTotalsTableName

Синтаксис: ИмяТаблицыИтогов(Регистр)

Параметры:

  • Регистр - тип: Число, Строка. Номер регистра или имя регистра.

Возвращает: тип: Строка. Имя таблицы итогов регистра в базе данных.

Описание: позволяет получить имя таблицы итогов регистра в базе данных.

ИДОбъекта / GetMetadataID

Синтаксис: ИДОбъекта(ОбъектМетаданных)

Параметры:

  • ОбъектМетаданных - тип: Метаданные. Объект метаданных.

Возвращает: тип: Число. Внутренний идентификатор объекта метаданных.

Описание: позволяет получить внутренний идентификатор объекта метаданных.

ЧислоВСтроку / IntToBase

Синтаксис: ЧислоВСтроку(ПреобразуемоеЧисло, Основание)

Параметры:

  • ПреобразуемоеЧисло - тип: Число. Число для преобразования.
  • Основание - тип: Число. Основание результата.

Возвращает: тип: Строка. Результат преобразования.

Описание: преобразует целое число в строку с заданным основанием.

СтрокаВЧисло / BaseToInt

Синтаксис: СтрокаВЧисло(ПреобразуемаяСтрока, Основание)

Параметры:

  • ПреобразуемаяСтрока - тип: Строка. Строка для преобразования.
  • Основание - тип: Число. Основание результата.

Возвращает: тип: Число. Результат преобразования.

Описание: преобразует строку с заданным основанием в целое число.

ЗначениеВСтрокуБД / ValueToDBString

Синтаксис: ЗначениеВСтрокуБД(ОбъектХранимыйВБД)

Параметры:

  • ОбъектХранимыйВБД - тип: Перечисление, Справочник, Документ, Календарь, ВидРасчета, Счет, ВидСубконто, ПланСчетов. Объект для преобразования.

Возвращает: тип: Строка. Результат преобразования.

Описание: преобразует ссылочный объект в строку (внутренний идентификатор данных) [ID(6)][Sign(3)] = 9 символов.

ЗначениеВДлиннуюСтрокуБД / ValueToLongDBString

Синтаксис: ЗначениеВДлиннуюСтрокуБД(ОбъектХранимыйВБД)

Параметры:

  • ОбъектХранимыйВБД - тип: Перечисление, Справочник, Документ, Календарь, ВидРасчета, Счет. Объект для преобразования.

Возвращает: тип: Строка. Результат преобразования.

Описание: преобразует ссылочный объект в строку (внутренний идентификатор данных) [Kind(4)][ID(6)][Sign(3)] = 13 символов.

ЗначениеИзСтрокиБД / ValueFromDBString

Синтаксис 1: ЗначениеИзСтрокиБД(Тип, Вид, ВнутреннийИД)

Параметры:

  • Тип - тип: Число. Номер типа. (10, 11, 12, 15, 16, 17);
  • Вид - тип: Число. Внутренний идентификатор вида объекта;
  • ВнутреннийИД - тип: Строка. Внутренний идентификатор объекта данных.

Возвращает: тип: Перечисление, Справочник, Документ, Счет, ВидСубконто, ПланСчетов. Результат преобразования.

Синтаксис 2: ЗначениеИзСтрокиБД(ТипИВид, ВнутреннийИД)

Параметры:

  • Тип - тип: Строка. Полный тип объекта. Напимер: Справочник.Контрагенты;
  • ВнутреннийИД - тип: Строка. Внутренний идентификатор объекта данных. 9 символов.

Возвращает: тип: Перечисление, Справочник, Документ, Счет, ВидСубконто, ПланСчетов. Результат преобразования.

Синтаксис 3: ЗначениеИзСтрокиБД(Тип, Вид, ВнутреннийИД)

Параметры:

  • Тип - тип: Число. Номер типа. (10, 11, 12, 15, 16, 17);
  • Вид - тип: Строка. Идентификатор метаданных. Напимер: Контрагенты;
  • ВнутреннийИД - тип: Строка. Внутренний идентификатор объекта данных. 9 символов.

Возвращает: тип: Перечисление, Справочник, Документ, Счет, ВидСубконто, ПланСчетов. Результат преобразования.

Синтаксис 4: ЗначениеИзСтрокиБД(Тип, Вид, ВнутреннийИД)

Параметры:

  • Тип - тип: Строка. Тип объекта. Напимер: Справочник;
  • Вид - тип: Строка. Идентификатор метаданных. Напимер: Контрагенты;
  • ВнутреннийИД - тип: Строка. Внутренний идентификатор объекта данных. 9 символов.

Возвращает: тип: Перечисление, Справочник, Документ, Счет, ВидСубконто, ПланСчетов. Результат преобразования.

Описание: преобразует внутренний идентификатор объекта данных в объект ссылочного типа. Дополнительно, этим методом можно воспользоваться для получения значения типа ЗаписьЖурналаРасчетов. Для этого в первом параметре необходимо передать строку "ЗаписьЖурналаРасчетов" или "CalcJournalRecord", во втором параметре указать идентификатор журнала, в третьем параметре идентификатор записи в виде строки длиной 9 символов.

Внимание!: Следите за длиной передаваемой строки, т.к. метод в целях оптимизации не проверяет строку внутреннего представления на допустимую длину, равную 9 символам!

ЗначениеИзДлиннойСтрокиБД / ValueFromLongDBString

Синтаксис: ЗначениеИзДлиннойСтрокиБД(Тип, ВнутреннийИД)

Параметры:

  • Тип - тип: Число, Строка. Номер типа или строковое представление типа;
  • ВнутреннийИД - тип: Строка. Внутренний идентификатор объекта данных. 13 символов.

Возвращает: тип: Перечисление, Справочник, Документ, Календарь, ВидРасчета, Счет. Результат преобразования.

Описание: преобразует внутренний идентификатор объекта данных в объект ссылочного типа.

Внимание! Следите за длиной передаваемой строки, т.к. метод в целях оптимизации не проверяет строку внутреннего представления на допустимую длину, равную 13 символам!

ПолучитьКонПериода / GetEndOfPeriod

Синтаксис: ПолучитьКонПериода([ДатаИзПериода])

Параметры:

  • ДатаИзПериода - тип: Дата. Дата, от которой рассчитывается период. Необязателен, по умолчанию - дата точки актуальности.

Возвращает: тип: Дата. Дата конца периода расчета остатков.

Описание: позволяет получить дата конца периода расчета остатков.

ПолучитьНачПериода / GetBegOfPeriod

Синтаксис: ПолучитьНачПериода([ДатаИзПериода])

Параметры:

  • ДатаИзПериода - тип: Дата. Дата, от которой рассчитывается период. Необязателен, по умолчанию - дата точки актуальности.

Возвращает: тип: Дата. Дата начала периода расчета остатков.

Описание: позволяет получить дата начала периода расчета остатков.

ПолучитьКонПериодаДляРег / GetEndOfPeriodForReg

Синтаксис: ПолучитьКонПериодаДляРег(ОбРегистр, [ДатаИзПериода])

Параметры:

  • ОбРегистр - тип: Число, Строка. Номер или имя оборотного регистра.
  • ДатаИзПериода - тип: Дата. Дата, от которой рассчитывается период. Необязателен, по умолчанию - дата точки актуальности.

Возвращает: тип: Дата. Дата конца периода расчета оборотов.

Описание: позволяет получить дата конца периода расчета оборотов для оборотного регистра.

ПолучитьНачПериодаДляРег / GetBegOfPeriodForReg

Синтаксис: ПолучитьНачПериодаДляРег(ОбРегистр, [ДатаИзПериода])

Параметры:

  • ОбРегистр - тип: Число, Строка. Номер или имя оборотного регистра.
  • ДатаИзПериода - тип: Дата. Дата, от которой рассчитывается период. Необязателен, по умолчанию - дата точки актуальности.

Возвращает: тип: Дата. Дата начала периода расчета оборотов.

Описание: позволяет получить дата начала периода расчета оборотов для оборотного регистра.

ПолучитьСтрокуИзСЗ / GetStringInVL

Синтаксис: ПолучитьСтрокуИзСЗ(Список, [Режим])

Параметры:

  • Список - тип: СписокЗначений. Список элементов.
  • Режим - тип: Число. Параметр имеет смысл только для значений элементов документов, справочников и перечислений, содержащихся в списке. 1 - преобразовывать элементы списка в короткое представление (9 символов), 2 - преобразовывать в длинное представление (13 символов). Необязателен, по умолчанию 1.

Возвращает: тип: Строка. Список идентификаторов объектов данных в виде строки.

Описание: позволяет получить строку, состоящую из строковых представлений значений 1С, преобразованных во внутреннее представление и разделенных запятыми. В основном используется в SQL выражениях типа: [ NOT ] IN ( expression [ ,...n ] ). Значения, содержащиеся в списке, обязаны быть одного типа, тип проверяется по первому значению в списке.

ПолучитьСтрИзДаты / GetStrFromDate

Синтаксис: ПолучитьСтрИзДаты(ПреобразуемаяДата)

Параметры:

  • ПреобразуемаяДата - тип: Дата. Дата для преобразования.

Возвращает: тип: Строка. Дата в виде строки.

Описание: позволяет получить строковое представление даты в каноническом виде: "ГГГГММДД".

ПолучитьДобПериод / GetAddPeriod

Синтаксис: ПолучитьДобПериод(РасчетнаяДата, Количество, [Регистр])

Параметры:

  • РасчетнаяДата - тип: Дата. Дата начала отсчета периода;
  • Количество - тип: Число. Положительное значение - прибавляем период, отрицательное значение - отнимаем период;
  • Регистр - тип: Число, Строка. Имя или номер регистра. Необязателен, указывается только в случае расчета периода для конкретного оборотного регистра.

Возвращает: тип: Дата. Дата начала вычисленного периода.

Описание: Добавляет/вычитает период из указанной даты. Значение периода может быть получено как для регистров остатков в целом, так и для указанного оборотного регистра в отдельности.

ПолучитьДатуВремяИдДок / GetDateTimeIDDOC

Синтаксис: ПолучитьДатуВремяИдДок(ПозицияДокумента)

Параметры:

  • ПозицияДокумента - тип: Строка. Позиция документа в формате 1С (GetPosition()/ПолучитьПозицию() объекта Document/Документ).

Возвращает: тип: Строка. Позиция во внутреннем формате базы данных.

Описание: позволяет преобразовать позицию документа из внешнего формата во внутренний (как оня хранится в БД).

Примечание: в таком формате позиция хранится только в SQL формате БД.

ОбрМетаСКЛ / ProcessMetaSQL

Синтаксис: ОбрМетаСКЛ(ТекстЗапроса)

Параметры:

  • ТекстЗапроса - тип: Строка. Текст SQL запроса с метаименами.

Возвращает: тип: Строка. Текст запроса в котором метаимена преобразованы в код SQL.

Описание: метод осуществляет преобразование метаимен (cм. Приложение А) в SQL запросе в чистый SQL запрос.

УстановитьТекстовыйПараметр / SetTextParam

Синтаксис: УстановитьТекстовыйПараметр(ИмяПараметра, ЗначениеПараметра)

Параметры:

  • ИмяПараметра - тип: Строка. Имя текстового параметра.
  • ЗначениеПараметра - тип: Любой. Значение текстового параметра.

Описание: устанавливает текстовый параметр. Необходимо вызывать до передачи текста запроса.

ЗначениеВСамуюДлиннуюСтрокуБД / ValueToSuperLongDBString

Синтаксис: ЗначениеВСамуюДлиннуюСтрокуБД(Значение)

Параметры:

  • Значение - тип: Любой. Значение любого типа, который может хранится в базе.

Возвращает: тип: Строка. Внутреннее представление длиной 23 символа.

Описание: преобразует ссылочный тип данных 1С, а также простые типы во внутреннее представление системы, строку для хранения в реквизите типа Неопределенный.

ПрисоединитьМД / AttachMD

Синтаксис: ПрисоединитьМД(ПутьМД)

Параметры:

  • ПутьМД - тип: Строка. Путь к файлу 1cv7.md

Описание: позволяет загрузить метаданные из указанного файла. В дальнейшем получение всех внутренних идентификаторов объектов метаданных будет выполняться по подключенным метаданным.

SQLLock

Предназначен для получения новых идентификаторов, кодов справочников, номеров документов.

Для получения нового идентификатора достаточно перед методом НовыйИД / GetNewID установить тип объекта. Получение новых кодов справочника и номеров документов идет по всем правилам, учитывая метаданные, и значение префикса. Если тип кода справочника или номера документа - число, методами НовыйКод / GetNewCode и НовыйНомер / GetNewNumber возвращается строка, что и соответствует типу хранения в ИБ. В этом случае не учитывается значение установленного префикса. При первом вызове метода НовыйИД / GetNewID происходит обращение к информационной базе для определения последнего назначенного идентификатора, при этом устанавливается блокировка обновления на таблицу справочника или _1sjourn для документов, при следующих вызовах обращения к ИБ не происходит. Полученные идентификаторы допустимо использовать для образования новых объектов только внутри транзакции. Методы НовыйКод / GetNewCode и НовыйНомер / GetNewNumber работают аналогично.

В распределенных базах программист должен сам позаботиться о правилах миграции.

Для блокирования используется таймаут. В случае истечения таймаута возбуждается исключение со строкой ошибки "LockTimeoutExpired". Значение таймаута по умолчанию 5 секунд.

Если после получения кодов или номеров установить какое-нибудь свойство, от которого зависит номер или код, объект переходит в инициализированное состояние и следующий вызов GetNewCode или GetNewNumber повлечет обращение к базе данных.

Пример создания элементов справочника:

Процедура ВыполнитьЗапрос(Запрос,Текст = "")
        Перем Рез;
        Если ПустаяСтрока(Текст)=1 Тогда
                Рез=Запрос.Выполнить();
        Иначе
                Рез=Запрос.Выполнить(Текст);
        КонецЕсли;
        Если Рез=0 Тогда
                ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
                ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
        КонецЕсли;
КонецПроцедуры

Процедура ПодготовитьЗапрос(Запрос,Текст)
        Если Запрос.Подготовить(Текст)=0 Тогда
                ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
                ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
        КонецЕсли;
КонецПроцедуры

Процедура ДобавитьПараметр(Запрос,Тип,Длина,Точность)
        Если Запрос.ДобПараметр(1,Тип,Длина,Точность)=0 Тогда
                ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
                ВыполняемыйМодуль.СформироватьОшибку(Запрос.ПолучитьОписаниеОшибки());
        КонецЕсли;
КонецПроцедуры

Процедура СозданиеЭлементовПоНовому()
        СпрТовары=СоздатьОбъект("Справочник.Товары");
        Запрос=СоздатьОбъект("ODBCRecordset");
        БлокировкаТовары=СоздатьОбъект("SQLLock");
        БлокировкаТовары.УстановитьТипОбъекта("Справочник","Товары");
        БлокировкаТовары.УстановитьТаймаут(10);

        ФлагУдачи=0;
        Пока ФлагУдачи=0 Цикл
                Попытка
                        ВыполнитьЗапрос(Запрос,"begin tran");
                        ПодготовитьЗапрос(Запрос,"insert $Справочник.Товары values(?ID, '     0   ', ?Код, ?Наименование, 2, 0, 0, '')");
                        ДобавитьПараметр(Запрос, 14, 9, 0);
                        ДобавитьПараметр(Запрос, 14, 6, 0);
                        ДобавитьПараметр(Запрос, 14, 100, 0);
                        Для Тек=1 По 10 Цикл
                                Запрос.УстПараметр("ID",БлокировкаТовары.НовыйИД());
                                Запрос.УстПараметр("Код",БлокировкаТовары.НовыйКод());
                                Запрос.УстПараметр("Наименование","Сгенерированный в SQL транзакции "+Тек);
                                ВыполнитьЗапрос(Запрос);
                        КонецЦикла;
                        ВыполнитьЗапрос(Запрос,"if @@trancount > 0 commit tran");
                        ФлагУдачи=1;
                Исключение
                        Запрос.Выполнить("if @@trancount > 0 rollback tran");
                        Если ОписаниеОшибки()="LockTimeoutExpired" Тогда
                                Если Вопрос("Неудалось заблокировать справочник Товары.
                                        |Повторить попытку?","ОК+Отмена")="Отмена" Тогда
                                        ФлагУдачи=2;
                                КонецЕсли;
                        Иначе
                                ВызватьИсключение;
                        КонецЕсли;
                КонецПопытки;
        КонецЦикла;
КонецПроцедуры

Методы

УстановитьТипОбъекта / SetObjectType

Синтаксис: УстановитьТипОбъекта(Тип, Вид)

Параметры:

  • Тип - тип: Строка. Тип объекта, допустимые типы: "Справочник", "Документ";
  • Вид - тип: Строка. Вид объекта.

Описание: устанавливает тип объекта для получения идентификатора, кода справочника, номера документа.

УстановитьРодителя / SetParent

Синтаксис: УстановитьРодителя(Родитель)

Параметры:

  • Родитель - тип: Справочник. Группа справочника.

Описание: устанавливает родителя для получения нового кода справочника.

УстановитьВладельца / SetOwner

Синтаксис: УстановитьВладельца(Владелец)

Параметры:

  • Владелец - тип: Справочник. Элемент справочника-владельца.

Описание: устанавливает владельца для получения нового кода справочника.

УстановитьДатуНомера / SetDateNum

Синтаксис: УстановитьДатуНомера(ДатаПериода)

Параметры:

  • ДатаПериода - тип: Дата. Дата из периода номеров документа.

Описание: устанавливает дату для определения периода номеров.

УстановитьПрефикс / SetPrefix

Синтаксис: УстановитьПрефикс(Префикс)

Параметры:

  • Префикс - тип: Дата. строка префикс.

Описание: устанавливает префикс для получения новых кодов справочника или номеров документа. Имеет смысл только если код или номер текстовый.

НовыйИД / GetNewID

Синтаксис: НовыйИД()

Возвращает: тип: Строка. Новый идентификатор (строка 9 символов).

Описание: позволяет получить новый идентификатор объекта.

НовыйКод / GetNewCode

Синтаксис: НовыйКод()

Возвращает: тип: Число, Строка. Новый код справочника.

Описание: позволяет получить новый код справочника. В зависимости от настроек справочника в метаданных, может быть учтен владелец, родитель.

НовыйНомер / GetNewNumber

Синтаксис: НовыйКод()

Возвращает: тип: Число, Строка. Новый номер документа, следующий по порядку.

Описание: позволяет получить новый номер документа. В зависимости от настроек документа может быть учтена дата периода номеров.

УстановитьТаймаут / SetTimeout

Синтаксис: УстановитьТаймаут(Таймаут)

Параметры:

  • Таймаут - тип: Число. Таймаут в секундах.

Описание: устанавливает таймаут для установки блокировки.

Приложение А. Спецификация метаимен и параметров в запросах

Описание условных обозначений

Идентификаторы 1С, как они заданы в конфигураторе:

  • Константа - идентификатор константы;
  • Справочник - идентификатор справочника;
  • Документ - идентификатор документа;
  • ВидПеречисления - идентификатор вида перечисления;
  • Регистр - идентификатор регистра;
  • ЖурналДокументов - идентификатор журнала документов;
  • Последовательность - идентификатор последовательности документов;
  • ЖурналРасчетов - идентификатор журнала расчетов;
  • ГрафаОтбора - идентификатор графы отбора;
  • Реквизит - идентификатор реквизита справочника, регистра или журнала расчетов;
  • РеквизитШапки - идентификатор реквизита шапки документа;
  • РеквизитТабличнойЧасти - идентификатор реквизита табличной части документа;
  • Измерение - идентификатор измерения регистра;
  • Ресурс - идентификатор ресурса регистра;
  • ПериодическийРеквизит - идентификатор периодического реквизита;
  • ОбщийРеквизит - идентификатор общего реквизита;
  • ВидРасчета - идентификатор вида расчета;
  • ГрафаОтбораЖР - идентификатор графы отбора журнала расчетов;
  • Календарь - идентификатор календаря;

Специальные обозначения:

  • ХХХХ - внутренний идентификатор объекта метаданных (десятичное представление);
  • ZZZZ - внутренний идентификатор объекта метаданных (тридцатишестиричное представление);
  • Alias - псевдоним таблицы в SQL запросе;
  • ИмяПараметра - имя параметра.

Для обозначения начала метаимени в тексте запроса используется символ "$".

Для обозначения начала имени текстового параметра в тексте запроса используется символ ":".

Для обозначения начала имени SQL параметра в тексте запроса используется символ "?".

Метаимена транслируются только в теле запроса, т.е. не транслируются в комментариях, текстовых литералах. Метаимена также не транслируются в квадратных скобках [ … ] (расширенных идентификаторах).

Замечание! На текст запроса накладывается дополнительное ограничение: псевдонимы таблиц, имена которых транслируются из метаимен, не должны повторяться, иначе трансляция метаимени полей через псевдоним таблицы может быть неверной.

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

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

Формат типизирующего псевдонима:

[<ИмяПоля> $<Тип1С>]

ИмяПоля - имя, которое будет доступно для обращения к полю методами этого класса. Тип1С - строка, представляющая тип 1С, который будет назначен полю, в формате применяющемся в методе УстТипыКолонок1С.

Спецификация типизирующих имен

Типизирующее имя Допустимые SQL типы в наборе данных
Строка Любой
Дата Любой
Число Любой
{Справочник|Reference} char(13)
{Справочник|Reference}.<Справочник> char(9)
{Документ|Document}
  • Char(13);
  • Char(9) - Идентификатор объекта, кроме того, в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов документов. Тип колонки SQL: int, DBF: char(4).
{Документ|Document}.<Документ> char(9)
{ВидДокумента|DocumentKind}
  • int - вид документа SQL формат
  • char(4) - вид документа SQL формат (база 36)
{ВидДокументаПредставление|DocumentKindPresent}
  • int - вид документа SQL формат
  • char(4) - вид документа SQL формат (база 36)
{Перечисление|Enum} char(13)
{Перечисление|Enum}.<ВидПеречисления> char(9)
{Неопределенный|Undefine} char(23)
{ВидРасчета|CalculationKind}
  • int - идентификатор в журнале расчетов SQL формат;
  • char(4) - идентификатор в журнале расчетов DBF формат;
  • char(13) - в остальных таблицах, где вид расчета содержится как реквизит.
{Календарь|Calendar} char(13)
{Субконто|Subconto} char(13) - идентификатор значения субконто (с видом или без вида). Типизируется в значение субконто, кроме того в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов субконто. Тип колонки SQL: int, DBF: char(4). Типизация субконто простых типов (число, строка, дата) не поддерживается.
{Класс|Class}.<ТипКОП> Любой SQL тип. Создается объект типа ТипКОП. Значение поля будет преобразовано в значение которое может хранить 1С, и передано в процедуру КОП _SQLCreate().

Поддержка пользователей DBF формата ИБ.

Для пользователей DBF формата ИБ, рекомендуется использовать следующую строку подключения:

DRIVER = {Microsoft Visual FoxPro Driver};
Deleted = Yes; Null = Yes; Collate = RUSSIAN; Exclusive = No; SourceType = DBF;
SourceDB = <КаталогИБ>

В запросах допустимы комментарии типа -- и /* */, при DBF формате ИБ они будут вырезаны парсером перед передачей текста на драйвер. В запросах допустима типизация колонок набора данных по общим правилам.

Спецификация метаимен

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

  • таблица справочника:

    ${Справочник|Reference}.<Справочник> = scXXXX
    
  • таблица шапок документов:

    ${Документ|Document}.<Документ> = dhXXXX
    
  • таблица строк документов:

    ${ДокументСтроки|DocumentStrings}.<Документ> = dtXXXX
    
  • таблица движений регистра:

    ${Регистр|Register}.<Регистр> = raXXXX
    
  • таблица итогов (остатков/оборотов) регистра:

    ${РегистрИтоги|RegisterTotals}.<Регистр> = rgXXXX
    
  • таблица журнала расчетов:

    ${ЖурналРасчетов|CalcJournal}.<ЖурналРасчетов> = cjXXXX
    

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

  • имя поля таблицы справочника:

    ${Справочник|Reference}.<Справочник>.<Реквизит> = spХХХХ
    
  • имя поля таблицы шапок документов:

    ${Документ|Document}.<Документ>.<РеквизитШапки> = spХХХХ
    
  • имя поля таблицы строк документов:

    ${ДокументСтроки|DocumentStrings}.<Документ>.<РеквизитТабличнойЧасти> = spХХХХ
    
  • имя поля таблицы движений регистра:

    ${Регистр|Register}.<Регистр>.<Измерение | Ресурс | Реквизит> = spХХХХ
    
  • имя поля таблицы итогов (остатков/оборотов) регистра:

    ${РегистрИтоги|RegisterTotals}.<Регистр>.<Измерение | Ресурс> = spХХХХ
    
  • имя поля по псевдониму таблицы:

    $.<Реквизит | РеквизитШапки | РеквизитТабличнойЧасти | Измерение | Ресурс> = .spХХХХ
    
  • имя поля общего реквизита:

    ${ОбщийРеквизит|CommonProperty}.<ОбщийРеквизит> = spХХХХ
    
  • имя поля флага движений по регистру:

    ${ФлагРегистра|RegisterFlag}.<Регистр> = rfХХХХ
    
  • имя поля последовательности:

    ${Последовательность|Sequence}.<Последовательность> = dsХХХХ
    
  • имя поля реквизита журнала расчетов:

    ${ЖурналРасчетов|CalcJournal}.<ЖурналРасчетов>.<Реквизит> = spXXXX
    
  • имя поля графы отбора журнала расчетов:

    ${ГрафаЖурналаРасчетов|ColumnCalcJournal}.<ЖурналРасчетов>.<ГрафаОтбораЖР> = ffXXXX
    
  • имя поля реквизита проводки:

    ${Проводка|Entry}.<Реквизит> = spXXXX
    

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

  • идентификатор константы:

    ${Константа|Constant}.<Константа> = XXXX
    
  • идентификатор вида справочника:

    ${ВидСправочника|ReferenceKind}.<Справочник> = ХХХХ
    ${ВидСправочника36|ReferenceKind36}.<Справочник> = 'ZZZZ'
    
  • идентификатор вида документа, зависит от формата ИБ: SQL - литерал типа int; DBF - литерал типа char(4):

    ${ВидДокумента|DocumentKind}.<Документ> = {XXXX | 'ZZZZ'}
    ${ВидДокумента36|DocumentKind36}.<Документ> = 'ZZZZ'
    
  • идентификатор вида перечисления char(4):

    ${ВидПеречисления36|EnumKind36}.<ВидПеречисления> = 'ZZZZ'
    
  • идентификатор периодического реквизита:

    ${ИсторияРеквизита|PropertyHistory}.<Справочник>.<ПериодическийРеквизит> = ХХХХ
    
  • идентификатор журнала документов:

    ${ЖурналДокументов|DocsJournal}.<ЖурналДокументов> = ХХХХ
    
  • идентификатор графы отбора:

    ${ГрафаОтбора|SelectionColumn}.<ГрафыОтбора> = ХХХХ
    
  • идентификатор календаря:

    ${Календарь|Calendar}.<Календарь> = ХХХХ
    
  • идентификатор праздников:

    ${Праздники|Holidays} = ХХХХ
    
  • идентификатор журнала расчетов:

    ${ВидЖурналаРасчетов|CalcJournalKind}.<ЖурналРасчетов> = XXXX
    
  • идентификатор вида расчета, зависит от формата ИБ: SQL - литерал типа int; DBF - литерал типа char(4):

    ${ВидРасчета|Algorithm}.<ВидРасчета> = {XXXX | 'ZZZZ'}
    
  • идентификаторы пустых значений:

    ${ПустойИД|EmptyID} = '     0   '
    ${ПустойИД13|EmptyID13} = '   0     0   '
    
  • идентификатор значения перечисления:

    ${Перечисление|Enumeration}.<Перечисление>.<ЗначениеПеречисления> : char(9)
    ${Перечисление23|Enumeration23}.<Перечисление>.<ЗначениеПеречисления> : char(23)
    

Описание виртуальных таблиц

Виртуальные таблицы поддерживаются только для SQL формата ИБ.

Замечание! Порядок следования записей во всех виртуальных таблицах никак не определяется настоящей спецификацией, настоятельно рекомендуется не использовать существующий порядок записей, а всегда в запросе использовать предложение для упорядочивания (order by).

РегистрОстатки

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

Синтаксис:

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

Параметры:

  • ГраницаРасчета - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата или позиция документа), остатки рассчитываются на начало периода. Для того чтобы рассчитать остатки на конец периода, необходимо передавать момент времени. Для этого можно воспользоваться вторым модификатором типа Дата, что соответствует моменту времени конца этой даты. Для формирования моментов времени также можно воспользоваться позицией документа: процедурой СформироватьПозициюДокумента() синтаксис 1, указывая не нулевой ФлагСмещения; или СформироватьПозициюДокумента() синтаксис 2. Если граница расчета больше ТА, то будут получены остатки по ТА; По умолчанию остатки на точку актуальности.
  • Соединение - тип: конструкция типа join. На языке SQL можно описать дополнительные соединения с таблицами, которые могут быть необходимы для формирования условий в следующем параметре. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С. По умолчанию отсутствует.
  • Условие - тип: конструкция типа where. На языке SQL можно описать условие для ограничения выборки. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С, а также полями таблиц, соединения с которыми были описаны в предыдущем параметре. По умолчанию отсутствует.
  • Измерение - тип: конструкция типа список идентификаторов. Указывается список измерений, по которым нужно рассчитать остатки. По умолчанию по всем.
  • Ресурс - тип: конструкция типа список идентификаторов. Указывается список ресурсов, которые нужно рассчитать. По умолчанию по всем.

Поля:

  • <ИмяИзмерения> - имена измерений, указанных к расчету;
  • <ИмяРесурса>Остаток - имена ресурсов с добавлением слова Остаток, указанных к расчету.

Описание: Используется для получения остатков. Определена только для регистров остатков.

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

  • при получении остатков по ТА, используется только таблица итогов;
  • при получении остатков по дату конца периода сохранения остатков - используется только таблица итогов;
  • при получении остатков на дату начала периода сохранения остатков - используется только таблица итогов;
  • при получении остатков на дату начала или конца периода сохранения остатков, и расчет идет по всем измерениям - используется только таблица итогов без группирования (без предложения group by в запросе);
  • при получении остатков на или по дату, близкую к концу текущего периода - сохранения остатков, используются остатки на конец текущего периода и обороты от границы расчета до конца текущего периода (обратный расчет);
  • при получении остатков на или по дату в актуальном периоде сохранения остатков, близкую к дате ТА, используются актуальные остатки и обороты от границы расчета по ТА (обратный расчет).

Пример:

Имеем регистр:
Имя: Взаиморасчеты
Измерения: Фирма, Контрагент, Договор, РасчДокумент
Ресурсы: Сумма, НДС, НП, Себестоимость

Задача: рассчитать остатки по измерениям Контрагент, РасчДокумент в ресурсе Сумма, при условии, что вид контрагента - Поставщик, и только по фирмам, которые платят НДС.

Текст запроса для решения:

select
        ОстаткиПоРасчетам.Контрагент [Контрагент $Справочник.Контрагенты],
        ОстаткиПоРасчетам.РасчДокумент [РасчДокумент $Документ],
        ОстаткиПоРасчетам.СуммаОстаток
from $РегистрОстатки.Взаиморасчеты(:ДатаРасчета,
        inner join $Справочник.Контрагенты as СпрКонтрагенты (nolock) on СпрКонтрагенты.id = Контрагент
        inner join $Справочник.Фирмы as СпрФирмы (nolock) on СпрФирмы.id = Фирма,
        $СпрКонтрагенты.ВидКонтрагента = :ВидПоставщик and $СпрФирмы.ВидФирмы = :ВидПлатитНДС,
        (Контрагент, РасчДокумент), Сумма
) as ОстаткиПоРасчетам

РегистрОбороты

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

Синтаксис:

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

Параметры:

  • НачалоПериода - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. По умолчанию начало ведения учета.

  • КонецПериода - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата, позиция документа), он в расчет не включается. Для того, чтобы он включался в расчет, нужно воспользоваться модификатором, или предварительно сформировать момент времени (См. СформироватьПозициюДокумента()). По умолчанию точка актуальности.

  • Периодичность - тип: конструкция типа ключевое слово. Указывается дополнительный разворот итогов по периодичности. Задается один из следующих вариантов:

    • Период | Period - только за период (не разворачивать);
    • Документ | Document - разворачивать по документу;
    • День | Day - разворачивать по дням;
    • Неделя | Week - разворачивать по неделям;
    • Месяц | Month - разворачивать по месяцам;
    • Квартал | Quarter - разворачивать по кварталам;
    • Год | Year - разворачивать по годам.

    По умолчанию Период.

  • Соединение - тип: конструкция типа join. На языке SQL можно описать дополнительные соединения с таблицами, которые могут быть необходимы для формирования условий в следующем параметре. Можно оперировать полями измерений и реквизитов регистра, обращаясь к ним по идентификатору 1С. По умолчанию отсутствует.

  • Условие - тип: конструкция типа where. На языке SQL можно описать условие для ограничения выборки. Можно оперировать полями измерений и реквизитов регистра, обращаясь к ним по идентификатору 1С, а также полями таблиц, соединения с которыми были описаны в предыдущем параметре. По умолчанию отсутствует.

  • Измерение - тип: конструкция типа список идентификаторов. Указывается список измерений, по которым нужно рассчитать обороты. По умолчанию по всем.

  • Ресурс - тип: конструкция типа список идентификаторов. Указывается список ресурсов, которые нужно рассчитать. По умолчанию по всем.

Поля:

  • <ИмяИзмерения> - имена измерений указанных к расчету; тип определяется типом измерения регистра;
  • <ИмяРесурса>Приход - имена ресурсов с добавлением слова Приход, указанных к расчету; тип определяется типом ресурса регистра; существует только для регистра остатков;
  • <ИмяРесурса>Расход - имена ресурсов с добавлением слова Расход, указанных к расчету; тип определяется типом ресурса регистра; существует только для регистра остатков;
  • <ИмяРесурса>Оборот - имена ресурсов с добавлением слова Оборот, указанных к расчету; тип определяется типом ресурса регистра; существует только для регистра оборотов;
  • Период - тип datetime; дата начала периода, по которому происходит разворот оборотов; существует только в том случае, если указана периодичность День, Неделя, Месяц, Квартал, Год;
  • ПозицияДокумента - тип char(23); строка в формате date_time_iddoc (8+6+9); существует только в том случае, если указана периодичность Документ;
  • ВидДокумента - тип int; идентификатор вида документа; существует только в том случае, если указана периодичность Документ.

Описание: Используется для получения оборотов.

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

  • существует только для оборотного регистра;
  • при получении оборотов за период, в который входят один или несколько периодов сохранения оборотов - используется таблица итогов;
  • если период получения оборотов состоит только из периодов сохранения оборотов - используется только таблица итогов;
  • если заданная периодичность расчета позволяет использовать таблицу итоговм - она используется;
  • если в соединении или условии были использованы реквизиты регистра - оптимизация невозможна.

РегистрОстаткиОбороты

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

Синтаксис:

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

Параметры:

  • НачалоПериода - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. По умолчанию начало ведения учета.

  • КонецПериода - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата, позиция документа), он в расчет не включается. Для того чтобы он включался в расчет нужно воспользоваться модификатором, или предварительно сформировать момент времени (См. СформироватьПозициюДокумента()). По умолчанию точка актуальности.

  • Периодичность - тип: конструкция типа ключевое слово. Указывается дополнительный разворот итогов по периодичности. Задается один из следующих вариантов:

    • Период | Period - только за период (не разворачивать);
    • Документ | Document - разворачивать по документу;
    • День | Day - разворачивать по дням;
    • Неделя | Week - разворачивать по неделям;
    • Месяц | Month - разворачивать по месяцам;
    • Квартал | Quarter - разворачивать по кварталам;
    • Год | Year - разворачивать по годам.

    По умолчанию Период.

  • МетодДополнения - тип: конструкция типа ключевое слово. Имеет смысл, только когда используется разворот по периодам. Задается один из следующих вариантов:

    • Движения (Actions) - в таблицу включаются обороты по каждому периоду движений, и текущие остатки только по тем комбинациям измерений, по которым были движения в период расчета;
    • ДвиженияИГраницыПериода (ActionsAndPeriodBoundaries) - в таблицу включаются обороты по каждому периоду движений и текущие остатки; также таблица дополняется записями о ненулевых остатках на начало и/или конец на границы периода расчета.
  • Соединение - тип: конструкция типа join. На языке SQL можно описать дополнительные соединения с таблицами, которые могут быть необходимы для формирования условий в следующем параметре. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С. По умолчанию отсутствует.

  • Условие - тип: конструкция типа where. На языке SQL можно описать условие для ограничения выборки. Можно оперировать полями измерений регистра, обращаясь к ним по идентификатору 1С, а также полями таблиц, соединения с которыми были описаны в предыдущем параметре. По умолчанию отсутствует.

  • Измерение - тип: конструкция типа список идентификаторов. Указывается список измерений, по которым нужно рассчитать остатки и обороты. По умолчанию по всем.

  • Ресурс - тип: конструкция типа список идентификаторов. Указывается список ресурсов, которые нужно рассчитать. По умолчанию по всем.

Поля:

  • <ИмяИзмерения> - имена измерений указанных к расчету; тип определяется типом измерения регистра;
  • <ИмяРесурса>НачальныйОстаток - имена ресурсов с добавлением слова НачальныйОстаток, указанных к расчету; тип определяется типом ресурса регистра;
  • <ИмяРесурса>Приход - имена ресурсов с добавлением слова Приход, указанных к расчету; тип определяется типом ресурса регистра;
  • <ИмяРесурса>Расход - имена ресурсов с добавлением слова Расход, указанных к расчету; тип определяется типом ресурса регистра;
  • <ИмяРесурса>КонечныйОстаток - имена ресурсов с добавлением слова НачальныйОстаток, указанных к расчету; тип определяется типом ресурса регистра;
  • Период - тип datetime; дата начала периода, по которому происходит разворот оборотов; существует только в том случае, если указана периодичность День, Неделя, Месяц, Квартал, Год;
  • ПозицияДокумента - тип char(23); строка в формате date_time_iddoc (8+6+9); существует только в том случае, если указана периодичность Документ;
  • ВидДокумента - тип int; идентификатор вида документа; существует только в том случае, если указана периодичность Документ.

Описание: Используется для получения остатков и оборотов. Определена только для регистра остатков.

Оптимизация расчета:
  • по таблицам итогов и движений рассчитывается всегда только один из остатков, другой вычисляется из оборотов при агрегировании;
  • рассчитывается тот остаток (начальный/конечный), который получить легче, исходя из оптимизации расчета остатков, См. выше описание виртуальной таблицы остатков;

Описание виртуальных значений

Виртуальные значения поддерживаются только для SQL формата ИБ.

ПоследнееЗначение

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

Синтаксис:

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

Параметры:

  • ИдОбъекта - тип: конструкция типа выражение MS T-SQL; внутренний идентификатор элемента справочника, или 0 для константы;
  • Дата - тип: конструкция типа выражение MS T-SQL; дата, на которую нужно получить последнее значение;
  • Время - тип: конструкция типа выражение MS T-SQL; время, на которое нужно получить последнее значение;
  • ИДДокумента - тип: конструкция типа выражение MS T-SQL; идентификатор документа, на позицию которого нужно получить последнее значение.

Описание: позволяет получить последнее значение на указанную дату.

НачалоПериода

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

Синтаксис:

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

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

  • День | Day;
  • Неделя | Week;
  • Месяц | Month;
  • Квартал | Quarter;
  • Год | Year.

Параметры:

  • ИсходнаяДата - тип: конструкция типа выражение MS T-SQL; дата по которой определять период;

  • ТипПредставления - тип: конструкция типа ключевое слово; представление даты в первом параметре:

    • Строка - char(8);
    • Дата - datetime.

    По умолчанию Строка.

Описание: позволяет получить значение типа datetime, соответствующее началу периода <Период>.

Спецификация параметров

Текстовые параметры

Текстовые параметры преобразуются в литералы (константы MS SQL). Текстовые параметры могут повторяться в тексте запроса (т.е. будет использовано одно и то же значение), причем они могут быть использованы в разных местах запроса с разными модификаторами типа.

Синтаксис:

:<ИмяПараметра> [<Модификатор>]

<Модификатор> В общем случае тип значения параметра определяется типом значения 1С, переданного при установке параметра, и в общем же случае этого недостаточно, поэтому существует возможность указать модификатор типа 1С. Для краткости: модификатор.

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

В тексте запроса модификаторы обозначаются символами "~" или "*" после имени параметра. Количество символов "~" после имени параметра определяет номер модификатора. Если после имени параметра не указан модификатор, то номер модификатора равен 0. Так как типом "Неопределенный" (char(23)) можно выразить любой тип 1С, для этого существует специальный модификатор, обозначаемый символом "*", который определен для любого передаваемого типа 1С. Его номер 20.

Модификаторы определены для следующих типов 1С:

Строка:

  • 0: char() - строка как есть;
  • 1: char(23) - должна быть передана позиция документа, из которой будет сформирована строка в формате date_time_iddoc.

Дата:

  • 0: char(8) - каноническое представление даты;
  • 1: char(9) - каноническое представление даты + символ "Z" (используется для обозначения момента времени конца этой даты);
  • 2: datetime.

Агрегатные типы (Перечисление, Справочник, Документ, Счет):

  • 0: char(9) - внутренний идентификатор объекта (короткая строка 6+3);
  • 1: char(13) - внутренний идентификатор объекта с видом (длинная строка 4+6+3);
  • 2: char(15) - внутренний идентификатор объекта с видом и типом (2+4+6+3) (на самом деле такой тип нигде в 1С не используется, модификатор существует исключительно для обратной совместимости).

ВидРасчета: кроме 0 и 1, которые работают как для всех агрегатных типов, 2-й определен особо:

  • 2: Зависит от формата ИБ. SQL: int - идентификатор вида расчета; DBF: char(4) - 36-й идентификатор вида расчета.

ВидСубконто: кроме 0 и 1, которые работают как для всех агрегатных типов, 2-й определен особо:

  • 2: Зависит от формата ИБ. SQL: int - идентификатор вида субконто; DBF: char(4) - 36-й идентификатор вида расчета.

Справочник, Документ, Счет

  • 3: Зависит от формата ИБ. SQL: int - идентификатор вида объекта; DBF: char(4) - 36-й идентификатор вида объекта.

Документ

  • 4: Позиция переданного объекта в формате date_time_iddoc.

Примеры.

Передано значение типа Число:

:ФлагУчастияВРасчетах   = 1
:ФлагУчастияВРасчетах * = 'N                     1'

Передано значение типа Дата:

:ДатаНачала = '20030613'
:ДатаКонца ~ = '20030613Z'
:ДатаКонца ~~ = {d '2003-06-13'}

Передано значение типа Справочник.Контрагенты:

:Контрагент   = '    H6   '
:Контрагент ~ = '  1W    H6   '
:Контрагент * = 'B1  1W    H6           '

SQL параметры

SQL параметры это параметры для параметризированного запроса. В тексте запроса обозначаются символом "?" (символ подстановки). См. также: Подготовить / Prepare, ДобПараметр / AddParam, УстПараметр / SetParam.

Generated on: 2008-12-17 23:10 UTC. Generated by Docutils from reStructuredText source.