Как в табличной части или таблице значений 1С сделать поле кнопкой?

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

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

Ограничения архитектуры платформы 1С

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

Способ 1: Использование гиперссылки

Самый простой и популярный вариант, который часто применяют на практике. Мы можем превратить обычное текстовое поле в кликабельную ссылку.

  1. Добавьте в таблицу значений колонку со строковым типом данных.
  2. В свойствах элемента формы для этой колонки установите вид Поле надписи.
  3. Установите флажок в свойстве Гиперссылка.
  4. В качестве значения строки выводите текст "Сделать фото".
  5. В обработчике события Нажатие или Выбор опишите необходимую логику.

Способ 2: Настройка "Кнопки-картинки" (Иконки в строке)

Если текст выглядит недостаточно привлекательно, рассмотрим более изящный вариант визуализации — использование картинок (например, иконки фотоаппарата).

  1. Перейдите в свойства самой таблицы на форме.
  2. Найдите свойство КартинкаСтрок и загрузите в него коллекцию нужных картинок (или одну картинку из библиотеки).
  3. Создайте в таблице колонку (обычно с типом данных Число), которая будет хранить индекс нужной картинки из коллекции.
  4. В свойствах таблицы в поле ПутьКДаннымКартинкиСтроки укажите эту новую колонку.

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

Проанализируем ситуацию с событиями для картинок. Разработчики часто пытаются использовать событие Нажатие для поля картинки. Однако внутри таблицы событие Нажатие у картинки может не реагировать на клики мыши. Самый надежный способ имитации клика — использование события самой таблицы Выбор. Посмотрим на пример кода:


&НаКлиенте
Процедура СписокТаблицаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    Если Поле.Имя = "КолонкаКнопкаФото" Тогда
        СтандартнаяОбработка = Ложь; // Отменяем стандартное поведение
        // Вызов логики получения фото
    КонецЕсли;

КонецПроцедуры

Стоит учитывать, что событие Выбор стандартно срабатывает по двойному клику левой кнопкой мыши или по нажатию клавиши Enter.

Способ 3: Использование флажка (Тумблера)

Еще один интересный способ, который отлично имитирует одноразовое нажатие — использование колонки с типом Булево.

  1. Создайте колонку с типом Булево.
  2. Выведите ее на форму с видом Поле флажка.
  3. Настройте обработчик события ПриИзменении для этого элемента формы.

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

Альтернативные архитектурные решения

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

  1. Контекстное меню и командная панель: добавьте команду "Сделать фото" в контекстное меню таблицы и в командную панель формы. Действие будет применяться к выделенной (текущей) строке.
  2. Отдельное поле просмотра: сделайте отдельное поле с картинкой вне таблицы. Выводите или редактируйте туда картинку при активации строки (событие ПриАктивизацииСтроки).

Реализация логики получения фото

Если конечная цель вашей кнопки — получение фотографии, рассмотрим методы работы с мультимедиа, доступные в 1С. В современных конфигурациях, работающих на Мобильном клиенте или на ПК с подключенной веб-камерой, используется встроенный асинхронный метод платформы.

Внутри обработчика клика вызовите метод Мультимедиа.СделатьФотоснимокАсинх(). После того как пользователь сделает снимок, платформа вернет двоичные данные картинки. Вам останется поместить их во временное хранилище и сохранить в привязке к конкретной строке или объекту базы данных.

← На главную