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