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

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

При переходе со старых конфигураций 1С (на обычных формах, таких как УПП 1.3 или Бухгалтерия 2.0) на современные управляемые интерфейсы под управлением Библиотеки Стандартных Подсистем (БСП) разработчики и пользователи часто сталкиваются с изменением привычной эргономики. Одной из таких проблем является размещение кнопок внешнего заполнения табличных частей. Для миграции накопленной информации можно применить перенос данных из УПП 1.3 в Бухгалтерию предприятия 3.0, исключающий ручной ввод документов и остатков.

В старых версиях БСП существовал отдельный вид обработок — «Заполнение табличных частей», и кнопка «Заполнить» автоматически создавалась непосредственно над целевой таблицей. В современных версиях БСП этот механизм был упразднен и заменен единой концепцией «Заполнение объекта». Из-за этого система по умолчанию выводит все внешние обработки заполнения в общую командную панель формы документа (в подменю «Заполнить» или меню «Еще»). К таким инструментам относится загрузка отчётов о продажах маркетплейсов в БП 3 из Excel, автоматизирующая заполнение документов на основании внешних файлов.

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

Причина поведения системы: почему БСП так делает?

Выясним причину такого поведения БСП. Современная концепция UI/UX в 1С стремится к унификации интерфейсов. Разработчики БСП посчитали, что все команды, изменяющие данные объекта (включая его табличные части), должны быть сгруппированы в одном стандартном месте — в командной панели самого документа. Однако на практике для документов с объемными табличными частями (например, «Реализация товаров и услуг» или «Поступление товаров и услуг») пользователям гораздо удобнее видеть кнопку заполнения прямо над списком товаров.

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


Вариант 1. Административное тиражирование настроек формы (Без программирования)

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

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

  1. Настройка формы под учетной записью администратора (или ключевого пользователя):
    • Откроем необходимый документ (например, «Реализация товаров и услуг»).
    • В правом верхнем углу нажмем кнопку «Еще» — «Изменить форму...».
    • В открывшемся дереве элементов найдем командную панель документа и расположенную в ней группу ПодменюЗаполнить (или аналогичную группу подключаемых команд заполнения).
    • Найдем нужную кнопку внешней обработки и простым перетаскиванием (Drag-and-Drop) переместим её в командную панель нашей табличной части (например, в элемент ТоварыКоманднаяПанель).
    • Нажмем кнопку «Применить» и проверим результат — кнопка появится над таблицей.
  2. Копирование настроек другим пользователям:
    • Перейдем в раздел Администрирование — Настройки пользователей и прав.
    • Найдем гиперссылку «Очистка и копирование настроек» (в разных конфигурациях название может незначительно отличаться).
    • Выберем пункт «Копирование настроек».
    • В качестве источника выберем пользователя, под которым мы только что перенесли кнопку.
    • В списке настроек отметим только внешний вид формы нашего документа.
    • В качестве получателей укажем всех необходимых пользователей или группы пользователей и нажмем «Скопировать».

Плюсы метода: Не требует программирования, не влияет на обновление конфигурации, работает на стандартном функционале.

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


Вариант 2. Использование Расширения конфигурации и механизма подключаемых команд (Рекомендуемый для разработчиков)

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

Для реализации этого метода выполним следующие действия:

  1. Подготовка формы документа в расширении:
    • Создадим новое расширение конфигурации (или откроем существующее).
    • Заимствуем форму нужного документа в расширение.
    • В заимствованной форме перейдем к командной панели целевой табличной части (например, ТоварыКоманднаяПанель).
    • Добавим в эту командную панель новый элемент: Группа - Подменю.
    • Зададим имя для этой группы, например, ПодменюЗаполнитьТоварыТЧ, и установим понятный заголовок (например, «Заполнить»).
  2. Перенаправление вывода команд БСП:

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

    Для этого заимствуем в расширение общий модуль ЗаполнениеОбъектовПереопределяемый и переопределим процедуру ПриОпределенииОбъектовСКомандамиЗаполнения.

    Посмотрим на пример реализации кода в расширении:

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

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

Плюсы метода: Полностью автоматическое решение. Новые обработки будут сами появляться в нужном месте без ручных манипуляций. Решение является «чистым» с точки зрения архитектуры 1С и обновлений.

Минусы: Требует базовых навыков программирования и работы с расширениями.


Вариант 3. Программное создание кнопки «на лету» во внешней обработке (Без изменения конфигурации)

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

Алгоритм работы этого обходного пути следующий:

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

Разберем пример программного кода в модуле внешней обработки:


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

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


Резюме: какой метод выбрать?

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

← На главную