Почему не отображается Код номенклатуры в Дополнительных полях ОСВ по счету 10.01 и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

Каждый администратор или разработчик 1С хотя бы раз сталкивался с ситуацией, когда под полными правами отчеты работают безупречно, но стоит запустить сеанс под ограниченной учетной записью (например, с типовым профилем «Бухгалтер»), как начинают происходить странности. Одной из таких неочевидных проблем является внезапное исчезновение кодов номенклатуры (или кодов других справочников) из дополнительных полей Оборотно-сальдовой ведомости (ОСВ).

В этой статье мы подробно разберем, почему возникает эта ошибка, изучим внутренние механизмы платформы «1С:Предприятие 8.3», которые приводят к подобному поведению, и рассмотрим пошаговые инструкции по диагностике и устранению проблемы как программными, так и административными методами.

Техническая суть проблемы: почему пропадает Код?

Для того чтобы понять природу этой ошибки, нам необходимо заглянуть под капот платформы и разобраться, как строятся отчеты в типовых конфигурациях. Оборотно-сальдовая ведомость базируется на Системе компоновки данных (СКД). Когда мы открываем настройки отчета, переходим в «Дополнительные поля» и добавляем поле Номенклатура.Код, система генерирует SQL-запрос к базе данных.

Сложность заключается в том, как именно хранятся аналитические разрезы (субконто) на счетах учета в регистре бухгалтерии:

  1. Составной тип данных: Измерения субконто в регистре бухгалтерии имеют составной тип. Список возможных типов определяется планом видов характеристик (ПВХ) ПланВидовХарактеристик.ВидыСубконтоХозрасчетные. В этот ПВХ входят десятки справочников: Номенклатура, Контрагенты, Договоры, СтатьиЗатрат, Проекты и многие другие.
  2. Разыменование полей: Когда СКД пытается получить реквизит через точку (например, Субконто1.Код), на уровне СУБД происходит левое соединение (LEFT JOIN) таблицы регистра со всеми таблицами справочников, входящих в составной тип ПВХ, у которых есть реквизит с именем «Код».
  3. Ограничение прав на уровне записей (RLS): Если у текущего пользователя нет прав на чтение хотя бы одного из справочников, входящих в этот ПВХ (даже если этот справочник вообще не используется на счете 10.01 и пуст), механизм безопасности платформы блокирует выполнение всего разыменования. Платформа считает запрос небезопасным и возвращает пустое значение (NULL) вместо реального кода номенклатуры.

Рассмотрим пример запроса, который неявно формирует СКД при обращении к коду субконто:


ВЫБРАТЬ
    ХозрасчетныйОстатки.Субконто1 КАК СубконтоНоменклатура,
    ХозрасчетныйОстатки.Субконто1.Код КАК КодСубконто
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет10, , ) КАК ХозрасчетныйОстатки

Если в системе существует справочник, включенный в ПВХ (например, Справочник.Проекты или устаревший Справочник.УдалитьОценочныеОбязательства), к которому у пользователя с ролью «Бухгалтер» нет доступа на чтение, поле КодСубконто вернет пустоту.

Почему «Артикул» выводится, а «Код» — нет?

Это самый частый вопрос, который ставит в тупик пользователей и начинающих программистов. Если добавить в дополнительные поля ОСВ Номенклатура.Артикул, то он выводится без каких-либо проблем. Почему так происходит?

Дело в том, что реквизит Артикул уникален — он создан разработчиками только в справочнике Номенклатура. У других справочников (например, у договоров или статей затрат) реквизита с таким именем нет. Платформа «понимает», что обращение идет к конкретной таблице номенклатуры, и не пытается соединять другие справочники из ПВХ. В случае с реквизитом Код, он присутствует абсолютно во всех справочниках, что и заставляет систему выполнять полное сканирование и наталкиваться на ограничение прав.

---

Шаг 1. Точечная диагностика через Журнал регистрации

Прежде чем вносить изменения в конфигурацию, нам нужно точно определить, какой именно объект вызывает отказ в доступе. Для этого выполним следующие действия:

  1. Запустите сеанс под пользователем, у которого воспроизводится проблема с пустым кодом.
  2. Откройте Оборотно-сальдовую ведомость по счету 10.01, убедитесь, что в настройках выбрано дополнительное поле Код, и сформируйте отчет.
  3. Параллельно зайдите в базу под учетной записью администратора с полными правами.
  4. Перейдите в раздел Администрирование — Обслуживание — Журнал регистрации.
  5. Установите фильтр по пользователю (выберите того, у кого не выводится код) и событию «Доступ.Отказ».
  6. Проанализируйте найденные записи. В описании метаданных будет четко указан проблемный объект. Например: Справочник.Проекты или Справочник.УдалитьОценочныеОбязательства.

---

Шаг 2. Исправление проблемы с помощью расширения конфигурации

Самым правильным и безопасным способом решения проблемы является использование Расширений конфигурации. Этот метод позволяет не снимать типовую конфигурацию с поддержки и гарантирует успешное обновление базы в будущем.

Выполним процедуру создания расширения по шагам:

  1. Откройте базу в режиме «Конфигуратор» под полными правами.
  2. Перейдите в меню Конфигурация — Расширения конфигураций.
  3. Нажмите кнопку «Добавить», оставьте параметры по умолчанию (назначение: «Адаптация») и нажмите «ОК».
  4. В дереве основной конфигурации найдите проблемный справочник, который мы определили на этапе диагностики (например, Справочник.Проекты). Нажмите на него правой кнопкой мыши и выберите «Добавить в расширение».
  5. В расширении перейдите в ветку «Роли» и добавьте новую роль. Назовем ее, например, ДоступККодамДляОСВ.
  6. Откройте права созданной роли. Для добавленного справочника установите галочки только на права «Чтение» и «Просмотр».
  7. Обновите конфигурацию базы данных (F7).

Теперь нам осталось назначить созданную роль пользователям. Для этого перейдите в режим «1С:Предприятие» под администратором, откройте Администрирование — Настройки пользователей и прав — Профили групп доступа, создайте новый профиль (или добавьте роль в существующий профиль бухгалтеров) и отметьте галочкой нашу новую роль из расширения.

---

Альтернативное решение: Настройка профилей групп доступа

Если вы не хотите использовать расширения, можно попробовать решить проблему штатными средствами администрирования 1С. В некоторых релизах конфигурации «Бухгалтерия предприятия» за доступ к «проблемным» справочникам отвечают стандартные роли, которые не входят в профиль «Бухгалтер».

Попробуем добавить пользователям права стандартными методами:

  1. Перейдите в раздел Администрирование — Настройки пользователей и прав — Группы доступа.
  2. Создайте новую группу доступа, выберите профиль, содержащий доступ к проектам (если проблема в справочнике Проекты) или аналогичным аналитическим разрезам.
  3. Добавьте в эту группу пользователей, у которых не выводится код номенклатуры в отчетах.

Важное примечание: В старых релизах конфигураций пользователи часто использовали добавление роли Удаленный доступ (стандартный интерфейс OData) для решения этой проблемы, поскольку эта роль неявно давала широкие права на чтение справочников. Мы настоятельно не рекомендуем использовать этот метод на современных релизах платформы (начиная с 3.0.70 и выше). Во-первых, это создает серьезную брешь в безопасности системы, открывая доступ к данным через внешние протоколы. Во-вторых, в актуальных версиях платформы этот обходной путь заблокирован разработчиками.

Резюме

Мы детально изучили проблему отображения кодов номенклатуры в ОСВ и выяснили, что ее причиной является строгое разыменование полей составного типа в СКД при отсутствии прав на чтение смежных справочников ПВХ. Использование точечной настройки прав через расширение конфигурации позволяет решить эту задачу элегантно, безопасно и без нарушения типовой поддержки программы.

← На главную