Работа с Системой компоновки данных (СКД) в 1С часто кажется интуитивно понятной до тех пор, пока не возникает необходимость использовать собственные макеты для оформления отчета. Типичная ситуация: вы написали сложный запрос, создали красивый макет, но при запуске система выдает ошибку «Поле не найдено» или просто игнорирует ваши настройки оформления. Рассмотрим подробнее, почему так происходит и как заставить СКД работать корректно.
Проанализируем основную причину, по которой СКД «теряет» поля при попытке применить макет. Когда мы создаем собственный макет на вкладке «Макеты», мы указываем, для какой группировки он предназначен. Если оставить имя группировки пустым, система пытается сопоставить макет автоматически по составу полей. Это крайне ненадежный метод, который часто приводит к ошибкам, если порядок полей или их количество в настройках не совпадает с макетом досконально.
Разберем по шагам правильный алгоритм связки:
Склад или Детальные записи).ГруппировкаСклад.ГруппировкаСклад.Именно наличие явного имени позволяет платформе однозначно понять, какую область оформления нужно наложить на конкретные данные. Это правило касается как заголовков, так и самих строк данных.
Часто программист сталкивается с «мистическим» поведением: изменения в макете внесены, группировки названы, но отчет все равно выглядит по-старому или выдает старую ошибку. Выясним причину этого явления. Платформа 1С активно кэширует структуру метаданных. Если вы запускаете внешний отчет через Файл — Открыть, но в базе уже зарегистрирован отчет с таким же внутренним именем, система может использовать старую схему из кэша.
Для решения этой проблемы мы можем использовать два основных способа:
Имя в свойствах корня отчета (например, добавим индекс или дату). После этого сохраним файл и откроем его заново. Это принудительно заставит 1С создать новую запись в кэше для этого идентификатора.Посмотрим на пример запроса, который может вызвать сложности при выводе в макет. В частности, использование ПОЛНОЕ СОЕДИНЕНИЕ требует особого внимания к полям группировки.
ВЫБРАТЬ
НачальныйОстаток.Номенклатура КАК Номенклатура,
НачальныйОстаток.Склад КАК Склад,
СУММА(НачальныйОстаток.КолвоНач) КАК КолвоНач,
СУММА(КонечныйОстаток.КолвоКон) КАК КолвоКон
ИЗ
(ВЫБРАТЬ ... ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ПериодНачало, ) ...) КАК НачальныйОстаток
ПОЛНОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ ... ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ПериодКонец, ) ...) КАК КонечныйОстаток
ПО НачальныйОстаток.Номенклатура = КонечныйОстаток.Номенклатура
Проанализируем ситуацию: если в результате полного соединения поле Склад из таблицы НачальныйОстаток окажется равным NULL (например, товар появился только в конце периода), а группировка в СКД настроена именно по этому полю, макет может отработать некорректно. В таких случаях рекомендуется использовать функцию ЕСТЬNULL, чтобы гарантировать наличие значения в поле группировки.
Если же макет «ожил», но сообщает, что «Параметр не заполнен», хотя в настройках он помечен как необязательный, проверьте ячейки самого макета. Если в ячейке макета указан тип «Параметр», СКД будет пытаться вычислить его значение принудительно. Если параметр не должен выводиться при определенных условиях, лучше использовать тип ячейки «Текст» с шаблоном или проверять заполнение параметра в выражениях СКД.
Часто возникает вопрос: как применить макет не к группировке по полю, а к самым нижним строкам отчета? Разберем этот момент отдельно. В иерархии настроек по умолчанию создаются Детальные записи. Чтобы привязать к ним макет, им также необходимо присвоить имя. После именования (например, МоиДетальныеСтроки) в макетах создается «Макет группировки» для этого имени. Только после этого вы сможете полностью контролировать оформление каждой строки данных, включая шрифты, цвета и объединение ячеек, которые недоступны в стандартном оформлении СКД.
Помните, что использование Собственного макета полностью отключает стандартное оформление для выбранной области. Это значит, что все параметры, такие как формат чисел или условное оформление, заданные на других вкладках СКД, могут перестать действовать, если они не прописаны явно в свойствах ячеек макета или параметрах выражения.