Как реализовать просмотр движений («Дт/Кт») для документов, созданных в расширении 1С?

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

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

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

Разберем причину возникновения проблемы

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

Решение №1: Создание собственной команды и адаптация обработки

Первым делом нам необходимо создать механизм вызова формы движений, который будет «понимать» наши новые объекты. Рассмотрим алгоритм действий:

  1. Создание собственной команды: Не пытайтесь расширить типовую команду «Показать движения», так как вы не сможете изменить тип ее параметра (он заблокирован в расширении). Вместо этого создадим в расширении новую Общую команду с синонимом «Движения документа».
  2. Настройка типа параметра команды: В свойствах созданной команды укажите тип параметра — ссылку на ваш документ из расширения.
  3. Перенос обработки в расширение: Добавим типовую обработку КорректировкаДвижений в наше расширение. Это необходимо для того, чтобы мы могли программно изменять ее свойства и состав типов.

После переноса обработки важно правильно настроить ее реквизиты. Посмотрим на программную реализацию вызова формы из модуля нашей новой команды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // ПараметрКоманды — это ссылка на наш документ из расширения
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ДокументСсылка", ПараметрКоманды);
    
    // Вызываем форму обработки, которую мы перенесли в расширение
    ОткрытьФорму("Обработка.КорректировкаДвижений.Форма.Форма", 
        ПараметрыФормы, 
        ПараметрыВыполненияКоманды.Источник, 
        ПараметрыВыполненияКоманды.Уникальность, 
        ПараметрыВыполненияКоманды.Окно, 
        ПараметрыВыполненияКоманды.НавигационнаяСсылка);
        
КонецПроцедуры

Решение №2: Использование произвольного типа данных

Если даже после переноса обработки в расширение ссылка остается пустой, следует применить более радикальный, но эффективный метод. Разберем его подробнее. В форме обработки КорректировкаДвижений найдем основной реквизит (часто он называется ДокументСсылка или Объект.ДокументДвижения).

Проблема в том, что даже в расширении составной тип данных может вести себя некорректно, если в нем смешиваются объекты основной базы и расширения при определенных режимах совместимости. Чтобы гарантированно избежать ошибки «пустой ссылки», выполним следующее:

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

Анализ архитектурного подхода: Расширение или Основная конфигурация?

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

  1. Когда расширения идеальны:
    • Создание временных патчей для исправления ошибок типовой конфигурации.
    • Доработки «сбоку», которые минимально пересекаются с бизнес-логикой (например, учет талонов ГСМ, как в примере автора темы).
    • Работа в облачных сервисах (1С:Фреш), где изменение основной конфигурации невозможно.
  2. Когда лучше использовать основную конфигурацию:
    • Если вы добавляете ключевые объекты (справочники, документы), на которых будет строиться критически важный учет. Несмотря на улучшения в последних версиях платформы (8.3.15+), риск потери данных при некорректном удалении или повреждении расширения остается ненулевым.
    • При глубоком вмешательстве в расчетные механизмы (НДС, зарплата), так как отсутствие трехстороннего сравнения при обновлении в расширениях затрудняет контроль корректности кода.

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

Программная интеграция в интерфейс через БСП

Для конфигураций на базе БСП (например, Бухгалтерия предприятия 3.0) существует еще один способ. Чтобы ваш документ из расширения появился в типовом отчете «Движения документа», можно попробовать переопределить программные интерфейсы. Выясним, как это работает: в БСП есть процедуры типа ПриОпределенииРегистровСДвижениями. Используя перехват методов в расширении (&Вместо или &После), вы можете добавить свой документ и список его регистров в общую структуру, которую анализирует типовая кнопка «Дт/Кт».

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

← На главную