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