ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование ПОМЕСТИТЬ ВТНоменклатура ИЗ Справочник.Номенклатура КАК Номенклатура ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура.Код КАК КодТовара, ПартииТоваровНаСкладах.Номенклатура, СУММА(ПартииТоваровНаСкладах.Стоимость) / СУММА(ПартииТоваровНаСкладах.Количество) КАК Стоимость, ПартииТоваровНаСкладах.КодОперации.Порядок, ПартииТоваровНаСкладах.КодОперации.Ссылка, МАКСИМУМ(ПартииТоваровНаСкладах.Период) КАК Период ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ГДЕ ПартииТоваровНаСкладах.КодОперации.Порядок = &КодОперации ИЛИ ПартииТоваровНаСкладах.КодОперации.Порядок = &КодОперации2 И ПартииТоваровНаСкладах.Номенклатура.Наименование В
(ВЫБРАТЬ ВТНоменклатура.Наименование
ИЗ ВТНоменклатура)
СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.КодОперации.Порядок, ПартииТоваровНаСкладах.Номенклатура.Код, ПартииТоваровНаСкладах.Номенклатура.Наименование, ПартииТоваровНаСкладах.КодОперации.Ссылка, ПартииТоваровНаСкладах.Период
УПОРЯДОЧИТЬ ПО ПартииТоваровНаСкладах.Номенклатура
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1
Готовый запрос не напишу, но алгоритм примерно следующий:
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу; 2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу; 2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1
Vidocq05 @ Сегодня, 13:00
, зависит от бизнес логики: можно взять любой первый попавшийся из них (на моей практике часто именно так поступают в подобных ситуациях), либо взять первый попавшийся у которого стоимость больше/меньше остальных, либо не брать никакой (при этом дополнительно можно как-то оповестить пользователя, что вот мол так и так).
Vofka @ Сегодня, 12:22
, Ну я думаю можно поймать по моменту времени. Но запросом я не знаю как это сделать, хотя особо и не копал. Просто интересно стало, думал может Вы знаете.
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1
Vidocq05 @ Сегодня, 13:42
, у меня ни разу не было задач подобного рода, где надо было бы вычислять с точностью до момента времени. Для пользователя это одно и то же время и мне всегда нужно было отталкиваться именно от "пользовательского" времени.
1. Нужно выбрать из регистра записи с номенклатурой и периодом (возможно, с дополнительными отборами по коду операции или ещё чему-то), сгруппированные по номенклатуре с МАКСИМУМ(Период), помещаем во временную таблицу; 2. Снова выбираем записи из регистра, соединяемся внутренним соединением с таблицей из пункта (1)
Результат такой же
ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура, СУММА(ПартииТоваровНаСкладах.Стоимость) / СУММА(ПартииТоваровНаСкладах.Количество) КАК Себестоимость, ПартииТоваровНаСкладах.КодОперации.Порядок КАК Порядок, МАКСИМУМ(ПартииТоваровНаСкладах.Период) КАК Период ПОМЕСТИТЬ ВТДокументы ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ГДЕ (ПартииТоваровНаСкладах.КодОперации.Порядок = &Код ИЛИ ПартииТоваровНаСкладах.КодОперации.Порядок = &Код1)
СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Период, ПартииТоваровНаСкладах.КодОперации.Порядок ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Период, ПартииТоваровНаСкладах.КодОперации.Порядок, СУММА(ПартииТоваровНаСкладах.Стоимость) / СУММА(ПартииТоваровНаСкладах.Количество) КАК СтоимостьПоступления ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДокументы КАК ВТДокументы ПО ПартииТоваровНаСкладах.Номенклатура = ВТДокументы.Номенклатура ГДЕ (ПартииТоваровНаСкладах.КодОперации.Порядок = &Код ИЛИ ПартииТоваровНаСкладах.КодОперации.Порядок = &Код1)
СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Период, ПартииТоваровНаСкладах.КодОперации.Порядок
УПОРЯДОЧИТЬ ПО ПартииТоваровНаСкладах.Номенклатура
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1
Tseka, на работоспособность не проверял, но ход мыслей должен быть понятен:
ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура, МАКСИМУМ(ПартииТоваровНаСкладах.Период) КАК Период ПОМЕСТИТЬ ВТДокументы ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ГДЕ (ПартииТоваровНаСкладах.КодОперации.Порядок = &Код ИЛИ ПартииТоваровНаСкладах.КодОперации.Порядок = &Код1)
СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Период, СУММА(ПартииТоваровНаСкладах.Стоимость) / СУММА(ПартииТоваровНаСкладах.Количество) КАК СтоимостьПоступления ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДокументы КАК ВТДокументы ПО ПартииТоваровНаСкладах.Номенклатура = ВТДокументы.Номенклатура И ПартииТоваровНаСкладах.Период = ВТДокументы.Период
СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Период
Если окажется, что по одной номенклатуре было 2 разных поступления одной и той же датой и временем, например Номенклатура 1, количество 1, стоимость 10 Номенклатура 1, количество 1, стоимость 20
То в результате запроса получится стоимость поступления 15 (Vidocq05, вот, кстати, ещё один вариант: взять среднее значение).
Vofka, спасибо огромное , получилось . Но получилось количество номенклатуры 6201 , а на данный момент должно быть около 6407 . Наверное это какой-то старый товар на который не делали приход .
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4521 раз
Рейтинг: 3644.1
Tseka, в моем запросе вообще количества нету, поэтому что вы у себя написали я не знаю . Ну и сам запрос который я написал - это может быть не 100% правильный вариант, я его на работоспособность вообще не проверял, так что возможно, что в нем что-то не учтено.
Вот , тут берётся среднее по себестоимости всех поступлений товара.
ВЫБРАТЬ Товар.Код КАК Код, Товар.Наименование КАК Наименование, ПартииТоваров.КоличествоОстаток КАК Остаток, ВЫБОР КОГДА ПартииТоваров.КоличествоОстаток = 0 ТОГДА 0 ИНАЧЕ ПартииТоваров.СтоимостьОстаток / ПартииТоваров.КоличествоОстаток КОНЕЦ КАК Себестоимость
ИЗ Справочник.Номенклатура КАК Товар ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваров ПО ПартииТоваров.Номенклатура = Товар.Ссылка
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!