Как вынести команду внешней обработки заполнения табличной части на командную панель?

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

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

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

Метод 1. Настройка интерфейса через «Изменить форму» (режим пользователя)

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

  1. Откроем документ, к которому подключена внешняя обработка.
  2. В правой части окна нажмем кнопку Еще и выберем пункт Изменить форму....
  3. В открывшемся окне настройки состава элементов формы нам необходимо найти раздел Командная панель. Обычно кнопки внешних обработок БСП помещает в группу Группа дополнительные команды или аналогичное подменю.
  4. Развернем дерево элементов и найдем нашу команду (она будет называться так же, как указано в сведениях о внешней обработке).
  5. Теперь нам нужно найти в дереве ту табличную часть, на панель которой мы хотим перенести кнопку. Найдем группу, соответствующую командной панели этой таблицы (например, Группа команды списка товары).
  6. Используя кнопки со стрелками или метод перетаскивания (Drag-and-Drop), переместим команду обработки из общей панели в командную панель нужной таблицы.
  7. В свойствах команды (правая часть окна настройки) обратим внимание на поле Только в «Все действия». Чтобы кнопка была видна сразу, установим значение Нет.
  8. Нажмем ОК для сохранения настроек.

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

Метод 2. Программное перемещение команды через расширение (режим разработчика)

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

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


&НаСервере
Процедура ПослеСозданияФормыНаСервере(Отказ, СтандартнаяОбработка)
    
    // Выполняем стандартную инициализацию БСП, чтобы команды успели создаться
    // Обычно это происходит в процедуре ПриСозданииНаСервере основного модуля
    
    // Найдем созданную команду. БСП дает им имена по шаблону: 
    // "ДополнительнаяОбработка_<ИмяКоманды>"
    
    ИмяКнопки = "";
    Для Каждого Элемент Из Элементы Цикл
        Если СтрНайти(Элемент.Имя, "ДополнительнаяОбработка") > 0 
           И СтрНайти(Элемент.Имя, "ЗаполнитьТЧ_МояОбработка") > 0 Тогда
            ИмяКнопки = Элемент.Имя;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ЗначениеЗаполнено(ИмяКнопки) Тогда
        Кнопка = Элементы[ИмяКнопки];
        // Указываем нового родителя — командную панель табличной части
        Кнопка.Родитель = Элементы.ТоварыКоманднаяПанель;
        // Устанавливаем отображение на панели, а не в меню "Еще"
        Кнопка.ПоложениеВКоманднойПанели = ПоложениеКомандыВКоманднойПанели.ВКоманднойПанели;
    КонецЕсли;

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

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

Метод 3. Регулировка свойств в самой внешней обработке

Иногда полезно изменить поведение команды еще на этапе разработки самой обработки. Рассмотрим структуру функции СведенияОВнешнейОбработке. Хотя БСП не предоставляет параметра "ИмяРодителяДляКнопки", важно правильно заполнить таблицу команд.


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

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

Особенности использования расширений и БСП

Проанализируем ситуацию, когда документ обновляется. Если вы использовали Метод 1 (ручная настройка), при обновлении конфигурации, если структура формы сильно изменилась, пользовательские настройки могут сброситься. Если же вы применили Метод 2 (расширение), ваша кнопка будет всегда перемещаться программно, что гарантирует стабильность интерфейса.

При работе с программным изменением формы стоит учитывать следующие моменты:

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

← На главную