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...":https://support.plan.io/news/187

Bug #947821

open

8.3.15-21-+ В ВИДах не поддерживается запись значения Неопределено в необъектные таблицы для строковых и булевых колонок, а для числовых и дат - поддерживается

Added by Max im 8 months ago. Updated 6 months ago.

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

0%

Estimated time:

Description

Способ воспроизведения:
  1. Создать в MSSQL таблицу хотя бы из двух колонок, одной из колонок назначить тип "булево" (bit).
    USE [Test_1C_DWH]
    GO
    
    /****** Object:  Table [dbo].[Test_Nullable_bit]    Script Date: 25-07-2022 16:48:31 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE [dbo].[Test_Nullable_bit](
        [id] [int] NOT NULL,
        [isFull] [bit] NULL
    ) ON [PRIMARY]
    GO
    

2. Подключить эту таблицу как необъектную таблицу ВИД (файл конфигурации во вложении):

.

3. В режиме предприятия в форме списка нажать "Создать" и в открывшейся форме нажать "Записать и закрыть". Получим ошибку:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 102
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '<'.

4. В форме списка нажать кнопку "*Команда1*". Выполнится код:


    ВИД = ВнешниеИсточникиДанных.ТестовыйВИД;
    ТаблицаВИД = ВИД.Таблицы.dbo_Test_Nullable_bit;

    НЗ = ТаблицаВИД.СоздатьНаборЗаписей();
    НЗ.Отбор.id.Установить(1);

    ЗаписьВИД = НЗ.Добавить();
    ЗаписьВИД.id = НЗ.Отбор.id.Значение;

    НЗ.Записать();


и получим ту же самую ошибку.

Ошибка возникает из-за того, что платформа посылает в СУБД следующий запрос (взято из профайлера SQL):

INSERT INTO "dbo"."Test_Nullable_bit"  (id,isFull) VALUES(1,<Bad type>)

Стоит отметить, что ошибка для nullable-колонок возникает только если в метаданных конфигурации эти колонки имеют тип "Булево" или "Строка".
Если же колонки имеют тип "Число" или "Дата", то платформа успешно выполняет запись в БД (в БД записывается значение NULL):

INSERT INTO "dbo"."Test_Nullable_bit"  (id,isFull) VALUES(1,NULL) 

В этом можно убедиться, сменив в метаданных конфигурации тип колонки isFull с Булево на Число или Дата и повторить шаг 3 или 4.

Итого: сейчас можно в коде / на форме не заполнять nullable-поля записи (набора записей), если в метаданных это поле имеет тип "Число" или "Дата". При любой другом типе получаем ошибку СУБД.

Что ожидаю:
  1. Платформа не должна передавать в СУБД синтаксически некорректные инструкции-запросы
  2. Что-то одно на выбор (в порядке убывания желаемости):
    • Для nullable-колонок платформа должна трактовать Неопределено (неуказанное значение) как NULL независимо от заданного в метаданных конфигурации типа данных этой колонки.
      либо
    • Сделать поведение аналогично объектным таблицам ВИДа - где платформа уже сейчас выдает осмысленную платформенную ошибку о том, что поле не может принимать значение "Неопределено" - и распространить такое поведение на nullable-колонки любого типа (для необъектных таблиц ВИДов).

Files

Untitled.png (31.3 KB) Untitled.png Max im, 2022-07-25 03:53 PM
dbo_Test_Nullable_bit.cf (76.8 KB) dbo_Test_Nullable_bit.cf Max im, 2022-07-25 04:21 PM
clipboard-202208170005-i0ayx.png (63.2 KB) clipboard-202208170005-i0ayx.png Сергей Старых, 2022-08-16 11:05 PM
dbo_Test_Nullable_bit_correct.cf (76.8 KB) dbo_Test_Nullable_bit_correct.cf Max im, 2022-08-17 08:18 AM

Also available in: Atom PDF