Запити по об'єктах складових типів (або як зламати конфігурацію простим додаванням довідника)

Запити по об'єктах складових типів (або як зламати конфігурацію простим додаванням довідника)

Вчора в конфігурацію, на якій працює мережа супермаркетів був доданий довідник (підлеглий Класифікації). Усе. Жодних посилань на нього, ніякого використання в коді. (В основних ролях доступ на нього не відкривався)

Здавалося б максимально безпечне зміна.

Але сьогодні відвалився один механізм з помилкою "Немає доступу на цей довідник".

Як таке може бути? о_О

А ось як.
Аналіз показав що помилка відтворюється при виконанні запиту за значеннями властивостей (з відбором за довідником договорів)

При цьому запит по тому ж джерелу, але без жодних умов - виконується без проблем.
Порушення доступу в умови по "Об'ект.Владелец".
Так як поле Об'єкт має складовою тип, в тому числі довідник Номенклатура, то така умова означає перевірку на рівність з усіма підпорядкованими довідниками. У тому числі і з цим новим, на який немає доступу. Тут то і виникає виняток.

1. Варіант швидкий, яким і скористалися до розбору - в потрібній ролі дати права на читання цього довідника (в нашому випадку це не суперечить вимогам безпеки)

2. Варіант ще швидше, якщо відомий проблемний запит - додати конструкцію ДОЗВОЛЕНІ

3. Варіант оптимальний. Обмежити складовою тип за допомогою конструкції ВИРАЗИТИ, так як в даному випадку нас цікавлять значення властивостей тільки договорів

Що робити, щоб таких проблем не виникало?
Завжди при використанні запитів по складовим типам, і коли потрібні не всі з них - явно обмежувати типи (варіант 3) перед подальшими діями (якщо є відбір і все інше "через точку" від поля складеного типу) в попередньої тимчасової таблиці.

Такий підхід до речі і продуктивність збільшить. (Через зменшення кількості лівих з'єднань)