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
open8.3.15-21-+ В ВИДах не поддерживается запись значения Неопределено в необъектные таблицы для строковых и булевых колонок, а для числовых и дат - поддерживается
0%
Description
- Создать в 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-поля записи (набора записей), если в метаданных это поле имеет тип "Число" или "Дата". При любой другом типе получаем ошибку СУБД.
Что ожидаю:- Платформа не должна передавать в СУБД синтаксически некорректные инструкции-запросы
- Что-то одно на выбор (в порядке убывания желаемости):
- Для nullable-колонок платформа должна трактовать Неопределено (неуказанное значение) как NULL независимо от заданного в метаданных конфигурации типа данных этой колонки.
либо - Сделать поведение аналогично объектным таблицам ВИДа - где платформа уже сейчас выдает осмысленную платформенную ошибку о том, что поле не может принимать значение "Неопределено" - и распространить такое поведение на nullable-колонки любого типа (для необъектных таблиц ВИДов).
Files