Как полностью отключить кнопки редактирования и контекстное меню в мобильном списке 1С

Программист 1С v8.3 (Управляемые формы)
← На главную

При разработке мобильных приложений на платформе 1С:Предприятие 8.3 программисты часто сталкиваются со специфическим поведением интерфейса. Одной из таких особенностей является появление контекстного меню при жесте «свайп» по строке списка. В этом меню пользователю предлагаются команды «Изменить», «Скопировать», «Переместить в группу» или «Пометить на удаление». Если ваша задача — создать приложение для торговых представителей или курьеров, где список товаров или документов должен быть доступен только для чтения, стандартная настройка ТолькоПросмотр может оказаться недостаточной. Рассмотрим подробно, как полностью заблокировать любые возможности редактирования и интерактивного изменения данных в мобильном интерфейсе.

Настройка состава команд динамического списка

Первым делом проанализируем настройки самого источника данных на форме. В 1С свойства отображения команд во многом зависят от того, какие действия разрешены для конкретной таблицы. Разберем шаги по ограничению прав на уровне элементов формы:

  1. Откроем форму списка или выбора в конфигураторе.
  2. Выделим основной реквизит формы (обычно это Список с типом ДинамическийСписок).
  3. В окне свойств найдем раздел Использование.
  4. Найдем пункт Состав команд. Нажмем на ссылку «Открыть».
  5. В появившемся окне снимем галочки с команд: «Создать», «Скопировать», «Изменить», «Пометить на удаление», «Установить пометку удаления».

Этот метод позволяет на уровне метаданных формы сказать платформе, что данные действия не предусмотрены. Однако в мобильном приложении 8.3.6 и выше этого может быть недостаточно, так как системные механизмы свайпа могут продолжать вызывать контекстное меню.

Блокировка перемещения элементов между папками

Часто возникает ситуация: мы установили ТолькоПросмотр = Истина, кнопки скрылись, но пользователь все равно может случайно «схватить» элемент и перетащить его в другую группу (папку). Это происходит из-за включенного механизма Drag-and-Drop. Выясним, как это отключить:

В свойствах таблицы (элемента формы, отображающего список) найдем раздел Использование и принудительно выключим следующие параметры:

После этих манипуляций интерактивное перемещение строк станет невозможным, что обеспечит целостность иерархии справочника.

Управление командной панелью и контекстным меню

Проанализируем ситуацию с кнопками, которые автоматически генерируются платформой. Чтобы они не появлялись в нижней части экрана или в меню «три точки» на мобильном устройстве, необходимо выполнить следующие действия:

  1. Выделим элемент формы Командная панель (или саму таблицу, если панель встроена).
  2. В свойствах найдем флаг Автозаполнение и снимем его.
  3. Если нам нужны какие-то специфические кнопки (например, «Обновить»), добавим их вручную, создав собственные команды формы.

Для мобильного приложения критически важно проделать то же самое с Контекстным меню таблицы. Если свойство Автозаполнение для контекстного меню включено, платформа будет пытаться вывести стандартный набор команд при свайпе, даже если вы их запретили в составе команд списка.

Программное скрытие элементов при создании формы

Иногда настройки в конфигураторе «перекрываются» системными механизмами мобильной платформы. В таком случае применим программный подход. Рассмотрим пример кода, который нужно разместить в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Блокируем изменение состава строк на уровне динамического списка
    Список.ИзменятьСоставСтрок = Ложь;
    
    // Программное обращение к элементам контекстного меню (если автозаполнение включено)
    // Важно: Имена элементов могут отличаться, их можно подсмотреть в отладчике
    Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюИзменить.Видимость = Ложь;
    Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь;
    Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюУдалить.Видимость = Ложь;
    
    // Полная очистка командной панели, если нужно радикальное решение
    Элементы.Список.КоманднаяПанель.ПодчиненныеЭлементы.Очистить();
    
КонецПроцедуры

Обратите внимание, что в мобильном приложении (особенно на старых версиях 8.3.6) прямое обращение к ПодчиненныеЭлементы контекстного меню может не всегда срабатывать так же предсказуемо, как в тонком клиенте. Поэтому рекомендуется комбинировать программный метод с отключением автозаполнения в визуальном редакторе.

Блокировка открытия формы объекта

Даже если мы скрыли все кнопки, пользователь может нажать на строку (тапнуть), и откроется форма элемента, где теоретически возможны правки. Чтобы исключить даже просмотр карточки (если это требуется), обработаем событие Выбор:


&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    // Отключаем стандартное открытие формы объекта
    СтандартнаяОбработка = Ложь;
    // Здесь можно вывести сообщение или выполнить свое действие
КонецПроцедуры

Использование механизма Ролей

Проанализируем еще один важный аспект. Если разработка ведется «без ролей» (под полными правами), платформа всегда будет предлагать расширенный функционал. Правильным подходом будет создание минимальной роли «ПросмотрДанных», в которой для нужных справочников будут сняты права «Интерактивное добавление», «Редактирование» и «Удаление». В этом случае 1С сама скроет все лишние кнопки на всех уровнях интерфейса, включая мобильные свайпы, без необходимости писать сложный код в каждой форме.

Резюмируем: для достижения гарантированного результата в мобильном приложении лучше всего использовать комбинацию из ограничения прав в Ролях, отключения Автозаполнения контекстного меню и установки свойства ИзменятьСоставСтрок = Ложь у динамического списка.

← На главную