|
Получение остатка на каждый день | ☑ | ||
---|---|---|---|---|
0
MAPATNK2
naïve
16.07.18
✎
11:54
|
Всем доброго дня появилась необходимость в получение следующих данных:
Необходимо получить количество дней за определенный период, в котором товара не было на складе. Пытался: "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ (НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ))) КАК Период |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дат1, &Дат2, ДЕНЬ, , ) КАК ТоварыНаСкладахОстаткиИОбороты |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 |ГДЕ ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Ссылка В ИЕРАРХИИ(&Ном) СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура" Но к сожалению данный запрос выводит мне нудевой остаток только если совершился оборот по необходимой номенклатуре и остаток после этого оборота равен нулю. КАК ПОЛУЧИТЬ ДАННЫЕ ПО ВСЕМ ДНЯМ, В КОТОРЫХ ОСТАТОК ТОВАРА НА СКЛАДЕ БЫЛ РАВЕН НУЛЮ? |
|||
1
MAPATNK2
naïve
16.07.18
✎
11:55
|
За <= прошу прощения, бывают минуса на складе, но это уже другая история.
|
|||
2
Малыш Джон
16.07.18
✎
11:57
|
хмммм.... еженедельный вопрос...
создавай или вытаскивай откуда-нибудь список нужных тебе дней, левым соединением к нему - твои остатки |
|||
3
MAPATNK2
naïve
16.07.18
✎
12:00
|
(2) Откуда вытащить список дней? Легче ли перебрать циклом, для каждого дня делать запрос? Или это неоптимально и сильно нагрузит систему?
|
|||
4
Ненавижу 1С
гуру
16.07.18
✎
12:01
|
например есть РС РегламентированныйПроизводственныйКалендарь
|
|||
5
Джинн
16.07.18
✎
12:01
|
ОФФ. Второе десятилетие тупые менеджеры с тупыми односниками бьются головой о дерево в попытке решить таким способом задачу управления запасами. И также объяснить, что контора, торгующая канцтоварами, не продавала пароходы и Ламборгини "потому, что их не было на складе".
|
|||
6
Tonik992
16.07.18
✎
12:02
|
Попробуйте использовать:
|ИТОГИ ПО | Период ПЕРИОДАМИ("+Интервал+", &НачДата, &КонДата)"; а потом: Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все"); |
|||
7
novichok79
16.07.18
✎
12:06
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ТоварыНаСкладах.Период КАК Период, ТоварыНаСкладах.Номенклатура КАК Номенклатура, ТоварыНаСкладах.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, День, ДвиженияИГраницыПериода, Номенклатура В ИЕРАРХИИ (&Номенклатура) ) КАК ТоварыНаСкладах ГДЕ ТоварыНаСкладах.ВНаличииКонечныйОстаток <= 0 УПОРЯДОЧИТЬ ПО Номенклатура, Период типа так? |
|||
8
DrShad
16.07.18
✎
12:08
|
(7) вообще не в тему
|
|||
9
Михаил Козлов
16.07.18
✎
12:08
|
(7) Нет.
|
|||
10
novichok79
16.07.18
✎
12:17
|
(8) (9) а, ему количество дней надо.
не такое сходу не написать сначала получить периоды, потом к ним таблицу дат (либо РС регл. производственный календарь) и потом количество различных дней по каждому периоду. |
|||
11
MAPATNK2
naïve
16.07.18
✎
12:21
|
Спасибо, буду пробовать
|
|||
12
Михаил Козлов
16.07.18
✎
12:25
|
(11) Попробуйте так:
ВЫБРАТЬ РАЗЛИЧНЫЕ КурсыВалют.Период ПОМЕСТИТЬ Дни ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.Период МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТнС.Номенклатура КАК Номенклатура, ДНИ.Период КАК Период, СУММА(ВЫБОР КОГДА ТнС.Период = &НачалоПериода ТОГДА ТнС.КоличествоКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА ТнС.Период <= ДНИ.Период ТОГДА ТнС.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК Остаток ПОМЕСТИТЬ ТнС ИЗ Дни КАК ДНИ, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , Номенклатура В ИЕРАРХИИ(&Номенклатура)) КАК ТнС СГРУППИРОВАТЬ ПО ТнС.Номенклатура, ДНИ.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТнС.Номенклатура КАК Номенклатура, КОЛИЧЕСТВО(ТнС.Период) КАК днейБезОстатка ИЗ ТнС КАК ТнС ГДЕ ТнС.Остаток = 0 СГРУППИРОВАТЬ ПО ТнС.Номенклатура РС "Курсы валют" используется для получения массива всех дней. Лучше использовать РС "Производственный календарь". |
|||
13
mistеr
16.07.18
✎
12:29
|
(0) Не забудь потом проверять еще и оборот за день = 0. Потому что бывают ситуации, когда товар пришел и ушел в тот же день.
|
|||
14
MAPATNK2
naïve
16.07.18
✎
12:40
|
(13) (12) Спасибо большое
|
|||
15
Tonik992
16.07.18
✎
12:41
|
Если результат запроса используется в дальнейшем в выборке, тогда делайте так, как в (6). Не надо делать лишние соединения.
|
|||
16
MAPATNK2
naïve
16.07.18
✎
12:46
|
(15) не совсем понятно что это Период ПЕРИОДАМИ("+Интервал+", &НачДата, &КонДата)";, что за интервал?
|
|||
17
hhhh
16.07.18
✎
12:48
|
Период ПЕРИОДАМИ(день
|
|||
18
MAPATNK2
naïve
16.07.18
✎
12:48
|
(16) Нашел инфу, спасибо, посмотрю
|
|||
19
MAPATNK2
naïve
16.07.18
✎
12:55
|
(15) Все равно не ясно как эта конструкция должна использоваться
|
|||
20
MAPATNK2
naïve
16.07.18
✎
12:59
|
(15)
"ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Период КАК Период |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дат1, &Дат2, ДЕНЬ, , Номенклатура В ИЕРАРХИИ (&Ном)) КАК ТоварыНаСкладахОстаткиИОбороты |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 |ИТОГИ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)) КАК Период |ПО | Период ПЕРИОДАМИ(ДЕНЬ, &Дат1, &Дат2)"; Ошибку пишет. Не совсем понятно как пользоваться данный "ПЕРИОДАМИ" |
|||
21
Tonik992
16.07.18
✎
13:01
|
||||
22
MAPATNK2
naïve
16.07.18
✎
13:03
|
(21) На этом примере все ясно, но в моем случае период используется в Итогах 2 раза, глупость какая то.
|
|||
23
Tonik992
16.07.18
✎
13:09
|
Никакой глупости.
Уберите из итогов итоговое поле: КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)) КАК Период А оставьте только ИТОГИ |ПО | Период ПЕРИОДАМИ(ДЕНЬ, &Дат1, &Дат2)" |
|||
24
MAPATNK2
naïve
16.07.18
✎
13:16
|
(23) Уже так делал, к сожалению, пишет ошибку при выполнении запроса.
|
|||
25
MAPATNK2
naïve
16.07.18
✎
13:17
|
(23)
"ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Период КАК Период |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дат1, &Дат2, ДЕНЬ, , Номенклатура В ИЕРАРХИИ (&Ном)) КАК ТоварыНаСкладахОстаткиИОбороты |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 |ИТОГИ ПО | Период ПЕРИОДАМИ(ДЕНЬ, &Дат1, &Дат2)"; |
|||
26
MAPATNK2
naïve
16.07.18
✎
13:19
|
выборка пустая
|
|||
27
Tonik992
16.07.18
✎
13:27
|
РезультатЗапрос.Пустой() будет возвращать истина, но
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все"); даст вам нужный результат. |
|||
28
MAPATNK2
naïve
16.07.18
✎
13:29
|
(27) Я ведь так и сделал, пустой результат выдает
Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все"); |
|||
29
MAPATNK2
naïve
16.07.18
✎
13:30
|
(27)
Запрос2 = новый запрос; Запрос2.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.Период КАК Период |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дат1, &Дат2, ДЕНЬ, ,Номенклатура В ИЕРАРХИИ (&Ном)) КАК |ГДЕ | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0 |ИТОГИ ПО | Период ПЕРИОДАМИ(ДЕНЬ, &Дат1, &Дат2)"; Запрос2.УстановитьПараметр("Дат1",ЭтаФорма.Дат1); Запрос2.УстановитьПараметр("Дат2",ЭтаФорма.Дат2); Запрос2.УстановитьПараметр("Ном",ЭтаФорма.Номенклатура); Выборка = Запрос2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все"); |
|||
30
Tonik992
16.07.18
✎
13:32
|
Вы хотите сказать, что Выборка.Количество() = 0 ?
|
|||
31
Garykom
гуру
16.07.18
✎
13:37
|
(0) Данная задача запросами вменяемо не решается.
|
|||
32
MAPATNK2
naïve
16.07.18
✎
13:37
|
(30) Количество не равно 0, оно равно 30. Но что это за 30?
|
|||
33
Tonik992
16.07.18
✎
13:38
|
Вот, тото и оно.
А теперь обходите циклом Выборка.Следующий() |
|||
34
Tonik992
16.07.18
✎
13:40
|
Внутри цикла:
Выборка2 = Выборка.Выбрать(); И если Выборка2.Количество() = 0, значит имеем дело с номенклатурой, которая в данном периоде не имела движений. |
|||
35
bolobol
16.07.18
✎
13:40
|
(32) А вы что просили-то от запроса?
|
|||
36
MAPATNK2
naïve
16.07.18
✎
13:41
|
(34) Странно, затормозил. Проверю, спасибо.
|
|||
37
catena
16.07.18
✎
13:45
|
(34)Судя по условию - не имела движений при отрицательном остатке.
|
|||
38
MAPATNK2
naïve
16.07.18
✎
13:46
|
(34) В итоге запрос выводит просто даты. Без номенклатуры, без подсчета различных дней, при котором остаток равен 0. Не подходит. Я так понимаю данный отчет подойдет если выбираешь конкретную номенклатуру и по ней получаешь количество дней, при которых на складе она равна 0. Мне необходимо получить список.
|
|||
39
Tonik992
16.07.18
✎
13:49
|
Вы ведь в (0) сказали:
"Необходимо получить количество дней за определенный период, в котором товара не было на складе" Вот вы и в Выборке2.Количество() определяете, что если равно нулю, значит никаких там движений нет, и остатки нулевые. А вот сейчас ваши запросу чуть-чуть выросли.. различные дни для чего-то нужны, номенклатура ? |
|||
40
MAPATNK2
naïve
16.07.18
✎
13:53
|
(39) Мне необходимо получить количество дней, при которых товара на складе нет. А этот запрос я так и не понял что выдает
|
|||
41
MAPATNK2
naïve
16.07.18
✎
13:53
|
(12) Спасибо, вариант подходит
|
|||
42
Tonik992
16.07.18
✎
14:04
|
Разве можно использовать регистр не по его назначению? :-(
Брать р/с "валюты" для того, чтобы выцепить оттуда даты.. Это беспредел, товарищи. |
|||
43
MAPATNK2
naïve
16.07.18
✎
14:24
|
(42) Согласен, но я всё же не понял, что выводит ваш вариант запроса.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |