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