Вывод остатков (и продаж) за каждый день в 1С
Из виртуальной таблицы регистра накопления берутся продажи; периодичность — авто; при автопериодичности доступны поля периодов день, неделя, месяц — их надо добавить в поля запроса.
Выборка оборотов (продажи, закупки) прописывается полями запроса, а в ресурсах настраивается подсчет сумм по этим полям. Во вкладке ресурсы для этих ресурсов ("продажа") я не указывал поля группировки (номенклатура, периоды, общий итог), но данные выводятся корректно!
В настройках отчета для вывода ресурса настроить — после всех полей. Тогда ресурсы (продажи) выводятся на пересечении полей номенклатуры и даты!
Сделал такой отчет:
настройка "располагать ресурсы по вертикали" — делает строку остаток+приход; и строку "продажа".
итоги по вертикали — нет (оно суммирует и остатки тоже за все периоды, а это уже чушь);
итоги по горизонтали — нет (продажа понятно, но оно суммирует и остатки за все периоды — а это уже чушь)
Эта кросс-таблица плоха тем, что я не знаю, как на пересечения добавить иные поля, кроме ресурсов!
Чтобы выводить остатки за каждый день, недостаточно включить автодополнение в поле "период". Необходимо получить список дат за период, а после на эти даты вычислять остатки и продажи.
Даты за все дни периода берут:
- из производственного календаря в УПП;
- из справочника с валютными курсами, который изменяется ежедневно (в торговле);
- формируют хитрым запросом;
- формируют на языке 1С, помещают в таблицу значений и передают в запрос в качестве параметра.
В Далионе я лично взял даты из доков ОКС, так как доки ОКС в рознице формируются КАЖДЫЙ ДЕНЬ.
Вот выборка дат из ОКС за указанный период:
ВЫБРАТЬ РАЗЛИЧНЫЕ
НачалоПериода(ОтчетКассовойСмены.Дата, День)КАК Дата
ИЗ
Документ.ОтчетКассовойСмены КАК ОтчетКассовойСмены
ГДЕ ОтчетКассовойСмены.Дата МЕЖДУ НачалоПериода(&НачалоОтчет, День) И КонецПериода(&КонецОтчета, День)
Помещаю результаты по временную таблицу, и далее делаю выборку приходов и остатков за каждую дату указанного периода!
Вот теория
https://forum.infostart.ru/forum9/topic110654/
3. ildarovich 7579 21.05.14 09:24
Это очень распространенная и многократно решенная задача. Посмотрите, например,
Запрос по остаткам регистра накопления на каждый день или Запрос выдающий данные на каждую дату периода. Прочитайте сопутствующие обсуждения. Там есть полезные дополнения и другие варианты. Например, об использовании постобработки результатов запроса в СКД для ускорения решения. Если же хотите считать среднее, то остатки на каждый день вообще не нужны!
Вот на сайте Гилева четко все описано и дан пример запроса
Вот у Гилева получение остатков на каждый день — понял, и по этой основе сделал отчет с ежедневными остатками и продажами 20.11.22
Стандартная выборка из виртуального регистра остатков и оборотов не показывает остатки на периодах, в которых нет оборотов. В СКД, то есть вне запроса проблема легко решается, а для использования внутри запроса приходится «городить огород». У многих это выливается в несколько запросов, тогда как можно обойтись и одним. Остатки здесь получаются суммированием оборотов. По тому же принципу платформа рассчитывает остатки внутри периода хранения итогов.
На инфостарте публикация "Остатки на каждый день" - не понял
Опубликовано 28.02.2016 автором admin
http://infostart.ru/public/102435/
Вот работающий запрос — вывод остатки по дням, продажи по дням на конец периода 20.11.22
ВЫБРАТЬ РАЗЛИЧНЫЕ
НАЧАЛОПЕРИОДА(ОтчетКассовойСмены.Дата, ДЕНЬ) КАК ДатаСтроки
ПОМЕСТИТЬ ВТ_Даты
ИЗ
Документ.ОтчетКассовойСмены КАК ОтчетКассовойСмены
ГДЕ
ОтчетКассовойСмены.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Движения.Номенклатура КАК Номенклатура,
ВТ_Даты.ДатаСтроки КАК Период1,
ЕСТЬNULL(ОстаткиНоменклатурыВРозницеОстаткиИОбороты.КоличествоПриход, 0) КАК ОстатокПлюсПриход, // РСА Это только приход, без остатка. Название поля не верное?
СУММА(ВЫБОР
КОГДА Движения.Период = &НачалоПериода
ТОГДА ЕСТЬNULL(Движения.КоличествоКонечныйОстаток,0)
ИНАЧЕ ВЫБОР
КОГДА Движения.Период<=ВТ_Даты.ДатаСтроки
ТОГДА ЕСТЬNULL(Движения.КоличествоОборот,0)
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ) КАК КолвоКонечныйОстаток,
СУММА(ВЫБОР
КОГДА Движения.Период = ВТ_Даты.ДатаСтроки
ТОГДА ЕСТЬNULL(Движения.КоличествоРасход, 0)
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоРасход
ИЗ
ВТ_Даты КАК ВТ_Даты,
РегистрНакопления.ОстаткиНоменклатурыВРознице.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, ДвиженияИГраницыПериода, Склад = &ВыбСклад) КАК Движения
СГРУППИРОВАТЬ ПО
Движения.Номенклатура,
ВТ_Даты.ДатаСтроки
// В исходном образце у Гилева выводились только остатки.
// Для добавления продаж никаких левых соединений делать не пришлось.
// Просто добавил еще поле для выборки и все. Добавил как СУММУ строк.
СУММА(ВЫБОР
КОГДА Движения.Период = ВТ_Даты.ДатаСтроки
ТОГДА ЕСТЬNULL(Движения.КоличествоРасход, 0)
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоРасход
// Если просто добавить "расход", то там их на дату много, так что получается фигня — вообще расход не показывался!
// Движения.КоличествоРасход КАК КоличествоРасход - так не работает
20.11.22
??? А как вывести таблицу по периодам в неделю? Как получить список недель?
А зачем вообще получить список дней? В СКД ведь можно сделать дополнение периодов - дней, недель? Или в этом случае не получится получать остаток на конец каждого дня? Остатки будут только на периоды, где были движения?
Что то за забыл - какие поля доступны в вирт таблице РегистрНакопления.ОстаткиНоменклатурыВРознице.ОстаткиИОбороты?
Запрос все-таки не рабочий? Смотри рабочий запрос!!!
"В СКД, то есть вне запроса проблема легко решается" - найти отчет, где все нужные данные уже получались, причем по дням, неделям или иным периодам. Попробовать сделать остаток и приход как ресурс и вывести шахматную таблицу - слева товары, в шапке периоды, в таблице итоги ресурсов.
10.12.22