From fbf49479f2dc479416c65b7850024715320adb6b Mon Sep 17 00:00:00 2001 From: Anton Titovets Date: Tue, 15 Jul 2025 10:36:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8=20=D0=A1=D0=A3=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/md/Instructions/MSSQL.md | 30 ++++++++++++++++++++++++++ docs/en/md/Instructions/MySQL.md | 2 ++ docs/en/md/Instructions/PostgreSQL.md | 4 ++++ docs/ru/md/Instructions/MSSQL.md | 29 +++++++++++++++++++++++++ docs/ru/md/Instructions/MySQL.md | 5 ++++- docs/ru/md/Instructions/PostgreSQL.md | 4 ++++ service/templates/Report.xlsx | Bin 10556 -> 10506 bytes 7 files changed, 73 insertions(+), 1 deletion(-) diff --git a/docs/en/md/Instructions/MSSQL.md b/docs/en/md/Instructions/MSSQL.md index 5d3ebc7ff0..0b47b7512f 100644 --- a/docs/en/md/Instructions/MSSQL.md +++ b/docs/en/md/Instructions/MSSQL.md @@ -30,6 +30,36 @@ This library has two parts: basic methods, like connecting and executing SQL que By default, all SELECT queries return an array of selected data, while other queries return only `true` in the `result` field on success, or `false` and error text in the `result` and `error` fields, respectively. To execute queries that require data to be returned but are not SELECT queries, the `ExecuteSQLQuery()` function has a `ForceResult` parameter +## Query parameters + +The MSSQL connector supports the use of positional parameters. All values passed both when executing queries directly through the `ExecuteRequestSQL()` function and in ORM methods with value setting, such as `AddRecords` and `UpdateRecords`, must be a structure of the form `{'Data Type': 'Value'}`. The following data types are supported\*: + +> \* The MSSQL type list lists only a few suitable types + + | Имя типа (ключ структуры) | Тип значения 1С | Подходит для типов MSSQL | + |-|-|-| + | TINYINT | Number | tinyint | + | SMALLINT | Number | smallint | + | INT | Number | int | + | BIGINT | Number | bigint | + | FLOAT24 | Number | float(24), real | + | FLOAT53 | Number | float(53) | + | NUMERIC | Number | decimal, numeric | + | DECIMAL | Number | decimal, numeric | + | BIT | Bool | bit | + | NVARCHAR | String | nvarchar, varchar, nchar, char, ntext, text | + | UUID | String, UUID | uniqueidentifier | + | XML | String | xml | + | DATE | Date, String | date | + | TIME | Date, String | time | + | DATETIME | Date, String | datetime, datetime2 | + | DATETIMEOFFSET | Date, String | datetimeoffset | + | BYTES | BinaryData | varbinary | + +## Retrieving Binary Data + +Binary data retrieved from the database will be represented as an object (structure) of the form `{"BYTES": "Base64 string"}` and must be manually converted from Base64 + ## TLS The library supports operation in TLS mode. To enable it, you need to configure TLS settings using the `GetTlsSettings` function and pass them as the corresponding parameter to the `CreateConnection` function or one of the ORM functions that support this parameter. If the TLS parameter is not provided when calling these functions, the connection will be initialized in an unsecured mode. diff --git a/docs/en/md/Instructions/MySQL.md b/docs/en/md/Instructions/MySQL.md index d450f3e0c5..b119123298 100644 --- a/docs/en/md/Instructions/MySQL.md +++ b/docs/en/md/Instructions/MySQL.md @@ -47,7 +47,9 @@ The MySQL connector supports the use of positional parameters. All values passed | TIME | Дата, String (RFC 3339) | TIME | | TEXT | String | CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, SET | +## Retrieving Binary Data +Binary data retrieved from the database will be represented as an object (structure) of the form `{"BYTES": "Base64 string"}` and must be manually converted from Base64 ## TLS diff --git a/docs/en/md/Instructions/PostgreSQL.md b/docs/en/md/Instructions/PostgreSQL.md index 878e157481..f1aa285796 100644 --- a/docs/en/md/Instructions/PostgreSQL.md +++ b/docs/en/md/Instructions/PostgreSQL.md @@ -72,6 +72,10 @@ The PostgreSQL connector supports the use of positional parameters. All values p A similar list of types is also available to retrieve as query results from PostgreSQL +## Retrieving Binary Data + +Binary data retrieved from the database will be represented as an object (structure) of the form `{"BYTES": "Base64 string"}` and must be manually converted from Base64 + ## TLS The library supports operation in TLS mode. To enable it, you need to configure TLS settings using the `GetTlsSettings` function and pass them as the corresponding parameter to the `CreateConnection` function or one of the ORM functions that support this parameter. If the TLS parameter is not provided when calling these functions, the connection will be initialized in an unsecured mode. diff --git a/docs/ru/md/Instructions/MSSQL.md b/docs/ru/md/Instructions/MSSQL.md index 6343577780..eaa55eeeea 100644 --- a/docs/ru/md/Instructions/MSSQL.md +++ b/docs/ru/md/Instructions/MSSQL.md @@ -31,6 +31,35 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, По умолчанию, все запросы SELECT возвращают массив выбранных данных, а остальные запросы - только `true` в поле `result` при успехе, либо `false` и текст ошибки в полях `result` и `error` соответственно. Для выполнения запросов, требующих возврата данных, но не являющихся запросами SELECT, в функции `ВыполнитьЗапросSQL()` есть параметр `ФорсироватьРезультат` +## Параметры запросов + +Коннектор MSSQL поддерживает использование позиционных параметров. Все значения, передаваемые как при прямом выполнении запросов через функцию `ВыполнитьЗапросSQL()`, так и в ORM методах с установкой значений, вроде `ДобавитьЗаписи` и `ОбновитьЗаписи`, должный представлять из себя структуру вида `{'Тип данных': 'Значение'}`. Поддерживаются следующие типы данных\*: + +> \* В перечне типов MSSQL перечислены только некоторые подходящие типы + + | Имя типа (ключ структуры) | Тип значения 1С | Подходит для типов MSSQL | + |-|-|-| + | TINYINT | Число | tinyint | + | SMALLINT | Число | smallint | + | INT | Число | int | + | BIGINT | Число | bigint | + | FLOAT24 | Число | float(24), real | + | FLOAT53 | Число | float(53) | + | NUMERIC | Число | decimal, numeric | + | DECIMAL | Число | decimal, numeric | + | BIT | Булево | bit | + | NVARCHAR | Строка | nvarchar, varchar, nchar, char, ntext, text | + | UUID | Строка, УникальныйИдентификатор | uniqueidentifier | + | XML | Строка | xml | + | DATE | Дата, Строка | date | + | TIME | Дата, Строка | time | + | DATETIME | Дата, Строка | datetime, datetime2 | + | DATETIMEOFFSET | Дата, Строка | datetimeoffset | + | BYTES | ДвоичныеДанные | varbinary | + +## Получение двоичных данных + +Двоичные данные при получении из БД будут представленны как объект (структура) вида `{"BYTES": "Base64 строка"}` и должны быть преобразованы из Base64 вручную ## TLS diff --git a/docs/ru/md/Instructions/MySQL.md b/docs/ru/md/Instructions/MySQL.md index 2ac66525ae..59f5c98faf 100644 --- a/docs/ru/md/Instructions/MySQL.md +++ b/docs/ru/md/Instructions/MySQL.md @@ -37,7 +37,7 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, > \* В перечне типов MySQL перечислены только некоторые подходящие типы - | Имя типа (ключ) | Тип значения 1С | Подходит для типов MySQL | + | Имя типа (ключ структуры) | Тип значения 1С | Подходит для типов MySQL | |-|-|-| | BYTES | Строка (путь к файлу), ДвоичныеДанные| TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | | UINT | Число (целое, без знака) | TINYINT UNSIGNED, SMALLINT UNSIGNED, MEDIUMINT UNSIGNED, INT UNSIGNED, BIGINT UNSIGNED | @@ -48,6 +48,9 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, | TIME | Дата, Строка (дата в формате RFC 3339) | TIME | | TEXT | Строка | CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, SET | +## Получение двоичных данных + +Двоичные данные при получении из БД будут представленны как объект (структура) вида `{"BYTES": "Base64 строка"}` и должны быть преобразованы из Base64 вручную ## TLS diff --git a/docs/ru/md/Instructions/PostgreSQL.md b/docs/ru/md/Instructions/PostgreSQL.md index 07bd9d9df4..875df9e172 100644 --- a/docs/ru/md/Instructions/PostgreSQL.md +++ b/docs/ru/md/Instructions/PostgreSQL.md @@ -73,6 +73,10 @@ keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, Аналогичный список типов доступен и для получения в качестве результатов запросов из PostgreSQL +## Получение двоичных данных + +Двоичные данные при получении из БД будут представленны как объект (структура) вида `{"BYTES": "Base64 строка"}` и должны быть преобразованы из Base64 вручную + ## TLS Библиотека поддерживает работу в режиме TLS. Для его включения необходимо сформировать настройки TLS при помощи функции `ПолучитьНастройкиTls`, и передать их как соответствующий параметр в функцию `ОткрытьСоединение` или одну из функций ORM, поддерживающих данный параметр. Если параметр TLS при вызове этих функций не передан, соединение инициализируется в незащищенном режиме diff --git a/service/templates/Report.xlsx b/service/templates/Report.xlsx index ef6bd5dd6100890c8d51a4516dec778bc107a569..9ebd5d0dae28e4d9085a09965555e08c09845b5e 100644 GIT binary patch delta 6222 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 delta 6204 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