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 #947821

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

Added by Max im 24 days ago. Updated about 22 hours 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-колонки любого типа (для необъектных таблиц ВИДов).
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
250
250

History

#1 Updated by Max im 24 days ago

Только что проверил на 8.3.21.1393: ошибка там по-прежнему есть.

#2 Updated by Сергей Старых 24 days ago

Отправил в 1С. Старайся в содержании указывать версию платформы.

#3 Updated by Max im 22 days ago

На всякий случай: 8.3.15.1830, 8.3.17.1851, 8.3.21.1393. И в заголовке 8.3.20 на 8.3.21 исправь пож-та :)

#4 Updated by Сергей Старых 22 days ago

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

#5 Updated by Сергей Старых 1 day ago

250

Получен ответ из 1С:
На 8.3.21.1393 не воспроизвелось. Команда1 тоже сработала без ошибок. Использовал MS SQL 2014 в качестве внешнего источника данных.

#6 Updated by Max im about 22 hours ago

В приложенной мною конфигурации тип колонки "isFull" в метаданных - Число. Видимо, таким он остался от моих последующих экспериментов, а я не обратил на это внимания.

Нужно изменить тип на Булево. Прикладываю правильный файл конфигурации для воспроизведения.

Also available in: Atom PDF