Имя: Пароль:
1C
1С v8
отчет динамика продаж план - факт
0 Slavus
 
22.10.15
09:59
ХЕЛП!!! Подскажите как завязать в один узел данные. Конфигурация УТ 10.3.  Идея такая: Есть продажи текущего периода. Аналитика период, подразделения и номенклатура - это фактические продажи. Есть месячные планы продаж, аналитика та же.
Нужно сделать разбивку месячного плана продаж по дням, но с учетом продаж прошлого периода и вывести это все в один отчет.
                    период1 | период2 | период3
подразделения          
   номенклатура       план,факт по сумме и количеству,
                      отклонение факта от плана.

например есть месячный план продаж на 60 рублей, в анализируемом периоде продали на 30 рублей, причем полмесяца продаж не было, а потом по 2 штуки в день. значит в текущем плане должно быть полмесяца о руб, а затем 4 штуки в день.  

я сделал отчет но он медленно формируется и выдает нехватку памяти.

Делал на СКД двумя внешними наборами данных. один набор фактические продажи текущие, другой - плановые по дням.

отчет есть по ссылке https://cloud.mail.ru/public/54tS/GbsE81FC2 и
1 Джинн
 
22.10.15
10:01
План продаж ПО ДНЯМ?! Это чем таким Вы торгуете?
2 Slavus
 
22.10.15
10:10
Нет. план создается на месяц. но шеф хочет смотреть исполнение плана продаж по дням, неделям, декадам и т.п. То есть месячный план нужно рассчитать по дням по коэффициентам предыдущих продаж
3 Slavus
 
22.10.15
10:11
в дальнейшем еще план затрат нужен по статьям движения денег, чтобы смотреть оперативно доступные средства или перераспределять имеющиеся
4 Лодырь
 
22.10.15
10:14
Сделайте одним набором данных, зачем вам их два?
5 Лодырь
 
22.10.15
10:15
Продажи по дням факт и план по дням. Объедините и группируйте как хотите.
6 Slavus
 
22.10.15
10:17
сейчас попробую в одну таблицу значений свести..
7 Chameleon1980
 
22.10.15
10:44
(6) а зачем в тз?
8 Slavus
 
22.10.15
10:52
(7) а как еще?
я беру план на месяц, получаю продажи за прошлый период, расставляю коэффициенты распределения текущего плана, получаю сумму и потом подсовываю это СКД как внешний набор данных. Есть способ проще?
9 Slavus
 
22.10.15
10:56
(6) сделал одним набором - стало заметно шустрее, хотя тоже долго.
почему-то отбор на форме не работает. я разместил табличное поле с типом данных "КомпоновщикНастроек.Настройки.Отбор", устанавливаю отбор в нем, но на вывод отчета это не влияет.

при компоновке указываю такую конструкцию
"
СтандартнаяОбработка=ложь;
    
ТабПродажи=ПостроитьТаблицуПродаж();
ТабПланы=ПостроитьТаблицуПланов();
табличка=СвестиВОдну(ТабПродажи,ТабПланы);
    
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("ТабПродажи",Табличка);
    
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
    
ДокументРезультат.Очистить();
    
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);


не пойму что не так.
10 Лодырь
 
22.10.15
12:59
Интересно, а что ты делаешь с 29 февраля?
11 Slavus
 
22.10.15
13:12
А что с ним делать? Нехай будет.  Гораздо важнее верхние два вопроса: первый и в (9). Компоновщик настроек почему-то не берет во внимание свои же настройки...
12 Slavus
 
23.10.15
02:45
с (9) разобрался: нужно вместо
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

написать: Настройки=КомпоновщикНастроек.Настройки;  
тогда будет подхватывать настройки с формы.
остался вопрос оптимизации всей конструкции
13 Aleksey
 
23.10.15
04:06
(1) А что такого? У нас вполне ставят план на день (план на контакт у нас называется). Т.е. вечером менеджер анализирует какие клиенты у него будут завтра и что они брали и ставит план на день. И у же в разговоре у него подсказка, не забудь предложить эти позиции. Более того индивидуально (или на группу) у нас ставят ежедневный процент выполнения (с учетом дней отгрузок) и уже выполнения плана на месяц смотрят с учетом этого процента. Т.е. грубо говоря план на месяц 100 тысяч, на 23 число он должен выполнить 85%, соответственно на текущий момент план 85 тысяч, факт сколько есть. И соответственно смотрят успевает он или нет выполнить месячный план
14 Slavus
 
23.10.15
05:48
Компания большая. Несколько филиалов. Планируют в том числе и на грядущий год (потом корректируют при необходимости). Есть куча подразделений в каждом из которых свой руководитель. При таком подходе ежедневное планирование нереально. Ставят планы на месяц. Но руководитель хочет видеть насколько план выполняется ежедневно. например запланировано продаж на 100 тысяч. Уже 20 число а продаж 20 тысяч (конкретное отставание). Смотрим предыдущий год, например: была такая же история до 20 числа ни о чем а с 25 резкий рост вверх. Делаем вывод что не все потеряно и откладываем розги в сторону (как минимум до 26 числа :)) . Как то так.
15 Slavus
 
23.10.15
05:51
Chameleon1980 в (7) упомянул другой способ (не ТЗ). Мне самому идея внешнего набора тоже не нравится, но другого способа рассчитать веса по прошлым продажам я не знаю. Может подскажет кто как это силами запроса СКД реализовать?
16 Slavus
 
27.10.15
01:45
Появилась идея сделать всё без внешних таблиц. Суть такова: берем месячный план текущего периода, делим его на месячный факт прошлого периода - получаем общий коэффициент. Теперь берем продажи прошлого периода по дням и умножаем их на этот коэффициент. Получаем план текущего месяца по дням с учетом продаж прошлого периода. Только два вопроса: 1. будет ли это правильной формулой и не соображу как это запросом вытащить...Есть идеи?
17 Slavus
 
28.10.15
04:57
Друзья, помогите с запросом.
Когда период анализа "день" тогда вроде бы все верно, но если детализацию брать например квартал, то начинает "врать". вот сам запрос

Запрос=новый запрос();
    Текст="ВЫБРАТЬ                           // таблица соответствия текщуго периода прошлому
                 |    СоотвПериодов.НП, СоотвПериодов.НПП
                 |ПОМЕСТИТЬ СоотвПериодов
                 |ИЗ &СоотвПериодов КАК СоотвПериодов;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ                            //текущие планы продаж. минимум помесячно. для расчета коэффициентов.
                 |    ПланыПродажОбороты.Период,
                 |    СоотвПериодов.НПП КАК ПериодПП,
                 |    ПланыПродажОбороты.Подразделение,
                 |    ПланыПродажОбороты.Номенклатура,
                 |    ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа,
                 |    СУММА(ПланыПродажОбороты.СтоимостьОборот + ПланыПродажОбороты.НДСОборот) КАК СуммаТекПлан,
                 |    СУММА(ПланыПродажОбороты.КоличествоОборот) КАК КоличествоТекПлан
                 |ПОМЕСТИТЬ ПланыПродажТекПериод
                 |ИЗ
                 |    РегистрНакопления.ПланыПродаж.Обороты(&НачалоПериода, &КонецПериода,
                 |                                          МинимумМесяц,                        
                 |                                          ) КАК ПланыПродажОбороты
                 |        ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
                 |        ПО ПланыПродажОбороты.Период = СоотвПериодов.НП
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    ПланыПродажОбороты.Период,
                 |    СоотвПериодов.НПП,
                 |    ПланыПродажОбороты.Номенклатура,
                 |    ПланыПродажОбороты.Подразделение,
                 |    ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ                            //факт продаж прошлого периода. Минимум помесячно. для расчета коэффициентов.
                 |    СоотвПериодов.НП КАК Период,    // + соответсвие текущему периоду.
                 |    ПродажиОбороты.Период КАК ПериодПП,
                 |    ПродажиОбороты.Подразделение,
                 |    ПродажиОбороты.Номенклатура,
                 |    ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
                 |    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоПП,
                 |    СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот) КАК СуммаПП
                 |ПОМЕСТИТЬ ПродажиПП
                 |ИЗ
                 |    РегистрНакопления.Продажи.Обороты(&НПП, &КПП,
                 |                                      МинимумМесяц,
                 |                                      ) КАК ПродажиОбороты
                 |        ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
                 |        ПО ПродажиОбороты.Период = СоотвПериодов.НПП
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    СоотвПериодов.НП,
                 |    ПродажиОбороты.Подразделение,
                 |    ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
                 |    ПродажиОбороты.Период,
                 |    ПродажиОбороты.Номенклатура
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ                           //расчет коэффициентов (отношение сумм текущего плана к факту прошлых продаж. период из верхних таблиц.
                 |    ЕСТЬNULL(ПланыПродажТекПериод.Период, ПродажиПП.Период) КАК Период,
                 |    СУММА(ВЫБОР
                 |            КОГДА ПродажиПП.СуммаПП = 0
                 |                    ИЛИ ПродажиПП.СуммаПП ЕСТЬ NULL
                 |                ТОГДА 0
                 |            ИНАЧЕ ЕСТЬNULL(ПланыПродажТекПериод.СуммаТекПлан, 0) / ПродажиПП.СуммаПП
                 |        КОНЕЦ) КАК КоэфСумма,
                 |    СУММА(ВЫБОР
                 |            КОГДА ПродажиПП.КоличествоПП = 0
                 |                    ИЛИ ПродажиПП.КоличествоПП ЕСТЬ NULL
                 |                ТОГДА 0
                 |            ИНАЧЕ ЕСТЬNULL(ПланыПродажТекПериод.КоличествоТекПлан, 0) / ПродажиПП.КоличествоПП
                 |        КОНЕЦ) КАК КоэфКолВо,
                 |    ЕСТЬNULL(ПланыПродажТекПериод.Подразделение, ПродажиПП.Подразделение) КАК Подразделение,
                 |    ПродажиПП.Номенклатура КАК Номенклатура,
                 |    ЕСТЬNULL(ПланыПродажТекПериод.ПериодПП, ПродажиПП.ПериодПП) КАК ПериодПП
                 |ПОМЕСТИТЬ Коэффициенты
                 |ИЗ
                 |    ПланыПродажТекПериод КАК ПланыПродажТекПериод
                 |        ПОЛНОЕ СОЕДИНЕНИЕ ПродажиПП КАК ПродажиПП
                 |        ПО ПланыПродажТекПериод.Период = ПродажиПП.Период
                 |            И ПланыПродажТекПериод.НоменклатураНоменклатурнаяГруппа = ПродажиПП.НоменклатураНоменклатурнаяГруппа
                 |            И ПланыПродажТекПериод.Подразделение = ПродажиПП.Подразделение
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    ЕСТЬNULL(ПланыПродажТекПериод.Период, ПродажиПП.Период),
                 |    ЕСТЬNULL(ПланыПродажТекПериод.Подразделение, ПродажиПП.Подразделение),
                 |    ЕСТЬNULL(ПланыПродажТекПериод.ПериодПП, ПродажиПП.ПериодПП),
                 |    ПродажиПП.Номенклатура
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |УНИЧТОЖИТЬ ПродажиПП;                      //остались только коэффициент. минимум помесячно.
                 |УНИЧТОЖИТЬ ПланыПродажТекПериод;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    СоотвПериодов.НП КАК Период,
                 |    СУММА((ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, 0) + ЕСТЬNULL(ПродажиОбороты.НДСОборот, 0)) * ЕСТЬNULL(Коэффициенты.КоэфСумма, 0)) КАК СуммаПлан,
                 |    СУММА(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) * ЕСТЬNULL(Коэффициенты.КоэфКолВо, 0)) КАК КоличествоПлан,
                 |    СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот) КАК СуммаППП,
                 |    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоППП,
                 |    СУММА(0) КАК СуммаФакт,
                 |    СУММА(0) КАК КоличествоФакт,
                 |    ПродажиОбороты.Номенклатура,
                 |    ПродажиОбороты.Подразделение
                 |ПОМЕСТИТЬ Почти
                 |ИЗ
                 |    РегистрНакопления.Продажи.Обороты(&НПП, &КПП,
                 |                                            МинимумДень                      //периодичность отчета.
                 |                                        , ) КАК ПродажиОбороты
                 |        ЛЕВОЕ СОЕДИНЕНИЕ СоотвПериодов КАК СоотвПериодов
                 |        ПО ПродажиОбороты.Период = СоотвПериодов.НПП
                 |        ЛЕВОЕ СОЕДИНЕНИЕ Коэффициенты КАК Коэффициенты
                 |        ПО (НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) = Коэффициенты.ПериодПП)
                 |            И ПродажиОбороты.Номенклатура = Коэффициенты.Номенклатура
                 |            И ПродажиОбороты.Подразделение = Коэффициенты.Подразделение
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    СоотвПериодов.НП,
                 |    ПродажиОбороты.Номенклатура,
                 |    ПродажиОбороты.Подразделение
                 |
                 |ОБЪЕДИНИТЬ ВСЕ
                 |
                 |ВЫБРАТЬ
                 |    ПродажиОбороты.Период,
                 |    СУММА(0),
                 |    СУММА(0),
                 |    СУММА(0),
                 |    СУММА(0),
                 |    СУММА(ПродажиОбороты.СтоимостьОборот + ПродажиОбороты.НДСОборот),
                 |    СУММА(ПродажиОбороты.КоличествоОборот),
                 |    ПродажиОбороты.Номенклатура,
                 |    ПродажиОбороты.Подразделение
                 |ИЗ
                 |    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода,
                 |                                      МинимумДень                              //ПериодичностьОтчета
                 |                                    , ) КАК ПродажиОбороты
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    ПродажиОбороты.Период,
                 |    ПродажиОбороты.Номенклатура,
                 |    ПродажиОбороты.Подразделение
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |УНИЧТОЖИТЬ Коэффициенты
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |УНИЧТОЖИТЬ СоотвПериодов
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    Почти.Период КАК Период,
                 |    СУММА(Почти.СуммаПлан) КАК СуммаПлан,
                 |    СУММА(Почти.КоличествоПлан) КАК КоличествоПлан,
                 |    СУММА(Почти.СуммаППП) КАК ППП_Сумма,
                 |    СУММА(Почти.КоличествоППП) КАК ППП_Количество,
                 |    СУММА(Почти.СуммаФакт) КАК СуммаФакт,
                 |    СУММА(Почти.КоличествоФакт) КАК КоличествоФакт,
                 |    Почти.Номенклатура,
                 |    Почти.Подразделение
                 |ИЗ
                 |    Почти КАК Почти
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    Почти.Период,
                 |    Почти.Номенклатура,
                 |    Почти.Подразделение
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    Период";
                
МинимумМесяц="Месяц";
МинимумДень="День";
ПериодыОтчета(МинимумМесяц,МинимумДень);                
Текст=СтрЗаменить(Текст,"МинимумМесяц",МинимумМесяц);                
Текст=СтрЗаменить(Текст,"МинимумДень",МинимумДень);                
Запрос.Текст=Текст;
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
РазницаМеждуПериодами=НачалоПериода-НачалоПериодаРасчетаДинамики;
Запрос.УстановитьПараметр("СоотвПериодов",ТаблицаСоответствияПериодов(РазницаМеждуПериодами));


Запрос.УстановитьПараметр("НПП",НачалоПериодаРасчетаДинамики);
Запрос.УстановитьПараметр("КПП",КонецДня(КонецПериода-РазницаМеждуПериодами));
    Возврат Запрос.Выполнить().Выгрузить();
18 Slavus
 
28.10.15
04:59
Процедура ПериодыОтчета(МинимумМесяц,МинимумДень)
        Если ПериодОтчета=Перечисления.Периодичность.День
            или ПериодОтчета=Перечисления.Периодичность.Неделя
            или ПериодОтчета=Перечисления.Периодичность.Декада
            или ПериодОтчета=Перечисления.Периодичность.Месяц Тогда
            МинимумМесяц="Месяц";
            МинимумДень=Строка(ПериодОтчета);
        Иначе
            МинимумМесяц=Строка(ПериодОтчета);
            МинимумДень=МинимумМесяц;
        КонецЕсли;
    
КонецПроцедуры
19 Slavus
 
28.10.15
05:02
таблица соответствия периодов имеет вид
например с 1 января по 31 декабря периодичность квартал.
прошлый период - прошлый год
НП (начало периода)  НПП (начало прошлого периода)
тип дата             тип дата
01.01.2015           01.01.2014
01.04.2015           01.04.2014
01.07.2015           01.07.2014
01.10.2015           01.10.2014
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.