Почему не отображается поле "Партнер" в форме РМК при использовании расширения в 1С:Управление торговлей 11?

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

При разработке расширений для конфигураций на базе 1С:Управление торговлей 11.4/11.5, ERP 2 или Комплексная автоматизация программисты часто сталкиваются с тем, что стандартные действия по выводу реквизитов на форму не приносят результата. Особенно остро эта проблема проявляется в специализированных интерфейсах, таких как Рабочее место кассира (РМК). Рассмотрим ситуацию: вы добавили форму ФормаДокументаРМК документа ЧекККМ в расширение, вытащили реквизит Объект.Партнер на форму, но в режиме «1С:Предприятие» поле упорно остается невидимым. Разберем по шагам, почему это происходит и как решить проблему.

Анализ базовых причин отсутствия видимости

Прежде чем переходить к сложным механизмам, проанализируем стандартные причины, по которым элемент формы может быть скрыт. В случае с расширением важно убедиться, что:

  1. Реквизит Партнер и сам документ ЧекККМ корректно заимствованы в расширение.
  2. У пользователя достаточно прав на чтение и просмотр справочника Партнеры и соответствующего реквизита в документе.
  3. В расширении не перекрыты роли, которые могут ограничивать доступ к данным.
  4. Настройка Условного оформления на форме не скрывает этот элемент программно.

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

Особенности формы РМК и влияние программного кода

Форма ФормаДокументаРМК является одной из самых сложных в типовых решениях. В отличие от обычных документов, её интерфейс динамически перестраивается при создании на сервере. Рассмотрим пример программного добавления поля, который часто используют разработчики для обхода ограничений визуального редактора:


&НаСервере
Процедура После_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовоеПолеФормы = Элементы.Добавить("ЭлементПартнер", Тип("ПолеФормы"), Элементы.ГруппаИнформационнаяПанель);
    НовоеПолеФормы.ПутьКДанным = "Объект.Partner"; // Проверьте правильность имени реквизита в метаданных
    НовоеПолеФормы.Вид = ВидПоляФормы.ПолеВвода;
    НовоеПолеФормы.Видимость = Истина;
КонецПроцедуры

Даже такой код может не сработать. Выясним причину: в типовой конфигурации Управление торговлей 11 интерфейс кассира ориентирован на максимально быстрые, часто «обезличенные» продажи. Если система считает, что идентификация клиента в данный момент не требуется, она может принудительно скрывать группы элементов, в которые вы пытаетесь поместить свое поле.

Главная причина: Влияние функциональной опции карт лояльности

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

Для решения проблемы выполним следующие действия:

  1. Перейдем в раздел НСИ и администрирование — Настройка CRM и маркетинга.
  2. Найдем пункт Маркетинг и установим флаг Карты лояльности.
  3. Если флаг уже установлен, проверим значение константы ИспользоватьКартыЛояльности напрямую через «Функции для технического специалиста».

После включения этой опции система активирует скрытые алгоритмы в модуле формы ЧекККМ, и поле Партнер (или группа, в которую оно вложено) станет доступным для отображения.

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

Важно помнить критически важный нюанс работы с платформой 1С: если в основной конфигурации реквизит или объект связан с Функциональной опцией (ФО), и эта опция в базе выключена, то никакие манипуляции в расширении не сделают этот объект видимым. Даже если вы создадите свою ФО в расширении и включите её, приоритет будет у «родной» опции основной конфигурации, которая управляет видимостью реквизита на уровне ядра платформы.

Проанализируем ситуацию с программной точки зрения. В типовых методах, таких как ПриСозданииНаСервере или в специализированных процедурах настройки интерфейса (например, УстановитьВидимостьЭлементов), часто встречается подобный код:


Элементы.ГруппаПартнер.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности");

Если вы добавили свое поле внутрь такой группы в расширении, оно унаследует видимость родителя. Если вы добавили поле вне группы, типовой код может не знать о нем, но общая логика ФО все равно может блокировать доступ к данным реквизита Объект.Партнер.

Дополнительные настройки в профилях РМК

Если включение карт лояльности не помогло, следует проверить настройки самого Рабочего места кассира. В современных релизах УТ 11/ERP существует справочник Настройки РМК. Рассмотрим шаги проверки:

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

Рекомендация по отладке в расширении

Для того чтобы окончательно убедиться, что поле не скрывается программно после вашего вмешательства, используйте метод &После для процедуры ПриСозданииНаСервере. Попробуем форсированно установить видимость в самом конце выполнения серверного кода:


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

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

Таким образом, решение проблемы кроется в понимании того, что форма РМК — это не просто набор полей, а динамический интерфейс, поведение которого продиктовано бизнес-логикой системы (в данном случае — связью партнеров с маркетинговыми активностями и картами лояльности).

← На главную