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

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

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

Метод 1. Программное создание команды и кнопки

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // 1. Создаем новую команду формы
    ИмяКоманды = "ДинамическаяКомандаЗаполнения";
    НоваяКоманда = ЭтаФорма.Команды.Добавить(ИмяКоманды);
    НоваяКоманда.Действие  = "Подключаемый_ВыполнитьЗаполнениеТЧ";
    НоваяКоманда.Заголовок = "Заполнить из внешней обработки";
    НоваяКоманда.Подсказка = "Запустить алгоритм заполнения табличной части";
    
    // 2. Определяем родителя для кнопки - командную панель ТЧ "Товары"
    // Если на форме нет отдельной командной панели, кнопка добавится в общую панель ТЧ
    Родитель = Элементы.ТоварыКоманднаяПанель; 
    
    // 3. Создаем кнопку и привязываем её к команде
    НоваяКнопка = Элементы.Добавить("КнопкаЗаполнитьТЧ", Тип("КнопкаФормы"), Родитель);
    НоваяКнопка.ИмяКоманды = ИмяКоманды;
    НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
    
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗаполнениеТЧ(Команда)
    // Здесь описываем логику вызова обработки
    // Например, открытие формы внешней обработки или вызов серверного метода заполнения
    ПоказатьОповещениеПользователя("Запуск обработки заполнения...");
КонецПроцедуры

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

Метод 2. Программное перемещение существующих элементов

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

Синтаксис метода: Элементы.Переместить(Элемент, НовыйРодитель, СледующийЭлемент). Рассмотрим пример перемещения кнопки из верхней панели в панель ТЧ:


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

Метод 3. Вызов внешней обработки через интерфейс БСП

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

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


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

Выясним причину, почему это лучше: использование штатных методов БСП гарантирует, что обработка получит доступ к данным формы, а после её завершения форма документа будет корректно обновлена (оповещение об изменении данных).

Метод 4. Интерактивная настройка (без программирования)

Если задача разовая и программирование нежелательно, можно воспользоваться механизмом «Изменить форму». Разберем этот процесс:

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

Важный момент: такие настройки сохраняются индивидуально для каждого пользователя. Чтобы распространить их на всех сотрудников, администратор может воспользоваться обработкой «Копирование настроек пользователей» в разделе Администрирование. Выберите эталонного пользователя (себя) и скопируйте настройку формы документа нужным коллегам.

Тонкости работы с контекстом ТЧ

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


// Получаем список идентификаторов выделенных строк
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;

// Передаем их в параметры команды для внешней обработки
ПараметрыКоманды.Вставить("ВыделенныеСтроки", ВыделенныеСтроки);

Это делает инструмент гораздо мощнее, позволяя пользователю гибко управлять процессом заполнения. Также не забывайте про использование Расширений конфигурации. Вместо правки кода типовой формы, создайте расширение и добавьте код в обработчик &После("ПриСозданииНаСервере"). Это обеспечит легкое обновление конфигурации в будущем, так как типовой код останется нетронутым.

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

← На главную