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

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

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

Поскольку отчет в рассматриваемом случае является самописным и не использует систему компоновки данных (СКД), у нас есть несколько путей решения: от простого изменения запроса до программной манипуляции результатом вывода. Разберем эти методы подробно.

Метод 1. Использование условий в тексте запроса

Проанализируем самый прямой способ — внесение правок в текст запроса, который собирает данные для отчета. Если нам нужно, чтобы сумма по определенному контрагенту превратилась в ноль, мы можем использовать конструкцию ВЫБОР КОГДА. Это позволит «обнулить» значения для конкретных условий, не затрагивая сами записи в базе данных.

Рассмотрим пример кода, который можно внедрить в текст запроса:


ТекстЗапроса = "ВЫБРАТЬ
               |    ХозрасчетныйОбороты.Контрагент КАК Контрагент,
               |    ВЫБОР
               |        КОГДА ХозрасчетныйОбороты.Контрагент = &КонтрагентБезСуммы
               |            ТОГДА 0
               |        ИНАЧЕ ХозрасчетныйОбороты.СуммаОборот
               |    КОНЕЦ КАК Сумма
               |ИЗ
               |    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, , Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты";

В данном случае мы вводим параметр &КонтрагентБезСуммы. Выясним, как это работает: при выполнении запроса система проверяет каждую строку. Если контрагент совпадает с заданным в параметрах, в поле Сумма запишется 0. В противном случае отобразится реальная сумма оборота.

Если задача стоит более узко — скрыть только сумму, превышающую определенный предел, или конкретный документ, условие можно расширить:


|    ВЫБОР
|        КОГДА ХозрасчетныйОбороты.Контрагент = &КонтрагентБезСуммы 
|              И ХозрасчетныйОбороты.СуммаОборот > &ПределСуммы
|            ТОГДА 0
|        ИНАЧЕ ХозрасчетныйОбороты.СуммаОборот
|    КОНЕЦ КАК Сумма

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

Метод 2. Дополнительные реквизиты для гибкой настройки

Постоянно менять код запроса под каждого нового контрагента неудобно. Разберем более профессиональный подход — использование механизма «Дополнительных реквизитов». Это позволит бухгалтеру самостоятельно управлять списком исключений без участия программиста.

  1. Перейдем в раздел Администрирование -> Дополнительные реквизиты.
  2. Найдем справочник Контрагенты и добавим новый реквизит с типом Булево (например, «СкрыватьИзОтчетов»).
  3. В карточках нужных контрагентов установим этот флаг.

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


| ГДЕ
|    НЕ ХозрасчетныйОбороты.Контрагент.СкрыватьИзОтчетов

Этот способ гораздо эффективнее, так как делает отчет динамическим. Мы просто отсекаем ненужные данные на этапе получения из базы.

Метод 3. Программная обработка сформированного табличного документа

Если отчет не на СКД, то он, скорее всего, формируется в коде через объект ТабличныйДокумент. Мы можем программно вмешаться в уже сформированный результат перед тем, как он будет показан пользователю. Рассмотрим, как найти и скрыть строки.

Проанализируем алгоритм: после заполнения документа мы можем пройтись циклом по его строкам, найти ячейки с ненужным текстом и установить видимость строки в значение Ложь.


// Пример программного скрытия строки после формирования
Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
    Область = ТабДок.Область(НомерСтроки, 2); // Допустим, контрагент во второй колонке
    Если Найти(Область.Текст, "ТехническийКонтрагент") > 0 Тогда
        ТабДок.Область(НомерСтроки, , НомерСтроки, ).Видимость = Ложь;
    КонецЕсли;
КонецЦикла;

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

Метод 4. Использование расширений для сохранения типовой конфигурации

Чтобы не снимать конфигурацию с поддержки и не модифицировать самописный отчет внутри основной базы, лучше всего воспользоваться Расширениями (Extensions). Это современный стандарт разработки в 1С 8.3.

Посмотрим на последовательность действий:

  1. Создаем новое расширение.
  2. Добавляем в него процедуру формирования отчета (используя аннотацию &После или &Вместо).
  3. Внутри расширения применяем фильтрацию запроса или обработку табличного документа, как было описано выше.

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

Метод 5. Row Level Security (RLS) как радикальный способ

Если скрытие данных требуется по соображениям безопасности (например, менеджер не должен видеть расчеты с определенным поставщиком), можно настроить Ограничение доступа на уровне записей (RLS).

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

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

Выяснив все возможные варианты, подведем итоги:

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

← На главную