При разработке расширений для конфигураций на базе 1С:Управление торговлей 11.4/11.5, ERP 2 или Комплексная автоматизация программисты часто сталкиваются с тем, что стандартные действия по выводу реквизитов на форму не приносят результата. Особенно остро эта проблема проявляется в специализированных интерфейсах, таких как Рабочее место кассира (РМК). Рассмотрим ситуацию: вы добавили форму ФормаДокументаРМК документа ЧекККМ в расширение, вытащили реквизит Объект.Партнер на форму, но в режиме «1С:Предприятие» поле упорно остается невидимым. Разберем по шагам, почему это происходит и как решить проблему.
Прежде чем переходить к сложным механизмам, проанализируем стандартные причины, по которым элемент формы может быть скрыт. В случае с расширением важно убедиться, что:
Партнер и сам документ ЧекККМ корректно заимствованы в расширение.Партнеры и соответствующего реквизита в документе.Если вы проверили права, убедились, что функциональная опция Использовать партнеров и контрагентов включена, а программное добавление элемента через метод Элементы.Добавить() все равно выдает пустой результат, значит, дело в специфической логике самой формы РМК.
Форма ФормаДокументаРМК является одной из самых сложных в типовых решениях. В отличие от обычных документов, её интерфейс динамически перестраивается при создании на сервере. Рассмотрим пример программного добавления поля, который часто используют разработчики для обхода ограничений визуального редактора:
&НаСервере
Процедура После_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовоеПолеФормы = Элементы.Добавить("ЭлементПартнер", Тип("ПолеФормы"), Элементы.ГруппаИнформационнаяПанель);
НовоеПолеФормы.ПутьКДанным = "Объект.Partner"; // Проверьте правильность имени реквизита в метаданных
НовоеПолеФормы.Вид = ВидПоляФормы.ПолеВвода;
НовоеПолеФормы.Видимость = Истина;
КонецПроцедуры
Даже такой код может не сработать. Выясним причину: в типовой конфигурации Управление торговлей 11 интерфейс кассира ориентирован на максимально быстрые, часто «обезличенные» продажи. Если система считает, что идентификация клиента в данный момент не требуется, она может принудительно скрывать группы элементов, в которые вы пытаетесь поместить свое поле.
Как показывает практика и анализ кода типовой конфигурации, видимость блока работы с клиентами (партнерами) в РМК жестко завязана на функциональную опцию ИспользоватьКартыЛояльности. Рассмотрим, как это работает: система предполагает, что партнер в рознице нужен в первую очередь для применения скидок по картам лояльности. Если эта опция выключена, механизмы формы могут скрывать элементы, связанные с выбором партнера, чтобы не загромождать интерфейс кассира.
Для решения проблемы выполним следующие действия:
ИспользоватьКартыЛояльности напрямую через «Функции для технического специалиста».После включения этой опции система активирует скрытые алгоритмы в модуле формы ЧекККМ, и поле Партнер (или группа, в которую оно вложено) станет доступным для отображения.
Важно помнить критически важный нюанс работы с платформой 1С: если в основной конфигурации реквизит или объект связан с Функциональной опцией (ФО), и эта опция в базе выключена, то никакие манипуляции в расширении не сделают этот объект видимым. Даже если вы создадите свою ФО в расширении и включите её, приоритет будет у «родной» опции основной конфигурации, которая управляет видимостью реквизита на уровне ядра платформы.
Проанализируем ситуацию с программной точки зрения. В типовых методах, таких как ПриСозданииНаСервере или в специализированных процедурах настройки интерфейса (например, УстановитьВидимостьЭлементов), часто встречается подобный код:
Элементы.ГруппаПартнер.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности");
Если вы добавили свое поле внутрь такой группы в расширении, оно унаследует видимость родителя. Если вы добавили поле вне группы, типовой код может не знать о нем, но общая логика ФО все равно может блокировать доступ к данным реквизита Объект.Партнер.
Если включение карт лояльности не помогло, следует проверить настройки самого Рабочего места кассира. В современных релизах УТ 11/ERP существует справочник Настройки РМК. Рассмотрим шаги проверки:
Для того чтобы окончательно убедиться, что поле не скрывается программно после вашего вмешательства, используйте метод &После для процедуры ПриСозданииНаСервере. Попробуем форсированно установить видимость в самом конце выполнения серверного кода:
&После("ПриСозданииНаСервере")
Процедура После_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Убедимся, что наше поле существует и принудительно включим его
Если Элементы.Найти("ЭлементПартнер") <> Неопределено Тогда
Элементы.ЭлементПартнер.Видимость = Истина;
Элементы.ЭлементПартнер.Доступность = Истина;
КонецЕсли;
// Также проверим родительские группы
Элементы.ГруппаИнформационнаяПанель.Видимость = Истина;
КонецПроцедуры
Разберем, почему это важно: типовые конфигурации часто пересчитывают видимость в самом конце инициализации формы или даже в обработчике ПриОткрытии. Если ваше поле привязано к данным, которые отключены через ФО, платформа просто не позволит его отобразить.
Таким образом, решение проблемы кроется в понимании того, что форма РМК — это не просто набор полей, а динамический интерфейс, поведение которого продиктовано бизнес-логикой системы (в данном случае — связью партнеров с маркетинговыми активностями и картами лояльности).