Как в 1С 7.7 программно установить интервал общего журнала документов из обработки?

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

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

Механизм работы со вторым параметром функции ОткрытьФорму

Главный секрет управления открываемым журналом заключается в особенностях работы функции ОткрытьФорму. Проанализируем ее синтаксис:

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

Второй параметр в этой функции является двунаправленным:

  1. Входное значение: перед вызовом процедуры в переменную можно поместить любое значение (например, строку, число или СписокЗначений). В открываемой форме переданные данные станут доступны через системную переменную Форма.Параметр.
  2. Выходное значение: после того как форма успешно создана и отображена на экране, платформа перезаписывает эту же переменную групповым контекстом созданного окна (тип ГрупповойКонтекст).

Таким образом, передавая переменную во второй параметр, после выполнения строки кода мы получаем прямой доступ ко всем элементам управления, реквизитам и методам открытого журнала через эту же самую переменную.

Синтаксис и параметры метода УстановитьИнтервал

Получив контекст формы журнала, мы можем вызывать его штатные методы, в частности УстановитьИнтервал. Метод имеет следующее описание:

КонтекстФормы.УстановитьИнтервал(<ДатаНач>, <ДатаКон>, <ФлагИзменения>)

Разберем назначение его параметров:

  1. <ДатаНач> — выражение типа «Дата», определяющее начальную дату отображаемого периода.
  2. <ДатаКон> — выражение типа «Дата», определяющее конечную дату периода.
  3. <ФлагИзменения> (необязательный параметр) — числовой флаг прав пользователя:
    1. 1 — разрешает пользователю вручную менять интервал с помощью кнопки на командной панели журнала (значение используется по умолчанию).
    2. 0 — запрещает интерактивное изменение интервала (кнопка выбора периода становится неактивной).

Пошаговая реализация в предопределенной процедуре ОбработкаЯчейкиТаблицы

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

Реализуем процедуру следующим образом:


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

КонецПроцедуры

Важные нюансы и обработка исключительных ситуаций

При использовании данного подхода обратим внимание на несколько ключевых моментов:

  1. Проверка статуса возврата: функция ОткрытьФорму возвращает 1 при успешном открытии и 0 при неудаче (например, если в модуле самого журнала в событии ПриОткрытии сработал СтатусВозврата(0)). Проверка условия Если ОткрытьФорму(...) = 1 защищает код от попытки вызова метода УстановитьИнтервал у пустого значения, что предотвращает появление ошибки времени выполнения.
  2. Порядок срабатывания событий: метод УстановитьИнтервал вызывается из обработки уже после того, как в журнале отработало внутреннее событие ПриОткрытии(). Это гарантирует, что заданный из отчета интервал не будет сброшен системными настройками платформы по умолчанию (настройками пользователя из пункта меню «Сервис — Параметры — Журналы»).
  3. Работа с уже открытым журналом: если общий журнал уже был открыт на рабочем столе пользователя, вызов ОткрытьФорму не откроет дублирующее окно. Платформа активизирует имеющееся окно и вернет его контекст, после чего период журнала динамически обновится без перезапуска формы.
  4. Чтение текущего периода: если в процессе работы потребуется программно прочитать уже установленный интервал журнала, через полученный контекст можно использовать парные функции КонтекстФормы.НачалоИнтервала() и КонтекстФормы.КонецИнтервала().

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

← На главную