Как реализовать фильтр по умолчанию для нового измерения регистра бухгалтерии в стандартных отчетах 1С

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

При кастомизации типовых решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с задачей разделения данных внутри одного плана счетов. Классический пример — необходимость организовать так называемый «13-й период» для корректировочных проводок или добавить флаг «Неподтвержденная проводка». Основная сложность заключается в том, что после добавления нового измерения в РегистрБухгалтерии.Хозрасчетный, все стандартные отчеты (ОСВ, Анализ счета, Карточка счета) продолжают учитывать эти записи, так как они не «знают» о существовании нового разреза учета. Переписывать десятки типовых запросов — трудоемко и неэффективно с точки зрения поддержки. Разберем, как можно решить эту задачу элегантнее.

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

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

Способ 1: Использование стандартного поля «Активность»

Рассмотрим совет из обсуждения на форуме. У каждой записи регистра есть системное поле Активность. Если установить Активность = Ложь, проводка перестает влиять на итоги. Рассмотрим плюсы и минусы этого подхода:

  1. Плюс: Это штатный механизм. Записи с Активность = Ложь не попадают в стандартные отчеты (ОСВ и прочие) автоматически.
  2. Минус: Виртуальные таблицы итогов просто «выбрасывают» эти данные. Если вам потребуется построить отчет, включающий эти проводки, вам придется обращаться к основной таблице регистра (физической таблице), что крайне медленно на больших объемах данных.
  3. Минус: Механизм предназначен скорее для пометки на удаление или временного отключения документов, а не для постоянного ведения «параллельного» учета в одном регистре.

Способ 2: Ограничение на уровне записей (RLS)

Проанализируем наиболее близкий к «фильтру по умолчанию» механизм — Record Level Security (RLS). Это мощный инструмент платформы, который позволяет на уровне СУБД подмешивать условия ГДЕ... во все запросы к объекту.

Для реализации нам необходимо создать или отредактировать роль, доступную пользователям, и в ограничениях доступа к данным для РегистрБухгалтерии.Хозрасчетный прописать условие:

ГДЕ НеподтвержденнаяПроводка = ЛОЖЬ

Рассмотрим, как это работает по шагам:

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

Способ 3: Программное вмешательство в систему компоновки данных (СКД)

Большинство современных отчетов в «1С:Бухгалтерия 3.0» строятся на базе Системы компоновки данных и общей подсистемы «Варианты отчетов». Мы можем использовать расширение, чтобы программно добавить фиксированный отбор.

Разберем примерный алгоритм в общем модуле при формировании настроек отчета:


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

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

Способ 4: Архитектурный обходной путь через план счетов

Если задача стоит в организации «13-го периода» (корректировки), часто эффективнее не трогать структуру регистра, а внести изменения в План счетов. Выясним причину, почему это удобнее:

  1. Гибкость: Вы можете завести субсчета (например, 41.КОРР), которые будут использоваться только для этих операций.
  2. Штатные фильтры: В любом стандартном отчете бухгалтер может сам выбрать, строить отчет по счету 41 в целом (включая корректировки) или только по конкретным субсчетам.
  3. Безопасность: Вы не рискуете нарушить логику закрытия месяца и других регламентных операций, которые могут «споткнуться» о новое измерение регистра бухгалтерии.

Резюме и рекомендации

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

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

← На главную