Ежедневные остатки — 1C-WIKI.RU (1С википедия)

Ежедневные остатки

Материал из 1C-WIKI.RU (1С википедия)

Перейти к: навигация, поиск

Содержание

СКД: Остатки на каждый день

В данной статье описывается способ получить остатки на каждый день в системе компоновки данных (СКД) 1С:Предприятия.

Наверное, каждый разработчик рано или поздно сталкивается с проблемой получить ежедневные остатки. В самом простом случае, когда остатки по регистру накопления нужны только на те периоды, когда по нему были движения, задача решается указанием периодичности для параметра виртуальной таблицы "Остатки и обороты" регистра накопления:

ПараметрПериодичностьВТ.png

Построитель отчета

Чтобы сделать такой отчет с помощью построителя отчетов нужно было в итогах для поля "Период" указать вывод периодами с заданной периодичностью (в нашем случае "ДЕНЬ"):

...
ИТОГИ
	СУММА(КоличествоКонечныйОстаток),
	СУММА(СтоимостьКонечныйОстаток)
ПО
	Склад,
	Номенклатура,
	Период ПЕРИОДАМИ(ДЕНЬ, &НачПериода, &НачПериода)
...

ИтогиПериодами.png

Система компоновки данных

В СКД подобного можно добиться, указав для поля роль "Остатки":

РольПоляСКД.png

Таким образом, СКД сама будет подтягивать последнее значение ресурса на промежуточные периоды до следующего изменения. Примерный результат будет выглядеть так: ПримерВыводаВСКД.png

Остатки на каждый день периода (даже если не было движений)

Рассмотрим более сложный вариант:

Необходимо получить остатки по количеству и стоимости товара на каждый день месяца, даже если в этот день не было движений. Также на каждый день нужно вывести стоимость товара по указанному типу цен, пересчитанную в рубли по курсу на день вывода.

Простой настройкой ролей для полей тут не обойтись, т.к. в том случае СКД просто протягивает значение ресурса до следующего изменения, да и то, только по тем дням, на которые были движения по регистру. Дополнительная сложность состоит в том, что еще нужно получать срез последних по цене и курсу валюты на дату, которая вычисляется непосредственно в запросе.

В СКД такую задачу можно решить связью наборов данных:

  • Первый набор данных (запрос) у нас будет формировать список дней, на которые нам нужно получить остатки. Эти дни будут передаваться в параметры виртуальных таблиц второго набора данных для получения остатков на дату и среза последних. Запрос, формирующий таблицу дат, здесь не привожу, при желании можете скачать настройку отчета и посмотреть.
  • Второй набор данных (запрос) будет получать остаток по количеству, цены и пересчитывать их по нужному курсу.

ПараметрВНабореДанныхСКД.png

При связи наборов данных важно указать Параметр:

СвязьНаборовДанныхСКД.png

В настройке вывода указываем, что нам нужен вывод в таблицу; в строках: Склад, Номенклатура; в колонках: Период; Количество, Стоимость БУ и Стоимость по типу цен - ресурсы.

Получаем такой результат:

ЕжедневныеОстаткиСЦенамиСКД.png

PS:Возможно это не самый лучший вариант по производительности, но он работает, а это главное.

Пример выводит остатки по партиям БУ, создавался в конфигурации УПП ред. 1.2

Скачать пример настройки отчета для СКД, который выводит остатки по дням: Файл:OstatkiPoDnyam.rar

Остатки на каждый день периода одним запросом(даже если не было движений)

ВЫБРАТЬ
    Движения.Номенклатура,
    ДНИ.Период,
    СУММА(ВЫБОР
            КОГДА Движения.Период = &НачалоПериода
                ТОГДА Движения.КоличествоКонечныйОстаток
            ИНАЧЕ ВЫБОР
                    КОГДА Движения.Период <= ДНИ.Период
                        ТОГДА Движения.КоличествоОборот
                    ИНАЧЕ 0
                КОНЕЦ
        КОНЕЦ) КАК КоличествоКонечныйОстаток
ИЗ
    Дни КАК ДНИ,
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , Номенклатура = &Номенклатура) КАК Движения

СГРУППИРОВАТЬ ПО
    Движения.Номенклатура,
    ДНИ.Период

Где "Дни" - таблица дат за период

Источники

Запрос формирующий таблицу дат был найден на infostart.ru

Личные инструменты