Возможно ли программно заменить или скрыть стандартную кнопку печати в 1С?

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

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

Архитектура подсистемы печати БСП

В современных конфигурациях (таких как Бухгалтерия предприятия 3.0, ERP, УТ 11), построенных на базе Библиотеки стандартных подсистем (БСП), механизм формирования кнопок печати унифицирован. Вместо ручного создания кнопок на форме используется программный интерфейс. Разберем по шагам, где именно «рождаются» эти команды.

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

Способ 1: Использование расширения для управления коллекцией команд

Проанализируем ситуацию, когда нам нужно скрыть стандартную кнопку, не снимая основную конфигурацию с поддержки. Лучшим инструментом здесь выступит расширение конфигурации. Рассмотрим, как программно вмешаться в процесс формирования списка команд.

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

Пример кода в расширении для модуля менеджера документа АктСверкиВзаиморасчетов:


&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати)
    // Проанализируем содержимое таблицы команд
    Для Каждого СтрокаКоманды Из КомандыПечати Цикл
        // Ищем стандартную команду по её идентификатору или представлению
        Если СтрокаКоманды.Идентификатор = "АктСверки" Тогда
            // Устанавливаем видимость в Ложь, чтобы кнопка не отображалась в интерфейсе
            СтрокаКоманды.Видимость = Ложь;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Этот метод хорош тем, что он «чистый»: мы не удаляем код поставщика, а лишь корректируем результат его работы. Если в будущем в типовой конфигурации добавятся новые команды, они благополучно отобразятся, а выбранная нами — останется скрытой.

Способ 2: Поиск команд в общих модулях

Иногда процедура ДобавитьКомандыПечати в модуле менеджера оказывается пустой. Рассмотрим подробнее, почему так происходит. В некоторых локализованных версиях (например, для Беларуси или Казахстана) или специализированных отраслевых решениях команды могут выноситься в отдельные общие модули для централизации управления.

Выясним причину отсутствия кода, выполнив глобальный поиск по конфигурации строки "ДобавитьКомандыПечати". Часто команды регистрируются в модулях вида УправлениеПечатьюБППереопределяемый или СозданиеПечатныхФорм. Если вы нашли регистрацию в общем модуле, механизм расширения остается прежним: используйте перехват &После для модификации таблицы КомандыПечати.

Способ 3: Настройка видимости в режиме Предприятие

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

  1. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Найдите пункт Подменю «Печать».
  3. В открывшемся списке выберите нужный тип документа (например, Акт сверки взаиморасчетов).
  4. В списке команд вы увидите как встроенные печатные формы, так и подключенные внешние обработки.
  5. Снимите флажок в колонке «Отображать» для той формы, которую хотите скрыть.

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

Анализ кода формирования печатной формы

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


Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктСверки") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм, 
            "АктСверки", 
            "Акт сверки взаиморасчетов", 
            ПечатьАктаСверки_Локализация(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;
КонецПроцедуры

Обратите внимание на использование функции УправлениеПечатью.НужноПечататьМакет. Это стандартный механизм БСП: система проверяет, выбрал ли пользователь именно этот пункт меню. Чтобы подменить логику через расширение, вы можете перехватить функцию ПечатьАктаСверки_Локализация или саму процедуру Печать. Используя аннотацию &Вместо, вы сможете направить формирование документа по своему алгоритму, используя собственный макет или алгоритм запроса данных.

Группировка кнопок через изменение формы

Рассмотрим ситуацию, когда вам нужно оставить обе кнопки, но сделать интерфейс более аккуратным. В режиме 1С:Предприятие пользователь может нажать Еще — Изменить форму. Там можно создать группу (папку) внутри командной панели и переместить туда редко используемые команды. Однако это индивидуальная настройка пользователя. Для массового применения такой группировки лучше использовать Расширение формы документа, где программно или в визуальном редакторе можно объединить кнопки в подменю.

Резюме

Подведем итог. Если вам необходимо убрать дублирующуюся кнопку печати:

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

← На главную