Как реализовать кнопки удаления или другие действия внутри каждой строки табличной части в 1С?

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

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

Метод 1. Использование колонки с картинкой и обработка события «Выбор»

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

Во-первых, в конфигураторе в составе реквизита типа ТабличнаяЧасть создадим новую колонку. Назовем её, например, КнопкаУдалить. Тип данных для этой колонки может быть любым (например, Число или Строка), так как мы не будем хранить в ней данные, а будем использовать только для отображения картинки.

Во-вторых, вынесем эту колонку на форму и настроим её свойства:

  1. Установим свойство Вид в значение ПолеКартинки.
  2. В свойстве КартинкаЗначений выберем стандартную иконку из БиблиотекаКартинок (например, Удалить) или загрузим свою.
  3. Установим свойство ТолькоПросмотр в значение Истина. Это важно для того, чтобы при клике строка не переходила в режим редактирования, а сразу срабатывало событие выбора.
  4. Настроим ширину колонки (обычно достаточно 2–3 единицы).

Теперь проанализируем программную часть. Нам нужно отловить момент, когда пользователь нажимает на нашу «кнопку». Для этого выберем таблицу на форме и создадим обработчик события Выбор.


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

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

&НаКлиенте
Процедура УдалитьСтрокуПользователем(ИдентификаторСтроки)
    
    ТекстВопроса = "Вы действительно хотите удалить выбранную строку?";
    ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьУдалениеСтроки", ЭтотОбъект, ИдентификаторСтроки);
    ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
    
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьУдалениеСтроки(Результат, Параметр) Экспорт
    
    Если Результат = КодВозвратаДиалога.Да Тогда
        Объект.СоставЗаказов.Удалить(Объект.СоставЗаказов.НайтиПоИдентификатору(Параметр));
    КонецЕсли;
    
КонецПроцедуры

Метод 2. Поле надписи с гиперссылкой (без Photoshop)

Проанализируем ситуацию, когда картинки выглядят мелко или плохо центрируются по высоте строки. Часто это происходит из-за разницы в шрифтах и разрешении экрана. В этом случае мы можем использовать ПолеНадписи с включенным свойством Гиперссылка.

Разберем алгоритм настройки:

  1. Добавляем колонку и устанавливаем её вид как ПолеНадписи.
  2. В свойстве Гиперссылка ставим флажок.
  3. В качестве текста для этой колонки (в событии ПриВыводеДанных или через установку значения в реквизит) пишем что-то вроде «❌», «[Удалить]» или «Удалить».

Преимущество этого метода в том, что текст гиперссылки платформа 1С автоматически центрирует по вертикали внутри строки. Это избавляет нас от необходимости «подгонять» высоту картинок под размер шрифта. Для обработки нажатия в данном случае лучше использовать событие Нажатие самого поля надписи.

Метод 3. Использование символов Unicode (Шрифтовые иконки)

Выясним причину, по которой интерфейс может выглядеть «коряво». Часто это связано с тем, что растровые картинки не масштабируются. Современная платформа позволяет использовать символы Unicode. Вместо того чтобы вставлять объект Картинка, мы можем вывести в обычное текстовое поле символ-пиктограмму.

Посмотрим на примеры популярных символов:

Такой подход гарантирует, что иконка будет идеально сочетаться с цветом текста строки и корректно отображаться на мониторах с высоким разрешением (4K), так как символ является частью шрифта.

Тонкости позиционирования и управления высотой

Рассмотрим технический нюанс: как сделать так, чтобы кнопка была «прижата» к краю, а не болталась посередине огромной таблицы? В 1С УправляемаяФорма сама распределяет ширину колонок. Чтобы кнопка всегда была сбоку, рекомендуется:

  1. Разместить колонку-кнопку самой первой или самой последней в списке элементов формы.
  2. Установить для неё РастягиваниеПоГоризонтали в значение Ложь.
  3. Для остальных колонок (например, «Номенклатура») установить растягивание в Истина.

Если заказчик жалуется на маленькую высоту кнопок, проанализируем свойство самой таблицы ВысотаСтрок. Установив значение, например, 2, мы увеличим кликабельную область для каждой строки, что особенно полезно для сенсорных экранов и мобильных клиентов.

Условное оформление: прячем кнопку там, где она не нужна

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

Используем механизм УсловноеОформление формы. Мы можем задать правило: если условие Объект.СоставЗаказов.Статус = "Заблокировано" выполняется, то для колонки СоставЗаказовКнопкаУдалить установить параметр Видимость в значение Ложь или Текст в пустую строку. Это делает интерфейс динамичным и интуитивно понятным.

Особенности для мобильных устройств

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

Подводя итог, можно сказать, что хотя в 1С нет прямого объекта «Кнопка в строке», сочетание колонки с типом ПолеКартинки или ПолеНадписи с грамотной обработкой события Выбор позволяет создать профессиональный и удобный интерфейс, полностью отвечающий требованиям современных бизнес-приложений.

← На главную