Когда мы сталкиваемся с необходимостью отобразить начальный и конечный остаток по какому-либо ресурсу (например, количество товаров на складе или денежные средства на счете) за каждый день в отчете на Системе Компоновки Данных (СКД), перед нами встает несколько задач. Во-первых, нужно корректно получить эти остатки по дням. Во-вторых, часто требуется вывести их не в двух отдельных колонках, а компактно, в одной. Давайте вместе разберем, как эффективно решить эту проблему, используя типовые механизмы 1С.
Самым типовым и эффективным способом получения начальных и конечных остатков за каждый день является использование виртуальной таблицы ОстаткиИОбороты регистра накопления. Эта таблица специально предназначена для таких задач и предоставляет мощный инструментарий для анализа движений и остатков.
Мы выясним, почему именно эта виртуальная таблица является нашим основным инструментом:
ОстаткиИОбороты автоматически рассчитывает и предоставляет нам поля, такие как НачальныйОстаток и КонечныйОстаток (или аналогичные, например, КоличествоНачальныйОстаток, СуммаНачальныйОстаток в зависимости от ресурсов регистра). Это избавляет нас от необходимости писать сложную логику для самостоятельного расчета.Периодичность = День.
Рассмотрим пример того, как мы можем построить запрос к виртуальной таблице ОстаткиИОбороты:
ВЫБРАТЬ
ОстаткиИОбороты.Период КАК ПериодДень,
ОстаткиИОбороты.Номенклатура,
ОстаткиИОбороты.НачальныйОстаток,
ОстаткиИОбороты.КонечныйОстаток
ИЗ
РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(
&НачалоПериода,
&КонецПериода,
День,
,
Номенклатура = &ВыбраннаяНоменклатура
) КАК ОстаткиИОбороты
В этом примере мы:
Период, которое при периодичности "День" будет представлять собой начало каждого дня.&НачалоПериода и &КонецПериода для ограничения диапазона дат.День в качестве периодичности.Номенклатура для получения данных по конкретному товару.При работе с виртуальными таблицами нам следует учесть несколько моментов:
КонецПериода для достижения необходимой точности.ОстаткиИОбороты по умолчанию не вернет запись для этой даты. Чтобы отчет отображал все дни в заданном диапазоне, даже если движений не было, мы можем использовать настройку "Тип дополнения" для группировки по полю Период в СКД, установив его в значение День. Это позволит СКД автоматически заполнить пропущенные даты, и мы увидим "пустые" дни с нулевыми остатками.После того как мы успешно получили начальный и конечный остаток за каждый день, следующая задача – отобразить их в одной колонке. Рассмотрим несколько подходов, которые мы можем использовать в СКД.
Это один из самых простых и гибких способов. Мы создаем в СКД вычисляемое поле, которое будет объединять значения начального и конечного остатка в одну строку.
ОстатокДня.
Строка(НачальныйОстаток) + " / " + Строка(КонечныйОстаток)
Теперь мы можем вывести это поле ОстатокДня в отчет как одну колонку, и оно будет содержать оба значения, разделенные, например, символом "/". Мы можем использовать любые другие разделители или форматирование в строке по нашему усмотрению.
Для более тонкой настройки внешнего вида мы можем создать пользовательский макет для группировки по дате. Этот метод позволяет разместить поля друг под другом в одной ячейке отчета.
ПериодДень (или как вы назвали поле даты).НачальныйОстаток и КонечныйОстаток) друг под другом, используя соответствующие области макета. Это дает нам полный контроль над представлением данных.Этот метод является удобным, если нам не требуется сложное форматирование, но нужно просто отобразить два поля вертикально.
НачальныйОстаток и КонечныйОстаток.Вертикально.СКД автоматически отобразит эти поля друг под другом в одной колонке отчета.
Давайте проанализируем дополнительные аспекты, которые могут помочь нам в решении этой задачи.
Для полей, которые содержат начальные и конечные остатки (например, КоличествоНачальныйОстаток, КоличествоКонечныйОстаток), в наборе данных СКД рекомендуется явно указывать роль "Остатки". Это помогает СКД правильно рассчитывать итоги по этим полям при различных группировках. Например, когда нам не требуется простое суммирование остатков по группе, а нужен, скажем, первый или последний остаток для группы, указание роли "Остатки" позволит СКД правильно интерпретировать данные.
Иногда нам приходится работать со сложными запросами, которые собираются из разных регистров или документов. В таких случаях могут возникнуть свои особенности:
Регистратор используется в соединении, но не выводится в отчет, это может привести к некорректному суммированию остатков. В таких случаях может потребоваться либо выводить Регистратор, либо пересмотреть логику запроса.ОБЪЕДИНИТЬ ВСЕ для каждой нужной точки времени или построение отчета с использованием связей наборов данных, где каждый набор данных получает остаток на свою точку времени.
Прежде чем приступать к разработке собственного отчета, всегда полезно проверить наличие типовых решений. Например, в конфигурации Управление торговлей 11.5 (УТ11.5) существует типовой отчет "Движения денежных средств". В 99% случаев он удовлетворяет большинство потребностей по анализу денежных потоков и остатков, предоставляя гибкие настройки детализации и вывода. Возможно, ваш случай уже покрыт существующим функционалом.
Мы рассмотрели основные подходы к выводу начального и конечного остатка в одной колонке по датам в отчете на СКД. Используя виртуальную таблицу ОстаткиИОбороты и различные методы форматирования полей, мы можем добиться желаемого результата, делая отчеты более информативными и удобными для анализа.