Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выбрать последнее поступление товара с себестоимостью.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Tseka
1С:Предприятие 8.3 (8.3.8.2027)

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



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

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

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

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

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






 ! 

необходимо зарегистрироваться для просмотра ссылки: 4, 8
 
Vofka
Готовый запрос не напишу, но алгоритм примерно следующий:

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


Спасибо , попробую сейчас .
Vidocq05
Цитата(Vofka @ 24.05.19, 8:33) необходимо зарегистрироваться для просмотра ссылки
сгруппированные по номенклатуре с МАКСИМУМ(Период)

Мне просто стало интересно. А если было два разных документов поступления по номенклатуре "Товар1" на 24.05.2019 00:00:00 с разной стоимостью?
Vofka
Vidocq05 @ Сегодня, 13:00 необходимо зарегистрироваться для просмотра ссылки ,
зависит от бизнес логики: можно взять любой первый попавшийся из них (на моей практике часто именно так поступают в подобных ситуациях), либо взять первый попавшийся у которого стоимость больше/меньше остальных, либо не брать никакой (при этом дополнительно можно как-то оповестить пользователя, что вот мол так и так).
Vidocq05
Vofka @ Сегодня, 12:22 необходимо зарегистрироваться для просмотра ссылки ,
Ну я думаю можно поймать по моменту времени. Но запросом я не знаю как это сделать, хотя особо и не копал. Просто интересно стало, думал может Вы знаете.
Vofka
Vidocq05 @ Сегодня, 13:42 необходимо зарегистрироваться для просмотра ссылки ,
у меня ни разу не было задач подобного рода, где надо было бы вычислять с точностью до момента времени. Для пользователя это одно и то же время и мне всегда нужно было отталкиваться именно от "пользовательского" времени.
Tseka
Цитата(Vofka @ 24.05.19, 9:33) необходимо зарегистрироваться для просмотра ссылки
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу;
2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)


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

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

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

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

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

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

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

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


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

То в результате запроса получится стоимость поступления 15 (Vidocq05, вот, кстати, ещё один вариант: взять среднее значение).
Tseka
Vofka, спасибо огромное , получилось . Но получилось количество номенклатуры 6201 , а на данный момент должно быть около 6407 . Наверное это какой-то старый товар на который не делали приход .
Vofka
Tseka, в моем запросе вообще количества нету, поэтому что вы у себя написали я не знаю smile.gif . Ну и сам запрос который я написал - это может быть не 100% правильный вариант, я его на работоспособность вообще не проверял, так что возможно, что в нем что-то не учтено.
Tseka
Vofka @ Сегодня, 16:20 необходимо зарегистрироваться для просмотра ссылки ,

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

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