Имя: Пароль:
1C
1С v8
УТ 10.3 Формирование заказа на основе средних объемов продаж
0 hawk1
 
22.01.20
21:25
Дорабатываю документ ЗаказПоставщику чтобы можно было формировать заказ на основе средненедельного объема продаж за период. Вот код процедуры
    Для Каждого СтрокаТЧ Из Товары Цикл    
            Запрос = Новый Запрос("ВЫБРАТЬ
                                  |    ПродажиОбороты.КоличествоОборот КАК ТребуемоеКоличество
                                  |ИЗ
                                  |    РегистрНакопления.Продажи.Обороты(&НачДата, &КонДата, , ) КАК ПродажиОбороты
                                  |ГДЕ
                                  |    ПродажиОбороты.КоличествоОборот > 0
                                  |    И ПродажиОбороты.Номенклатура = &Номенклатура");
        Запрос.УстановитьПараметр("НачДата", Дата - 24 * 60 * 60 * ЭтаФорма.КоличествоДней);
        Запрос.УстановитьПараметр("КонДата", Дата);
        Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
    
        Выборка = Запрос.Выполнить().Выбрать();
        Выборка.Следующий();
        
        Если Выборка.Количество() > 0 Тогда
            ТребуемоеКоличество = Выборка.ТребуемоеКоличество;
        Иначе
            ТребуемоеКоличество = 0;
        КонецЕсли;
        
        ЗапросОстатки = Новый Запрос("ВЫБРАТЬ
                                     |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ТекущееКоличество
                                     |ИЗ
                                     |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                                     |            &Дата,
                                     |            Номенклатура = &Номенклатура
                                     |                И Склад = &Склад) КАК ТоварыНаСкладахОстатки");
        ЗапросОстатки.УстановитьПараметр("Дата", Дата);
        ЗапросОстатки.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
        ЗапросОстатки.УстановитьПараметр("Склад", Склад);
        
        ВыборкаОстатки = ЗапросОстатки.Выполнить().Выбрать();
        ВыборкаОстатки.Следующий();
        ТекущееКоличество = ВыборкаОстатки.ТекущееКоличество;
        
        ОбъемПродажЗаНеделю = ТребуемоеКоличество * 7 / КоличествоДней;
        СтрокаТЧ.Количество = Окр(ОбъемПродажЗаНеделю * ЭтаФорма.Коэффициент - ТекущееКоличество);
    КонецЦикла;

Иногда при увеличении количества дней периода, за который берутся данные о продажах, количество заказываемого товара уменьшается, хотя по логике должно увеличиваться. Почему такое может происходить?
1 Amra
 
22.01.20
21:29
Возвраты? Они, по идее, уменьшают ОбъемПродажЗаНеделю
2 hawk1
 
22.01.20
21:36
(1) Тоже об этом подумал, но как их правильно учесть?
3 Amra
 
22.01.20
21:41
(2) Поставить отбор по виду регистратора? Чтото типа Где НЕ ПродажиОбороты.Регистратор ССЫЛКа Документ.ВозвтратОтПокупателя
4 fdsa01
 
22.01.20
22:04
(0) Надо не среднее брать, а медиану :))
5 hawk1
 
22.01.20
22:14
(3) Только что посмотрел возвратов у них не было.
6 hhhh
 
23.01.20
00:08
(5) у вас потому что формула такая

ОбъемПродажЗаНеделю = ТребуемоеКоличество * 7 / КоличествоДней;

тут и ежу понятно, если увеличиваем КоличествоДней, ОбъемПродажЗаНеделю уменьшится.
7 hawk1
 
23.01.20
16:13
(6) Так требуемое количество вычисляется за заданное количество дней.
8 hhhh
 
23.01.20
16:34
(7) ну и не факт какое изменение перевесит. По идее должно быть без разницы, за 7 дней берете информацию или например за 27. ОбъемПродажЗаНеделю должен быть одинаковым. Но конкретно в реальности может быть немного меньше или немного больше. Поэтому ваша ситуация "при увеличении количества дней периода, за который берутся данные о продажах, количество заказываемого товара уменьшается" может случиться в 50% случаев, а другие 50% что увеличится.