При кастомизации типовых решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с задачей разделения данных внутри одного плана счетов. Классический пример — необходимость организовать так называемый «13-й период» для корректировочных проводок или добавить флаг «Неподтвержденная проводка». Основная сложность заключается в том, что после добавления нового измерения в РегистрБухгалтерии.Хозрасчетный, все стандартные отчеты (ОСВ, Анализ счета, Карточка счета) продолжают учитывать эти записи, так как они не «знают» о существовании нового разреза учета. Переписывать десятки типовых запросов — трудоемко и неэффективно с точки зрения поддержки. Разберем, как можно решить эту задачу элегантнее.
Прежде всего, разберем, почему «малой кровью» через свойства метаданных задачу решить нельзя. Измерения регистра бухгалтерии всегда участвуют в формировании итогов. Когда мы обращаемся к виртуальным таблицам, таким как Остатки или ОстаткиИОбороты, платформа суммирует данные по всем измерениям, если не указано иное. По умолчанию фильтрация в типовых отчетах происходит по Организации, Счету и Субконто. Ваше новое измерение просто игнорируется фильтром, а значит — попадает в общую сумму.
Рассмотрим совет из обсуждения на форуме. У каждой записи регистра есть системное поле Активность. Если установить Активность = Ложь, проводка перестает влиять на итоги. Рассмотрим плюсы и минусы этого подхода:
Активность = Ложь не попадают в стандартные отчеты (ОСВ и прочие) автоматически.Проанализируем наиболее близкий к «фильтру по умолчанию» механизм — Record Level Security (RLS). Это мощный инструмент платформы, который позволяет на уровне СУБД подмешивать условия ГДЕ... во все запросы к объекту.
Для реализации нам необходимо создать или отредактировать роль, доступную пользователям, и в ограничениях доступа к данным для РегистрБухгалтерии.Хозрасчетный прописать условие:
ГДЕ НеподтвержденнаяПроводка = ЛОЖЬ
Рассмотрим, как это работает по шагам:
Важное предостережение: Механизм RLS может замедлять работу системы, особенно при расчете итогов в сложных запросах. Также помните, что на пользователей с полными правами ограничения RLS не действуют (в обычных конфигурациях), поэтому администратор все равно будет видеть «грязные» данные.
Большинство современных отчетов в «1С:Бухгалтерия 3.0» строятся на базе Системы компоновки данных и общей подсистемы «Варианты отчетов». Мы можем использовать расширение, чтобы программно добавить фиксированный отбор.
Разберем примерный алгоритм в общем модуле при формировании настроек отчета:
// В расширении для общего модуля, отвечающего за компоновку
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
// Получаем текущие настройки отчета
Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
// Проверяем, есть ли уже такой отбор, чтобы не дублировать
ЕстьОтбор = Ложь;
Для Каждого ЭлементОтбора Из Настройки.Отбор.Элементы Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных")
И Строка(ЭлементОтбора.ЛевоеЗначение) = "НеподтвержденнаяПроводка" Тогда
ЕстьОтбор = Истина;
КонецЕсли;
КонецЦикла;
// Если отбора нет, добавляем его принудительно
Если Не ЕстьОтбор Тогда
НовыйОтбор = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НеподтвержденнаяПроводка");
НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйОтбор.ПравоеЗначение = Ложь;
НовыйОтбор.Использование = Истина;
НовыйОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
Этот метод хорош тем, что он не влияет на производительность так сильно, как RLS, и позволяет гибко управлять видимостью данных только в пользовательских интерфейсах.
Если задача стоит в организации «13-го периода» (корректировки), часто эффективнее не трогать структуру регистра, а внести изменения в План счетов. Выясним причину, почему это удобнее:
Проанализировав ситуацию, можно сделать следующие выводы. Если вам нужно жесткое разделение данных на уровне всей платформы, используйте RLS. Если вы хотите «подправить» только визуальную часть в отчетах, используйте расширение и программную модификацию настроек СКД. Однако самым надежным и «чистым» методом с точки зрения типовой архитектуры 1С остается использование раздельных счетов или субсчетов, так как это не требует внесения изменений в структуру регистров и переписывания запросов.
Помните, что добавление нового измерения в регистр бухгалтерии — это операция, требующая пересчета всех итогов с начала ведения учета, что в нагруженных базах может занять значительное время и привести к временной блокировке работы пользователей.