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