В процессе работы с конфигурацией «1С:Бухгалтерия 8» пользователи часто сталкиваются с необходимостью вывода специфических реквизитов в карточке номенклатуры. Одним из таких полей является Код ОКП. Этот код необходим для корректного формирования печатных форм, таких как приемосдаточные акты, или для ведения учета продукции в соответствии с государственными классификаторами. Однако интерфейс программы может скрывать это поле, и стандартные настройки видимости в форме не всегда помогают. Разберем детально, почему это происходит и какими способами можно вернуть отображение данного реквизита.
Для начала проанализируем архитектуру системы 1С. Видимость многих полей в современных конфигурациях управляется механизмом Функциональных опций. Это позволяет упростить интерфейс для пользователей, которым не нужен специфический функционал. В случае с реквизитом КодОКП в типовой версии «1С:Бухгалтерия», он жестко привязан к подсистеме контролируемых сделок.
Рассмотрим логическую цепочку зависимости:
КодОКП в метаданных справочника Номенклатура связан с функциональной опцией ИспользоватьУведомленияОКонтролируемыхСделках.Таким образом, если вы используете версию ПРОФ, вы просто не найдете нужную галочку в интерфейсе, а реквизит останется скрытым на уровне платформенных механизмов, даже если вы попытаетесь изменить видимость формы через «Изменить форму».
Если вам критически важно использовать именно типовой реквизит КодОКП, а версия вашей программы — ПРОФ, можно прибегнуть к изменению конфигурации. Рассмотрим, как это реализовать. Нам нужно «перепривязать» реквизит к той функциональной опции, которая гарантированно включена в вашей базе.
Разберем по шагам действия в конфигураторе:
Номенклатура.КодОКП.ВедетсяУчетИмпортныхТоваров.Проанализируем пример того, как система проверяет функциональные опции программно, если бы мы писали код вручную:
// Пример логики проверки доступности функциональной опции
Если ПолучитьФункциональнуюОпцию("ИспользоватьУведомленияОКонтролируемыхСделках") Тогда
Элементы.КодОКП.Видимость = Истина;
Иначе
Элементы.КодОКП.Видимость = Ложь;
КонецЕсли;
Изменяя состав опции в метаданных, мы заставляем систему считать, что реквизит должен быть виден, как только включается учет импорта (или любая другая выбранная вами опция). Это эффективный метод, но он требует снятия конфигурации с поддержки или использования расширения.
Чтобы не вносить изменения в основную конфигурацию и сохранить возможность автоматического обновления, воспользуемся механизмом расширений. Это наиболее современный и безопасный подход.
Рассмотрим алгоритм создания расширения:
Номенклатура и его форму элемента.КодОКП и в свойствах сбросим связь с функциональной опцией или укажем свою.ПриСозданииНаСервере.Пример кода в расширении для формы:
&НаСервере
&ИзменениеИКонтроль("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Вызываем оригинальный обработчик
Основание = ЭтаФорма;
// Принудительно включаем видимость поля вне зависимости от опций
Элементы.КодОКП.Видимость = Истина;
Элементы.КодОКП.Доступность = Истина;
КонецПроцедуры
Если вмешательство в код недопустимо, разберем альтернативный вариант — использование механизма Дополнительных реквизитов и сведений. Это стандартный функционал 1С, позволяющий добавлять новые поля в любые справочники без изменения структуры метаданных.
Посмотрим, как это настроить:
Номенклатура и нажмем «Добавить — Новый».Преимущества этого метода: не нужно менять конфигурацию, поле сразу появится во всех карточках номенклатуры в отдельной вкладке или в общем списке (в зависимости от настроек формы). Недостатки: типовые печатные формы «не знают» об этом поле. Чтобы вывести значение в акт, придется либо редактировать макет печатной формы, либо использовать внешнюю печатную форму.
Проанализируем ситуацию с точки зрения законодательства. Общероссийский классификатор продукции (ОКП) утратил силу в 2017 году. Ему на смену пришел ОКПД2 (ОК 034-2014). В последних версиях 1С реквизит может называться по-старому («Код ОКП»), но подразумевается ввод данных именно по ОКПД2.
Если ваша задача — вывод данных в приемосдаточный акт для лома металлов или медицинских товаров, убедитесь, что вы используете актуальный код. Часто система требует заполнения не ОКП, а кода ТН ВЭД, особенно если товары подлежат прослеживаемости или импортируются. Перед тем как программно выводить скрытое поле, проверьте, не заполнен ли у вас справочник Классификатор ТН ВЭД, так как во многих формах приоритет отдается именно ему.
После того как мы обеспечили видимость поля и заполнили его, нам нужно подставить его в печатную форму. Рассмотрим, как программно обратиться к этому реквизиту при формировании акта.
Если мы используем типовой реквизит КодОКП, запрос к данным будет выглядеть стандартно:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.КодОКП КАК КодОКП
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", ВыбраннаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();
Если же вы выбрали путь с дополнительными реквизитами, получение данных будет чуть сложнее, через таблицу ДополнительныеРеквизиты справочника. Поэтому решение с изменением функциональной опции (как сделала Марина в обсуждении на форуме) является наиболее простым с точки зрения последующей разработки печатных форм, так как данные остаются в основной таблице справочника.
Подводя итог, мы разобрали три способа решения задачи: от административного (доп. реквизиты) до технического (изменение метаданных или расширение). Выбор зависит от ваших компетенций и требований к обновляемости базы.