8.х максимум и минимум

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем oobuh, 7 дек 2010.

  1. TopicStarter Overlay
    oobuh
    Offline

    oobuh

    Регистрация:
    7 дек 2010
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Доброго дня, друзья!

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

    Vintorez Опытный в 1С

    Регистрация:
    13 ноя 2010
    Сообщения:
    71
    Симпатии:
    0
    Баллы:
    26
    От новичка, новичку СуммаКредита - это как я понял фиксированное значение, поэтому чтобы узнать какое оно(макс,мин,сред), его надо с чем то сравнивать.
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Как то так. Писал прям здесь.
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	МИНИМУМ(ДоговорПоручительства.СуммаКредита) КАК Минимальный,
    |	МАКСИМУМ(ДоговорПоручительства.СуммаКредита) КАК Максимальный,
    |	СРЕДНЕЕ(ДоговорПоручительства.СуммаКредита) КАК Средний,
    |	ДоговорПоручительства.Банк КАК БанкПартнер
    |ИЗ
    |	Документ.ДоговорПоручительства КАК ДоговорПоручительства
    |ГДЕ
    |	ДоговорПоручительства.ДатаВыдачиКредита МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ) И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
    |	И ДоговорПоручительства.Банк = &Банк
    |
    |СГРУППИРОВАТЬ ПО
    |	ДоговорПоручительства.Банк";
    
    Запрос.УстановитьПараметр("Банк", БанкПартнер);
    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
    Результат = Запрос.Выполнить().Выбрать();
    
    ТабДок = Новый ТабличныйДокумент;
    Макет = Отчеты.РазмерКредита.ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(Область);
    
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.НачалоПериода = НачалоПериода; //<-не форматируйте здесь, задайте формат для ячейки
    Область.Параметры.КонецПериода = КонецПериода; //<-не форматируйте здесь, задайте формат для ячейки
    ТабДок.Вывести(Область);
    
    Область = Макет.ПолучитьОбласть("ШапкаТ");
    ТабДок.Вывести(Область);
    
    Область = Макет.ПолучитьОбласть("Тело");
    
    Пока Результат.Следущий() Цикл
    Область.Параметры.Заполнить(Результат);
    ТабДок.Вывести(Область);
    КонецЦикла;
    
    Табдок.ОтображатьСетку = Истина;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.Показать();
    
    
  4. TopicStarter Overlay
    oobuh
    Offline

    oobuh

    Регистрация:
    7 дек 2010
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    нет, что-то не то. По сути, это тот же запрос, что и у меня. Вообще, могут ли агрегатные функции применяться к нескольким объектам? Или же, только в рамках одного объекта (как, например, в большинстве учебников все описано на примере накладной)?
  5. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    "что-то не то" - что? Конкретнее.
    Чтобы применить агрегатную функцию, данные надо сгруппировать по какому-то полю. Что значит применяться к нескольким объектам? Они и так применяются к нескольким объектам: (Документ.ДоговорПоручительства).

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