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

Нужна помощь в решении простой задачи

Автор WeSs, 21 фев 2019, 16:13

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

WeSs

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

alex0402

ВЫБРАТЬ Сумма(СуммаПродаж) КАК СуммаПродаж
ПОМЕСТИТЬ ВТИтог
ИЗ ТаблицаПродаж;

ВЫБРАТЬ
    ТаблицаПродаж.Номенклатура,
    ТаблицаПродаж.СуммаПродаж/ВТИтог.СуммаПродаж*100 Процент
ИЗ ТаблицаПродаж,
    ВТИтог
Спасибо за Сказать спасибо

WeSs

Цитата: alex0402 от 21 фев 2019, 17:04
ВЫБРАТЬ Сумма(СуммаПродаж) КАК СуммаПродаж
ПОМЕСТИТЬ ВТИтог
ИЗ ТаблицаПродаж;

ВЫБРАТЬ
    ТаблицаПродаж.Номенклатура,
    ТаблицаПродаж.СуммаПродаж/ВТИтог.СуммаПродаж*100 Процент
ИЗ ТаблицаПродаж,
    ВТИтог


При исполнении такого кода существует главная проблема. Итоги считаются неправильно

alex0402

Цитата: WeSs от 21 фев 2019, 17:30Итоги считаются неправильно

какие именно итоги? Сумма всех процентов не равна 100?
Спасибо за Сказать спасибо

WeSs

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

   ОбластьИтог.Параметры.ИтогКоличествоОборот=ИтогКоличествоОборот;
   ОбластьИтог.Параметры.ИтогВЗапросе=Выборка.КоличествоИтог;
   ТабДок.Вывести(ОбластьИтог);
   
   ТабДок.Показать();





Код программы с использованием структуры, описанной выше.
Добавлено: 21 фев 2019, 17:35


Цитата: alex0402 от 21 фев 2019, 17:32
Цитата: WeSs от 21 фев 2019, 17:30Итоги считаются неправильно

какие именно итоги? Сумма всех процентов не равна 100?


Итог количества продаж
Добавлено: 21 фев 2019, 17:40


При исполнении программы с кодом выше, самостоятельный расчет количества продаж составляет : 1500 , а расчет который помещен в ВТ составляет : 2300. Отсюда некорректные вычисления

alex0402

Вот запрос:

ВЫБРАТЬ ПЕРВЫЕ 10
ВложенныйЗапрос.КоличествоИтог КАК КоличествоИтог,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот * 100 / ВложенныйЗапрос.КоличествоИтог КАК Процент,
ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК КоличествоОборот,
ВложенныйЗапрос.КоличествоИтог КАК КоличествоИтог1
ИЗ
(ВЫБРАТЬ
СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоИтог
ИЗ
РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ТекДата, МЕСЯЦ, -3), &ТекДата, Месяц, ) КАК ПродажиОбороты) КАК ВложенныйЗапрос,
РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ТекДата, МЕСЯЦ, -3), &ТекДата, Месяц, ) КАК ПродажиОбороты


Вот результат:

КоличествоИтог   Номенклатура         Процент      КоличествоОборот   
3   Наименование00003         33,333333      1      
3   Наименование00004         66,666667      2      

Спасибо за Сказать спасибо

WeSs

Цитата: alex0402 от 21 фев 2019, 17:56
Вот запрос:

ВЫБРАТЬ ПЕРВЫЕ 10
ВложенныйЗапрос.КоличествоИтог КАК КоличествоИтог,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот * 100 / ВложенныйЗапрос.КоличествоИтог КАК Процент,
ЕСТЬNULL(ПродажиОбороты.КоличествоОборот, 0) КАК КоличествоОборот,
ВложенныйЗапрос.КоличествоИтог КАК КоличествоИтог1
ИЗ
(ВЫБРАТЬ
СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоИтог
ИЗ
РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ТекДата, МЕСЯЦ, -3), &ТекДата, Месяц, ) КАК ПродажиОбороты) КАК ВложенныйЗапрос,
РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ТекДата, МЕСЯЦ, -3), &ТекДата, Месяц, ) КАК ПродажиОбороты


Вот результат:

КоличествоИтог   Номенклатура         Процент      КоличествоОборот   
3   Наименование00003         33,333333      1      
3   Наименование00004         66,666667      2



Не скромный вопрос. Зачем 2 поля "КоличествоИтог"?
Добавлено: 21 фев 2019, 18:09


Не знаю с чем это связано, но Итоги из ВТ неравны собственному расчету. Возможно какие-то ошибки в базе.
В любом случае, спасибо за помощь и за отклик

alex0402

Спасибо за Сказать спасибо

Теги:

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

Рейтинг@Mail.ru

Поиск