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