Имя: Пароль:
1C
1С v8
УТ11 обеспечение потребностей
0 Double_Medved
 
14.05.13
15:20
Подскажите, кто-то пользовался системой формирования закупок в УТ11? задача в общем у нее стоит простая довольно - для начала нужно рассчитать среднедневное потребления товара (рассчитывается для каждой номенклатуры и каждого склада и задается период расчета, например 5 дней). И она что-то высчитывает. Вообщем за 5 дней продано 12 штук товара, она рассчитывает - среднее - 0,6! и вот как это так? полез искать какой там запрос и... нашел вооот такой запрос:
ВЫБРАТЬ
   Товары.ИдентификаторСтроки      КАК ИдентификаторСтроки,
   Товары.Номенклатура   КАК Номенклатура,
   Товары.Характеристика КАК Характеристика,
   Товары.Склад          КАК Склад
ПОМЕСТИТЬ ТоварыСреднедневногоПотребления
ИЗ
   &ТаблицаОтбора КАК Товары
ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   Характеристика,
   Склад
;

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

ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   Характеристика,
   СкладПродаж,
   Календарь
;

ВЫБРАТЬ
   ГрафикБезКалендаря.ДатаГрафика                КАК ДатаГрафика
ПОМЕСТИТЬ ГрафикБезКалендаря
ИЗ
   &ГрафикБезКалендаря КАК ГрафикБезКалендаря
;

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)   КАК Календарь,
   ГрафикБезКалендаря.ДатаГрафика                КАК Дата
ИЗ
   ГрафикБезКалендаря КАК ГрафикБезКалендаря

ИНДЕКСИРОВАТЬ ПО
   Календарь,
   Дата
;

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

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

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Выручка.Номенклатура                                     КАК Номенклатура,
   Выручка.Характеристика                                   КАК Характеристика,
   Выручка.Склад                                            КАК Склад,
   СУММА(ВЫБОР
       КОГДА Остатки.ЕстьОстатки ТОГДА
           Выручка.Количество
       ИНАЧЕ
           0
   КОНЕЦ)                                                   КАК Количество,
   СУММА(ВЫБОР
       КОГДА Остатки.ЕстьОстатки ТОГДА
           Выручка.Количество * Выручка.Количество
       ИНАЧЕ
           0
   КОНЕЦ)                                                   КАК КвадратКоличества
ПОМЕСТИТЬ Продажи
ИЗ
   ВыручкаПоДням КАК Выручка
       ЛЕВОЕ СОЕДИНЕНИЕ Константы КАК Константы
       ПО Выручка.Склад.Календарь = ЗНАЧЕНИЕ(Справочник.Календари.ПустаяСсылка)
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГрафикРаботыПоКалендарю КАК РабочиеДни
       ПО ЕСТЬNULL(Константы.ОсновнойКалендарьПредприятия, Выручка.Склад.Календарь) = РабочиеДни.Календарь
           И Выручка.Дата = РабочиеДни.Дата
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТовараПоДням КАК Остатки
       ПО Выручка.Дата           = Остатки.Дата
           И Выручка.Номенклатура   = Остатки.Номенклатура
           И Выручка.Характеристика = Остатки.Характеристика
           И Выручка.Склад          = Остатки.Склад
СГРУППИРОВАТЬ ПО
   Выручка.Номенклатура,
   Выручка.Характеристика,
   Выручка.Склад
ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   Характеристика,
   Склад
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Товары.Номенклатура                                     КАК Номенклатура,
   Товары.Характеристика                                   КАК Характеристика,
   Товары.СкладПродаж                                      КАК Склад,
   МАКСИМУМ(Остатки.Дата)                                  КАК Дата,
   ВЫБОР
       КОГДА МАКСИМУМ(Остатки.Дата) = РабочиеДни.Дата ТОГДА
           ИСТИНА
       ИНАЧЕ
           ЛОЖЬ
   КОНЕЦ                                                    КАК ОстатокДеньВДень
ПОМЕСТИТЬ ДатыОстатка
ИЗ
   ТоварыСоСкладамиПродаж КАК Товары
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ГрафикРаботыПоКалендарю КАК РабочиеДни
       ПО Товары.Календарь = РабочиеДни.Календарь
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстаткиТовараПоДням КАК Остатки
       ПО РабочиеДни.Дата          >= Остатки.Дата
           И Товары.Номенклатура   =  Остатки.Номенклатура
           И Товары.Характеристика =  Остатки.Характеристика
           И Товары.СкладПродаж    =  Остатки.Склад
СГРУППИРОВАТЬ ПО
   Товары.Номенклатура,
   Товары.Характеристика,
   Товары.СкладПродаж,
   РабочиеДни.Дата
ИНДЕКСИРОВАТЬ ПО
   Номенклатура,
   Характеристика,
   Склад,
   Дата,
   ОстатокДеньВДень
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   НаборДанных.Склад                                                          КАК Склад,
   НаборДанных.Номенклатура                                                   КАК Номенклатура,
   НаборДанных.Характеристика                                                 КАК Характеристика,
   НаборДанных.ДисперсияПотребления                                           КАК ДисперсияПотребления,
   ВЫБОР
       КОГДА НаборДанных.ВсегоДнейРаспредЦентра > 0 ТОГДА
           НаборДанных.ПродажиВсего / НаборДанных.ВсегоДнейРаспредЦентра
       ИНАЧЕ
           0
   КОНЕЦ                                                                      КАК СреднедневноеПотребление,
   ВЫБОР
       КОГДА НаборДанных.ПродажиВсего > 0 И ДисперсияПотребления
           / НаборДанных.ПродажиВсего * НаборДанных.ВсегоДнейРаспредЦентра
           / НаборДанных.ПродажиВсего * НаборДанных.ВсегоДнейРаспредЦентра
           < 0.0025
       ТОГДА
           ИСТИНА //Квадратичное отклонение менее 5% от дневного потребления
       ИНАЧЕ
           ЛОЖЬ
   КОНЕЦ                                                                       КАК ПотреблениеСтабильно
   ПОМЕСТИТЬ СтатистикаПотребления
ИЗ
   (ВЫБРАТЬ
       Товары.Склад                                                           КАК Склад,
       Товары.Номенклатура                                                    КАК Номенклатура,
       Товары.Характеристика                                                  КАК Характеристика,
       СУММА(ВЫБОР
           КОГДА ВсегоДнейКУчету.ЧислоДней > 1 ТОГДА
               ВЫРАЗИТЬ(Продажи.КвадратКоличества / (ВсегоДнейКУчету.ЧислоДней - 1) КАК ЧИСЛО(15, 3))
               - ВЫРАЗИТЬ(Продажи.Количество / (ВсегоДнейКУчету.ЧислоДней - 1)
                   * Продажи.Количество / ВсегоДнейКУчету.ЧислоДней КАК ЧИСЛО(15, 3))
           ИНАЧЕ
               0
       КОНЕЦ)                                                                 КАК ДисперсияПотребления,
       СУММА(ЕСТЬNULL(Продажи.Количество, 0))                                 КАК ПродажиВсего,
       МАКСИМУМ(ВЫБОР
           КОГДА Товары.Склад = Товары.СкладПродаж ТОГДА
               ВсегоДнейКУчету.ЧислоДней
           ИНАЧЕ
               0
       КОНЕЦ)                                                                 КАК ВсегоДнейРаспредЦентра
   ИЗ
       ТоварыСоСкладамиПродаж КАК Товары
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсегоДнейКУчету КАК ВсегоДнейКУчету
           ПО Товары.СкладПродаж        = ВсегоДнейКУчету.Склад
               И Товары.Номенклатура    = ВсегоДнейКУчету.Номенклатура
               И Товары.Характеристика  = ВсегоДнейКУчету.Характеристика
           ЛЕВОЕ СОЕДИНЕНИЕ Продажи КАК Продажи
           ПО Товары.СкладПродаж        = Продажи.Склад
               И Товары.Номенклатура    = Продажи.Номенклатура
               И Товары.Характеристика  = Продажи.Характеристика
   СГРУППИРОВАТЬ ПО
       Товары.Склад,
       Товары.Номенклатура,
       Товары.Характеристика) КАК НаборДанных
ИНДЕКСИРОВАТЬ ПО
   Склад,
   Номенклатура,
   Характеристика
;

//////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Товары.ИдентификаторСтроки                       КАК ИдентификаторСтроки,
   ЕСТЬNULL(Статистика.СреднедневноеПотребление, 0) КАК СреднедневноеПотребление,
   ЕСТЬNULL(Статистика.ДисперсияПотребления, 0)     КАК ДисперсияПотребления,
   ЕСТЬNULL(Статистика.ПотреблениеСтабильно, 0)     КАК ПотреблениеСтабильно
ИЗ
   ТоварыСреднедневногоПотребления КАК Товары
   ЛЕВОЕ СОЕДИНЕНИЕ СтатистикаПотребления КАК Статистика
   ПО Товары.Номенклатура      = Статистика.Номенклатура
       И Товары.Характеристика = Статистика.Характеристика
       И Товары.Склад          = Статистика.Склад
УПОРЯДОЧИТЬ ПО
   ИдентификаторСтроки
1 Double_Medved
 
14.05.13
15:22
Вот объясните мне - вот такое вот обязательно было делать? Хелп читал - там что-то типа "рассчитывается среднее потребление и все классно". А что мне пользователям ответить, которые спрашивают откуда такие цифры? Может имеет смысл переписать все это и сделать что-то типа (количество проданного товара/количество дней)? Или лучше не надо?
2 Zapal
 
14.05.13
15:39
— Безумие?... ЭТО СПАРТААА!!!... (с)
3 Eugeneer
 
14.05.13
15:45
(1) абсолютно с тобой согласен, и не только я - сотни фирм.
Вот пример http://subsystems.ru/catalog/29/155/
МОжешь сделать сам.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой