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