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