Как изменить отчет «Шахматная ведомость» в 1С:Бухгалтерии 3.0 через расширение?

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

При работе с типовыми отчетами 1С, такими как «Шахматная ведомость», часто возникают задачи по фильтрации данных, которые не предусмотрены стандартным интерфейсом. В частности, пользователям может потребоваться исключить из отчета конкретный бухгалтерский счет, например, 51-й. Давайте разберем, как реализовать такую задачу с помощью механизма расширений, сохраняя при этом работоспособность отчета.

Анализ проблемы и подготовка к изменениям

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

Прежде чем приступать к коду, убедитесь, что все используемые в запросе объекты (регистр бухгалтерии Хозрасчетный, справочники, перечисления) добавлены в расширение. Однако, даже при правильном добавлении, конструктор запросов может выдавать ошибки из-за особенностей работы с параметрами в БСП (Библиотеке стандартных подсистем).

Вариант 1: Программная замена запроса СКД

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

Для начала создадим процедуру-обработчик в расширении, которая будет подменять макет СКД. Мы используем аннотацию &Вместо для метода ИнициализацияКомпоновщикаНастроек:


&Вместо("ИнициализацияКомпоновщикаНастроек")
Процедура ОД_ИнициализацияКомпоновщикаНастроек(Форма, ОрганизацияИзменилась, ИмяВариантаНастроек)
    // Инициализируем стандартную логику или пропускаем ее
    Форма.КомпоновщикИнициализирован = Истина;
    
    // Получаем макет из нашего расширения
    ИмяОтчета = БухгалтерскиеОтчеты.ИмяОтчета(Форма);
    ИмяСхемы = "ОД_Макет"; 
    Схема = Отчеты[ИмяОтчета].ПолучитьМакет(ИмяСхемы);
    
    // Заменяем текст запроса в наборе данных
    НаборДанных = Схема.НаборыДанных.Найти("ХозрасчетныйОборотыДтКт");
    НаборДанных.Запрос = СтрЗаменить(НаборДанных.Запрос, "ГДЕ", "ГДЕ СчетКт <> &Счет51 И ");
    
    // Продолжаем инициализацию СКД
    Форма.СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище(Схема, Форма.УникальныйИдентификатор);
    ИнициализироватьКомпоновщикНастроекСКД(Форма.Отчет.КомпоновщикНастроек, Форма.СхемаКомпоновкиДанных, ИмяОтчета);
    // ... дальнейшая логика загрузки настроек
КонецПроцедуры

Важное замечание: При программном изменении текста запроса всегда проверяйте, чтобы в параметры СКД был передан ваш новый параметр, например, &Счет51. Это можно сделать через Форма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.

Вариант 2: Использование внешнего отчета как альтернатива

Если правка типового отчета через расширение вызывает постоянные конфликты при обновлении конфигурации, рекомендуется использовать подход с внешним отчетом. Это более «безопасный» путь для долгосрочной эксплуатации.

  1. Создайте внешний отчет и скопируйте в него все данные и настройки из типовой «Шахматной ведомости».
  2. В модуле объекта или формы переопределите логику формирования данных.
  3. Используйте метод ПриСозданииНаСервере для отключения стандартных механизмов БухгалтерскиеОтчетыВызовСервера, которые могут пытаться навязать типовую структуру.

Пример структуры кода для внешнего отчета:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Отключаем типовую инициализацию, чтобы она не конфликтовала с нашим отчетом
    // БухгалтерскиеОтчетыВызовСервера.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
    
    // Выполняем свою инициализацию схемы компоновки данных
    // ...
КонецПроцедуры

Советы по отладке и поддержке

В процессе работы с отчетами БП 3.0 помните о следующих нюансах:

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

← На главную