Имя: Пароль:
1C
 
Остатки на каждый день в запросе.
,
0 Zombi
 
17.01.20
00:34
Шел третий час ночи. Соображаю слабо, а к утру обработку починить надо. Запрос остатков на каждый день.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.Дата КАК Дата
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

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

СГРУППИРОВАТЬ ПО
    Движения.АналитикаУчетаНоменклатуры.Номенклатура,
    ДНИ.Дата,
    Движения.АналитикаУчетаНоменклатуры.МестоХранения,
    ЕСТЬNULL(Движения.Партия.Ссылка, &ПустоеПриобретение)

Остатки нужны не на конец, а на начало каждого дня. Где сдвиг даты сделать?
1 xXeNoNx
 
17.01.20
05:43
Делай на конец предыдущего дня, а в дате смещение пиши
2 catena
 
17.01.20
06:04
(0)Ночью надо спать) Начальный остаток - на начало, конечный - на конец.
3 Zombi
 
17.01.20
09:30
Че то воткнулся с этим запросом, до сих пор не могу победить. Сейчас этот запрос выдает правильный начальный остаток за первый день в периоде. Второй и последующий остаток возвращает на конец дня, да еще почему то как будто не видит оборот первого дня. Например начальный остаток у меня 316, первого числа расход 68, второго числа 36. Сейчас запрос возвращает за первое число 316, за второе 280. То есть оборот за первое число не видит из за условия КОГДА Движения.Период = &НачалоПериода. Не пойму, как получить остатки на начало каждого дня.
4 palsergeich
 
17.01.20
09:33
Начало дня это конец + 1 секунда.
Тебе надо просто понять куда эту секунду поставить, если прям не получается изменить текст.
5 Timon1405
 
17.01.20
09:33
сделайте в СКД соединением наборов Дни и Движения по дате
6 palsergeich
 
17.01.20
09:37
А все понял.
СУММА(ВЫБОР
            КОГДА Движения.Период = &НачалоПериода
                ТОГДА Движения.КоличествоНачальныйОстаток
            ИНАЧЕ ВЫБОР
                    КОГДА Движения.Период <= ДНИ.Дата
                        ТОГДА Движения.КоличествоОборот
                    ИНАЧЕ 0
                КОНЕЦ
        КОНЕЦ) КАК КоличествоКонечныйОстаток
Тут надо аккуратно изменить условие когда
7 palsergeich
 
17.01.20
09:37
Ну или (5) так
8 Zombi
 
17.01.20
09:39
(4) Со вчерашнего дня не могу придумать, куда прибавлять :)
9 Zombi
 
17.01.20
09:41
(5) СКД тут не подойдет. Это обработка выгрузки данных поставщику, она потом в ХМЛ выгружает данные.
10 Zombi
 
17.01.20
09:42
(6) Второе "Когда"? Что поменять?
11 yzimin
 
17.01.20
09:43
(9) не CisLink случайно?)) У них там одна из таблиц именно такая)
12 palsergeich
 
17.01.20
09:43
Ну попробуй <= заменить на <
13 catena
 
17.01.20
09:44
да вы бредите. При периодичности день в ОстаткиИОбороты начальный остаток - на начало дня, конечный на конец. Уберите все условия, выведите все три ресурса и убедитесь.
14 Zombi
 
17.01.20
09:46
(11) Не.
(12) Пробовал, получается на 1 число остаток 316, на второе число 316, на третье число 280
15 palsergeich
 
17.01.20
09:46
(13) цыц, мы тут ищем ошибку в аггрегировании, а не хотим, что бы платформа сделала за нас
16 catena
 
17.01.20
09:46
(15)А... пятница.
17 palsergeich
 
17.01.20
09:47
(14) 4,5,6 и ТД уже пойдут как надотеперь ты понял, что у тебя сдвиг на сутки. Надо всего лишь это поправить.
18 Zombi
 
17.01.20
09:49
(13) Мы ж на каждый день остатки получаем. Поэтому на начало периода берем начальный остаток, а дальше соединяем по периоду с регламентированным календарем и берем поле оборот, а не начальный, конечный остаток
19 palsergeich
 
17.01.20
09:51
(16) и кстати да, если движений не будет, то и в запросе строки с этой записью не будет, а она должна быть
20 yzimin
 
17.01.20
09:54
а почему просто не прописать типа такого?
ДОБАВИТЬКДАТЕ(ДНИ.Дата, День, 1) КАК ДатаКалендаря
21 Zombi
 
17.01.20
09:55
(17) Вот так:

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


Получился результат как в (0) первое число 316, второе 280...
22 Zombi
 
17.01.20
09:57
(20) Тогда с 2 числа выводит данные и второго числа остаток 316, третьего 280...
23 catena
 
17.01.20
09:59
(18)А, точно. прошу прощения. Отвыкла уже от решения подобного запросами)
24 yzimin
 
17.01.20
09:59
(22)  РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&НачалоПериода, День, -1) И &КонецПериода
?
25 catena
 
17.01.20
10:00
(21)Мне кажется, он имел в виду добавить к дате,

   ДОБАВИТЬКДАТЕ(ДНИ.Дата, ДЕНЬ, -1) КАК ДатаКалендаря,
    СУММА(ВЫБОР
            КОГДА Движения.Период = &НачалоПериода
                ТОГДА Движения.КоличествоНачальныйОстаток
            ИНАЧЕ ВЫБОР
                    КОГДА Движения.Период <= ДНИ.Дата
                        ТОГДА Движения.КоличествоОборот
                    ИНАЧЕ 0
                КОНЕЦ
        КОНЕЦ) КАК КоличествоКонечныйОстаток,
26 catena
 
17.01.20
10:00
+(25)Только тогда надо на конечныйостаток исправить
27 Zombi
 
17.01.20
10:09
(24) Тогда за 1 число null
28 Zombi
 
17.01.20
10:10
(25) Щас так и пробуем.
29 Ёпрст
 
17.01.20
10:22
(0) для обычного запроса таблица с датами не нужна, нужео доаолнение к группировке запроса при обходе выборки. Усё
30 NUser
 
17.01.20
10:25
А какой смысл в этой временной таблице?
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РегламентированныйПроизводственныйКалендарь.Дата КАК Дата
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.Дата МЕЖДУ &НачалоПериода И &КонецПериода
;

Если выбираются все дни периода производственного календаря. Снести её да сделать просто через ИТОГИ по периоду.
31 NUser
 
17.01.20
10:29
+ (29) ага, чтобы в выборку попадал день без остатков скажем
32 catena
 
17.01.20
10:30
(30)Потому что даты без оборотов из регистра просто так не вытащить.
33 NUser
 
17.01.20
10:31
(32) читай 29 и 31
34 Ёпрст
 
17.01.20
10:31
(32) а от тут ты наконец, ошиблась)
35 NUser
 
17.01.20
10:32
(34) респект, есть ещё умные парни на сайте)
36 Ёпрст
 
17.01.20
10:32
Ну наконец то настал тот день, когда catena что-то не знает)
37 yzimin
 
17.01.20
10:34
(27) твоя задача сводится к тому, что просто в текущем запросе надо выводить+1 день, а период нач и кон в отчете задать -1 день
38 catena
 
17.01.20
10:35
(36)Я многа шта не знаю, я просто вовремя молчу обычно)))
39 Zombi
 
17.01.20
10:38
(30) Накидай, если не трудно в консоли примерный, запрос, который выведет остатки на начало каждого дня без использования вт с датами.
40 NUser
 
17.01.20
11:03
(39)
ВЫБРАТЬ
    РасчетыСКлиентамиОстаткиИОбороты.Период КАК ПолеПериод,
    РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам,
    РасчетыСКлиентамиОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток
ИЗ
    РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , ) КАК РасчетыСКлиентамиОстаткиИОбороты
ИТОГИ ПО
    АналитикаУчетаПоПартнерам,
    Период ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)

Потом выборку из результата запроса обходить с параметрами: РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ПолеПериод", "ВСЕ");

Получаем остатки на каждый день таким образом без лишнего головняка.
41 NUser
 
17.01.20
11:06
+(40)в ИТОГИ ПО надо было указать агрегатную функцию СУММА(СуммаНачальныйОстаток)
42 palsergeich
 
17.01.20
11:11
(40) если движений в этот день нет, то и строчки не будет. А это ошибка
43 Ёпрст
 
17.01.20
11:41
(39) ща..
44 Ёпрст
 
17.01.20
11:41
хотя. в (40) уже всё есть
45 Ёпрст
 
17.01.20
11:42
(42) всё там будет.. там главное - обход группировки с "все"
46 yalex
 
17.01.20
12:03
(9) Так результат СКД можно легко выгрузить в коллекцию значений(таблицу значений), а оттуда в xml
47 X Leshiy
 
17.01.20
12:18
(40) Запрос в цикле лучше!!!
48 Zombi
 
18.01.20
09:55
Спасибо всем!
49 NUser
 
21.01.20
04:45
(42) Если движений нет то на этот день будет остаток 0. Ты не понял просто.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс