В платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с ограничением стандартного механизма ИспользоватьЗакладкиОтбора. Этот метод удобен тем, что автоматически создает вкладки в журнале документов по конкретному реквизиту (например, по Контрагенту), но он имеет существенный минус: закладки всегда сортируются строго по алфавиту. В реальных задачах часто требуется выстроить их в ином порядке — например, по коду контрагента, по частоте обращений или согласно внутренней иерархии компании, сохранив при этом понятное текстовое название на самой закладке.
В данной статье мы разберем, как полностью взять управление интерфейсом закладок под свой контроль, используя программные методы работы с объектами формы и списками значений.
Стандартная функция ИспользоватьЗакладкиОтбора() привязывается к графе отбора в конфигураторе. Она работает «из коробки», но не дает доступа к редактированию списка элементов. Чтобы реализовать произвольный порядок, нам необходимо отказаться от автоматического режима в пользу ручного управления через объект Форма.Закладки.
Этот путь подразумевает три этапа:
СписокЗначений.Рассмотрим процедуру ПриОткрытии в модуле формы журнала. Вместо вызова стандартного отбора по графе, мы должны явно указать системе, что будем использовать кастомные закладки. Проанализируем пример кода:
Процедура ПриОткрытии()
// Включаем использование программных закладок
Форма.ИспользоватьЗакладки(1);
// Создаем список значений для будущих вкладок
СписокДляЗакладок = СоздатьОбъект("СписокЗначений");
// Добавляем вкладку для сброса фильтра
СписокДляЗакладок.ДобавитьЗначение(0, "Все документы");
// Заполняем список контрагентами
Спр = СоздатьОбъект("Справочник.Контрагенты");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
// Здесь мы можем реализовать свою логику сортировки,
// например, добавляя в представление код или другой признак
Представление = Спр.Наименование;
СписокДляЗакладок.ДобавитьЗначение(Спр.ТекущийЭлемент(), Представление);
КонецЦикла;
// Устанавливаем сформированный список в интерфейс формы
Форма.Закладки(СписокДляЗакладок);
КонецПроцедуры
Выясним причину, по которой нам нужен был ручной метод. Чтобы изменить порядок, мы можем воспользоваться методом СортироватьПоПредставлению() или СортироватьПоЗначению(). Если нам нужно, чтобы контрагенты шли по коду, мы можем сначала сформировать список, где значением будет объект, а представлением — комбинация «Код + Наименование», либо использовать метод СдвинутьЗначение() для ручной расстановки приоритетных элементов.
Проанализируем ситуацию, когда нужно вывести сначала наиболее важных клиентов. Для этого при заполнении списка можно использовать временную таблицу или индексированную таблицу (если установлены внешние компоненты), а затем перенести данные в Форма.Закладки.
Посмотрим на пример использования метода УстановитьЗначение для изменения названия уже созданной закладки:
// Допустим, нам нужно переименовать 2-ю закладку программно
ТекЗначение = "";
ТекПредставление = "";
Форма.Закладки.ПолучитьЗначение(2, ТекЗначение);
Форма.Закладки.УстановитьЗначение(2, ТекЗначение, "(!) " + ТекПредставление);
Теперь разберем, как заставить журнал реагировать на нажатие по этим вкладкам. В 1С 7.7 существует предопределенная процедура ПриВыбореЗакладки. В ней мы должны использовать метод УстановитьОтбор, чтобы отфильтровать документы по выбранному значению.
Процедура ПриВыбореЗакладки(Номер, Значение)
// Если выбрана первая закладка "Все документы" (мы задали ей значение 0)
Если Значение = 0 Тогда
// Сбрасываем отбор по графе
УстановитьОтбор("", "");
Иначе
// Устанавливаем отбор по конкретному контрагенту
// "Контрагент" - это имя графы отбора, заданной в Конфигураторе
УстановитьОтбор("Контрагент", Значение);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы метод УстановитьОтбор отработал без ошибок, реквизит документа (в данном случае «Контрагент») обязательно должен быть включен в «Графу отбора» в метаданных конфигурации, и у этой графы должен стоять признак «Отбор».
Если штатных возможностей списка значений недостаточно (например, требуется изменить цвет шрифта на закладках или добавить иконки для визуального разделения групп контрагентов), профессиональные разработчики подключают внешнюю компоненту FormEx. Она позволяет расширить объектную модель формы.
С помощью FormEx можно перехватывать события отрисовки закладок и менять их визуальные свойства. Рассмотрим это как дополнительный инструмент для улучшения юзабилити, когда количество закладок становится слишком большим и пользователю трудно ориентироваться только по тексту.
Проанализируем ситуацию, когда в справочнике тысячи элементов. Создание тысяч закладок сделает работу с журналом невозможной: интерфейс 1С 7.7 начнет отрисовывать закладки в десятки рядов, перекрывая список документов.
В таких случаях рекомендуется:
Таким образом, переход от автоматических закладок к программному управлению через Форма.Закладки дает разработчику полную гибкость в представлении данных, позволяя реализовать любую логику сортировки и именования элементов интерфейса.