Как убрать лишнюю кнопку Движения документа при использовании БСП

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

При разработке или доработке конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как БГУ 2.0, ERP или Управление торговлей, программисты часто сталкиваются с ситуацией, когда в интерфейсе документа дублируются кнопки. Наиболее типичный пример — появление двух кнопок для просмотра движений документа. Одна из них является стандартной командой платформы «1С:Предприятие», а вторая — отчетом, который автоматически добавляется подсистемой БСП.

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

Причина появления дублирующих команд

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

Способ 1. Отключение платформенной команды в форме

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

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

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

Способ 2. Управление командами через Модуль менеджера (БСП 3.0 и выше)

Если же ваша задача — программно управлять списком отчетов, которые БСП выводит в подменю «Отчеты», следует обратиться к модулю менеджера документа. В современных версиях БСП (начиная с 3.0) используется процедура НастроитьКомандыОтчетов. Рассмотрим, как это работает.

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


Процедура НастроитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	// Здесь можно добавить свои отчеты или изменить существующие
	// Чтобы скрыть конкретную команду, нужно найти ее в таблице КомандыОтчетов
	
	ПараметрыПоиска = Новый Структура("Идентификатор", "ДвиженияДокумента");
	СтрокиКоманд = КомандыОтчетов.НайтиСтроки(ПараметрыПоиска);
	
	Для Каждого СтрокаКоманды Из СтрокиКоманд Цикл
		СтрокаКоманда.Видимость = Ложь;
	КонецЦикла;

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

Важно помнить, что поиск команды по идентификатору — самый надежный способ. Если вы используете более старые версии БСП, процедура может называться ПриОпределенииКомандОтчетов. Принцип работы в ней аналогичен: вы работаете с коллекцией команд, устанавливая свойство Видимость в значение Ложь.

Способ 3. Использование справочника Варианты отчетов

Иногда кнопка появляется потому, что в системе зарегистрировано несколько вариантов отчета для одного и того же объекта. В этом случае программирование может не потребоваться вовсе. Рассмотрим действия в пользовательском режиме:

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

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

Способ 4. Глобальное отключение через общий модуль

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

Разберем пример кода в процедуре ПередДобавлениемКомандОтчетов:


Процедура ПередДобавлениемКомандОтчетов(Форма, КомандыОтчетов, Параметры) Экспорт
	
	// Проверяем тип документа, если нужно отключить только для определенных
	Если ТипЗнч(Параметры.Объекты[0]) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
		// Удаляем команду из коллекции по идентификатору или заголовку
		Индекс = 0;
		Пока Индекс < КомандыОтчетов.Количество() Цикл
			Команда = КомандыОтчетов[Индекс];
			Если Команда.Идентификатор = "ДвиженияДокумента" Тогда
				КомандыОтчетов.Удалить(Индекс);
			Иначе
				Индекс = Индекс + 1;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

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

Способ 5. Скрытие кнопки непосредственно в форме (динамический метод)

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

Посмотрим на пример реализации:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// Вызываем стандартный обработчик БСП (если есть)
	// ...
	
	// Попытка найти и скрыть кнопку программно
	ГруппаОтчеты = Элементы.Найти("ПодменюОтчеты"); 
	Если ГруппаОтчеты <> Неопределено Тогда
		Для Каждого Кнопка Из ГруппаОтчеты.ПодчиненныеЭлементы Цикл
			// Проверяем имя кнопки или заголовок
			Если Найти(Кнопка.Имя, "ДвиженияДокумента") > 0 Тогда
				Кнопка.Видимость = Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

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

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

Различие между командами Печати и Отчетами

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

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

Резюме

Подведем итог нашему разбору. Чтобы убрать лишнюю кнопку движений, мы должны сначала определить, какая именно кнопка лишняя: платформенная или от БСП. После этого мы выбираем наиболее подходящий уровень воздействия — от простых настроек видимости в командном интерфейсе формы до программного управления в модуле менеджера документа. Использование механизмов БСП (НастроитьКомандыОтчетов) является наиболее правильным и «этичным» с точки зрения архитектуры 1С способом решения задачи.

← На главную