При переходе со старых конфигураций 1С (на обычных формах, таких как УПП 1.3 или Бухгалтерия 2.0) на современные управляемые интерфейсы под управлением Библиотеки Стандартных Подсистем (БСП) разработчики и пользователи часто сталкиваются с изменением привычной эргономики. Одной из таких проблем является размещение кнопок внешнего заполнения табличных частей. Для миграции накопленной информации можно применить перенос данных из УПП 1.3 в Бухгалтерию предприятия 3.0, исключающий ручной ввод документов и остатков.
В старых версиях БСП существовал отдельный вид обработок — «Заполнение табличных частей», и кнопка «Заполнить» автоматически создавалась непосредственно над целевой таблицей. В современных версиях БСП этот механизм был упразднен и заменен единой концепцией «Заполнение объекта». Из-за этого система по умолчанию выводит все внешние обработки заполнения в общую командную панель формы документа (в подменю «Заполнить» или меню «Еще»). К таким инструментам относится загрузка отчётов о продажах маркетплейсов в БП 3 из Excel, автоматизирующая заполнение документов на основании внешних файлов.
В этой статье мы подробно разберем, какими способами можно вернуть кнопку заполнения обратно в командную панель табличной части, как сделать это без изменения конфигурации и как автоматизировать процесс для всех пользователей.
Выясним причину такого поведения БСП. Современная концепция UI/UX в 1С стремится к унификации интерфейсов. Разработчики БСП посчитали, что все команды, изменяющие данные объекта (включая его табличные части), должны быть сгруппированы в одном стандартном месте — в командной панели самого документа. Однако на практике для документов с объемными табличными частями (например, «Реализация товаров и услуг» или «Поступление товаров и услуг») пользователям гораздо удобнее видеть кнопку заполнения прямо над списком товаров.
Рассмотрим три практических варианта решения этой задачи: от простого административного до полноценной разработки через механизм расширений.
Если вам нужно решить задачу «здесь и сейчас» без привлечения программиста и написания кода, можно воспользоваться стандартными возможностями платформы 1С:Предприятие 8.3 по настройке интерфейса.
Каждый пользователь может самостоятельно перетащить кнопку в удобное место, но чтобы не заставлять каждого сотрудника делать это вручную, мы выполним настройку один раз и растиражируем её на всех. Разберем этот процесс по шагам:
ПодменюЗаполнить (или аналогичную группу подключаемых команд заполнения).ТоварыКоманднаяПанель).Плюсы метода: Не требует программирования, не влияет на обновление конфигурации, работает на стандартном функционале.
Минусы: При добавлении новых пользователей процедуру копирования настроек придется повторять. При обновлении конфигурации, если форма документа претерпит значительные изменения, пользовательские настройки могут сброситься. Для регулярного выполнения регламентных задач используется автоматическое обновление и тестирование баз 1С в тихом режиме.
Проанализируем более надежный и автоматический вариант. Мы можем создать расширение конфигурации, которое переопределит место вывода команд заполнения для конкретного документа. После этого любая новая внешняя обработка заполнения, зарегистрированная в справочнике «Дополнительные отчеты и обработки», будет автоматически создаваться в командной панели ТЧ.
Для реализации этого метода выполним следующие действия:
ТоварыКоманднаяПанель).ПодменюЗаполнитьТоварыТЧ, и установим понятный заголовок (например, «Заполнить»).В БСП за формирование команд заполнения отвечает подсистема «Подключаемые команды». Нам необходимо указать системе, что для нашего документа команды заполнения должны выводиться не в стандартное меню документа, а в созданное нами подменю над табличной частью.
Для этого заимствуем в расширение общий модуль ЗаполнениеОбъектовПереопределяемый и переопределим процедуру ПриОпределенииОбъектовСКомандамиЗаполнения.
Посмотрим на пример реализации кода в расширении:
&Вместо("ПриОпределенииОбъектовСКомандамиЗаполнения")
Процедура Расш_ПриОпределенииОбъектовСКомандамиЗаполнения(СписокОбъектов) Экспорт
// Вызываем стандартный обработчик БСП для заполнения базового списка
ПродолжитьВызов(СписокОбъектов);
// Обходим коллекцию настроек и находим наш документ
Для Каждого НастройкаОбъекта Из СписокОбъектов Цикл
Если НастройкаОбъекта.ПолноеИмя = "Документ.РеализацияТоваровУслуг" Тогда
// Указываем имя созданного нами подменю в ТЧ для размещения команд
НастройкаОбъекта.ИмяГруппыКнопокТЧ = "ПодменюЗаполнитьТоварыТЧ";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
После применения данного расширения БСП при открытии формы документа автоматически проанализирует настройки, найдет зарегистрированные внешние обработки заполнения для этого документа и программно выведет кнопки именно в подменю ПодменюЗаполнитьТоварыТЧ над табличной частью. При возникновении сопутствующих проблем с интерфейсом БСП, например зависании окна выбора, можно использовать расширение для исправления закрытия формы выбора дополнительных обработок.
Плюсы метода: Полностью автоматическое решение. Новые обработки будут сами появляться в нужном месте без ручных манипуляций. Решение является «чистым» с точки зрения архитектуры 1С и обновлений.
Минусы: Требует базовых навыков программирования и работы с расширениями.
Рассмотрим ситуацию, когда конфигурацию и базу данных нельзя трогать вообще (даже с помощью расширений), но программист имеет доступ к коду самой внешней обработки. В этом случае можно прибегнуть к программному изменению формы документа непосредственно из кода внешней обработки в момент ее первого вызова.
Алгоритм работы этого обходного пути следующий:
Разберем пример программного кода в модуле внешней обработки:
// В модуле формы внешней обработки или ее клиентском модуле
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
// Получаем форму документа-владельца из параметров выполнения
ФормаДокумента = ПараметрыВыполнения.ЭтаФорма;
// Зададим уникальное имя для динамической кнопки
ИмяКнопкиЗаполнения = "ДинамическаяКнопкаЗаполненияТЧ";
// Проверим, не добавлена ли уже кнопка на форму (чтобы избежать дублирования при повторных вызовах)
Если ФормаДокумента.Элементы.Найти(ИмяКнопкиЗаполнения) = Неопределено Тогда
// Создаем новую команду на форме документа
НоваяКоманда = ФормаДокумента.Команды.Добавить(ИмяКнопкиЗаполнения);
НоваяКоманда.Заголовок = "Заполнить ТЧ (Внешний алгоритм)";
// Назначаем обработчик команды.
// Внимание: обработчик должен быть доступен на форме документа или перенаправлен
НоваяКоманда.Действие = "Подключаемый_ВыполнитьКоманду";
// Находим командную панель таблицы "Товары"
ПанельТЧ = ФормаДокумента.Элементы.ТоварыКоманднаяПанель;
// Программно добавляем кнопку в найденную панель
НоваяКнопка = ФормаДокумента.Элементы.Добавить(ИмяКнопкиЗаполнения, Тип("КнопкаФормы"), ПанельТЧ);
НоваяКнопка.ИмяКоманды = ИмяКнопкиЗаполнения;
НоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
КонецЕсли;
// Сразу же выполняем основной алгоритм заполнения табличной части
ВыполнитьЗаполнениеТаблицы(ФормаДокумента);
КонецПроцедуры
Важное предупреждение: Данный метод имеет существенное ограничение. Кнопка появится на форме только после первого ручного запуска обработки из стандартного интерфейса БСП (через меню «Заполнить» документа). При последующих открытиях документа пользователю сначала придется один раз запустить ее стандартно, чтобы кнопка «прикрепилась» к табличной части на время текущего сеанса работы с формой. Кроме того, динамическое изменение чужих форм чувствительно к обновлениям конфигурации — если разработчики 1С переименуют командную панель ТоварыКоманднаяПанель, код вызовет ошибку выполнения.
Мы проанализировали три принципиально разных подхода к решению задачи. Подведем итог, какой метод выбрать в вашей ситуации: