Вчора в конфігурацію, на якій працює мережа супермаркетів був доданий довідник (підлеглий Класифікації). Усе. Жодних посилань на нього, ніякого використання в коді. (В основних ролях доступ на нього не відкривався)
Здавалося б максимально безпечне зміна.
Але сьогодні відвалився один механізм з помилкою "Немає доступу на цей довідник".
Як таке може бути? о_О
А ось як.
Аналіз показав що помилка відтворюється при виконанні запиту за значеннями властивостей (з відбором за довідником договорів)
При цьому запит по тому ж джерелу, але без жодних умов - виконується без проблем.
Порушення доступу в умови по "Об'ект.Владелец".
Так як поле Об'єкт має складовою тип, в тому числі довідник Номенклатура, то така умова означає перевірку на рівність з усіма підпорядкованими довідниками. У тому числі і з цим новим, на який немає доступу. Тут то і виникає виняток.
1. Варіант швидкий, яким і скористалися до розбору - в потрібній ролі дати права на читання цього довідника (в нашому випадку це не суперечить вимогам безпеки)
2. Варіант ще швидше, якщо відомий проблемний запит - додати конструкцію ДОЗВОЛЕНІ
3. Варіант оптимальний. Обмежити складовою тип за допомогою конструкції ВИРАЗИТИ, так як в даному випадку нас цікавлять значення властивостей тільки договорів
Що робити, щоб таких проблем не виникало?
Завжди при використанні запитів по складовим типам, і коли потрібні не всі з них - явно обмежувати типи (варіант 3) перед подальшими діями (якщо є відбір і все інше "через точку" від поля складеного типу) в попередньої тимчасової таблиці.
Такий підхід до речі і продуктивність збільшить. (Через зменшення кількості лівих з'єднань)