При разработке расширений конфигурации разработчики часто сталкиваются с задачей добавления параметризуемой общей команды, которая должна работать сразу с несколькими типами объектов. Типичный пример — подключение механизма прикрепления файлов или специализированных обработок к документам (например, к документам раздела КУДиР в «1С:Бухгалтерии предприятия 3.0»). Однако при попытке настроить составной тип параметра в общей команде расширения платформа может вести себя некорректно: команда либо не переопределяется в палитре свойств, либо не отображается в пользовательском интерфейсе на конкретных рабочих местах.
Проанализируем причины такого поведения платформы 1С:Предприятие 8.3 и разберем несколько вариантов решения этой задачи — от простого обходного пути до штатной интеграции через механизмы БСП.
Выясним причину, почему составной тип параметра общей команды может работать нестабильно при вынесении функционала в расширение:
Группа выбрана группа формы (например, Панель навигации формы или Командная панель формы). Для команд разделов или панели действий параметр команды платформой блокируется.8.3.24 наблюдались ошибки автогенерации интерфейса для параметризуемых команд с составным типом (команда могла не выводиться на типовые формы без их явного заимствования). Начиная с версий 8.3.25 и 8.3.26 механизм внедрения команд расширения в командный интерфейс без изменения самих форм был существенно доработан.Рассмотрим практический обходной путь, позволяющий обойти ограничения платформы по работе с составными типами параметров в расширениях. Если платформа блокирует переопределение команды для двух документов одновременно или не отображает ее в интерфейсе клиента, разделим задачу на независимые объекты метаданных.
Разберем по шагам реализацию этого способа:
ПрикрепитьФайлыДокумент1.Группа укажем нужную область формы (например, Панель навигации формы.Обычное).Тип параметра команды укажем только один конкретный заимствованный документ (без составного типа).ПрикрепитьФайлыДокумент2 с точно такими же настройками, но в качестве параметра выберем второй заимствованный документ.Посмотрим на пример организации обработчика в модуле общей команды расширения:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// ПараметрКоманды содержит ссылку на конкретный документ
МодульФайловКлиент.ОткрытьФормуПрикрепленияФайлов(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник);
КонецПроцедуры
Такой подход устраняет конфликт составного типа и гарантирует, что каждая команда надежно привяжется к своему типу документа на любой версии платформы.
Если требуется сохранить единую команду и не дублировать метаданные, рассмотрим более гибкий архитектурный подход. Вместо прямого указания составного типа непосредственно в параметре общей команды воспользуемся определяемым типом.
Разберем по шагам порядок действий:
ОпределяемыйТип.ВладелецФайловКУДиР.Тип параметра команды укажем только что созданный ОпределяемыйТипСсылка.ВладелецФайловКУДиР.Благодаря этому для общей команды тип параметра остается простым (ссылается на один определяемый тип), а вся вариативность состава типов инкапсулируется на уровне метаданных. Это предотвращает ошибки отрисовки динамического интерфейса платформы.
Если цель доработки заключается в прикреплении файлов к документам в типовой конфигурации («Бухгалтерия предприятия 3.0»), проанализируем штатный способ, заложенный разработчиками Библиотеки стандартных подсистем. При таком подходе создавать собственные общие команды вообще не требуется — БСП выведет типовую команду работы с файлами автоматически.
Разберем по шагам настройку механизма БСП через расширение:
ОпределяемыйТип.ВладелецПрисоединенныхФайлов.ПрисоединенныеФайлыПереопределяемый с установкой признака «Вызывать вместо» или «После» для процедуры определения объектов.Посмотрим на пример переопределения в общем модуле расширения:
&После("ПриОпределенииОбъектовСПрисоединеннымиФайлами")
Процедура Расш1_ПриОпределенииОбъектовСПрисоединеннымиФайлами(Список)
Список.Добавить(Тип("ДокументСсылка.ЗаписьКнигиУчетаДоходовИРасходов"));
Список.Добавить(Тип("ДокументСсылка.РегистрацияОплатыОсновныхСредствДляУСН"));
КонецПроцедуры
После применения такого расширения типовая команда работы с файлами автоматически появится в панели навигации форм указанных документов без необходимости ручного создания команд интерфейса.
Если настройки выполнены верно, но на рабочей машине пользователя команда по-прежнему не видна, выполним следующие диагностические действия:
8.3.26, а на клиентском компьютере используется тонкий клиент 8.3.24, такое несоответствие приводит к сбоям в передаче схемы командного интерфейса. Необходимо выровнять релизы платформы.1С:Предприятия и удалим содержимое каталогов временных файлов:
%LocalAppData%\1C\1Cv8
%AppData%\1C\1Cv8
Еще — Изменить форму и проверим, включена ли видимость добавленной команды в командной панели или панели навигации.