При работе в конфигурации «1С:Управление торговлей» (редакция 11) через веб-клиент пользователи часто сталкиваются с неприятной особенностью: в меню «Ещё» списка документов «Реализация товаров и услуг» неожиданно пропадает стандартная кнопка «Изменить форму». Это лишает пользователей возможности гибко настраивать интерфейс под себя, например, выводить дополнительные реквизиты, менять порядок колонок или скрывать неиспользуемые поля. Примечательно, что у пользователей с административными правами эта кнопка присутствует, а в других списках (например, в заказах клиентов) она доступна и у обычных менеджеров.
В рамках этой статьи мы подробно проанализируем технические причины такого поведения системы, разберем по шагам логику работы платформы «1С:Предприятие 8.3» в веб-клиенте и рассмотрим три практических способа решения этой проблемы.
Для начала давайте разберем ситуацию изнутри. Когда обычный пользователь открывает список реализаций в веб-клиенте, система может открывать не стандартную форму списка документа Документ.РеализацияТоваровУслуг.ФормаСписка, а специализированную форму, которая физически расположена в другом объекте метаданных — в обработке «Самообслуживание партнеров» (Обработка.СамообслуживаниеПартнеров).
Разработчики фирмы «1С» спроектировали подсистему самообслуживания для того, чтобы внешние клиенты и дилеры могли заходить в базу через браузер и видеть только свои документы в максимально упрощенном виде. Из соображений безопасности и конфиденциальности данных для таких внешних интерфейсов устанавливаются жесткие ограничения:
ДокументыРеализации) свойство РазрешитьИзменениеФормы принудительно установлено в значение Ложь. Платформа блокирует отображение команды «Изменить форму», чтобы внешний клиент не смог случайно или намеренно вывести на экран скрытые системные поля, внутренние цены или реквизиты других контрагентов.Сохранение данных пользователя (Save User Data), платформа автоматически скрывает любые элементы настройки интерфейса.Теперь, когда мы понимаем архитектурные особенности работы интерфейса, рассмотрим подробные варианты решения этой задачи.
Если ваша конфигурация находится на поддержке и вы не хотите снимать её с поддержки ради изменения одного свойства, наиболее правильным и безопасным решением будет использование механизма расширений. Мы можем точечно переопределить свойства формы обработки, не затрагивая основную конфигурацию.
Выполним следующие шаги:
Конфигурация — Расширения конфигурации.ИправлениеИнтерфейсаВебКлиента), оставив назначение «Адаптация».СамообслуживаниеПартнеров.ДокументыРеализации или аналогичная форма, используемая для вывода продаж внешним клиентам).AllowFormCustomize) и установим для него значение Истина (поставим флажок).После применения этого расширения у пользователей, работающих через веб-клиент, в меню «Ещё» появится заветная кнопка «Изменить форму».
Иногда простого включения кнопки «Изменить форму» недостаточно. Если ваша цель — гарантированно вывести определенный дополнительный реквизит (или колонку) для всех пользователей без необходимости ручной настройки каждым сотрудником, лучше сделать это программно через расширение. При таком подходе пользователям вообще не придется заходить в настройки.
Для реализации этого метода проанализируем код формы и модифицируем динамический список. Нам потребуется обратиться к запросу динамического списка и добавить левое соединение с таблицей дополнительных сведений.
Рассмотрим пример кода, который можно поместить в модуль расширяемой формы в обработчик события ПриСозданииНаСервере:
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Получаем схему или текст запроса динамического списка
ТекстЗапроса = Список.ТекстЗапроса;
// Модифицируем запрос динамического списка, добавляя левое соединение
// для получения значения нужного дополнительного реквизита
НовыйТекстЗапроса = ТекстЗапроса + "
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
| ПО Список.Ссылка = ДопРеквизиты.Ссылка
| И ДопРеквизиты.Свойство = &ЦелевоеСвойство";
Список.ТекстЗапроса = НовыйТекстЗапроса;
// Устанавливаем параметр запроса — ссылку на план видов характеристик "Дополнительные реквизиты и сведения"
Список.Параметры.УстановитьЗначениеПараметра("ЦелевоеСвойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("РегионДоставки"));
КонецПроцедуры
После изменения текста запроса мы можем программно добавить поле на форму в качестве колонки таблицы или позволить пользователям самостоятельно перетащить его на форму через стандартный механизм настройки интерфейса, который теперь будет им доступен.
Если у пользователей с полными правами (администраторов) кнопка «Изменить форму» отображается без проблем, мы можем настроить интерфейс один раз под учетной записью администратора, а затем растиражировать эту настройку всем нужным пользователям. Это позволит обойтись без программирования и изменения метаданных конфигурации.
Давайте выполним этот процесс по шагам:
НСИ и администрирование — Настройки пользователей и прав.СамообслуживаниеПартнеров.Этот способ гарантирует, что все пользователи получат уже готовую, преднастроенную форму со всеми необходимыми дополнительными реквизитами, даже если у них самих кнопка «Изменить форму» заблокирована системой на уровне ограничений прав самообслуживания.
Мы проанализировали причины пропадания интерфейсных элементов в веб-клиенте и разобрали эффективные варианты решения проблемы. Выбор конкретного метода зависит от ваших задач: для разовой настройки подойдет копирование настроек (Способ В), а для долгосрочного и системного решения — использование механизмов расширения конфигурации (Способы А и Б).