HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. Read more...
Bug #943838
Updated by Сергей Старых over 1 year ago
https://bugboard.v8.1c.ru/error/000123706
*Дано*
Платформа: 8.3.17.1851 (64б)
Режим совместимости: 8.3.17
MSSQL: 2014 (14.0.3401.7)
*Сценарий воспроизведения*
Создать во внешней БД таблицу, колонка-ключ которой (id) может принимать отрицательные значения.
Мышкой в SSMS это можно сделать, указав начальное значение для такой колонки:
!1.png!
То же самое можно сделать и через скрипт (в первой строке указываем имя целевой БД):
<pre><code class="sql">
USE [Test_1C_DWH]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [Test_Negative_id](
[id] [int] IDENTITY(-1000,1) NOT NULL,
[Name] [nvarchar](100) NOT NULL
CONSTRAINT [PK_Test_Negative_id] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
</code></pre>
Этот код создаст в БД таблицу с именем "Test_Negative_id" с двумя колонками - "айди" и "Наименование". Колонка "айди" будет выступать первичным самовозрастающим ключом и заполняться для каждой новой записи автоматически.
Это синтаксис для MSSQL 14, для последующих версий состав параметров функции IDENTITY, кажется, был изменен, но помните, что главное в ее параметре seed указать отрицательное число (чтобы записи, которые мы в эту таблицу будем далее добавлять, получали отрицательные айдишники).
Далее добавляем объектную таблицу в метаданные ВИДа (внешнего источника данных в конфигурации базы 1С), не забывая колонке "айди" установить флажок "Только чтение":
!2.png!
После этого в режиме предприятие добавляем в таблицу новую запись:
!3.png!
Видим, что добавленная запись получила айдишник со значением -1000:
!4.png!
На этом подготовка к воспроизведению заканчивается.
*Проблема*
Невозможно отредактировать любую уже существующую запись объектной таблицы ВИДа, поле ключа которой содержит отрицательное число: ни интерактивно, ни программно. Запись всегда заканчивается ошибкой:
!5.png!
<pre>
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42S22
Номер ошибки: 207
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '_id'.
</pre>
В СУБД от сервера 1С приходит такой запрос:
<pre><code class="sql">
INSERT INTO #tt1 WITH(TABLOCK) (RS_FIELD) SELECT T1."_id" FROM Test_Negative_id T1 WHERE T1.id = -1000
</code></pre> В котором видно, что в секции SELECT имя колонки неверное - в него добавляется нижнее подчеркивание.
*Способ обхода*
Не указывать в метаданных таблицы ВИДа в качестве ключа числовое поле, которое может принимать отрицательные значения. Например, если в нашем примере полем ключа указать колонку "Наименование", то ошибки уже не будет.
*Дополнительная информация*
Похожий баг: https://bugboard.v8.1c.ru/error/000052413
Возможно, проблема исправлена в более свежих релизах платформы. Проверю и отпишусь дополнительно (если никто не сделает это раньше).