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

8.3.15-20-+ В ВИДах не поддерживаются таблицы с колонками со служебными именами "allowed" / "distinct" / "top" (и, вероятно, какими-то еще)

Added by Max im about 1 month ago. Updated 29 days ago.

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

0%

Estimated time:

Description

https://bugboard.v8.1c.ru/error/000124959
Платформы: 8.3.15, 8.3.17, 8.3.20.

Дано: внешняя БД (MSSQL) с таблицей, одна из колонок которой имеет имя "allowed".

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

Ошибка при выполнении запроса.
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка" 
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(3, 60)}: Ожидается имя
ВнешнийИсточникДанныхDWHТаблицаdbo_Test_Table.allowed КАК <<?>>allowed_

При попытке добавить запись (интерактивно или программно) в объектную таблицу ВИДа при записи будет ошибка 2:

Ошибка при вызове метода контекста (Записать): Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 23000
Номер ошибки: 544
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 23000
Номер ошибки: 544
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert explicit value for identity column in table 'Test_Column_Allowed' when IDENTITY_INSERT is set to OFF.

Если в метаданных конфигурации переименовать имя поля на какое-то другое, не являющееся одним из служебных слов языка запросов, то ошибки 1 в предприятии уже не будет (форма с таблицей-списком будет открываться):

Однако ошибка 2 по-прежнему будет наблюдаться, т.е. у нас отсутствует возможность добавлять / изменять (как программно, так и интерактивно) записи таблиц, колонки которых во внешней БД имеют имена, соответствующие служебным словам языка запросов.

Если поле во внешней БД имеет имя "top" или "distinct", то обе ошибки (1 и 2) в клиенте 1С будут с другим текстом:

Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 156
Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'top'.

Причем обойти ошибку 1 (через переименование имени поля в метаданных конфигурации) уже не получится.

1.png (24.6 KB) 1.png Max im, 2022-05-27 11:17 AM
test.cf (75.3 KB) test.cf Max im, 2022-06-03 02:17 PM
250

History

#2 Updated by Max im about 1 month ago

Проверил: оборачивание имени поля в источнике данных в кавычки избавляет нас от ошибки 2 (интерактивная и программная запись завершаются успешно), но не избавляет нас от ошибки 1 (ошибки просмотра дин. списка таблицы ВИДа) - все равно для ее обхода приходится имя в метаданных исправлять.

Считаю, что конфигуратор не должен давать обновлять конфигурацию БД в этом случае (когда в именах полей таблицы ВИДа содержатся служебные слова), т.е. должен выдавать ошибку.

#3 Updated by Сергей Старых about 1 month ago

1C ответило:
"приложите тестовый пример для воспроизведения"

#4 Updated by Max im about 1 month ago

Файл конфигурации во вложении.
В предприятии вызвать команду открытия дин. списка таблицы "dbo_Test_Table", после чего возникнет ошибка 1 (описанная выше).
Подключаться к ВИДу и создавать в нем какие-то реальные таблицы даже необязательно.

#5 Updated by Сергей Старых 29 days ago

  • Description updated (diff)

#6 Updated by Сергей Старых 29 days ago

Ошибку зарегистрировали. Ссылку добавил в описание

Also available in: Atom PDF