Как добавить кнопку Движения документа в форме списка и документа в 1С

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

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

Подготовка формы документа и формы списка

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

В процедуре ПриСозданииНаСервере мы должны инициализировать механизм команд. Это позволяет системе динамически создавать кнопки в командной панели формы на основе настроек БСП.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

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


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

Также необходимо добавить служебные обработчики, которые будут непосредственно выполнять команды при нажатии на кнопки. Рекомендуется выделить их в отдельную область ПодключаемыеОбработчики:


#Область ПодключаемыеОбработчики

&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    // Выполняет команду, связанную с элементом управления
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)
    // Передает управление на сервер для выполнения серверной части команды
    ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Список, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды
    // Принудительное обновление состава доступных команд
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Список);
КонецПроцедуры

#КонецОбласти

Регистрация документа в подсистеме вариантов отчетов

Простого добавления кода в форму часто бывает недостаточно. Если система выдает ошибку «Команда не может быть выполнена для указанного объекта», это означает, что БСП «не знает» о связи вашего нового документа и отчета по движениям. Выясним, как правильно зарегистрировать объект.

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

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


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

Важно помнить: чтобы отчет понимал, какие именно движения показывать, у документа в метаданных на вкладке «Движения» должны быть выбраны соответствующие регистры, для которых он является регистратором.

Проверка определяемых типов и прав доступа

Если после внесения изменений кнопка так и не заработала или выдает ошибку доступа, проверим настройки в конфигураторе:

  1. Определяемые типы: Найдите в дереве метаданных ОпределяемыйТип.ОбъектСКомандамиОтчетов. Убедитесь, что в состав этого типа включена ссылка на ваш новый документ. Без этого механизмы БСП не смогут корректно обрабатывать ссылки объекта.
  2. Права доступа: Проверьте, что у роли пользователя есть право Просмотр на общую команду ПоказатьДвиженияДокумента (если она используется) или на сам отчет ДвиженияДокумента. Также необходимы права на чтение регистров, движения по которым мы хотим увидеть.
  3. Общая команда: В некоторых версиях БСП кнопка вызывается через общую команду ПоказатьДвиженияДокумента. Проверьте свойство этой команды «Тип параметра команды». Ваш документ должен быть отмечен в этом списке.

Обновление справочника Идентификаторы объектов метаданных

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

Запустите программу в режиме «1С:Предприятие» и через функции для технического специалиста (или «Все функции») откройте справочник «Идентификаторы объектов метаданных». В командной панели этого справочника найдите и выполните команду «Обновить данные справочника». Это позволит системе «увидеть» новые связи и зарегистрированные команды для вашего документа.

Альтернативный ручной способ вызова отчета

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

Рассмотрим пример кода для ручного открытия:


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

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

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

← На главную