Как отсортировать и изменить порядок печатных форм в меню Печать

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

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

Метод 1. Использование свойства Порядок для встроенных команд

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

Каждая команда, добавляемая в таблицу команд печати, имеет структуру, в которой присутствует поле Порядок. По умолчанию БСП может присваивать это значение автоматически, но мы можем переопределить его вручную.

Разберем пример кода в модуле менеджера документа:


Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Добавляем первую команду, которую хотим видеть в самом верху
    НоваяКоманда = КомандыПечати.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (основной)'");
    НоваяКоманда.Идентификатор = "СчетНаОплату";
    НоваяКоманда.Порядок = 10; // Указываем меньшее число для поднятия вверх
    
    // Добавляем вторую команду, которая должна быть ниже
    НоваяКоманда = КомандыПечати.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Товарная накладная'");
    НоваяКоманда.Идентификатор = "ТОРГ12";
    НоваяКоманда.Порядок = 100; // Большее число опустит команду ниже
    
КонецПроцедуры

Важный нюанс: если вы хотите, чтобы ваша форма гарантированно оказалась выше всех стандартных форм, можно использовать отрицательные значения, например, -10 или -100. Система сортирует список по возрастанию значения в колонке Порядок. Если значения одинаковы, вступает в силу алфавитная сортировка по наименованию (представлению) команды.

Метод 2. Управление порядком внешних печатных форм (ВПФ)

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

В модуле объекта внешней обработки в таблице команд также предусмотрена колонка Порядок. Посмотрим на пример формирования этой таблицы:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.ПараметрыРегистрацииВнешнейОбработки();
    // ... заполнение общих параметров ...
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Моя внешняя форма";
    НоваяКоманда.Идентификатор = "ВнешняяПечать1";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.Порядок = 1; // Попытка задать приоритет
    
    Возврат ПараметрыРегистрации;
КонецФункции

Выясним причину, по которой это может не сработать. БСП кэширует сведения о внешних обработках в справочнике Дополнительные отчеты и обработки. Если вы просто изменили код внутри .epf файла, система об этом не узнает. Чтобы изменения вступили в силу, необходимо зайти в справочник, открыть карточку обработки и нажать кнопку Обновить из файла. Только после этого новые значения из колонки Порядок попадут в базу данных и будут использованы при формировании меню.

Метод 3. Пользовательская настройка меню Печать

В современных версиях 1С (начиная с БСП 3.0) пользователям предоставлен мощный инструмент самостоятельной настройки. Разберем, как им воспользоваться без написания кода. В подменю Печать любого документа присутствует пункт Настройка... (часто обозначается иконкой шестеренки).

Проанализируем возможности этого окна и недокументированные способы использования стандартных форм:

  1. Пользователь может скрыть лишние формы. Это значительно сокращает список.
  2. В некоторых релизах реализована возможность интерактивного перемещения строк (кнопками "Вверх" / "Вниз").
  3. Настройки сохраняются в разрезе пользователя или могут быть установлены для всех пользователей администратором через сохранение настроек формы для всех пользователей.

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

Метод 4. Программное перемещение элементов в форме документа

Рассмотрим продвинутый способ для программистов — прямое управление элементами формы. Этот метод выручает, когда стандартные свойства БСП игнорируются или когда логика сортировки должна быть динамической (зависеть от реквизитов документа).

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Вызов стандартного механизма БСП
    ПодключаемыйКомандыПечати.ПриСозданииНаСервере(ЭтотОбъект);
    
    // Теперь найдем наше подменю печати. Обычно оно называется "ПодменюПечать"
    // Попробуем переместить конкретную команду в самое начало
    Попытка
        ЭлементКоманда = Элементы.Найти("ПодменюПечатьСчетНаОплату"); // Имя формируется по шаблону
        ГруппаПечать = Элементы.ПодменюПечать;
        
        // Метод Переместить(Элемент, Родитель, ПередКакимЭлементом)
        // Если третий параметр пустой, элемент перемещается в начало
        Элементы.Переместить(ЭлементКоманда, ГруппаПечать, ГруппаПечать.ПодчиненныеЭлементы[0]);
    Исключение
        // Обработка ситуации, если команда не найдена
    КонецПопытки;

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

Здесь мы используем метод Элементы.Переместить(). Это "силовой" метод, который позволяет выстроить иерархию элементов управления формы вопреки тому, как их расположил автоматический построитель БСП.

Метод 5. Группировка команд

Если список печатных форм все равно остается слишком длинным, проанализируем возможность создания подгрупп. В БСП можно указать родительскую группу для команды печати. Вместо огромного плоского списка мы получим логически разделенное меню.

Для этого в структуре КомандаПечати используется свойство ДополнительныеПараметры или создание отдельных групп команд. Посмотрим, как создать вложенное меню:


// В модуле менеджера
НоваяКоманда = КомандыПечати.Добавить();
НоваяКоманда.Представление = "Архивная справка";
НоваяКоманда.Идентификатор = "Архив";
НоваяКоманда.СписокПутейКПанелям = "ПодменюПечать.ГруппаАрхивныеДокументы";

Использование групп (подменю второго уровня) автоматически решает проблему сортировки в основном списке, так как несколько команд "прячутся" в один узел.

Резюме и рекомендации

Подведем итоги нашего исследования. Используя справочник по методам БСП, придерживайтесь следующего алгоритма:

  1. Для встроенных форм всегда явно задавайте числовой Порядок в модуле менеджера. Помните о возможности использования отрицательных чисел для приоритетных задач.
  2. Для внешних форм не забывайте выполнять процедуру Обновить из файла в справочнике дополнительных обработок после каждого изменения кода.
  3. Если формы нужно отсортировать "здесь и сейчас" без программирования — используйте штатную Настройку в меню печати.
  4. При наличии очень специфических требований к интерфейсу используйте метод Элементы.Переместить() в коде управляемой формы.
  5. Следите за кэшем: иногда для того, чтобы увидеть изменения в меню, требуется перезапустить сеанс пользователя 1С.

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

← На главную