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