Имя: Пароль:
1C
1С v8
Как рассчитать среднедневное потребление товара?
,
0 Double_Medved
 
15.05.13
10:11
Подскажите пожалуйста, УТ11, борюсь с параметрами обеспечения потребностей. Вообщем рассчитывается среднедневное потребление товара. Задается определенный период, например 3 дня. Было продано например 6 штук товара. Вроде бы среднее потребление - 2, но все не так просто. И тут начинается. Запрос для этого расчета в типовой конфигурации не много не мало листов на 8, у него штук 8 временных таблиц, там используются периоды и т.д. и он посчитает не 2 а 0,659. И как? Я начал в нем копаться и.. он берет не все дни в периоде, А ТОЛЬКО ТЕ У КОТОРЫХ НА КОНЕЦ ДНЯ ЕСТЬ ОСТАТОК НА СКЛАДЕ. Наверно это должно быть умно, но вот только например если мы в день продали весь товар, то остатка нет на конец дня и этот день не будет учитываться. И я думаю что это еще не все косяки... Подскажите, как логически верно считать среднедневное потребление?
1 Double_Medved
 
15.05.13
10:15
Можно ли написать вместо всего этого написать несколько строчек которые будут считать СреднедневноеПотребление = КоличествоПроданногоТовара /  КоличествоРабочихДнейВПериодеРассчета ? Или в запросе на 8 листов есть какай-то хитрый и умный замысел?
2 Maxus43
 
15.05.13
10:15
как вам надо, так и считай, это управленческий учет, тут у каждого разные подходы
3 Lama12
 
15.05.13
10:18
(2)+1
(0) Среднедневных может быть сколько угодно.
Вопрос - как их считать?
4 mikecool
 
15.05.13
10:22
в ут 10.3 был отчет, который показывал среднедневное, по сути расчет сводился к суммированию остатка на начало периода, остатков на конец каждого отрезка и деленное на количество этих отрезков
5 Фрэнки
 
15.05.13
10:22
(0) логика запроса вряд ли может быть прокомментирована без детального разбора всех 8-ми листов, но это же лениво...

Навскидку - если в день с нулевым конечным остатком продано 1 штука, а при наличии свободного остатка продано 10 штук - какой вариант следует принимать в расчете?
6 Lama12
 
15.05.13
10:24
(4) Забавно. :)
В одном периоде.
На складе было 10.
Поступило 50.
На конец периода осталось 5.

Среднее за период потребление - 5. :-D

Мне нравятся такие расчеты.
7 Double_Medved
 
15.05.13
10:28
Ну а как по идее надо? Может какая формула где есть в этом учете или еще что? Мне не надо за меня код написать, я просто не понимаю как рассчитывать по идее надо.
8 Double_Medved
 
15.05.13
10:29
Можно скопировать сюда конечно запрос, но в прошлый раз все обошли его стороной, и я решил не пугать народ. Мне бы знать как по идее надо рассчитывать.
9 Double_Medved
 
15.05.13
10:31
(5) день с нулевым остатком - это наверно когда типа после продажи осталось 0? нужно по идее учитывать все продажи, не важно сколько остатка осталось после них.
10 Фрэнки
 
15.05.13
10:32
(8) так я о том же, что лениво разбирать громоздкий код.
11 Lama12
 
15.05.13
10:35
(7) Это лучше спросить у заказчика.
Среднее можно считать Очень по разному.
И ты правильно посчитаешь, а заказчик по своему считает.
Форум тебе подскажет один, два, ну три варианта. Каждый из них будет верным.
12 Фрэнки
 
15.05.13
10:36
(9) при недостаточном обеспечении учесть продажу в виде реального значения текущей потребности нельзя. Нужно вводить какой-то обобщающий признак, типа того, что был факт продажи вообще, при недостаточном обеспечении остатками, т.е. точного известного числа не даст.
з.ы. А ты про дефектуры в аптечных продажах слышал чего-то?
13 Double_Medved
 
15.05.13
10:38
Вот запрос:
Запрос.Текст =
           "ВЫБРАТЬ
           |    Товары.ИдентификаторСтроки      КАК ИдентификаторСтроки,
           |    Товары.Номенклатура   КАК Номенклатура,
           |    Товары.Характеристика КАК Характеристика,
           |    Товары.Склад          КАК Склад
           |ПОМЕСТИТЬ ТоварыСреднедневногоПотребления
           |ИЗ
           |    &ТаблицаОтбора КАК Товары
           |ИНДЕКСИРОВАТЬ ПО
           |    Номенклатура,
           |    Характеристика,
           |    Склад
           |;
           |
           |////
//1. Для каждого склада получаем все склады для которых данный склад
       //является источником обеспечения по основному способу обеспечения
       //(факт продажи непосредственно с распределительного центра также учитываем).
       
       "ВЫБРАТЬ
       |    Товары.Номенклатура                                                      КАК Номенклатура,
       |    Товары.Характеристика                                                    КАК Характеристика,
       |    Товары.Склад                                                             КАК Склад,
       |    Товары.Склад                                                             КАК СкладПродаж,
       |    ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Товары.Склад.Календарь) КАК Календарь
       |ПОМЕСТИТЬ ТоварыСоСкладамиПродаж
       |ИЗ
       |    ТоварыСреднедневногоПотребления КАК Товары
       |        ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       |        ПО Товары.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       |" + ?(НЕ УчитыватьВнутреннееТовародвижение, "", "
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    Товары.Номенклатура                                                       КАК Номенклатура,
       |    Товары.Характеристика                                                     КАК Характеристика,
       |    Товары.Склад                                                              КАК Склад,
       |    Способы.Склад                                                             КАК СкладПродаж,
       |    ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Способы.Склад.Календарь) КАК Календарь
       |ИЗ
       |    ТоварыСреднедневногоПотребления КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК Способы
       |        ПО Способы.РеквизитДопУпорядочивания = 1
       |            И Товары.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Товары.Склад          =  Способы.СпособОбеспеченияПотребностей.ИсточникОбеспеченияПотребностей
       |            И Товары.Номенклатура   =  Способы.Номенклатура
       |            И Товары.Характеристика =  Способы.Характеристика
       |        ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       |        ПО Способы.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    Товары.Номенклатура                                                       КАК Номенклатура,
       |    Товары.Характеристика                                                     КАК Характеристика,
       |    Товары.Склад                                                              КАК Склад,
       |    Способы.Склад                                                             КАК СкладПродаж,
       |    ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Способы.Склад.Календарь) КАК Календарь
       |ИЗ
       |    ТоварыСреднедневногоПотребления КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК Способы
       |        ПО Способы.РеквизитДопУпорядочивания = 1
       |            И Способы.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Товары.Склад           = Способы.СпособОбеспеченияПотребностей.ИсточникОбеспеченияПотребностей
       |            И Товары.Номенклатура    = Способы.Номенклатура
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК СпособыХарактеристика
       |        ПО СпособыХарактеристика.РеквизитДопУпорядочивания = 1
       |            И Способы.Склад          = СпособыХарактеристика.Склад
       |            И Товары.Характеристика  <>  ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Товары.Номенклатура    = СпособыХарактеристика.Номенклатура
       |            И Товары.Характеристика  = СпособыХарактеристика.Характеристика
       |        ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       |        ПО Способы.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       |ГДЕ
       |    СпособыХарактеристика.Склад ЕСТЬ NULL
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    Товары.Номенклатура            КАК Номенклатура,
       |    Товары.Характеристика          КАК Характеристика,
       |    Товары.Склад                   КАК Склад,
       |    Способы.Склад                  КАК СкладПродаж,
       |    ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Способы.Склад.Календарь) КАК Календарь
       |ИЗ
       |    ТоварыСреднедневногоПотребления КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК Способы
       |        ПО Способы.РеквизитДопУпорядочивания = 1
       |            И Способы.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Способы.Номенклатура   = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
       |            И Товары.Склад           = Способы.СпособОбеспеченияПотребностей.ИсточникОбеспеченияПотребностей
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК СпособыХарактеристика
       |        ПО СпособыХарактеристика.РеквизитДопУпорядочивания = 1
       |            И Способы.Склад         =  СпособыХарактеристика.Склад
       |            И Товары.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Товары.Номенклатура   =  СпособыХарактеристика.Номенклатура
       |            И Товары.Характеристика =  СпособыХарактеристика.Характеристика
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК СпособыНоменклатура
       |        ПО СпособыНоменклатура.РеквизитДопУпорядочивания = 1
       |            И СпособыХарактеристика.Склад ЕСТЬ NULL
       |            И СпособыНоменклатура.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |            И Способы.Склад       = СпособыНоменклатура.Склад
       |            И Товары.Номенклатура = СпособыНоменклатура.Номенклатура
       |        ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       |        ПО Способы.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       |ГДЕ
       |    СпособыХарактеристика.Склад ЕСТЬ NULL
       |    И СпособыНоменклатура.Склад ЕСТЬ NULL") + "
       |ИНДЕКСИРОВАТЬ ПО
       |    Номенклатура,
       |    Характеристика,
       |    СкладПродаж,
       |    Календарь
       |;
       |
       //2. Для каждой номенклатуры получаем все комплекты в которые она входит, если комплект обеспечивается
       // на складе посредством сборки (по основному способу обеспечения).
       |/////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    Товары.Номенклатура                                                      КАК Номенклатура,
       |    Товары.Характеристика                                                    КАК Характеристика,
       |    Товары.Склад                                                             КАК Склад,
       |    Товары.СкладПродаж                                                       КАК СкладПродаж,
       |    Товары.Календарь                                                         КАК Календарь,
       |    Товары.Номенклатура                                                      КАК НоменклатураПродаж,
       |    Товары.Характеристика                                                    КАК ХарактеристикаПродаж,
       |    1                                                                        КАК КоэффициентСборки
       |ПОМЕСТИТЬ ТоварыСНоменклатуройПродаж
       |ИЗ
       |    ТоварыСоСкладамиПродаж КАК Товары
       |" + ?(НЕ УчитыватьСборкиТоваров, "", "
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    Товары.Номенклатура                                                      КАК Номенклатура,
       |    Товары.Характеристика                                                    КАК Характеристика,
       |    Товары.Склад                                                             КАК Склад,
       |    Товары.СкладПродаж                                                       КАК СкладПродаж,
       |    МАКСИМУМ(Товары.Календарь)                                               КАК Календарь,
       |    Комплектации.Ссылка.Владелец                                             КАК НоменклатураПродаж,
       |    Комплектации.Ссылка.Характеристика                                       КАК ХарактеристикаПродаж,
       |    СУММА(Комплектации.Количество)                                           КАК КоэффициентСборки
       |ИЗ
       |    ТоварыСоСкладамиПродаж КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК Комплектации
       |        ПО Товары.Номенклатура   = Комплектации.Номенклатура
       |         И Товары.Характеристика = Комплектации.Характеристика
       |        
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК НастройкаХарактеристика
       |        ПО НастройкаХарактеристика.РеквизитДопУпорядочивания = 1
       |         И Комплектации.Ссылка.Владелец       = НастройкаХарактеристика.Номенклатура
       |         И Комплектации.Ссылка.Характеристика = НастройкаХарактеристика.Характеристика
       |         И Товары.СкладПродаж                 = НастройкаХарактеристика.Склад
       |        
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК НастройкаНоменклатура
       |        ПО НастройкаНоменклатура.РеквизитДопУпорядочивания = 1
       |         И НастройкаХарактеристика.Склад ЕСТЬ NULL
       |         И Комплектации.Ссылка.Владелец       = НастройкаНоменклатура.Номенклатура
       |         И Товары.СкладПродаж                 = НастройкаНоменклатура.Склад
       |         И НастройкаНоменклатура.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |        
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыОбеспеченияТоварами КАК НастройкаСклад
       |        ПО НастройкаСклад.РеквизитДопУпорядочивания = 1
       |         И НастройкаХарактеристика.Склад ЕСТЬ NULL
       |         И НастройкаНоменклатура.Склад   ЕСТЬ NULL
       |         И Товары.СкладПродаж            = НастройкаСклад.Склад
       |         И НастройкаСклад.Номенклатура   = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
       |         И НастройкаСклад.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СпособыОбеспеченияПотребностей КАК ОсновнойСпособ
       |        ПО ЕСТЬNULL(НастройкаХарактеристика.СпособОбеспеченияПотребностей,
       |            ЕСТЬNULL(НастройкаНоменклатура.СпособОбеспеченияПотребностей,
       |            НастройкаСклад.СпособОбеспеченияПотребностей))
       |        = ОсновнойСпособ.Ссылка
       |
       |ГДЕ
       |    Комплектации.Ссылка.Основной = ИСТИНА
       |    И НЕ Комплектации.Ссылка.ПометкаУдаления
       |    И ОсновнойСпособ.ТипОбеспечения = ЗНАЧЕНИЕ(Перечисление.ТипыОбеспечения.СборкаРазборка)
       |
       |СГРУППИРОВАТЬ ПО
       |    Товары.Номенклатура,
       |    Товары.Характеристика,
       |    Товары.Склад,
       |    Товары.СкладПродаж,
       |    Комплектации.Ссылка.Владелец,
       |    Комплектации.Ссылка.Характеристика") + "
       |
       |ИНДЕКСИРОВАТЬ ПО
       |    НоменклатураПродаж,
       |    ХарактеристикаПродаж,
       |    СкладПродаж
       |;
       |
       //3. Получаем все рабочие дни в периоде расчета статистики (от начала периода по конец периода включительно).
       |/////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    ГрафикБезКалендаря.ДатаГрафика                КАК ДатаГрафика
       |ПОМЕСТИТЬ ГрафикБезКалендаря
       |ИЗ
       |    &ГрафикБезКалендаря КАК ГрафикБезКалендаря
       |;
       |
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ РАЗЛИЧНЫЕ
       |    Товары.Календарь                              КАК Календарь,
       |    График.ДатаГрафика                            КАК Дата
       |ПОМЕСТИТЬ ГрафикРаботыПоКалендарю
       |ИЗ
       |    ТоварыСоСкладамиПродаж КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КалендарныеГрафики КАК График
       |        ПО Товары.Календарь = График.Календарь
       |            И График.ДеньВключенВГрафик
       |            И ГОД(&ПериодКлассификацииДатаНачала) <= График.Год
       |            И График.Год                     <= ГОД(&ПериодКлассификацииДатаОкончания)
       |            И &ПериодКлассификацииДатаНачала <= График.ДатаГрафика
       |            И График.ДатаГрафика             <= &ПериодКлассификацииДатаОкончания
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)   КАК Календарь,
       |    ГрафикБезКалендаря.ДатаГрафика                КАК Дата
       |ИЗ
       |    ГрафикБезКалендаря КАК ГрафикБезКалендаря
       |
       |ИНДЕКСИРОВАТЬ ПО
       |    Календарь,
       |    Дата
       |;
       |
       //4. Для каждого дня, в котором было движение товара по складу, определяем
       //были ли остатки в начале и в конце дня или только в конце дня.
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    Остатки.Склад                       КАК Склад,
       |    Остатки.Номенклатура                КАК Номенклатура,
       |    Остатки.Характеристика              КАК Характеристика,
       |    НачалоПериода(Остатки.Период, ДЕНЬ) КАК Дата,
       |    ВЫБОР
       |        КОГДА Остатки.ВНаличииНачальныйОстаток > 0 И Остатки.ВНаличииКонечныйОстаток > 0 ТОГДА
       |            ИСТИНА
       |        ИНАЧЕ
       |            ЛОЖЬ
       |    КОНЕЦ                               КАК ЕстьОстатки,
       |    ВЫБОР
       |        КОГДА Остатки.ВНаличииКонечныйОстаток > 0 ТОГДА
       |            ИСТИНА
       |        ИНАЧЕ
       |            ЛОЖЬ
       |    КОНЕЦ                               КАК ЕстьКонечныйОстаток
       |ПОМЕСТИТЬ ОстаткиТовараПоДням
       |ИЗ
       |    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
       |        &ПериодКлассификацииДатаНачала,
       |        &ПериодКлассификацииДатаОкончания,
       |        ДЕНЬ,
       |        ДвиженияИГраницыПериода,
       |        (Номенклатура, Характеристика, Склад) В(
       |            ВЫБРАТЬ
       |                Товары.НоменклатураПродаж   КАК Номенклатура,
       |                Товары.ХарактеристикаПродаж КАК Характеристика,
       |                Товары.СкладПродаж          КАК Склад
       |            ИЗ
       |                ТоварыСНоменклатуройПродаж КАК Товары)) КАК Остатки
       |ГДЕ
       |    Остатки.Период < &ПериодКлассификацииДатаОкончания
       |ИНДЕКСИРОВАТЬ ПО
       |    Склад,
       |    Номенклатура,
       |    Характеристика,
       |    Дата,
       |    ЕстьОстатки,
       |    ЕстьКонечныйОстаток
       |;
       |
       //5. Получаем обороты выручки по дням в периоде расчета статистики.
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    Выручка.АналитикаУчетаНоменклатуры.Номенклатура                КАК Номенклатура,
       |    ВЫБОР
       |        КОГДА &ИспользоватьХарактеристикиНоменклатуры ТОГДА
       |            Выручка.АналитикаУчетаНоменклатуры.Характеристика
       |        ИНАЧЕ
       |            ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
       |    КОНЕЦ                                                          КАК Характеристика,
       |    Выручка.АналитикаУчетаНоменклатуры.Склад                       КАК Склад,
       |    Выручка.КоличествоОборот                                       КАК Количество,
       |    НАЧАЛОПЕРИОДА(Выручка.Период, ДЕНЬ)                            КАК Дата
       |ПОМЕСТИТЬ ВыручкаПоДням
       |ИЗ
       |    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
       |        &ПериодКлассификацииДатаНачала,
       |        &ПериодКлассификацииДатаОкончания,
       |        ДЕНЬ,
       |        (
       |            АналитикаУчетаНоменклатуры.Номенклатура,
       |            АналитикаУчетаНоменклатуры.Характеристика,
       |            АналитикаУчетаНоменклатуры.Склад)
       |            В (
       |                ВЫБРАТЬ
       |                    Товары.НоменклатураПродаж    КАК Номенклатура,
       |                    Товары.ХарактеристикаПродаж  КАК Характеристика,
       |                    Товары.СкладПродаж           КАК Склад
       |                ИЗ
       |                    ТоварыСНоменклатуройПродаж КАК Товары)) КАК Выручка
       |ИНДЕКСИРОВАТЬ ПО
       |    Номенклатура,
       |    Характеристика,
       |    Склад,
       |    Дата
       |;
       |
       |////////////////////////////////////////////////////////////////////////////////
       //6. Принимаем выручку к расчету среднедневного только, если она была в рабочий день и в этот день не было пробоя остатка
       //(движение по складу в этот день быть обязано, из него и берем признак наличия остатков на начало и конец дня получения выручки).
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    Выручка.Номенклатура                                     КАК Номенклатура,
       |    Выручка.Характеристика                                   КАК Характеристика,
       |    Выручка.Склад                                            КАК Склад,
       |    СУММА(ВЫБОР
       |        КОГДА Остатки.ЕстьОстатки ТОГДА
       |            Выручка.Количество
       |        ИНАЧЕ
       |            0
       |    КОНЕЦ)                                                   КАК Количество,
       |    СУММА(ВЫБОР
       |        КОГДА Остатки.ЕстьОстатки ТОГДА
       |            Выручка.Количество * Выручка.Количество
       |        ИНАЧЕ
       |            0
       |    КОНЕЦ)                                                   КАК КвадратКоличества
       |ПОМЕСТИТЬ Продажи
       |ИЗ
       |    ВыручкаПоДням КАК Выручка
       |        ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       |        ПО Выручка.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГрафикРаботыПоКалендарю КАК РабочиеДни
       |        ПО ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Выручка.Склад.Календарь) = РабочиеДни.Календарь
       |            И Выручка.Дата = РабочиеДни.Дата
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТовараПоДням КАК Остатки
       |        ПО Выручка.Дата           = Остатки.Дата
       |            И Выручка.Номенклатура   = Остатки.Номенклатура
       |            И Выручка.Характеристика = Остатки.Характеристика
       |            И Выручка.Склад          = Остатки.Склад
       |СГРУППИРОВАТЬ ПО
       |    Выручка.Номенклатура,
       |    Выручка.Характеристика,
       |    Выручка.Склад
       |ИНДЕКСИРОВАТЬ ПО
       |    Номенклатура,
       |    Характеристика,
       |    Склад
       |;
       |
       //7. Для каждого рабочего дня склада определяем дату в которую сформирован актуальный остаток этого дня.
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    Товары.НоменклатураПродаж                               КАК Номенклатура,
       |    Товары.ХарактеристикаПродаж                             КАК Характеристика,
       |    Товары.СкладПродаж                                      КАК Склад,
       |    МАКСИМУМ(Остатки.Дата)                                  КАК Дата,
       |    ВЫБОР
       |        КОГДА МАКСИМУМ(Остатки.Дата) = РабочиеДни.Дата ТОГДА
       |            ИСТИНА
       |        ИНАЧЕ
       |            ЛОЖЬ
       |    КОНЕЦ                                                    КАК ОстатокДеньВДень
       |ПОМЕСТИТЬ ДатыОстатка
       |ИЗ
       |    ТоварыСНоменклатуройПродаж КАК Товары
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГрафикРаботыПоКалендарю КАК РабочиеДни
       |        ПО Товары.Календарь = РабочиеДни.Календарь
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТовараПоДням КАК Остатки
       |        ПО РабочиеДни.Дата          >= Остатки.Дата
       |            И Товары.НоменклатураПродаж   =  Остатки.Номенклатура
       |            И Товары.ХарактеристикаПродаж =  Остатки.Характеристика
       |            И Товары.СкладПродаж          =  Остатки.Склад
       |СГРУППИРОВАТЬ ПО
       |    Товары.НоменклатураПродаж,
       |    Товары.ХарактеристикаПродаж,
       |    Товары.СкладПродаж,
       |    РабочиеДни.Дата
       |ИНДЕКСИРОВАТЬ ПО
       |    Номенклатура,
       |    Характеристика,
       |    Склад,
       |    Дата,
       |    ОстатокДеньВДень
       |;
       |
       //8. Определяем количество дней, в которые был остаток товара на складе.
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    ДатыОстатка.Номенклатура      КАК Номенклатура,
       |    ДатыОстатка.Характеристика    КАК Характеристика,
       |    ДатыОстатка.Склад             КАК Склад,
       |    КОЛИЧЕСТВО(*)                 КАК ЧислоДней
       |ПОМЕСТИТЬ ВсегоДнейКУчету
       |ИЗ
       |    ДатыОстатка КАК ДатыОстатка
       |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТовараПоДням КАК Остатки
       |        ПО ДатыОстатка.Дата              = Остатки.Дата
       |            И ДатыОстатка.Номенклатура   = Остатки.Номенклатура
       |            И ДатыОстатка.Характеристика = Остатки.Характеристика
       |            И ДатыОстатка.Склад          = Остатки.Склад
       |ГДЕ
       |    ДатыОстатка.ОстатокДеньВДень И Остатки.ЕстьОстатки
       |    ИЛИ НЕ ДатыОстатка.ОстатокДеньВДень И Остатки.ЕстьКонечныйОстаток
       |СГРУППИРОВАТЬ ПО
       |    ДатыОстатка.Номенклатура,
       |    ДатыОстатка.Характеристика,
       |    ДатыОстатка.Склад
       |ИНДЕКСИРОВАТЬ ПО
       |    Номенклатура,
       |    Характеристика,
       |    Склад
       |;
       |
       //9 Получаем итоговые статистические показатели по распределительному центру, рассчитываем признак стабильности потребления.
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    НаборДанных.Склад                                                          КАК Склад,
       |    НаборДанных.Номенклатура                                                   КАК Номенклатура,
       |    НаборДанных.Характеристика                                                 КАК Характеристика,
       |    НаборДанных.ДисперсияПотребления                                           КАК ДисперсияПотребления,
       |    ВЫБОР
       |        КОГДА НаборДанных.ВсегоДнейРаспредЦентра > 0 ТОГДА
       |            НаборДанных.ПродажиВсего / НаборДанных.ВсегоДнейРаспредЦентра
       |        ИНАЧЕ
       |            0
       |    КОНЕЦ                                                                      КАК СреднедневноеПотребление,
       |    ВЫБОР
       |        КОГДА НаборДанных.ПродажиВсего > 0 И ДисперсияПотребления
       |            / НаборДанных.ПродажиВсего * НаборДанных.ВсегоДнейРаспредЦентра
       |            / НаборДанных.ПродажиВсего * НаборДанных.ВсегоДнейРаспредЦентра
       |            < 0.0025
       |        ТОГДА
       |            ИСТИНА //Квадратичное отклонение менее 5% от дневного потребления
       |        ИНАЧЕ
       |            ЛОЖЬ
       |    КОНЕЦ                                                                       КАК ПотреблениеСтабильно
       |    ПОМЕСТИТЬ СтатистикаПотребления
       |ИЗ
       |    (ВЫБРАТЬ
       |        Товары.Склад                                                           КАК Склад,
       |        Товары.Номенклатура                                                    КАК Номенклатура,
       |        Товары.Характеристика                                                  КАК Характеристика,
       |        СУММА(ВЫБОР
       |            КОГДА ВсегоДнейКУчету.ЧислоДней > 1 ТОГДА
       |                ВЫРАЗИТЬ(Товары.КоэффициентСборки * Товары.КоэффициентСборки
       |                    * Продажи.КвадратКоличества / (ВсегоДнейКУчету.ЧислоДней - 1) КАК ЧИСЛО(15, 3))
       |                - ВЫРАЗИТЬ( Товары.КоэффициентСборки * Продажи.Количество / (ВсегоДнейКУчету.ЧислоДней - 1)
       |                    * Товары.КоэффициентСборки * Продажи.Количество / ВсегоДнейКУчету.ЧислоДней КАК ЧИСЛО(15, 3))
       |            ИНАЧЕ
       |                0
       |        КОНЕЦ)                                                                 КАК ДисперсияПотребления,
       |        СУММА(ЕСТЬNULL(Товары.КоэффициентСборки * Продажи.Количество, 0))      КАК ПродажиВсего,
       |        МАКСИМУМ(ВЫБОР
       |            КОГДА Товары.Склад = Товары.СкладПродаж ТОГДА
       |                ВсегоДнейКУчету.ЧислоДней
       |            ИНАЧЕ
       |    
14 Фрэнки
 
15.05.13
10:39
12+ Дефектуру тоже регистрируют, иначе вообще не возможно узнать о потребностях в товаре, которого в наличии просто нет.
15 mikecool
 
15.05.13
10:40
(6) посчитай в разрезе дней и явно получишь другую цифру, не передергивай - посмотри как типовой отчет считает
16 Double_Medved
 
15.05.13
10:40
(14) про то чего там просто нет - это я уже прикрутил отдельную штуку. Если типа вообще 0 и по среднему потреблению не заказано то типа закажем одну штуку. Мне нужно именно узнать алгоритм расчета среднего потребления
17 mikecool
 
15.05.13
10:41
+15 в нете находил решение этого же самого, но запросом, почему 1сники не додумались до этого - хз, ибо в отчете решается все перебором
18 Базис
 
naïve
15.05.13
10:42
Среднедневная продажа = Продажи/Дни. Продажи неизменны при любой методике подсчёта. Дней может быть меньше, но никак не больше, то есть "хитрый" расчёт может давать результат больше, чем "в лоб". Как и почему их монстроидальный запрос получает среднедневную меньше, я не понимаю.


(13) Ну и кто будет читать эту простыню? Я в ответ могу прислать 26-экранный запрос.
19 Double_Medved
 
15.05.13
10:45
(18) я про то же, я понимаю что никто не будет разбирать 8-экранный запрос
20 Double_Medved
 
15.05.13
10:46
(18) а меньше он получает потому что не учитывает продажи в тот день когда остатка стало 0. И может быть это не единственная проблема
21 Фрэнки
 
15.05.13
10:46
(18) да там в комментах пояснено как пробрасывают продажи, поэтому и средневная занижена, потому что части продаж и выручки просто не учитывают.

(19) Т.е. самое простое уточнение - если они не учитывают продажи товара в каком-то дне, то этот же день нужно исключить из расчета среднедневной продажи. Иначе делитель прежний, а делимое занижено
22 Фрэнки
 
15.05.13
10:48
21+ тогда нужно вообще все дни с нулевым конечным остатком убирать из таблицы.
23 Double_Medved
 
15.05.13
10:51
(21) вообщем мне нужно учитывать все продажи, вне зависимости сколько там было остатка. А делить на какое количество дней правильно я точно не знаю. Например период расчета - 3 дня. В  один из них продали 3 штуки и все.Можно:
1)Взять только дни когда были продажи. будет 3/1 = 3
2)Взять все рабочие дни в расчете. будет 3/3 = 1
24 Фрэнки
 
15.05.13
10:55
22+ А потом возникнет ситуация, когда расчет потребности окажется достоверно точным и всегда на конец дня будем выходить в ноль - что тогда считать?!

Кстати, получается, что целью расчета в этом запросе является значение достаточных запасов, предварительных для продаж на следующий день.

(23) Циклы продаж нужно измерять не днями, а какими-то другими, более адекватными периодами, именно с точки зрения нормирования складских запасов.
25 Mikeware
 
15.05.13
10:55
(23) а можно выкинуть выходные. а можно не выкидывать.
а можно выкидывать когда товара на остатках не было ни на начало, ни на конец. а можно и не выкидывать...
и т.д.
26 Double_Medved
 
15.05.13
10:57
А потом возникнет ситуация, когда расчет потребности окажется достоверно точным и всегда на конец дня будем выходить в ноль - что тогда считать?!
Я что-то этого не понял. Какая разница сколько остатка на конец дня? Продали 3 штуки, ну осталось 0, но 3 же продали. И по идее их надо бы учесть в среднедневном потреблении.
27 Double_Medved
 
15.05.13
10:59
а можно выкидывать когда товара на остатках не было ни на начало, ни на конец. а можно и не выкидывать...
Ох блин, точно. Что с такими днями делать.. А вот если там в обед пришел товар а к ужину его продали? На начало и конец дня товара как бы не будет а продажи будут
28 Базис
 
naïve
15.05.13
11:01
Более точно - фиксировать часы продажи, наверное. Но это надо делать, если розница, при закрытии кассовой смены.
29 Double_Medved
 
15.05.13
11:01
Просто изначально жаловались что высчитывает слишком низкое потребление. Что в реальности продается больше, чем он высчитывает. И типа разбирайся
30 Double_Medved
 
15.05.13
11:03
Предположим что период неделя. В один день продали 3 штуку и в другой 3 штуки. Получилось что за 2 дня продали 4 штуки. И при этом получилось что за неделю тоже продали 4 штуки
31 Double_Medved
 
15.05.13
11:04
блин что с этим делать
32 Double_Medved
 
15.05.13
11:04
ой блин не так
33 Double_Medved
 
15.05.13
11:04
Предположим что период неделя. В один день продали 1 штуку и в другой 3 штуки. Получилось что за 2 дня продали 4 штуки. И при этом получилось что за неделю тоже продали 4 штуки
34 Double_Medved
 
15.05.13
11:04
вот так
35 Фрэнки
 
15.05.13
11:16
по поводу нуля на конец дня - поступление товара происходит ежедневно?
36 Double_Medved
 
15.05.13
11:19
(35) нет, не ежедневно, как когда
37 Double_Medved
 
15.05.13
11:19
точного графика нет
38 Фрэнки
 
15.05.13
11:25
условно, если происходит поставка товара, то можно рассматривать два крайних случая:
- пополнение остатка взамен продажи
- расчет новой нормы запаса по динамике продаж и поставка согласно этому расчету.
Имхо, применение расчета из типовой УТ11 - это второй случай, когда поставки первым способом никто не отменил. В идеале можно говорить также о разной оборачиваемости номенклатуры и использовании разных алгоритмов расчета норм запасов, в зависимости от принадлежности номенклатуры к этим разным категориям по оборачиваемости.
39 Фрэнки
 
15.05.13
11:35
В условии низкой оборачиваемости возникнет ситуация, когда временное отсутствие товара даст полное исчезновение спроса - потенциальный покупатель просто перестанет заходить. Если восстановление товарного запаса из группы с низкой оборачиваемостью реально делать сразу по факту регистрации продажи на кассе, тогда риски затоваривания этим всем перекладываются из торгового зала на поставщиков и все. Т.е. вам будет достаточно отфильтровать номенклатуры в разные категории и задавать разные графики поставок, согласно принадлежности к категории и способу расчета нормы запасов.
40 Bigbro
 
15.05.13
11:44
имхо.

если автор начальник отдела сбыта гнать метлой. если нет - задать вопрос как должен рассчитываться потребность начальнику отдела сбыта. предложить ему приведенные тут варианты например, пусть примет СВОЕ решение.

исключаются из запроса дни с нулем в остатке на конец дня вполне разумно - если в среднем продажи исчисляются сотнями в день и в какой то день было продано пара единиц товара и остаток стал ноль - этот день сильно исказит результат, если его включать в расчет.

кстати дни в которые было ноль на начало (или произвольный момент в средине) дня тоже должны по идее исключаться, но дни когда продаж не было но остаток был и технически возможость купить товар была - должны включаться (это к примеру с 2 продажами в неделю).
41 Фрэнки
 
15.05.13
11:45
(37) а стратегия продаж на чем построена? насколько близка ваша розница к FMCG? А может быть у вас и не розница вовсе?
42 Фрэнки
 
15.05.13
11:50
(40) Имхо, у 1С-ника может просто не хватить кармы для продавливания в мозг руководства идей с изгнанием бесов :)
Но отрабатывать свою з/п по заданию руководства как-то приходится. Вот и пришел он к нам за дружеским советом.
43 Bigbro
 
15.05.13
11:56
посмотрел запрос по диагонали - судя по комментариям вроде как все логично делается. единственный вопрос насчет учета дней с отсутствующим движением - они вроде не учитываются, я бы их учел.
ну и расчет стабильности потребления - там уже чистая статистика, надо принять решение какие отклонения приемлемы для использования авторасчета потребения по данному товару.
если отклонения стабильно большие при различных выборах периода продаж для расчета и сдвига начальной даты - то по среднему потреблению авторасчет будет неприменим, придется использовать другие алгоритмы или вообще жестко заданные цифры.
44 Lama12
 
15.05.13
13:34
Double_Medved
Что заказчик то говорит?
Как ему среднее считать?
Ты сам уже привел 2 варианта расчета.
45 Double_Medved
 
15.05.13
14:02
Заказчик не знает как рассчитывать, им главное чтобы "рассчитанного реально хватало, но и избытка не было". Продают бытовую химию, номенклатуры очень много и продажи по каждой конкретной относительно небольшие и нестабильные. Могут в день купить 2 шт, потом не купить, потом купить одну, потом неделю не покупать и потом купить 10.
46 Double_Medved
 
15.05.13
14:03
С приставанием по поводу того как рассчитывать относятся так что типа а что ты сам не знаешь, откуда ж нам знать. Нам главное чтобы все было правильно и хорошо.
47 Double_Medved
 
15.05.13
14:05
(41) стратегии продаж никакой конкретной нет. Ну сделать там вроде рекламу, но подешевле. И еще есть накопительные скидочные карты.
48 Double_Medved
 
15.05.13
14:07
А вот чем уж прям неправильно будет если я возьму продажи за период и поделю на количество дней в периоде? Среднее арифметическое будет, чем уж это так неправильно?
49 MSII
 
15.05.13
14:09
(48) Если разделишь на количество рабочих дней в периоде, когда остаток товара был > 0, тогда будет правильно.
50 Lama12
 
15.05.13
14:37
(46) Эх... как сдавать работу то будешь?
Вот не хватит по твоим расчетам им товара и кто виноват будет?
Бери любой алгоритм и пусть они утверждают его.
51 Double_Medved
 
15.05.13
14:42
(50) Да, ты прав на 100%. Надо чтобы утвердили что-нибудь, а потом это делать.
52 Фрэнки
 
16.05.13
00:30
(50) Как можно узнать о том, чего в наличии просто нет? Ну по суди об этом сам: если регистрации дефектуры нет, то узнать существующим запросом о потребности в товарах которых на остатке физически нет просто нечем.

(48) Запрос как раз и содержит "ошибку" в том, что число дней периода берется общее, а продажи оставляются только от тех дней, когда конечные остатки ненулевые. Я уже предлагал выше свою версию. Суть ее в том, что расчет потребности для восстановления нормы запасов надо вести только по позициям с постоянным ненулевым остатком. Т.е. будут получены более точные рекомендуемые значения - оптимизация от избыточных запасов. Когда же запасы наоборот недостаточны, то такой расчет абсолютно недостоверен. Критерий недостаточности - отсутствие свободного остатка более чем на установленный период. Это может быть один день. А может быть и рабочая неделя, которую на каждый отдельный день делить толку нет.

Кстати, закупка бытовой химии розничным покупателем идет впрок. Если в недели всего два рабочих дня (а это было перед майскими праздниками). то именно за два дня нуждающиеся в бытовой химии граждане пополнили свои домашние запасы, чтоб без проблем пережить праздники. Но пополнили только те, кто оставался праздновать дома, а не уехали на заграничные курорты.
53 Reaper_1c
 
16.05.13
01:24
(52) Можно подумать этот запрос - единственное средство для управления запасами. Если товар уходит в нули - этот запрос вообще не нужен. Потребление и так превышает текущие закупки, а данных о спросе нет. Тут вывод тупой - увеличивать закупки пока не появится стабильный остаток. Да и вообще среднедневное потребление смысла не имеет. Если управляем запасами с точностью до дня - значит имеем высокую оборачиваемость. А это практически всегда неоднородное распределение по дням недели. Опять же, ограничений по объемам склада/поставок, частоте и срокам удовлетворения заказов поставщикам автор не называет. Для того, чтобы завести адекватное управление запасами нужно крепко думать вместе с продаванами/снабженцами. И не один день.
54 Фрэнки
 
16.05.13
09:28
(53) так я же об этом и толкую автору темы, что зря они для решения задачи о выстраивании стратегии продаж к запросу на среднедневную потребность прицепились
55 Frost616
 
16.05.13
09:31
Похоже я еще не проснулся, прочитал тему:
"Как рассчитать средневековое потребление товара?"
56 Sensodin
 
16.05.13
09:47
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.