Имя: Пароль:
1C
 
Вопрос по запросу
0 Chebchic1
 
24.06.26
10:47
Привет всем.
Подскажите, есть УТ11.5 пости последней версии, в ней регистр накопления Закупки.
Приобретали номенклатуру1 много раз, например - 22 с разным колвом.
В наличии по номенклатуре1 сейчас - 5 штук
Нужно взять запросом из Закупок цены покупки последних пяти штук.
Просится вложенный цикл/вложенный запрос, но как ему сказать в запросе где остановиться?
1 maxab72
 
24.06.26
10:56
а по партиям учет ведете?
2 Chebchic1
 
24.06.26
10:56
нет
3 Chebchic1
 
24.06.26
10:56
характеристики и серии отключены
4 Ненавижу 1С
 
гуру
24.06.26
10:59
(0) то есть вы хотите себестоимость последних 5 штук, но ФИФО нет? а вы проказники
Можно "на лету" конечно, но такое
5 Ненавижу 1С
 
гуру
24.06.26
11:00
переделать под себя
FIFO в запросе
6 Chebchic1
 
24.06.26
17:26
по образу и подобию получил вот такой запрос:
ВЫБРАТЬ
    ВложенныйЗапрос.Ссылка КАК Ссылка,
    ВложенныйЗапрос.Количество КАК Количество,
    ВЫБОР
        КОГДА ВложенныйЗапрос.КоличествоИтог <= &Колво
            ТОГДА ВложенныйЗапрос.Количество
        ИНАЧЕ ВложенныйЗапрос.Количество + &Колво - ВложенныйЗапрос.КоличествоИтог
    КОНЕЦ КАК Колво,
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.Цена КАК ЦенаПокупки
ИЗ
    (ВЫБРАТЬ
        Док.Ссылка КАК Ссылка,
        Док.Количество КАК Количество,
        СУММА(Док1.Количество) КАК КоличествоИтог,
        Док.Номенклатура КАК Номенклатура,
        Док.Цена КАК Цена
    ИЗ
        Документ.ПриобретениеТоваровУслуг.Товары КАК Док
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК Док1
            ПО Док.Ссылка.МоментВремени >= Док1.Ссылка.МоментВремени
                И Док.Номенклатура = Док1.Номенклатура
    
    СГРУППИРОВАТЬ ПО
        Док.Ссылка,
        Док.Количество,
        Док.Номенклатура,
        Док.Цена) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.КоличествоИтог - ВложенныйЗапрос.Количество < &Колво

УПОРЯДОЧИТЬ ПО
    ВложенныйЗапрос.Ссылка.МоментВремени убыв
7 Chebchic1
 
24.06.26
17:27
но в составе набора данных - не работает
8 Chebchic1
 
24.06.26
17:27
ну точнее ЦенаПокупки = 0 везде
9 toypaul
 
гуру
24.06.26
18:44
(7) а не в составе набора?
10 maxab72
 
24.06.26
19:36
(6) Ну, я бы сказал, что и не должно работать. Идея ФИФо в запросе такая:
1. Получаем таблицу1: Количество; Дата прихода
2. Суммируем и получаем Общий приход.
3. Из Общего прихода вычитаем Остаток и получаем Расход.
4. Соединяем таблицу1 с самой собой по Дата прихода <= Дата прихода и суммируем
5. Вычитаем из каждой строки прихода из суммы более ранних приходов Расход, получаем Разницу.
6. Отбрасываем все минусы в Разнице. А где не минусы, берем минимум между Количеством и Разницей. Получаем распределение остатка по приходам.

Пример: было три прихода:
Приход 5 (последний)
Приход 7
Приход 8 (первый)

Остаток 6, значит Расход 14.

Суммируем приходы п. 4
Приход 5  8+7+5 = 20
Приход 7  8+7 = 15
Приход 8  8

Вычитаем расход:
Приход 5  20 - 14 = 6
Приход 7  15 - 14 = 1
Приход 8  8 - 14 = -6

Проверяем на минусы и минимум

Приход 5  Мин(5, 6) = 5
Приход 7  Мин (7, 1) = 1
Приход 8  0

итого распределение остатка:
Приход 5  5
Приход 7  1
11 Trance_1C
 
25.06.26
07:39
лучше сформировать программно скд, там можно получить фифо без лишних заклинаний в запросе.
12 Web00001
 
25.06.26
09:28
Какие фифо вообще. Вы здоровые нет? Он говорит, надо взять 5последних закупок и цену на них.
ВТ1 - получаем список дат из регистра закупок
ВТ2 - из регистра цен получаем ближайшую дату, к дате из ВТ1
Итоговый запрос - левым соединением регистр цен по дате
13 АгентБезопасной Нацио
 
25.06.26
09:36
(12) нет, он говорит, что нужно взять цены последних 5 штук.
14 один я дАртаньян
 
25.06.26
15:03
(0)

Тупо фифо в запросе — очень долго будет работать.

Программный перебор быстрее, но тут у нас есть конкретное количество и оно относительно не большое.

В запросе можно отобрать 5 последних партий, а потом в условии опеределить какие останутся.

Некоторые нюансы — предполагается, что закупка идет поштучно и не будет так, что закупается банка 0,5 литра и измереяется в литрах и тогда 5 литров может приходить за 10 партий, и в одной партии не будет номенклатуры по разной цене, и не учитываем корректировки приобретения.
15 vicof
 
25.06.26
15:20
И никто не спросил, нахрена все это надо...
16 Мультук
 
гуру
25.06.26
15:30
(15)

Миста уже не та (с)  :-)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс