Всем привет.
Может кто сталкивался, или уже обсуждали, а поиском я найти не смог. Если дадите ссылку на вопрос/обсуждение, будет круто.

Есть регистр накопления с видом регистра "остатки", нужно получить остатки на каждый день, но не запросом, а с помощью СКД. Может кто сталкивался с такой задачей? Может какую то формулу нужно прописать на вкладке "Ресурсы"?

При таком запросе в скд:

ВЫБРАТЬ
 ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
 ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
 ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток
ИЗ
 РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День, , ) КАК ТоварыНаСкладахОстаткиИОбороты

Пришел к такой формуле:
ВычислитьВыражение(
"Выбор
    Когда Сумма(Остаток) ЕСТЬ NULL Тогда
      0
Иначе
      Сумма(Остаток)
Конец",
"Период", "Группировка", "Предыдущая", "Текущая")
Но она берет остаток на текущую строку и следующую, а дальше 0 ставит на последующие дни.

P.s. Еще раз повторюсь, запрос знаю как сделать, в интернетах уже информацию прочитал. Хотелось бы именно через СКД.
---
Вот пример отчета СКД с остатками по дням.
---
Что нужно поменять:
 - изменить расчет ресурса, достаточно просто "Сумма(ОстатокНаНачало)"
 - проверить, что есть поля начального и конечного остатка
 - проверить что корректно настроены роли полей: периоды, измерения, начальный и конечный остаток.
---
1. Должны быть оба поля начальный и конечный остаток
2. У всех полей должны быть прописаны роли
---
речь идет о том как в типовых реализована возможность крутить отчет, чтобы оно работало на любой вкус?
Посмотри запрос и настройки схемы в типовом отчете и сделай также.
---
А в каком типовом отчете это реализовано?
Я смотрел типовые отчет в УТ 11, я не нашел такого чтобы там брался остаток на каждую дату, через СКД.
---
потому что их настраивать нужно.
---
вот почитайте https://its.1c.ru/db/metod8dev/content/1587/hdoc
---
Читал, все делал как было описано, но все равно данные вот такие получаются
---
1. Должны быть оба поля начальный и конечный остаток
2. У всех полей должны быть прописаны роли
---
Выкручивался заполняя по датам расчетным методом. Может кто знает способ лучше.
---
Возьмите виртуальную таблицу остатки и обороты с периодичностью день. В группировках укажите день и будут остатки по дням.
---
Я так делаю, но получается как во вложении
---
Вот настройка
---
А что не устраивает Вас в таком варианте?
---
У меня на 1 число остаток 0, на 2 число уже 100, у меня не было расхода 3 числа, значит 3 числа должно быть тоже 100. Остаток 100 должен держаться до 11 числа, когда идет расход на 50, и получается что 11 числа остаток 50.

Я хочу видеть актуальные данные на каждый день, а отчет показывает пустой остаток
---
ВычислитьВыражение(
"Выбор
Когда Сумма(Остаток) ЕСТЬ NULL Тогда
0
Иначе
Сумма(Остаток)
Конец",
"Период", "Группировка", "Предыдущая", "Текущая")
Но она берет остаток на текущую строку и следующую, а дальше 0 ставит на последующие дни.
Вот этого всего не надо, остаток надо добавить в ресурсы без изменения выражения. СКД сама все должна сделать.
---
где-то на просторах инфорстарта нашел давно такой запрос, до сих пор пользуюсь
как переложить в скд уж сами... в моей практике такого не требовалось, потому практически первоисточник...

```1c
    тзнСЦифрами = Новый ТаблицаЗначений();
    КЧ = Новый КвалификаторыЧисла(12,2);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Число"));
    ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);

    тзнСЦифрами.Колонки.Добавить("Цифра", ОписаниеТиповЧ);
    Для Счетчик = 0 по лМаксимальноеЧислоДней Цикл
    НоваяСтрока = тзнСЦифрами.Добавить();
    НоваяСтрока.Цифра = Счетчик;
    КонецЦикла;

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

    лЗапрос.УстановитьПараметр("КонецПериода", КонецДня(ДатаСинхронизации));
    лЗапрос.УстановитьПараметр("НачалоПериода", НачалоДня(ДатаНачалаПериодаСинхронизации));
    лЗапрос.УстановитьПараметр("ТБДаты", тзнСЦифрами);
    лЗапрос.УстановитьПараметр("массивНоменклатуры", тзНомеклатура.ВыгрузитьКолонку("Ссылка"));
```
---
Кодом и запросом знаю как сделать, уже реализовывал.

Вот запрос для скд, который получает на каждую дату:

```1c
    ВЫБРАТЬ
    0 КАК Цифра
    ПОМЕСТИТЬ ВТ_Цифры

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    1

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    5

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    6

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    7

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    8

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    9
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ВТ_Цифры0.Цифра + 10 * ВТ_Цифры1.Цифра) КАК Дата
    ПОМЕСТИТЬ ВТ_Даты
    ИЗ
    ВТ_Цифры КАК ВТ_Цифры0
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры1
    ПО (ИСТИНА)
    ГДЕ
    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ВТ_Цифры0.Цифра + 10 * ВТ_Цифры1.Цифра) МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Период,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоОстаток
    ПОМЕСТИТЬ ВТ_ТоварыНаСкладахОстатки
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_ТоварыНаСкладахОстатки.Период КАК ДатаНачала,
    ВТ_ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ВТ_ТоварыНаСкладахОстатки.Склад КАК Склад,
    ВТ_ТоварыНаСкладахОстатки.КоличествоОстаток,
    МИНИМУМ(ВЫБОР
    КОГДА КОНЕЦПЕРИОДА(ВТ_ТоварыНаСкладахОстатки1.Период, ДЕНЬ) = &ДатаОкончания
    ТОГДА &ДатаОкончания
    ИНАЧЕ ДОБАВИТЬКДАТЕ(ВТ_ТоварыНаСкладахОстатки1.Период, СЕКУНДА, -1)
    КОНЕЦ) КАК ДатаОкончания
    ПОМЕСТИТЬ ВТ_ОстаткиИИнтервалы
    ИЗ
    ВТ_ТоварыНаСкладахОстатки КАК ВТ_ТоварыНаСкладахОстатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТоварыНаСкладахОстатки КАК ВТ_ТоварыНаСкладахОстатки1
    ПО ВТ_ТоварыНаСкладахОстатки.Номенклатура = ВТ_ТоварыНаСкладахОстатки1.Номенклатура
    И ВТ_ТоварыНаСкладахОстатки.Склад = ВТ_ТоварыНаСкладахОстатки1.Склад
    И ВТ_ТоварыНаСкладахОстатки.Период < ВТ_ТоварыНаСкладахОстатки1.Период

    СГРУППИРОВАТЬ ПО
    ВТ_ТоварыНаСкладахОстатки.Период,
    ВТ_ТоварыНаСкладахОстатки.Номенклатура,
    ВТ_ТоварыНаСкладахОстатки.Склад,
    ВТ_ТоварыНаСкладахОстатки.КоличествоОстаток
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Даты.Дата КАК Дата,
    ВТ_ОстаткиИИнтервалы.Номенклатура,
    ВТ_ОстаткиИИнтервалы.Склад,
    ВТ_ОстаткиИИнтервалы.КоличествоОстаток
    ИЗ
    ВТ_ОстаткиИИнтервалы КАК ВТ_ОстаткиИИнтервалы
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Даты КАК ВТ_Даты
    ПО (ВТ_Даты.Дата МЕЖДУ ВТ_ОстаткиИИнтервалы.ДатаНачала И ВТ_ОстаткиИИнтервалы.ДатаОкончания)

    УПОРЯДОЧИТЬ ПО
    Дата
```
---
Что нужно поменять:
 - изменить расчет ресурса, достаточно просто "Сумма(ОстатокНаНачало)"
 - проверить, что есть поля начального и конечного остатка
 - проверить что корректно настроены роли полей: периоды, измерения, начальный и конечный остаток.
---
Сделал как вы написали, получилось но частично (картинка во вложении).
Т.е. после этого уже формулу писать чтобы конечный остаток был = начальному, где скд это сделало не правильно?
---
Регистр накопелний остатки не хранит ни каких данных за день, когда остатки не менялись, и получается. что остаток в этот день равен остатку на конец прошлого дня, думаю отталкиваться нужно от этого...
у меня я уже писал топик по ээтой теме:
http://forum.infostart.ru/forum9/topic237093/message2403347/#message2403347
посмотри вдруг поможет, там есть запрос для примера.

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

У СКД есть функционал который может так сделать чтобы не писать такие алгоритмы.

Отвечая на ваш вопрос, сейчас уже больше для саморазвития и уже из принципа, ну просто эта проблема, что там можно сделать, не дает мне нормально спать :D
---
Могу предположить только если)))
Я бы попробовал сделать в СКД 2 набор данных в первом остатки по срезу последних
с условиями по номенклатуре и по дате
в во второй набор вывел бы даты производственно календаня и подружил бы наборы по дате, причем тянул бы даты календаря в параметр даты в наборе по остаткам.
В таком случае будет выводиться не остаток на каждый день периода, а будет выводиться остаток на каждый день в отдельности)
---
Вот пример отчета СКД с остатками по дням.
---
Спасибо, я понял свою ошибку, обязательно нужно было взять начальный остаток и указывать роли. Так же как и описал (16), но там уже был мой косяк, не правильно сделал.
---
В большинстве случаев роли трогать не надо, если идет автозаполнение. Они сами выставляются как положено. Их менять надо, только если знаете зачем это вам нужно. В своей практике я такое встречал 1 раз.