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