Как вывести журнал операций как внешний отчет или обработку в БГУ 2.0?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Финансы и профессиональные услуги
← На главную

В процессе сопровождения конфигурации 1С:Бухгалтерия государственного учреждения 2.0 (БГУ 2.0) часто возникает необходимость кастомизировать стандартный журнал операций. Разработчики сталкиваются с вопросом: можно ли вынести этот функционал во внешнюю обработку или отчет, чтобы не изменять типовую конфигурацию? В этой статье мы подробно разберем, как это сделать, какие технические сложности могут возникнуть и как их преодолеть.

Почему простое копирование формы не работает?

Первое, что пробует программист — это скопировать стандартную форму ЖурналОпераций из конфигурации во внешнюю обработку. Однако при попытке открытия такой формы система выдает ошибку: «В формах отчета, обработок и общих формах при вызове процедуры "ПодключаемыеКоманды.ПриСозданииНаСервере" требуется явно указать параметр "ПараметрРазмещения.Источники"».

Выясним причину этой ситуации. Конфигурация БГУ 2.0 построена на базе БСП (Библиотеки стандартных подсистем). Механизм подключаемых команд (кнопки «Печать», «Заполнить», «Создать на основании») жестко завязан на справочник Идентификаторы объектов метаданных. Внешняя обработка до момента регистрации в справочнике «Дополнительные отчеты и обработки» не имеет четкого идентификатора, который БСП могла бы использовать для автоматического построения меню команд.

Решение проблемы с подключаемыми командами БСП

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

Шаг 1. Очистка процедуры ПриСозданииНаСервере.

Найдем в модуле формы процедуру ПриСозданииНаСервере. В ней обычно вызывается инициализация различных подсистем. Нам необходимо закомментировать или удалить вызовы, которые требуют контекста метаданных конфигурации. Пример изменений:


// В модуле формы внешней обработки
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Стандартные вызовы БСП, которые вызывают ошибку во внешней обработке:
    // ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
    
    // Если вам не нужны типовые кнопки печати и заполнения, 
    // просто исключите этот блок.
    
КонецПроцедуры

Шаг 2. Корректировка ПриЧтенииНаСервере.

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

Настройка динамического списка во внешней обработке

Для того чтобы журнал выглядел и функционировал как стандартный (с возможностью открытия документов, пометки на удаление и фильтрации), нам нужно правильно настроить основной реквизит формы — Динамический список.

Разберем процесс создания списка с нуля:

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

Использование основной таблицы ЖурналДокументов.ЖурналОпераций позволяет системе автоматически обрабатывать стандартные команды: открытие формы документа при двойном клике, контекстное меню «Пометка на удаление», «Провести» и другие.

Выборка данных через произвольный запрос

Иногда требуется не просто копия журнала, а специфическая выборка. В этом случае в свойствах динамического списка нужно включить флаг «Произвольный запрос». Рассмотрим пример запроса, который можно использовать для вывода данных:


ВЫБРАТЬ
    ЖурналОпераций.Ссылка КАК Ссылка,
    ЖурналОпераций.Дата КАК Дата,
    ЖурналОпераций.Номер КАК Номер,
    ЖурналОпераций.Проведен КАК Проведен,
    ЖурналОпераций.Организация КАК Организация,
    ЖурналОпераций.СуммаДокумента КАК СуммаДокумента,
    ЖурналОпераций.Комментарий КАК Комментарий,
    ЖурналОпераций.Ответственный КАК Ответственный
ИЗ
    ЖурналДокументов.ЖурналОпераций КАК ЖурналОпераций

Важный нюанс: если вы используете произвольный запрос, убедитесь, что поле Ссылка выбрано в качестве ключевого поля. Это обеспечит корректную работу навигации по списку.

Особенности учета в БГУ 2.0: Работа с регистрами

Проанализируем ситуацию глубже. Если ваша задача — создать не просто список документов, а полноценный отчет «Журнал операций» (например, форму 0504071), то данных из ЖурналДокументов.ЖурналОпераций будет недостаточно. В самом объекте журнала документов хранятся только общие реквизиты. Номер конкретного журнала (1, 2, 3 и т.д.) и счета бухгалтерского учета находятся в движениях.

В БГУ 2.0 основным источником бухгалтерских данных является регистр бухгалтерии «ЕПСБУ». Если вы строите отчет, рекомендуем использовать СКД (Схему компоновки данных) и обращаться к виртуальной таблице РегистрБухгалтерии.ЕПСБУ.ДвиженияССубконто.

Пример структуры запроса для получения данных с учетом номера журнала операций:


ВЫБРАТЬ
    ЕПСБУ.Период КАК Дата,
    ЕПСБУ.Регистратор КАК Документ,
    ЕПСБУ.НомерЖурнала КАК НомерЖурнала,
    ЕПСБУ.Сумма КАК Сумма,
    ЕПСБУ.Содержание КАК Содержание,
    ЕПСБУ.СчетДт КАК СчетДт,
    ЕПСБУ.СчетКт КАК СчетКт
ИЗ
    РегистрБухгалтерии.ЕПСБУ КАК ЕПСБУ
ГДЕ
    ЕПСБУ.Период МЕЖДУ &НачалоПериода И &КонецПериода
    И ЕПСБУ.НомерЖурнала = &НужныйНомерЖурнала

Как вызвать печатную форму 0504071 программно?

Если цель вашей обработки — быстрая печать регламентированного отчета, не обязательно переписывать его логику. Посмотрим, как можно вызвать стандартный отчет из своей обработки. В БГУ 2.0 для этого существует отчет ЖурналОперацийФорма0504071.

Рассмотрим пример кода для программного открытия формы этого отчета с предустановленными параметрами:


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

Ограничения и рекомендации

При работе с внешними журналами стоит помнить о следующих моментах:

Таким образом, создание внешнего журнала операций в БГУ 2.0 вполне реально. Главное — правильно обработать исключения БСП при инициализации формы и корректно настроить источник данных для динамического списка. Выбор между использованием объекта ЖурналДокументов и регистром ЕПСБУ должен зависеть от конечной цели: нужен ли вам просто интерактивный список документов или аналитический отчет с проводками.

← На главную