Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:43

Запрос к товару который продается кажду неделю

Автор John_Connor, 18 авг 2016, 08:38

0 Пользователей и 1 гость просматривают эту тему.

John_Connor

простая задача, нужно вытащить товар который стабильно продается каждую неделю
таблицаНеделя= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Неделя");
    таблицаМесяц= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Месяц") ;
    таблицаПолугодие= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Полугодие") ;

   ЗАПРОС =НОВЫЙ ЗАПРОС;
      Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
      Запрос.Текст=
      "ВЫБРАТЬ
      |   ТЗ.НачИнтервала
      |ПОМЕСТИТЬ ТЗ2
      |ИЗ
      |   &ТЗ КАК ТЗ
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   ТЗ2.НачИнтервала,
      |   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
      |   ВложенныйЗапрос.Период1
      |ИЗ
      |   ТЗ2 КАК ТЗ2
      |      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
      |         ПродажиОбороты.Номенклатура КАК Номенклатура,
      |         НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ) КАК Период1
      |      ИЗ
      |         РегистрНакопления.Продажи.Обороты(&ДатаНП, &ДатаКп, Неделя, Номенклатура.ВидНоменклатуры <> &ВидНоменклатуры) КАК ПродажиОбороты) КАК ВложенныйЗапрос
      |      ПО ТЗ2.НачИнтервала = ВложенныйЗапрос.Период1
      |АВТОУПОРЯДОЧИВАНИЕ";
      Запрос.УстановитьПараметр("ТЗ",таблицаНеделя );
      Запрос.УстановитьПараметр("ДатаНП",НачДата );
      Запрос.УстановитьПараметр("ДатаКп",КонДата );
      запрос.УстановитьПараметр("ВидНоменклатуры",Перечисления.ВидыНоменклатуры.Услуга );   
      //РезультатЗапроса = Запрос.Выполнить().выбрать();
      РезультатЗапроса=Запрос.Выполнить().Выгрузить();

дальше ступор, не знаю что делать =(

Летящий в даль

Можете прокомментировать код строк, чо он ваще должен по вашему делать??? что за белеберда непонятный код?

John_Connor

этот г*вн*к*д  полностью выглядит так
//
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
   таблицаНеделя= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Неделя");
    таблицаМесяц= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Месяц") ;
    таблицаПолугодие= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Полугодие") ;

   ЗАПРОС =НОВЫЙ ЗАПРОС;
      Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
      Запрос.Текст=
      "ВЫБРАТЬ
      |   ТЗ.НачИнтервала
      |ПОМЕСТИТЬ ТЗ2
      |ИЗ
      |   &ТЗ КАК ТЗ
      |;
      |
      |////////////////////////////////////////////////////////////////////////////////
      |ВЫБРАТЬ
      |   ТЗ2.НачИнтервала,
      |   ВложенныйЗапрос.Номенклатура КАК Номенклатура,
      |   ВложенныйЗапрос.Период1
      |ИЗ
      |   ТЗ2 КАК ТЗ2
      |      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
      |         ПродажиОбороты.Номенклатура КАК Номенклатура,
      |         НАЧАЛОПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ) КАК Период1
      |      ИЗ
      |         РегистрНакопления.Продажи.Обороты(&ДатаНП, &ДатаКп, Неделя, Номенклатура.ВидНоменклатуры <> &ВидНоменклатуры) КАК ПродажиОбороты) КАК ВложенныйЗапрос
      |      ПО ТЗ2.НачИнтервала = ВложенныйЗапрос.Период1
      |
      |УПОРЯДОЧИТЬ ПО
      |   Номенклатура";
      Запрос.УстановитьПараметр("ТЗ",таблицаНеделя );
      Запрос.УстановитьПараметр("ДатаНП",НачДата );
      Запрос.УстановитьПараметр("ДатаКп",КонДата );
      запрос.УстановитьПараметр("ВидНоменклатуры",Перечисления.ВидыНоменклатуры.Услуга );   
      //РезультатЗапроса = Запрос.Выполнить().выбрать();
      РезультатЗапроса=Запрос.Выполнить().Выгрузить();
   //   Пока РезультатЗапроса.Следующий() Цикл
   
   //КонецЦикла;
   //
   
   // Вставить содержимое обработчика.
КонецПроцедуры


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

Летящий в даль

Цитата: John_Connor от 18 авг 2016, 10:41
он должен определить продавалось номенклатура постоянно каждую неделю или нет, далее продовалась она каждый месяц или нет...
странная постановка , ведь если она продавалась на неделе, логично же что она и в каком то месяце продавалась?? уточните что именно вы хотите получить какой тренд ???
Добавлено: 18 авг 2016, 10:57


   таблицаНеделя= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Неделя");
    таблицаМесяц= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Месяц") ;
    таблицаПолугодие= ПолучитьТаблицуДатЗаПериод(НачДата, КонДата, "Полугодие") ;
что ваще такое ПолучитьТаблицуДатЗаПериод?

John_Connor

вывести номенклатуру которая продавалось каждую неделю, постоянно с Дата1 по Дата2. Если в этом периоде неделя просушена , то проверяю а продавалась ли она каждый месяц с Дата1 по Дата2

LexaK

простую задачу сначала надо разбить на простые (и для понимания тоже) этапы

1.Отбираем все обороты за заданный период + доп условия.
2.из этой выборки получаем максимальное количество (с группировкой День, Неделя, Месяц, ...)
3.из 1. и 2. получаем результат с количеством и товаром

вот как это выглядит на моем примере, вам только остается подставить свои данные и названия регистров/ресурсов
(ну уж если вы с этим справиться не сможете ... )

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


//получаем общие записи оборота за период с Дата1 по Дата2 ( пример 01,01,2016 - 01,07,2016)
ВЫБРАТЬ
Рег.Период,
Рег.НоменклатурнаяГруппа,
Рег.СуммаОборот
поместить Таб
ИЗ
РегистрНакопления.РеализацияУслуг.Обороты(&Дата1, &Дата2, Неделя, ) КАК Рег   //обороты по неделям
;

//рассчитываем максимумы по Недельно
ВЫБРАТЬ
Таб.Период,
Максимум(Таб.СуммаОборот) как СуммаОборот
поместить Макс
из
Таб
сгруппировать по
Таб.Период
;

//получаем результат
выбрать
Рег.Период,
Рег.НоменклатурнаяГруппа,
Рег.СуммаОборот
из
Таб Рег
внутреннее соединение Макс
по Рег.Период = Макс.Период
и  Рег.СуммаОборот = Макс.СуммаОборот

упорядочить по
1,2



Если вам просто Обороты нужны, то почему не воспользоваться отчетом по оборотам?
там указываете в отборах нужную номенклатуру(список), период группировки (Неделя, Месяц,...)

мой пример для получения лидеров продаж.


если помогло нажмите: Спасибо!

John_Connor

спасибо за пример, но в моем случае он не подходит

SGIRG

Если продолжать дописывать Ваш код то выйдет примерно следующее:
ВЫБРАТЬ
    ТЗ.НачИнтервала
ПОМЕСТИТЬ ТЗ2
ИЗ
   &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КОЛИЧЕСТВО(ТЗ2.НачИнтервала) КАК Количество
ПОМЕСТИТЬ КоличествоНедель
ИЗ
    ТЗ2 КАК ТЗ2
;

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

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОборотыСКоличествомИнтервалов.Количество,
    ОборотыСКоличествомИнтервалов.ЗаявкаНаРасходованиеДенежныхСредств
ИЗ
    ОборотыСКоличествомИнтервалов КАК ОборотыСКоличествомИнтервалов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ КоличествоНедель КАК КоличествоНедель
        ПО ОборотыСКоличествомИнтервалов.Количество = КоличествоНедель.Количество

LexaK

Примерно такую таблицу надо получить?
это пример по одному оборудованию. у нас продается один раз в месяц
из таблицы видно в какую неделю в каком месяце было продано.

ПериодНеделя           ПериодМесяц           Номенклатура   СуммаНеделя   СуммаМесяц
04.01.2016 0:00:00   01.01.2016 0:00:00   Оборудование              7 033,91
11.01.2016 0:00:00   01.01.2016 0:00:00   Оборудование              7 033,91
18.01.2016 0:00:00   01.01.2016 0:00:00   Оборудование              7 033,91
25.01.2016 0:00:00   01.01.2016 0:00:00   Оборудование   7 033,91   7 033,91
01.02.2016 0:00:00   01.02.2016 0:00:00   Оборудование      
08.02.2016 0:00:00   01.02.2016 0:00:00   Оборудование      
15.02.2016 0:00:00   01.02.2016 0:00:00   Оборудование      
22.02.2016 0:00:00   01.02.2016 0:00:00   Оборудование      
29.02.2016 0:00:00   01.02.2016 0:00:00   Оборудование      
07.03.2016 0:00:00   01.03.2016 0:00:00   Оборудование                593,23
14.03.2016 0:00:00   01.03.2016 0:00:00   Оборудование                593,23
21.03.2016 0:00:00   01.03.2016 0:00:00   Оборудование                593,23
28.03.2016 0:00:00   01.03.2016 0:00:00   Оборудование   593,23             593,23
04.04.2016 0:00:00   01.04.2016 0:00:00   Оборудование              7 203,4
11.04.2016 0:00:00   01.04.2016 0:00:00   Оборудование              7 203,4
18.04.2016 0:00:00   01.04.2016 0:00:00   Оборудование              7 203,4
25.04.2016 0:00:00   01.04.2016 0:00:00   Оборудование   7 203,4           7 203,4
02.05.2016 0:00:00   01.05.2016 0:00:00   Оборудование              2 796,61
09.05.2016 0:00:00   01.05.2016 0:00:00   Оборудование              2 796,61
16.05.2016 0:00:00   01.05.2016 0:00:00   Оборудование              2 796,61
23.05.2016 0:00:00   01.05.2016 0:00:00   Оборудование              2 796,61
30.05.2016 0:00:00   01.05.2016 0:00:00   Оборудование   2 796,61   2 796,61
06.06.2016 0:00:00   01.06.2016 0:00:00   Оборудование              12 711,87
13.06.2016 0:00:00   01.06.2016 0:00:00   Оборудование              12 711,87
20.06.2016 0:00:00   01.06.2016 0:00:00   Оборудование              12 711,87
27.06.2016 0:00:00   01.06.2016 0:00:00   Оборудование   12 711,87   12 711,87
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск