Версия для печати темы (https://pro1c.org.ua/index.php?s=6295c5b94170c4ec4fafc0c2c13702e7&showtopic=52153)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Выбрать последнее поступление товара с себестоимостью.

Автор: Tseka 23.05.19, 17:45

1С:Предприятие 8.3 (8.3.8.2027)

"Управление торговлей для Украины", редакция 2.3.



Как выбрать последнее поступление товара ? 32000000.gif

ВЫБРАТЬ
    Номенклатура.Код,
    Номенклатура.Наименование
ПОМЕСТИТЬ ВТНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

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

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

УПОРЯДОЧИТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура






 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 4, 8
 

Автор: Vofka 24.05.19, 8:33

Готовый запрос не напишу, но алгоритм примерно следующий:

1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу;
2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)

Автор: Tseka 24.05.19, 10:26

Цитата(Vofka @ 24.05.19, 9:33) *
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу;
2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)


Спасибо , попробую сейчас .

Автор: Vidocq05 24.05.19, 12:00

Цитата(Vofka @ 24.05.19, 8:33) *
сгруппированные по номенклатуре с МАКСИМУМ(Период)

Мне просто стало интересно. А если было два разных документов поступления по номенклатуре "Товар1" на 24.05.2019 00:00:00 с разной стоимостью?

Автор: Vofka 24.05.19, 12:22

Vidocq05 @ Сегодня, 13:00 * ,
зависит от бизнес логики: можно взять любой первый попавшийся из них (на моей практике часто именно так поступают в подобных ситуациях), либо взять первый попавшийся у которого стоимость больше/меньше остальных, либо не брать никакой (при этом дополнительно можно как-то оповестить пользователя, что вот мол так и так).

Автор: Vidocq05 24.05.19, 12:42

Vofka @ Сегодня, 12:22 * ,
Ну я думаю можно поймать по моменту времени. Но запросом я не знаю как это сделать, хотя особо и не копал. Просто интересно стало, думал может Вы знаете.

Автор: Vofka 24.05.19, 13:00

Vidocq05 @ Сегодня, 13:42 * ,
у меня ни разу не было задач подобного рода, где надо было бы вычислять с точностью до момента времени. Для пользователя это одно и то же время и мне всегда нужно было отталкиваться именно от "пользовательского" времени.

Автор: Tseka 24.05.19, 14:23

Цитата(Vofka @ 24.05.19, 9:33) *
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу;
2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)


Результат такой же 09000000.gif

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

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

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

Автор: Vofka 24.05.19, 14:54

Tseka, на работоспособность не проверял, но ход мыслей должен быть понятен:

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

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

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

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


Если окажется, что по одной номенклатуре было 2 разных поступления одной и той же датой и временем, например
Номенклатура 1, количество 1, стоимость 10
Номенклатура 1, количество 1, стоимость 20

То в результате запроса получится стоимость поступления 15 (Vidocq05, вот, кстати, ещё один вариант: взять среднее значение).

Автор: Tseka 24.05.19, 15:16

Vofka, спасибо огромное , получилось . Но получилось количество номенклатуры 6201 , а на данный момент должно быть около 6407 . Наверное это какой-то старый товар на который не делали приход .

Автор: Vofka 24.05.19, 15:20

Tseka, в моем запросе вообще количества нету, поэтому что вы у себя написали я не знаю smile.gif . Ну и сам запрос который я написал - это может быть не 100% правильный вариант, я его на работоспособность вообще не проверял, так что возможно, что в нем что-то не учтено.

Автор: Tseka 28.05.19, 15:44

Vofka @ Сегодня, 16:20 * ,

Вот , тут берётся среднее по себестоимости всех поступлений товара.

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua