8.х Итог процентного поля в УниверсальномОтчете

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем russlix, 19 мар 2012.

  1. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Есть универсальный отчет.

    В нем есть процентное поле ПрогнозВыполнения Как отношение .(Выручка / ПланПродаж * 100)

    Каким образом при формировании отчета выводить правильные итоги группировок, т.к. использование функций Сумма(ПрогнозВыполнения) или Среднее(ПрогнозВыполнения) в запросе не имеет смысла.

    Вот код УниверсальногоОтчета:

    Код:
    Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
    УправлениеОтчетами.ВосстановитьРеквизитыОтчета(ЭтотОбъект, ДополнительныеПараметры);
    УниверсальныйОтчет.мНазваниеОтчета = СокрЛП(ЭтотОбъект.Метаданные().Синоним);
    УниверсальныйОтчет.мВыбиратьИмяРегистра = Ложь;
    УниверсальныйОтчет.мРежимВводаПериода = 0;
    УниверсальныйОтчет.ОтрицательноеКрасным = ИСТИНА;
    УниверсальныйОтчет.ВыводитьОбщиеИтоги = ИСТИНА;
    УниверсальныйОтчет.ВыводитьДетальныеЗаписи = ЛОЖЬ;
    УниверсальныйОтчет.мВыбиратьИспользованиеСвойств = ЛОЖЬ;
    УниверсальныйОтчет.ИспользоватьСвойстваИКатегории = ЛОЖЬ;
    УниверсальныйОтчет.мРежимФормыНастройкиБезГруппировокКолонок = ЛОЖЬ;
    
    ТекстЗапроса = "ВЫБРАТЬ
    | ВложенныйЗапрос.Сектор,
    | ВложенныйЗапрос.Склад,
    | ВложенныйЗапрос.НоменклатурнаяГруппа,
    | ВложенныйЗапрос.План КАК План,
    | ВложенныйЗапрос.Выручка КАК Выручка,
    | ВложенныйЗапрос.Выручка / ВложенныйЗапрос.ДнейВПериоде КАК ТекущееВДень,
    | ВЫБОР
    |  КОГДА ВложенныйЗапрос.План = 0
    |   ТОГДА 0
    |  ИНАЧЕ ВложенныйЗапрос.Выручка / ВложенныйЗапрос.ДнейВПериоде * ВложенныйЗапрос.ДнейВМесяце / ВложенныйЗапрос.План * 100
    | КОНЕЦ КАК ПрогнозВыполнения,
    | ВложенныйЗапрос.План - ВложенныйЗапрос.Выручка / ВложенныйЗапрос.ДнейВПериоде / ВложенныйЗапрос.ОстатокДней КАК НадоВДень100,
    | ВложенныйЗапрос.План * 1.1 - ВложенныйЗапрос.Выручка / ВложенныйЗапрос.ДнейВПериоде / ВложенныйЗапрос.ОстатокДней КАК НадоВДень110,
    | ВложенныйЗапрос.План * 1.2 - ВложенныйЗапрос.Выручка / ВложенныйЗапрос.ДнейВПериоде / ВложенныйЗапрос.ОстатокДней КАК НадоВДень120
    |{ВЫБРАТЬ
    | Сектор.*,
    | Склад.*,
    | НоменклатурнаяГруппа.*,
    | План,
    | Выручка,
    | ТекущееВДень,
    | ПрогнозВыполнения,
    | НадоВДень100,
    | НадоВДень110,
    | НадоВДень120}
    |ИЗ
    | (ВЫБРАТЬ
    |  ВложенныйЗапрос.Сектор КАК Сектор,
    |  ВложенныйЗапрос.Склад КАК Склад,
    |  ВложенныйЗапрос.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    |  ВложенныйЗапрос.План КАК План,
    |  ВложенныйЗапрос.Выручка КАК Выручка,
    |  РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ), КОНЕЦПЕРИОДА(&ДатаКонца, ДЕНЬ), ДЕНЬ) + 1 КАК ДнейВПериоде,
    |  РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаКонца, МЕСЯЦ), КОНЕЦПЕРИОДА(&ДатаКонца, МЕСЯЦ), ДЕНЬ) + 1 КАК ДнейВМесяце,
    |  ВЫБОР
    |   КОГДА РАЗНОСТЬДАТ(&ДатаКонца, КОНЕЦПЕРИОДА(&ДатаКонца, МЕСЯЦ), ДЕНЬ) + 1 < 1
    |	ТОГДА 1
    |   ИНАЧЕ РАЗНОСТЬДАТ(&ДатаКонца, КОНЕЦПЕРИОДА(&ДатаКонца, МЕСЯЦ), ДЕНЬ) + 1
    |  КОНЕЦ КАК ОстатокДней
    | ИЗ
    |  (ВЫБРАТЬ
    |   ВложенныйЗапрос.Сектор КАК Сектор,
    |   ВложенныйЗапрос.Склад КАК Склад,
    |   ВложенныйЗапрос.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    |   СУММА(ВложенныйЗапрос.План) КАК План,
    |   СУММА(ВложенныйЗапрос.Выручка) КАК Выручка
    |  ИЗ
    |   (ВЫБРАТЬ
    |	ПланыПродаж.Склад.Сектор КАК Сектор,
    |	ПланыПродаж.Склад КАК Склад,
    |	ВЫБОР
    |	 КОГДА ПланыПродаж.Номенклатура = ПланыПродаж.Номенклатура.ЭтоГруппа
    |	  ТОГДА ПланыПродаж.Номенклатура
    |	 ИНАЧЕ ПланыПродаж.Номенклатура.ВидНоменклатурнойГруппы
    |	КОНЕЦ КАК НоменклатурнаяГруппа,
    |	ПланыПродаж.Количество КАК План,
    |	NULL КАК Выручка
    |   ИЗ
    |	РегистрНакопления.ПланыПродаж КАК ПланыПродаж
    |   ГДЕ
    |	ПланыПродаж.Период МЕЖДУ &ДатаНачала И &ДатаКонца
    |  
    |   ОБЪЕДИНИТЬ ВСЕ
    |  
    |   ВЫБРАТЬ
    |	ПродажиТО.Склад.Сектор,
    |	ПродажиТО.Склад,
    |	ПродажиТО.Номенклатура.НоменклатурнаяГруппа.ВидНоменклатурнойГруппы,
    |	NULL,
    |	ПродажиТО.Количество
    |   ИЗ
    |	РегистрНакопления.ПродажиТО КАК ПродажиТО
    |   ГДЕ
    |	ПродажиТО.Период МЕЖДУ &ДатаНачала И &ДатаКонца
    |	И ПродажиТО.КодОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
    |	И ПродажиТО.КодОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийВозвратТоваровОтПокупателя.Возврат)
    |	И ПродажиТО.КодОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОперацийВозвратТоваровОтПокупателя.Ремонт)) КАК ВложенныйЗапрос
    |
    |  СГРУППИРОВАТЬ ПО
    |   ВложенныйЗапрос.Сектор,
    |   ВложенныйЗапрос.Склад,
    |   ВложенныйЗапрос.НоменклатурнаяГруппа) КАК ВложенныйЗапрос) КАК ВложенныйЗапрос
    |{ГДЕ
    | ВложенныйЗапрос.Сектор.*,
    | ВложенныйЗапрос.Склад.*,
    | ВложенныйЗапрос.НоменклатурнаяГруппа.*}
    |ИТОГИ
    | СУММА(План),
    | СУММА(Выручка),
    | СУММА(ТекущееВДень),
    | СУММА(ПрогнозВыполнения),
    | СУММА(НадоВДень100),
    | СУММА(НадоВДень110),
    | СУММА(НадоВДень120)
    |ПО
    | ОБЩИЕ
    |{ИТОГИ ПО
    | Сектор.*,
    | Склад.*,
    | НоменклатурнаяГруппа.*,
    | План,
    | Выручка,
    | ТекущееВДень,
    | НадоВДень100,
    | НадоВДень110,
    | НадоВДень120}";
    
    УниверсальныйОтчет.ПостроительОтчета.Текст = ТекстЗапроса;
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Выручка","Выручка");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("НадоВДень100","Надо вДень 100");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("НадоВДень110","Надо вДень 110");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("НадоВДень120","Надо вДень 120");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("НоменклатурнаяГруппа","Номенклатурная группа");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("План","План");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ПрогнозВыполнения","Прогноз выполнения");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Сектор","Сектор");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("Склад","Склад");
    УниверсальныйОтчет.мСтруктураПредставлениеПолей.Вставить("ТекущееВДень","Текущее вДень");
    
    УниверсальныйОтчет.ДобавитьПоказатель("План"	, "План"	, ИСТИНА, "ЧДЦ=0" ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("Выручка"	, "Выручка"	, ИСТИНА, ""  ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("ТекущееВДень"  , "Текущее вДень"  , ИСТИНА, "ЧДЦ=0" ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("ПрогнозВыполнения" , "Прогноз выполнения" , ИСТИНА, "ЧДЦ=2" ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("НадоВДень100"  , "Надо в День 100%" , ИСТИНА, "ЧДЦ=0" ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("НадоВДень110"  , "Надо в День 110%" , ИСТИНА, "ЧДЦ=0" ,"","");
    УниверсальныйОтчет.ДобавитьПоказатель("НадоВДень120"  , "Надо в День 120%" , ИСТИНА, "ЧДЦ=0" ,"","");
    
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Склад");
    УниверсальныйОтчет.ДобавитьИзмерениеСтроки("НоменклатурнаяГруппа");
    
    УниверсальныйОтчет.ДобавитьОтбор("Сектор");
    УниверсальныйОтчет.ДобавитьОтбор("Склад");
    УниверсальныйОтчет.ДобавитьОтбор("НоменклатурнаяГруппа");
    
    УниверсальныйОтчет.УстановитьНачальныеНастройки(Ложь);
    
    УниверсальныйОтчет.УстановитьПредставленияПолей(УниверсальныйОтчет.мСтруктураПредставлениеПолей, УниверсальныйОтчет.ПостроительОтчета);
    
    УниверсальныйОтчет.УстановитьТипыЗначенийСвойствДляОтбора();
    
    КонецПроцедуры
    Пробовал http://www.1c-pro.ru/topic40639.html/page__fromsearch__1 не получается
  2. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Вот скрин

    Вложения:

  3. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Так а какое значение там должно быть? И почему не среднее?
  4. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Значение должно быть: (68 / 102 *100) = 66.66 %

    А если следнее брать то получится: (57,43 + 100) / 2 = 78.72
  5. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Хм... да наверное никак такое вы не посчитаете.
  6. TopicStarter Overlay
    russlix
    Offline

    russlix

    Регистрация:
    15 авг 2008
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Да, действительно никак не рассчитать. Придумал как реализовать. После Формирования отчета я пробежался по ТабличномуДокументу и расчитал процент.

Поделиться этой страницей