Как вывести код ОКП в справочнике Номенклатура в 1С:Бухгалтерия

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

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

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

Для начала проанализируем архитектуру системы 1С. Видимость многих полей в современных конфигурациях управляется механизмом Функциональных опций. Это позволяет упростить интерфейс для пользователей, которым не нужен специфический функционал. В случае с реквизитом КодОКП в типовой версии «1С:Бухгалтерия», он жестко привязан к подсистеме контролируемых сделок.

Рассмотрим логическую цепочку зависимости:

  1. Реквизит КодОКП в метаданных справочника Номенклатура связан с функциональной опцией ИспользоватьУведомленияОКонтролируемыхСделках.
  2. Эта функциональная опция включается в разделе Главное — Настройки — Контролируемые сделки.
  3. Механизм контролируемых сделок доступен только в версии КОРП.

Таким образом, если вы используете версию ПРОФ, вы просто не найдете нужную галочку в интерфейсе, а реквизит останется скрытым на уровне платформенных механизмов, даже если вы попытаетесь изменить видимость формы через «Изменить форму».

Решение 1: Изменение состава функциональной опции (для программистов)

Если вам критически важно использовать именно типовой реквизит КодОКП, а версия вашей программы — ПРОФ, можно прибегнуть к изменению конфигурации. Рассмотрим, как это реализовать. Нам нужно «перепривязать» реквизит к той функциональной опции, которая гарантированно включена в вашей базе.

Разберем по шагам действия в конфигураторе:

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

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


// Пример логики проверки доступности функциональной опции
Если ПолучитьФункциональнуюОпцию("ИспользоватьУведомленияОКонтролируемыхСделках") Тогда
    Элементы.КодОКП.Видимость = Истина;
Иначе
    Элементы.КодОКП.Видимость = Ложь;
КонецЕсли;

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

Решение 2: Использование расширения конфигурации (рекомендуемый способ)

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

Рассмотрим алгоритм создания расширения:

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

Пример кода в расширении для формы:


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

Решение 3: Дополнительные реквизиты (без программирования)

Если вмешательство в код недопустимо, разберем альтернативный вариант — использование механизма Дополнительных реквизитов и сведений. Это стандартный функционал 1С, позволяющий добавлять новые поля в любые справочники без изменения структуры метаданных.

Посмотрим, как это настроить:

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

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

Важное замечание: Переход с ОКП на ОКПД2

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

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

Вывод данных в печатную форму

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

Если мы используем типовой реквизит КодОКП, запрос к данным будет выглядеть стандартно:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.КодОКП КАК КодОКП
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", ВыбраннаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();

Если же вы выбрали путь с дополнительными реквизитами, получение данных будет чуть сложнее, через таблицу ДополнительныеРеквизиты справочника. Поэтому решение с изменением функциональной опции (как сделала Марина в обсуждении на форуме) является наиболее простым с точки зрения последующей разработки печатных форм, так как данные остаются в основной таблице справочника.

Подводя итог, мы разобрали три способа решения задачи: от административного (доп. реквизиты) до технического (изменение метаданных или расширение). Выбор зависит от ваших компетенций и требований к обновляемости базы.

← На главную