Project

Profile

Help

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

open

8.3.17-20-+ Ошибка записи в объектную таблицу ВИДа с отрицательными идентификаторами

Added by Max im over 2 years ago. Updated over 2 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

https://bugboard.v8.1c.ru/error/000123706

Дано
Платформа: 8.3.17.1851 (64б)
Режим совместимости: 8.3.17
MSSQL: 2014 (14.0.3401.7)

Сценарий воспроизведения
Создать во внешней БД таблицу, колонка-ключ которой (id) может принимать отрицательные значения.
Мышкой в SSMS это можно сделать, указав начальное значение для такой колонки:

То же самое можно сделать и через скрипт (в первой строке указываем имя целевой БД):

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

Этот код создаст в БД таблицу с именем "Test_Negative_id" с двумя колонками - "айди" и "Наименование". Колонка "айди" будет выступать первичным самовозрастающим ключом и заполняться для каждой новой записи автоматически.
Это синтаксис для MSSQL 14, для последующих версий состав параметров функции IDENTITY, кажется, был изменен, но помните, что главное в ее параметре seed указать отрицательное число (чтобы записи, которые мы в эту таблицу будем далее добавлять, получали отрицательные айдишники).

Далее добавляем объектную таблицу в метаданные ВИДа (внешнего источника данных в конфигурации базы 1С), не забывая колонке "айди" установить флажок "Только чтение":

После этого в режиме предприятие добавляем в таблицу новую запись:

Видим, что добавленная запись получила айдишник со значением -1000:

На этом подготовка к воспроизведению заканчивается.

Проблема
Невозможно отредактировать любую уже существующую запись объектной таблицы ВИДа, поле ключа которой содержит отрицательное число: ни интерактивно, ни программно. Запись всегда заканчивается ошибкой:

Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42S22
Номер ошибки: 207
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '_id'.

В СУБД от сервера 1С приходит такой запрос:

INSERT INTO #tt1 WITH(TABLOCK) (RS_FIELD) SELECT T1."_id" FROM Test_Negative_id T1  WHERE T1.id = -1000
В котором видно, что в секции SELECT имя колонки неверное - в него добавляется нижнее подчеркивание.

Способ обхода
Не указывать в метаданных таблицы ВИДа в качестве ключа числовое поле, которое может принимать отрицательные значения. Например, если в нашем примере полем ключа указать колонку "Наименование", то ошибки уже не будет.

Дополнительная информация
Похожий баг: https://bugboard.v8.1c.ru/error/000052413
Возможно, проблема исправлена в более свежих релизах платформы. Проверю и отпишусь дополнительно (если никто не сделает это раньше).


Files

1.png (25.1 KB) 1.png Max im, 2022-04-06 09:32 PM
2.png (88.9 KB) 2.png Max im, 2022-04-06 09:39 PM
3.png (18.6 KB) 3.png Max im, 2022-04-06 09:42 PM
4.png (18.2 KB) 4.png Max im, 2022-04-06 09:43 PM
5.png (17.4 KB) 5.png Max im, 2022-04-06 09:48 PM
Actions #1

Updated by Max im over 2 years ago

Проверил в 8.3.20.1789 (совместимость также поднял до максимально возможной, т.е. 8.3.20) - ошибка сохраняется.

Actions #2

Updated by Сергей Старых over 2 years ago

Отправил в 1С

Actions #3

Updated by Сергей Старых over 2 years ago

  • Subject changed from Ошибка записи в объектную таблицу ВИДа с отрицательными идентификаторами to 8.3.17-20-+ Ошибка записи в объектную таблицу ВИДа с отрицательными идентификаторами
Actions #4

Updated by Сергей Старых over 2 years ago

  • Description updated (diff)

Also available in: Atom PDF