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

open

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

Added by Max im 6 months ago. Updated 6 months 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 (через переименование имени поля в метаданных конфигурации) уже не получится.


Files

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
Actions #1

Updated by Сергей Старых 6 months ago

Возможно поможет https://partners.v8.1c.ru/forum/topic/1948815

Actions #2

Updated by Max im 6 months ago

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

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

Actions #3

Updated by Сергей Старых 6 months ago

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

Actions #4

Updated by Max im 6 months ago

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

Actions #5

Updated by Сергей Старых 6 months ago

  • Description updated (diff)
Actions #6

Updated by Сергей Старых 6 months ago

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

Also available in: Atom PDF