Вывести остатки по товару на каждый день заданного периода

1. 08.04.21 08:45 Сейчас в теме
В базе есть регистр накопления АктивыСтоимость с видом регистра Остатки:

Измерения: Актив

Ресурсы: Количество


Движения:

Приход 02.01.2020 Акция Газпром 100

Расход 10.01.2020 Акция Ленэнерго 10

Приход 11.01.2020 Акция Газпром 50


Нужно сделать отчет на СКД, выводящий остатки по заданному активу (может быть и не указан) на каждый день заданного периода, даже если движений за этот день не было.

Например, задан месяц январь 2008, Актив: Акция Газпром

Результат:

01.01.2008 – 0

02.01.2008 – 100

03.01.2008 – 100

04.01.2008 – 100



11.01.2008 – 150



31.01.2008 – 150

Как это сделать?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. VictorRGB2 13 08.04.21 09:17 Сейчас в теме
(1) решение не мое, идея давно взята отсюда, сам пользуюсь для остатков за период
адаптируйте под свою задачу уже самостоятельно, тут главная мысль получение таблицы периода дат

	тзнСЦифрами = Новый ТаблицаЗначений();
	// Создание описателя типов для таблицы значений
	КЧ = Новый КвалификаторыЧисла(12,2);
	Массив = Новый Массив;
	Массив.Добавить(Тип("Число"));
	ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ); 
	
	тзнСЦифрами.Колонки.Добавить("Цифра", ОписаниеТиповЧ);
	Для Счетчик = 0 по лМаксимальноеЧислоДней Цикл
		НоваяСтрока = тзнСЦифрами.Добавить();
		НоваяСтрока.Цифра = Счетчик;
	КонецЦикла;
	
	
	лЗапрос.Текст = "ВЫБРАТЬ
	|	ТБДаты.Цифра
	|ПОМЕСТИТЬ Единицы
	|ИЗ
	|	&ТБДаты КАК ТБДаты
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), ДЕНЬ, Единицы.Цифра) КАК Период
	|ПОМЕСТИТЬ Дни
	|ИЗ
	|	Единицы КАК Единицы
	|ГДЕ
	|	Единицы.Цифра <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Движения.Номенклатура КАК Номенклатура,
	|	ДНИ.Период КАК Период,
	|	СУММА(ВЫБОР
	|			КОГДА Движения.Период = &НачалоПериода
	|				ТОГДА Движения.КоличествоКонечныйОстаток
	|			ИНАЧЕ ВЫБОР
	|					КОГДА Движения.Период <= ДНИ.Период
	|						ТОГДА Движения.КоличествоОборот
	|					ИНАЧЕ 0
	|				КОНЕЦ
	|		КОНЕЦ) КАК СвободныйОстаток,
	|	Движения.Склад КАК Склад
	|ИЗ
	|	Дни КАК ДНИ,
	|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ,Номенклатура В ИЕРАРХИИ (&отборНомеклатуры)) КАК Движения
	|
	|
	|СГРУППИРОВАТЬ ПО
	|	ДНИ.Период,
	|	Движения.Склад,
	|	Движения.Номенклатура
	|
	|ИМЕЮЩИЕ
	|	СУММА(ВЫБОР
	|			КОГДА Движения.Период = &НачалоПериода
	|				ТОГДА Движения.КоличествоКонечныйОстаток
	|			ИНАЧЕ ВЫБОР
	|					КОГДА Движения.Период <= ДНИ.Период
	|						ТОГДА Движения.КоличествоОборот
	|					ИНАЧЕ 0
	|				КОНЕЦ
	|		КОНЕЦ) <> 0	
	|
	|УПОРЯДОЧИТЬ ПО
	|	Период,
	|	Склад,
	|	Номенклатура";
	
	лЗапрос.УстановитьПараметр("КонецПериода", КонецДня(ДатаОкончанияПериода));
	лЗапрос.УстановитьПараметр("НачалоПериода",  НачалоДня(ДатаНачалаПериода));
	лЗапрос.УстановитьПараметр("ТБДаты", тзнСЦифрами);
	лЗапрос.УстановитьПараметр("отборНомеклатуры", данныеОтбораНомеклатуры);
	
	лТЗнДанные = лЗапрос.Выполнить().Выгрузить();
Показать
2. starjevschik 08.04.21 08:53 Сейчас в теме
Ну например варианты
1) нанять программиста
2) написать цикл по дням с получением остатка и вывести в отчет
3) написать запрос с получением остатка на каждый день и вывести в отчет
это то, что сразу представляется без особых раздумий. Уже есть из чего выбрать )
Оставьте свое сообщение
Вопросы с вознаграждением