Имя: Пароль:
1C
1С v8
ФИФО и ЛИФО в одном запросе
0 selestos
 
03.10.13
12:05
ВЫБРАТЬ
    РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
    РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад КАК Склад,
    СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество
ПОМЕСТИТЬ ТабДок
ИЗ
    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
ГДЕ
    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
;

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

УПОРЯДОЧИТЬ ПО
    ПартияДата УБЫВ
ИТОГИ
    МАКСИМУМ(Количество),
    СУММА(КоличествоОстаток),
    СУММА(СуммаОстаток),
    СУММА(КоличествоЗабронированного)
ПО
    Номенклатура
;

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

УПОРЯДОЧИТЬ ПО
    ПартияДата
ИТОГИ
    МАКСИМУМ(Количество),
    СУММА(КоличествоОстаток),
    СУММА(СуммаОстаток),
    СУММА(КоличествоЗабронированного)
ПО
    Номенклатура



тут два пакета запроса один сортирует номенклатуру по убыванию а другой по возрастанию.
Как организовать выполнения одного из этих двоих запросов в зависимости от значения В регистреСведениях ФИФО/ЛИФО??
Помогите кто знает, очень надо....
1 goleaff2006
 
03.10.13
12:06
а че итоги в пакетном запросе использовать можно?
2 zippygrill
 
03.10.13
12:07
через МВТ.
3 selestos
 
03.10.13
12:09
Опиши пожалуйста, я новичок... (2)
4 Simod
 
03.10.13
12:15
(0) Т.е. ты хочешь, чтобы запрос был один, но сортировка в зависимости от значения в рег.сведений была разная?
5 Sabbath
 
03.10.13
12:16
(0) ФИФО или ЛИФО в какой момент? (я просто с подобным не работаю, не в теме)
Если еще до выполнения запроса ясно, то делаешь один запрос, и собираешь его конкатенацией с переменной, в которой определяется убвание или возрастание, т.е.

текст = "ВЫбрать ...
...
УПОРЯДОЧИТЬ ПО
    ПартияДата " + ПорядокСортировки + "
|.. "

ПорядокСортировки - это переменная, которую определяешь до текста запроса, содержит "УБЫВ" или ""
6 mikecool
 
03.10.13
12:17
а в этой части выбор не прокатит?
типа
упорядочить по Наименование выбор когда и т.д.
7 selestos
 
03.10.13
12:29
нет, пробывал (6)
8 selestos
 
03.10.13
12:33
думаю это задача по силам немноги
9 Sabbath
 
03.10.13
12:35
(8) только просветленным)
Так подскажи, когда понятно, нужно тебе ФИФО или ЛИФО? До исполнения запроса это ясно или зависит от результата?
10 Wobland
 
03.10.13
12:35
(8) истинно так. даже 1Сники не все смогут
11 Filippov
 
03.10.13
12:41
(8)Способ (5) широко используется в типовых. Как вариант можно (но осторожно!) использовать замену в тексте запроса строки с УБЫВ на строку без него
12 selestos
 
03.10.13
12:43
я так делал, задача состоит  том чтоб в сам запрос передавать только параметр(Дату) и больше ничего
13 Wobland
 
03.10.13
12:44
(12) кто тебе её так поставил?
14 alexiv79
 
03.10.13
12:44
(11) в задачах из 1 раздела на спеца по платформе 8.2 так делают
15 alexiv79
 
03.10.13
12:45
(12) Ну хз-это потаенное знание, утраченное уже
16 Wobland
 
03.10.13
12:46
(15) как бы для сортировки в нужном направлении даже дата не нужна..
17 alexiv79
 
03.10.13
12:47
(16) Я не вижу других путей, кроме как в (5) или (11). ЧТо за задача такая, какой практический смысл так ее ставить я даже представить не могу
18 Wobland
 
03.10.13
12:54
(17) можно спрашивать ту или иную таблицу у МВТ (вроде), но это изврат. а для экзамена так ваще лишнее
19 azernot
 
03.10.13
13:13
В случае ФИФО в поле ПартияДата - дата партии, в случае ЛИФО - Разность дат 31.12.3999 и даты партии.

В запросах, в виртуальных таблицах указывается условие
типа
"МетодСписания = ЛИФО" или "МетодСписания = ЛИФО" (т.е. результатом одного из запросов всегда будет пусто)

Результирующий запрос содержит объединение данных первого и второго с сортировкой по ПартияДата по возрастанию.
20 Fragster
 
модератор
03.10.13
13:15
е-мое... это не в первобите собеседование? очень уж похоже на то, что я им когда-то предоставил (именно в одном запросе и именно фифо через итоги).
21 fisher
 
03.10.13
13:21
Ну, в качестве изврата можно что-то такое попробовать
УПОРЯДОЧИТЬ ПО
ВЫБОР КОГДА ФИФО ТОГДА
     ПартияДата
ИНАЧЕ
     РАЗНИЦАДАТ(ПартияДата, ТекущаяДата, СЕКУНДА)
КОНЕЦ
22 fisher
 
03.10.13
13:22
Лучше, конечно, не текущую дату.
Это чтобы идею показать.
23 fisher
 
03.10.13
13:24
Тьфу, РАЗНОСТЬДАТ
24 fisher
 
03.10.13
13:27
Но в "боевых" задачах я бы так не делал. Зачем делать запрос более ресурсоемким, если этого можно избежать?
25 fisher
 
03.10.13
13:33
Это что! Намедни мне такой клевый тестовый вопрос принесли! Мммм!
Какой будет результат выражения
"010"++"010"+1?
а
"010"-+"010"+1?
26 Wobland
 
03.10.13
13:35
(25) это по-каковски?
27 fisher
 
03.10.13
13:35
По-одинэсовски :)
28 el7cartel
 
03.10.13
13:36
(25) ориджинал ба...
29 Wobland
 
03.10.13
13:37
(27) плюс-плюс? впервые вижу.
дай-ка подумаю...
"010" плюс 10 = "01010"
и ещё единичку в конце = "010101". угадал?
30 Wobland
 
03.10.13
13:37
(29) "плюс 10" читать как "плюс +10"
31 Wobland
 
03.10.13
13:38
(29) ну и "01" соответственно
32 Wobland
 
03.10.13
13:40
(31) авотфих. "010" плюс +10 даст строку, а "010" минус +10 уже число.
изврат какой эта мягкая типизация. то к первому операнду, то ко второму...
уже проверил в табле
33 fisher
 
03.10.13
13:40
Практически угадал. 1 - во втором случае.
Респект.
Ну а я сообразил в чем дело, только почесав репу на результаты. Нетипичное выражение сбило с толку :)
34 fisher
 
03.10.13
13:42
То, что первый операнд тоже может быть тоже неявно типизирован - я вообще как-то упустил. Ибо никогда в реальной практике такое не юзал.
Ошибка? Это не ошибка, это системная функция.