Имя: Пароль:
1C
1С v8
Количество дней присутствия на остатке
0 pv94384
 
21.07.11
09:25
Как с помощью конструктора отчета определить количество дней присутствия товара на остатке? Т.е. допустим товар пришел 1го, а 2го его продали... потом этот же товар пришел 10го и 11го его снова продали... Таким образом на остатке он присутствовал 2 дна (1го и 10го)...
1 Maxus43
 
21.07.11
09:27
2-го и 11-го он тоже был на складе
2 pv94384
 
21.07.11
09:30
ну это палка о 2х концах... может они в 00:00:00 продали... Это не меняет сути дела... Это просто для примера было приведено... В тех отчетах, которые я находил подобные данные высчитываются по разнице последнего дня продажи товара и первого дня прихода...
3 Maxus43
 
21.07.11
09:32
(2) Ну так и надо по сути... надо анализировать обороты, и в одном запросе это тяжело помоему сделать
4 Ненавижу 1С
 
гуру
21.07.11
09:34
не знаю, поможет или нет, но могу поделиться запросом для универсального отчета УТ 10

ВЫБРАТЬ
   ВложенныйЗапрос.День,
   ВложенныйЗапрос.Номенклатура,
   СУММА(ВложенныйЗапрос.Количество) КАК Количество,
   ВложенныйЗапрос.ЭтоОстаток
ПОМЕСТИТЬ Расходы
ИЗ
   (ВЫБРАТЬ
       НАЧАЛОПЕРИОДА(&ДатаКонца, ДЕНЬ) КАК День,
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
       ИСТИНА КАК ЭтоОстаток
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон, {(Склад), (Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ),
       ТоварыНаСкладахОбороты.Номенклатура,
       ТоварыНаСкладахОбороты.КоличествоРасход,
       ЛОЖЬ
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНач, &ДатаКон, Запись, {(Склад), (Номенклатура).* КАК Номенклатура}) КАК ТоварыНаСкладахОбороты
   ГДЕ
       ТоварыНаСкладахОбороты.КоличествоРасход > 0) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.День,
   ВложенныйЗапрос.Номенклатура,
   ВложенныйЗапрос.ЭтоОстаток
;

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

СГРУППИРОВАТЬ ПО
   НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ),
   ТоварыНаСкладахОбороты.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
   Расходы.День,
   Расходы.Номенклатура,
   Расходы.Количество,
   Расходы.ЭтоОстаток
;

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

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

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Итоговая.Номенклатура КАК Номенклатура0,
   Итоговая.ДеньРасхода,
   Итоговая.ДеньПрихода,
   Итоговая.РазностьДат КАК РазностьДат,
   Итоговая.ЭтоОстаток,
   Итоговая.Количество КАК Количество,
   ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА 0
       ИНАЧЕ Итоговая.Количество
   КОНЕЦ КАК Оборот,
   ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА Итоговая.Количество
       ИНАЧЕ 0
   КОНЕЦ КАК Остаток,
   ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Резерв,
   ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА Итоговая.Количество
       ИНАЧЕ 0
   КОНЕЦ - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Свободно,
   Итоговая.Количество * ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК КоличествоСумма,
   ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА 0
       ИНАЧЕ Итоговая.Количество
   КОНЕЦ * ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК ОборотСумма,
   ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА Итоговая.Количество
       ИНАЧЕ 0
   КОНЕЦ * ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК ОстатокСумма,
   ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) * ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК РезервСумма,
   (ВЫБОР
       КОГДА Итоговая.ЭтоОстаток
           ТОГДА Итоговая.Количество
       ИНАЧЕ 0
   КОНЕЦ - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) * ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК СвободноСумма,
   ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент * КурсыВалютСрезПоследних.Курс КАК Цена
{ВЫБРАТЬ
   Номенклатура0.*,
   ДеньРасхода,
   ДеньПрихода,
   РазностьДат,
   Количество,
   Оборот,
   Остаток,
   Резерв,
   Свободно,
   ЭтоОстаток,
   КоличествоСумма,
   ОборотСумма,
   ОстатокСумма,
   РезервСумма,
   СвободноСумма,
   Цена}
ИЗ
   Итоговая КАК Итоговая
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИтоговаяСвернуто КАК ИтоговаяСвернуто
       ПО Итоговая.Номенклатура = ИтоговаяСвернуто.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, {(Номенклатура).*, (Склад).*}) КАК ТоварыВРезервеНаСкладахОстатки
       ПО Итоговая.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, {(ТипЦен)}) КАК ЦеныНоменклатурыСрезПоследних
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаКон, ) КАК КурсыВалютСрезПоследних
           ПО ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
       ПО Итоговая.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
{ГДЕ
   Итоговая.Номенклатура.*,
   Итоговая.ДеньРасхода,
   Итоговая.ДеньПрихода,
   Итоговая.РазностьДат,
   Итоговая.Количество,
   ИтоговаяСвернуто.СреднееДней КАК СреднееЧислоДней,
   Итоговая.ЭтоОстаток,
   (ВЫБОР
           КОГДА Итоговая.ЭтоОстаток
               ТОГДА 0
           ИНАЧЕ Итоговая.Количество
       КОНЕЦ) КАК Оборот,
   (ВЫБОР
           КОГДА Итоговая.ЭтоОстаток
               ТОГДА Итоговая.Количество
           ИНАЧЕ 0
       КОНЕЦ) КАК Остаток,
   (ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Резерв,
   (ВЫБОР
           КОГДА Итоговая.ЭтоОстаток
               ТОГДА Итоговая.Количество
           ИНАЧЕ 0
       КОНЕЦ - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0)) КАК Свободно,
   (ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения.Коэффициент) КАК Цена}
{УПОРЯДОЧИТЬ ПО
   Номенклатура0.*,
   РазностьДат,
   Количество,
   ИтоговаяСвернуто.СреднееДней,
   ДеньРасхода,
   ДеньПрихода,
   ЭтоОстаток,
   Оборот,
   Остаток,
   Резерв,
   Свободно,
   КоличествоСумма,
   ОборотСумма,
   ОстатокСумма,
   РезервСумма,
   СвободноСумма,
   Цена}
ИТОГИ
   СУММА(РазностьДат * Количество) / СУММА(Количество) КАК РазностьДат,
   СУММА(Количество),
   СУММА(Оборот),
   СУММА(Остаток),
   ВЫБОР
       КОГДА Номенклатура0 ЕСТЬ NULL
           ТОГДА СУММА(Резерв)
       ИНАЧЕ МАКСИМУМ(Резерв)
   КОНЕЦ КАК Резерв,
   СУММА(Остаток) - ВЫБОР
       КОГДА Номенклатура0 ЕСТЬ NULL
           ТОГДА СУММА(Резерв)
       ИНАЧЕ МАКСИМУМ(Резерв)
   КОНЕЦ КАК Свободно,
   СУММА(КоличествоСумма),
   СУММА(ОборотСумма),
   СУММА(ОстатокСумма),
   ВЫБОР
       КОГДА Номенклатура0 ЕСТЬ NULL
           ТОГДА СУММА(РезервСумма)
       ИНАЧЕ МАКСИМУМ(РезервСумма)
   КОНЕЦ КАК РезервСумма,
   СУММА(ОстатокСумма) - ВЫБОР
       КОГДА Номенклатура0 ЕСТЬ NULL
           ТОГДА СУММА(РезервСумма)
       ИНАЧЕ МАКСИМУМ(РезервСумма)
   КОНЕЦ КАК СвободноСумма,
   СУММА(КоличествоСумма) / СУММА(Количество) КАК Цена
ПО
   ОБЩИЕ,
   Номенклатура0
{ИТОГИ ПО
   Номенклатура0.*}
5 alex-pro
 
21.07.11
09:39
Вполне реально, считаются обороты и группируются по дням.
6 mzelensky
 
21.07.11
09:41
вот что-то похожее от прошлого прогера осталось:

Запрос.Текст = "ВЫБРАТЬ
                  |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                  |    ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
                  |    СУММА(ВЫБОР
                  |            КОГДА ТоварыНаСкладахОстаткиИОбороты.Период = НАЧАЛОПЕРИОДА(&ДатаОкончания, ДЕНЬ)
                  |                ТОГДА ВЫБОР
                  |                        КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0
                  |                            ТОГДА ВЫБОР
                  |                                    КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <= 0
                  |                                        ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                  |                                    ИНАЧЕ РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, &ДатаОкончания, ДЕНЬ) + 1
                  |                                КОНЕЦ
                  |                        ИНАЧЕ ВЫБОР
                  |                                КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                  |                                    ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.Период, &ДатаОкончания, ДЕНЬ) + 1
                  |                                ИНАЧЕ 0
                  |                            КОНЕЦ
                  |                    КОНЕЦ
                  |            ИНАЧЕ ВЫБОР
                  |                    КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстатокПредыдущий > 0
                  |                        ТОГДА РАЗНОСТЬДАТ(ТоварыНаСкладахОстаткиИОбороты.ПредыдущийПериод, ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ)
                  |                    ИНАЧЕ 0
                  |                КОНЕЦ
                  |        КОНЕЦ) КАК КоличествоДней
                  |ИЗ
                  |    (ВЫБРАТЬ
                  |        ТаблицаПредыдущиеПериоды.Номенклатура КАК Номенклатура,
                  |        ТаблицаПредыдущиеПериоды.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                  |        ТаблицаПредыдущиеПериоды.Склад КАК Склад,
                  |        ТаблицаПредыдущиеПериоды.Период КАК Период,
                  |        ТаблицаПредыдущиеПериоды.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
                  |        ТаблицаПредыдущиеПериоды.ПредыдущийПериод КАК ПредыдущийПериод,
                  |        ТоварыНаСкладахОстаткиИОборотыПредыдущие.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстатокПредыдущий
                  |    ИЗ
                  |        (ВЫБРАТЬ
                  |            ТоварыНаСкладахОстаткиИОбороты1.Номенклатура КАК Номенклатура,
                  |            ТоварыНаСкладахОстаткиИОбороты1.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                  |            ТоварыНаСкладахОстаткиИОбороты1.Склад КАК Склад,
                  |            ТоварыНаСкладахОстаткиИОбороты1.Период КАК Период,
                  |            ТоварыНаСкладахОстаткиИОбороты1.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
                  |            МАКСИМУМ(ТоварыНаСкладахОстаткиИОбороты2.Период) КАК ПредыдущийПериод
                  |        ИЗ
                  |            РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                  |                    &ДатаНачала,
                  |                    &ДатаОкончания,
                  |                    День,
                  |                    ,
                  |                    Склад В (&СЗСклады)
                  |                        И (НЕ Номенклатура В ИЕРАРХИИ (&СЗГруппы))) КАК ТоварыНаСкладахОстаткиИОбороты1
                  |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                  |                        &ДатаНачала,
                  |                        &ДатаОкончания,
                  |                        День,
                  |                        ,
                  |                        Склад В (&СЗСклады)
                  |                            И (НЕ Номенклатура В ИЕРАРХИИ (&СЗГруппы))) КАК ТоварыНаСкладахОстаткиИОбороты2
                  |                ПО (ИСТИНА)
                  |                    И ТоварыНаСкладахОстаткиИОбороты1.Номенклатура = ТоварыНаСкладахОстаткиИОбороты2.Номенклатура
                  |                    И ТоварыНаСкладахОстаткиИОбороты1.Склад = ТоварыНаСкладахОстаткиИОбороты2.Склад
                  |                    И ТоварыНаСкладахОстаткиИОбороты1.Период > ТоварыНаСкладахОстаткиИОбороты2.Период
                  |        
                  |        СГРУППИРОВАТЬ ПО
                  |            ТоварыНаСкладахОстаткиИОбороты1.Номенклатура,
                  |            ТоварыНаСкладахОстаткиИОбороты1.ХарактеристикаНоменклатуры,
                  |            ТоварыНаСкладахОстаткиИОбороты1.Склад,
                  |            ТоварыНаСкладахОстаткиИОбороты1.Период,
                  |            ТоварыНаСкладахОстаткиИОбороты1.КоличествоКонечныйОстаток) КАК ТаблицаПредыдущиеПериоды
                  |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
                  |                    &ДатаНачала,
                  |                    &ДатаОкончания,
                  |                    День,
                  |                    ,
                  |                    Склад В (&СЗСклады)
                  |                        И (НЕ Номенклатура В ИЕРАРХИИ (&СЗГруппы))) КАК ТоварыНаСкладахОстаткиИОборотыПредыдущие
                  |            ПО (ИСТИНА)
                  |                И ТаблицаПредыдущиеПериоды.Номенклатура = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Номенклатура
                  |                И ТаблицаПредыдущиеПериоды.Склад = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Склад
                  |                И ТаблицаПредыдущиеПериоды.ПредыдущийПериод = ТоварыНаСкладахОстаткиИОборотыПредыдущие.Период) КАК ТоварыНаСкладахОстаткиИОбороты
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
                  |    ТоварыНаСкладахОстаткиИОбороты.Склад
                  |АВТОУПОРЯДОЧИВАНИЕ";
7 Eugeneer
 
21.07.11
09:45
В типовой рознице есть отчет в котором есть праивльный алгоритм. И очень кстати простой.
8 pv94384
 
29.07.11
12:25
А какой из отчетов?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.