При разработке и кастомизации конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда новый элемент, добавленный на форму (будь то программно или через редактор формы в конфигураторе), упорно не желает отображаться в режиме «1С:Предприятие». Особенно часто это происходит в сложных прикладных решениях, таких как 1С:Зарплата и управление персоналом 3.1 КОРП. В этой статье мы подробно разберем, почему так происходит, и как найти «невидимую» причину скрытия данных.
Рассмотрим типичную ситуацию: в справочнике СпособыОтраженияЗарплатыВБухУчете необходимо добавить новый реквизит. Вы открываете форму элемента, перетаскиваете реквизит из объекта на форму или создаете реквизит формы вручную. Однако после обновления конфигурации базы данных и запуска программы элемент на форме отсутствует. Даже под полными правами. Более того, подмена пути к данным у существующего (видимого) элемента на ваш новый реквизит приводит к исчезновению этого элемента. Это явный признак того, что в работу включаются механизмы платформы, ограничивающие видимость на уровне метаданных или функциональных настроек.
Прежде чем углубляться в программный код, нам необходимо убедиться в самом очевидном — а ту ли форму мы редактируем? В современных конфигурациях у одного объекта может быть несколько форм: для разных режимов работы, для разных пользователей или специализированные формы для КОРП-версии. Разберем, как проверить, какая форма открывается в режиме пользователя.
Для этого в коде модуля формы в процедуре ПриСозданииНаСервере можно временно вставить диагностическое сообщение:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Сообщить("Открыта форма: " + ЭтаФорма.ИмяФормы);
КонецПроцедуры
Если при открытии в режиме предприятия вы видите ожидаемое имя формы, значит, причина скрыта глубже — в свойствах самих данных.
Проанализируем систему прав. В 1С:ЗУП 3.1 КОРП права на справочник СпособыОтраженияЗарплатыВБухУчете обычно регулируются ролями БазовыеПраваКонфигурацииЗарплатаКадрыРасширенная и ДобавлениеИзменениеАналитикаБухучета. Важно помнить, что в 1С существует механизм «Устанавливать права для реквизитов и табличных частей по умолчанию». Если вы добавили новый реквизит в объект, убедитесь, что у соответствующих ролей есть право «Просмотр» и «Редактирование» именно на этот новый реквизит.
Однако, как показывает практика, если реквизит формы имеет тип Строка и отображается, а при смене типа на СправочникСсылка исчезает — дело не в правах на сам реквизит, а в доступности типа данных.
Выясним основную техническую причину. В платформе 1С реализован механизм автоматического скрытия элементов интерфейса, связанных с выключенными функциональными опциями (ФО). Это касается не только самих реквизитов объекта, но и типов данных.
Проанализируем ситуацию автора: если тип реквизита — СправочникСсылка.НаправленияДеятельности, и элемент пропадает, это означает, что сам справочник «Направления деятельности» завязан на функциональную опцию, которая в данный момент выключена в константах базы данных. Платформа логично рассуждает: если функционал направлений деятельности не используется, то и элементы управления, связанные с этим типом данных, показывать не нужно.
В 1С:ЗУП 3.1 КОРП справочник НаправленияДеятельности тесно связан с функциональной опцией ИспользоватьФинансовыйУчет. Эта опция обычно включается при интеграции с системами 1С:ERP или 1С:Комплексная автоматизация.
Рассмотрим, как найти, где управляется эта опция:
Если данная опция отключена, любой реквизит на форме (даже не связанный с объектом базы данных напрямую, а просто имеющий такой тип), будет скрыт платформой автоматически. Это поведение «по умолчанию», которое невозможно переопределить простым свойством Видимость = Истина в коде.
Посмотрим на отличный способ быстрой диагностики. Если вы находитесь в режиме «1С:Предприятие», нажмите кнопку Еще — Изменить форму. Рассмотрим список доступных элементов:
ПриЧтенииНаСервере или через условное оформление).Если вам критически важно отобразить реквизит, несмотря на выключенную функциональную опцию (что бывает редко и требует осторожности), можно попробовать использовать свойство элемента формы ИспользоватьВсегда. Однако для типов данных, ограниченных ФО, это зачастую не помогает. Правильным решением будет либо включение соответствующей настройки в интерфейсе программы, либо использование другого типа данных (например, составного типа или строки для временного хранения).
Выясним, как проверить состояние функциональной опции программно, чтобы понять логику системы:
ЗначениеОпции = ПолучитьФункциональнуюОпцию("ИспользоватьФинансовыйУчет");
Если Не ЗначениеОпции Тогда
ИнформационноеСообщение = "Внимание: Функциональная опция финансового учета выключена.
Реквизиты типов 'Направления деятельности' будут скрыты.";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ИнформационноеСообщение);
КонецЕсли;
Проанализируем специфику самого объекта. Справочник СпособыОтраженияЗарплатыВБухУчете в ЗУП 3.1 является, по сути, «словарем» наименований для обмена с бухгалтерскими системами. В самой ЗУП он почти не несет аналитической нагрузки. Вся сложная аналитика (статьи затрат, номенклатурные группы, направления деятельности) «приезжает» в документ «Отражение зарплаты в бухучете» из настроек в учетной политике или заполняется на стороне ERP. Поэтому разработчики типовой конфигурации скрыли большинство аналитик за функциональными опциями, чтобы не перегружать интерфейс бухгалтера-расчетчика лишними полями, которые не участвуют в локальном расчете.
Подведем итоги нашего исследования. Если реквизит на форме 1С не отображается, следуем четкому алгоритму:
ПриСозданииНаСервере проверяем значение свойства Элементы.ВашРеквизит.Видимость. Если там Истина, но элемента нет — это 100% работа механизма функциональных опций платформы.Понимание работы механизма функциональных опций позволяет экономить часы разработки, избавляя от бессмысленного поиска ошибок в коде там, где работает базовая логика платформы 1С.