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

АВС анализ по складам

Автор gliokker, 22 мар 2016, 16:34

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

gliokker

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

   РезультатЗапроса = Запрос.Выполнить();
   ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ОБЩИЕ");

   ВыборкаОбщийИтог.Следующий();      // Общий итог
   
   ВыборкаПодразделение = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение");

   Пока ВыборкаПодразделение.Следующий() Цикл
      Подразделение = ВыборкаПодразделение.Подразделение;
      СтоимостьПоПодразделению = ВыборкаПодразделение.Стоимость;

      ВыборкаНоменклатура = ВыборкаПодразделение.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура");
      ДоляНарастающимПроцентом = 0;
      Пока ВыборкаНоменклатура.Следующий() Цикл
         Номенклатура = ВыборкаНоменклатура.Номенклатура;
         ЦеноваяГруппа = ВыборкаНоменклатура.Номенклатура.ЦеноваяГруппа;
         СтоимостьПоНоменклатуре = ВыборкаНоменклатура.Стоимость;
         
         Доля = СтоимостьПоНоменклатуре/СтоимостьПоПодразделению*100;
         ДоляНарастающимПроцентом = ДоляНарастающимПроцентом + Доля;
         
         Если ДоляНарастающимПроцентом < 80 Тогда
            ГруппаАВС = "Группа товаров А";
         ИначеЕсли ДоляНарастающимПроцентом >= 80 И ДоляНарастающимПроцентом < 95 Тогда
            ГруппаАВС = "Группа товаров В";
         ИначеЕсли ДоляНарастающимПроцентом >= 95 Тогда
            ГруппаАВС = "Группа товаров С";
         КонецЕсли;
         
         СреднедневныеПродажи = СтоимостьПоНоменклатуре/КоличествоДней;
         
         // Запись в ТЗ
         Стр = ТЗ.Добавить();
               
         Стр.ГруппаАВС = ГруппаАВС;
         Стр.Подразделение = Подразделение;
         Стр.ЦеноваяГруппа = ЦеноваяГруппа;
         Стр.Номенклатура = Номенклатура;
         Стр.СреднедневныеПродажи = СреднедневныеПродажи;
         Стр.Стоимость = СтоимостьПоНоменклатуре;
         Стр.Доля = Доля;
         Стр.ДоляНарастающимПроцентом = ДоляНарастающимПроцентом;

gliokker

Не одного ответа не получил, ну да ладно, всё получилось всё работает вопрос появился другой.
Мне нужно исключить из выборки документ ЧекККМ
в запросе в выражении ГДЕ пишу
ТИПЗНАЧЕНИЯ(ТоварыВРозницеОстаткиИОбороты.Регистратор) <> ТИП(Документ.ЧекККМ)
всё правильно отбирает но очень долго работает минут 10
Переписал на
НЕ ТИПЗНАЧЕНИЯ(ТоварыВРозницеОстаткиИОбороты.Регистратор) = ТИП(Документ.ЧекККМ)
работает быстро порядка 1-2 минут но в отчёт попадают не правильные данные
может есть у кого идеи как выкинуть документ?

vitasw


Теги:

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

Рейтинг@Mail.ru

Поиск