Как программно открыть журнал подчиненных документов в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему не работал исходный код?

Для начала посмотрим на пример кода, который часто пишут разработчики по интуиции или невнимательно прочитав синтакс-помощник:


Процедура ПодчиненныеДокументы()
    Парам = ТекущийДокумент;
    ОткрытьФорму("Журнал.Подчиненные", Парам);
КонецПроцедуры

В данном фрагменте на первый взгляд всё логично: мы берем ссылку на текущий документ через предопределенный реквизит ТекущийДокумент, записываем её в переменную Парам и передаем в метод ОткрытьФорму. Но этот код не работает.

Разберем по шагам, как устроена функция ОткрытьФорму для работы со специализированными журналами в 1С 7.7. Согласно официальной документации платформы, синтаксис вызова выглядит следующим образом:

ОткрытьФорму(<ОписательОбъекта>, <КонтекстФормы>, <Документ>)

Обратите внимание на позиционирование параметров:

  1. Первый параметр (ОписательОбъекта) — строковое выражение. В нашем случае это строго предопределенный системный идентификатор "Журнал.Подчиненные".
  2. Второй параметр (КонтекстФормы) — переменная, в которую платформа передает контекст открываемой формы журнала для последующего программного управления им. Если управление не требуется, этот параметр можно оставить пустым, но позицию (запятую) пропускать нельзя!
  3. Третий параметр (Документ) — это как раз тот самый документ-владелец (ссылка на документ), для которого система должна построить дерево связей.

В ошибочном коде автора переменная Парам (содержащая ссылку на документ) была передана вторым параметром. Платформа восприняла её как контекст формы, а важнейший третий параметр остался пустым. Без указания целевого документа система не может инициализировать связи, в результате чего вызов просто игнорируется, и форма журнала не открывается.

Правильный вариант программного вызова

Чтобы исправить эту ошибку, нам достаточно сдвинуть передачу ссылки на документ на третью позицию в параметрах функции ОткрытьФорму, оставив вторую позицию пустой. Рассмотрим готовое и безопасное решение, которое можно сразу встраивать в модуль формы любого документа:


Процедура ОткрытьПодчиненные()
    // Шаг 1. Проверяем, записан ли документ в базу данных.
    // У нового, еще не сохраненного документа физически не может быть подчиненных связей.
    Если Выбран() = 0 Тогда
        Предупреждение("Документ еще не записан! Просмотр подчиненных документов невозможен.");
        Возврат;
    КонецЕсли;

    // Шаг 2. Вызываем журнал, передавая документ строго ТРЕТЬИМ параметром
    ОткрытьФорму("Журнал.Подчиненные", , ТекущийДокумент);
КонецПроцедуры

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


Процедура ОткрытьПодчиненныеСКонтекстом()
    Если ТекущийДокумент.Выбран() = 1 Тогда
        ПеремКонтекст = 0; // Переменная для приема контекста формы журнала
        ОткрытьФорму("Журнал.Подчиненные", ПеремКонтекст, ТекущийДокумент);
        
        // Теперь в переменной ПеремКонтекст доступен контекст открытого журнала,
        // и мы можем обращаться к его атрибутам или методам при необходимости.
    КонецЕсли;
КонецПроцедуры

Важные нюансы работы с подчиненными документами в 1С 7.7

Для стабильной работы механизма подчиненности важно знать несколько архитектурных особенностей платформы 1С:Предприятие 7.7:

  1. Ограничение на количество журналов: В структуре метаданных всей конфигурации флаг «Использовать как журнал подчиненных документов» может быть установлен только у одного журнала во всей системе. В типовой конфигурации «Торговля и Склад» (ТиС) эта роль по умолчанию назначена объекту ФЖурналОбщий.
  2. Системный идентификатор: Независимо от того, как именно называется данный журнал в дереве конфигуратора (например, ФЖурналОбщий, ЖурналВсехДокументов или как-то иначе), в программном коде при вызове метода ОткрытьФорму всегда необходимо использовать зарезервированную системную строку "Журнал.Подчиненные". Платформа автоматически найдет объект метаданных с установленным флагом и инициализирует его.
  3. Принцип формирования связей: Документ "Б" считается подчиненным документу "А", если в документе "Б" (в его шапке или табличной части) присутствует реквизит с типом «Документ» (или конкретным видом документа, например, «Документ.Заказ»), и в этом реквизите сохранена ссылка на документ "А". Эти связи индексируются платформой автоматически в момент записи и проведения документов.

Используя приведенный выше шаблон с проверкой Выбран() и правильной расстановкой запятых в методе ОткрытьФорму, вы гарантируете быструю и безотказную работу интерфейса вашей программы.

← На главную