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