При разработке мобильных приложений на платформе 1С:Предприятие 8.3 программисты часто сталкиваются со специфическим поведением интерфейса. Одной из таких особенностей является появление контекстного меню при жесте «свайп» по строке списка. В этом меню пользователю предлагаются команды «Изменить», «Скопировать», «Переместить в группу» или «Пометить на удаление». Если ваша задача — создать приложение для торговых представителей или курьеров, где список товаров или документов должен быть доступен только для чтения, стандартная настройка ТолькоПросмотр может оказаться недостаточной. Рассмотрим подробно, как полностью заблокировать любые возможности редактирования и интерактивного изменения данных в мобильном интерфейсе.
Первым делом проанализируем настройки самого источника данных на форме. В 1С свойства отображения команд во многом зависят от того, какие действия разрешены для конкретной таблицы. Разберем шаги по ограничению прав на уровне элементов формы:
Список с типом ДинамическийСписок).Этот метод позволяет на уровне метаданных формы сказать платформе, что данные действия не предусмотрены. Однако в мобильном приложении 8.3.6 и выше этого может быть недостаточно, так как системные механизмы свайпа могут продолжать вызывать контекстное меню.
Часто возникает ситуация: мы установили ТолькоПросмотр = Истина, кнопки скрылись, но пользователь все равно может случайно «схватить» элемент и перетащить его в другую группу (папку). Это происходит из-за включенного механизма Drag-and-Drop. Выясним, как это отключить:
В свойствах таблицы (элемента формы, отображающего список) найдем раздел Использование и принудительно выключим следующие параметры:
После этих манипуляций интерактивное перемещение строк станет невозможным, что обеспечит целостность иерархии справочника.
Проанализируем ситуацию с кнопками, которые автоматически генерируются платформой. Чтобы они не появлялись в нижней части экрана или в меню «три точки» на мобильном устройстве, необходимо выполнить следующие действия:
Для мобильного приложения критически важно проделать то же самое с Контекстным меню таблицы. Если свойство Автозаполнение для контекстного меню включено, платформа будет пытаться вывести стандартный набор команд при свайпе, даже если вы их запретили в составе команд списка.
Иногда настройки в конфигураторе «перекрываются» системными механизмами мобильной платформы. В таком случае применим программный подход. Рассмотрим пример кода, который нужно разместить в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Блокируем изменение состава строк на уровне динамического списка
Список.ИзменятьСоставСтрок = Ложь;
// Программное обращение к элементам контекстного меню (если автозаполнение включено)
// Важно: Имена элементов могут отличаться, их можно подсмотреть в отладчике
Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюИзменить.Видимость = Ложь;
Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь;
Элементы.Список.КонтекстноеМеню.ПодчиненныеЭлементы.СписокКонтекстноеМенюУдалить.Видимость = Ложь;
// Полная очистка командной панели, если нужно радикальное решение
Элементы.Список.КоманднаяПанель.ПодчиненныеЭлементы.Очистить();
КонецПроцедуры
Обратите внимание, что в мобильном приложении (особенно на старых версиях 8.3.6) прямое обращение к ПодчиненныеЭлементы контекстного меню может не всегда срабатывать так же предсказуемо, как в тонком клиенте. Поэтому рекомендуется комбинировать программный метод с отключением автозаполнения в визуальном редакторе.
Даже если мы скрыли все кнопки, пользователь может нажать на строку (тапнуть), и откроется форма элемента, где теоретически возможны правки. Чтобы исключить даже просмотр карточки (если это требуется), обработаем событие Выбор:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Отключаем стандартное открытие формы объекта
СтандартнаяОбработка = Ложь;
// Здесь можно вывести сообщение или выполнить свое действие
КонецПроцедуры
Проанализируем еще один важный аспект. Если разработка ведется «без ролей» (под полными правами), платформа всегда будет предлагать расширенный функционал. Правильным подходом будет создание минимальной роли «ПросмотрДанных», в которой для нужных справочников будут сняты права «Интерактивное добавление», «Редактирование» и «Удаление». В этом случае 1С сама скроет все лишние кнопки на всех уровнях интерфейса, включая мобильные свайпы, без необходимости писать сложный код в каждой форме.
Резюмируем: для достижения гарантированного результата в мобильном приложении лучше всего использовать комбинацию из ограничения прав в Ролях, отключения Автозаполнения контекстного меню и установки свойства ИзменятьСоставСтрок = Ложь у динамического списка.