Почему не отображается реквизит КодОКПД2 на форме справочника Номенклатура в 1С:Бухгалтерия 3.0 и как это исправить?

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

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

Выясняем причину скрытия реквизита

Первым делом проанализируем, почему стандартные средства настройки формы не помогают. В конфигурации 1С:Бухгалтерия предприятия 3.0 (особенно в версии ПРОФ) существует жесткая привязка некоторых реквизитов к функциональным опциям и программным условиям. Реквизит КодОКПД2 исторически и методологически связан с функционалом контролируемых сделок.

Рассмотрим логику системы: полнофункциональная работа с классификатором ОКПД2 в типовом решении предназначена для крупных предприятий, которые обязаны отчитываться по контролируемым сделкам. Этот функционал является прерогативой версии КОРП. В версии ПРОФ данный реквизит присутствует в составе метаданных (чтобы обеспечить совместимость при переходе на КОРП), но программно скрывается, так как считается избыточным для малого и среднего бизнеса.

Давайте разберем по шагам, что происходит в момент открытия формы. Даже если вы установили свойство Видимость в значение Истина в редакторе формы, при выполнении процедуры ПриСозданииНаСервере срабатывает типовой код, который проверяет состояние функциональных опций. Если опция ИспользоватьКонтролируемыеСделки выключена (а в версии ПРОФ она зачастую недоступна для включения в интерфейсе), система выполняет команду:


Элементы.ГруппаОКПД2.Видимость = Ложь;

Или напрямую обращается к полю:


Элементы.КодОКПД2.Видимость = Ложь;

Поскольку программная установка видимости в коде модуля формы имеет приоритет над настройками, заданными в конфигураторе, поле исчезает в момент отрисовки интерфейса у пользователя.

Проверяем настройки функциональных опций

Прежде чем приступать к программированию, давайте проверим, можно ли решить проблему штатными средствами (актуально для версии КОРП или если в вашей базе по какой-то причине эти опции доступны). Проанализируем путь к настройкам:

  1. Перейдем в раздел Главное.
  2. Выберем пункт Налоги и отчеты.
  3. Посмотрим на список доступных настроек в левой части окна. Если там присутствует пункт Контролируемые сделки, перейдем в него.
  4. Проверим наличие флага Использовать контролируемые сделки. Если он выключен — установка этого флага может вернуть реквизит на форму.

Однако в большинстве случаев в версии ПРОФ этот путь не поможет, так как функционал скрыт на уровне программного кода самой конфигурации.

Решение проблемы с помощью расширения конфигурации

Если нам необходимо видеть КодОКПД2 в версии ПРОФ, и мы не хотим снимать основную конфигурацию с поддержки, мы воспользуемся механизмом Расширений. Это наиболее корректный и безопасный метод изменения логики формы.

Разберем процесс создания расширения для принудительного отображения поля:

  1. Создадим новое расширение (через меню Конфигурация — Расширения конфигурации).
  2. Добавим в расширение справочник Номенклатура и его форму элемента (обычно это ФормаЭлемента).
  3. В модуле формы расширения создадим процедуру-перехватчик для события ПриСозданииНаСервере. Нам нужно использовать аннотацию &После, чтобы наш код выполнился в самую последнюю очередь, перекрыв типовые настройки видимости.

Рассмотрим пример кода, который необходимо разместить в модуле расширения:


&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Принудительно включаем видимость самого реквизита
    Если Элементы.Найти("КодОКПД2") <> Неопределено Тогда
        Элементы.КодОКПД2.Видимость = Истина;
    КонецЕсли;
    
    // В типовых формах реквизит часто вложен в группу. 
    // Нужно найти имя родительской группы и также включить её видимость.
    Если Элементы.Найти("ГруппаКлассификация") <> Неопределено Тогда
        Элементы.ГруппаКлассификация.Видимость = Истина;
    КонецЕсли;
    
    // Если реквизит находится в специфической группе для КОРП
    Если Элементы.Найти("ГруппаОКПД2") <> Неопределено Тогда
        Элементы.ГруппаОКПД2.Видимость = Истина;
    КонецЕсли;

КонецПроцедуры

Проанализируем этот код. Мы используем метод Найти(), чтобы избежать ошибок в случае, если в будущих обновлениях фирмы "1С" название элементов формы изменится. После того как мы убедились, что элемент существует, мы принудительно устанавливаем Видимость = Истина. Это действие затирает результат работы типовых процедур, которые скрывали поле на основании функциональных опций.

Почему поле не отображается через «Изменить форму»?

Многие пользователи пытаются найти реквизит через кнопку Еще — Изменить форму. Выясним причину, почему это не работает. Когда в коде 1С прописано Элементы.ИмяЭлемента.Видимость = Ложь, платформа воспринимает это как указание вовсе не отрисовывать данный элемент для текущего пользователя. В результате, в окне настройки состава полей этот элемент также скрывается.

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

Дополнительные аспекты: права доступа и печатные формы

Посмотрим на ситуацию шире. Даже если мы вывели поле на форму, нужно убедиться, что у пользователя достаточно прав на работу с этим реквизитом. В 1С:Бухгалтерии права на классификаторы обычно входят в базовые роли, но если используется сильно ограниченная роль "Только чтение", запись значения может быть недоступна.

Также важно понимать, что заполнение КодОКПД2 может быть критично для корректного формирования печатных форм счетов-фактур или УПД в определенных отраслях (например, при реализации товаров, облагаемых по льготным ставкам НДС, или медицинских изделий). Если поле заполнено в базе данных (например, групповой обработкой), но не выведено на форму, в печатные формы оно все равно может попадать, так как алгоритмы формирования макетов обращаются напрямую к данным объекта Объект.КодОКПД2, игнорируя настройки видимости элементов формы.

Резюме по решению задачи

Подведем итог нашему исследованию:

  1. Проблема отсутствия КодОКПД2 в БП 3.0 ПРОФ — это не ошибка, а предусмотренное поведение системы, ограничивающее "лишний" функционал.
  2. Видимость поля жестко управляется программным кодом в процедуре ПриСозданииНаСервере.
  3. Для решения задачи без снятия с поддержки следует использовать расширение конфигурации.
  4. В расширении необходимо через аннотацию &После принудительно установить свойство Видимость = Истина для самого элемента и всех его родительских групп.

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

← На главную