Добрый день всем!
Есть запрос:

```1c
    ВЫБРАТЬ

    ЛадСогласСуммаСрезПоследних.Период КАК ДатаНачала,

    ЛадСогласСуммаСрезПоследних.ДатаОкончанияДействия КАК ДатаКонца,

    МАКСИМУМ(ЛадСогласСуммаСрезПоследних.Сумма) КАК СогласСумма

    ИЗ

    РегистрСведений.ЛадСогласСумма.СрезПоследних(

    &ДатаНачала,

    Контрагент = &Контрагент

    И (&ДатаОкончания <= ДатаОкончанияДействия

    ИЛИ ДатаОкончанияДействия = ДАТАВРЕМЯ(1, 1, 1))) КАК ЛадСогласСуммаСрезПоследних

    СГРУППИРОВАТЬ ПО

    ЛадСогласСуммаСрезПоследних.Период,

    ЛадСогласСуммаСрезПоследних.ДатаОкончанияДействия
```

Проблема в следующем.
Если есть два документа с разными СогласСуммами и промежуток их пересекается, то не отрабатывает функция МАКСИМУМ. То есть не берётся большая сумма!
Если же добавить поле контрагент в группировку и убрать ДатаНачала и ДатаКонца, тогда отрабатывает как надо.
Собственно как переделать мне запрос, чтобы я смог отгруппировать корректно и при этом ещё и полчить ДатуНачала и ДатуКонца?
---
Требуется подробное разжевывание? Извольте.

```1c
    ВЫБРАТЬ
    ЛадСогласСуммаСрезПоследних.Период КАК ДатаНачала,
    ЛадСогласСуммаСрезПоследних.ДатаОкончанияДействия КАК ДатаКонца,
    ПоискМаксимума.МаксСумма КАК СогласСумма
    ИЗ
    (ВЫБРАТЬ
    МАКСИМУМ(ЛадСогласСуммаСрезПоследних.Сумма) КАК МаксСумма
    ИЗ
    РегистрСведений.ЛадСогласСумма.СрезПоследних(
    &ДатаНачала,
    Контрагент = &Контрагент
    И (&ДатаОкончания <= ДатаОкончанияДействия
    ИЛИ ДатаОкончанияДействия = ДАТАВРЕМЯ(1, 1, 1))) КАК ЛадСогласСуммаСрезПоследних) КАК ПоискМаксимума
    ЛЕВОЕ СОЕДИНЕНИЕ
    РегистрСведений.ЛадСогласСумма.СрезПоследних(
    &ДатаНачала,
    Контрагент = &Контрагент
    И (&ДатаОкончания <= ДатаОкончанияДействия
    ИЛИ ДатаОкончанияДействия = ДАТАВРЕМЯ(1, 1, 1))) КАК ЛадСогласСуммаСрезПоследних
    ПО ЛадСогласСуммаСрезПоследних.Сумма = ПоискМаксимума.МаксСумма
```
---
Вы структуру РС покажете или так и будем продолжать битву экстрасенсов?
---
вся структура в запросе в теме. Единственное:Переодический (день)
---
Нет структуры ни в одном сообщении. Какие измерения/ресурсы/реквизиты у регистра сведений? РС подчинен регистратору?
---
Ну пожалуйста, и какой смысл в этом..
Подчинен одному документу да.
---
Если вам уже предоставили решение и вы с этим решением согласны, смысла нет.
---
Похоже ДатаОкончанияДействия вообще лучше ресурсом сделать а не измерением?
Иначе по одному контрагенту может быть несколько пересекающихся периодов (с 1 по 5, с 2 по 6, с 3 по 5).
Если оставлять можно либо тот же Макс для дат начала и окончания взять.
Либо срезом получить все, определить макс и потом взять именно запись где сумма максимальная, как писали выше
---
Подумаю по поводу ресурса, механизм же в работе просто и не хотелось бы менять.
в (22) уже описали про макс, выводит всё-равно две строки..
---
С такой структурой (измерением) логика двусмысленная. Почему именно макс сумма? На контрагента выделили 1 числа на две недели до 15 числа сумму 100000, а потом по какой-то причине решили уменьшить с 4 по 15 до 80000. Обычно ожидается, что более позднее назначение должно браться, т. е. по Макс периоду, а не Макс сумма из двух назначений
---
Логика такова, что необходимо брать всегда большую сумму. Подразумевается,что пользователь при пересечении периода указывает всегда Большую сумму.
По идее одинаковых сумм не должно быть. Так что в (22) корректно написан запрос.
Ну вроде как :)
---
структура регистра
картинка данных
результат как есть сейчас
картинка как надо
---
в (4) описал подробно.
---
Каша в голове, группировки и агрегаты это же так просто.

Что там у вас пересекается ? группировка по контрагенту и даст максимум.

Какова изначально задача ?
---
На выходе из запроса мне необходимо получить три значения: ДатаНачала,ДатаКонца и СоглаСумма.

Сейчас исходя из запроса в теме в итоге выходит две строки:
1) Соглассумма: 40000 ; ДатаНачала: 29.06.2020; ДатаКонца: 30.06.2020
2) Соглассумма: 57000 ; ДатаНачала: 30.06.2020; ДатаКонца: 02.07.2020

То есть максимум не отрабатывает!
Если же убрать ДатаНачала и ДатаКонца из группировки и добавить контрагента, то берётся одна строка 57000,как и необходимо. Берётся большая сумма при пересечении дат.

Но мне необходимы значения ДатаНачала и ДатаКонца ! Если к ним в группировку добавить контрагента, то вылазят всё-равно две строки!!!
Пытался через вложеный запрос или пакет запросов,безуспешно.
---
сначала надо найти максимум суммы, затем по значению этой суммы найти дату начала и дату конца. запрос писать лень
---
То есть по значению суммы? А если куча одинаковых сумм.

1) В первом подзапросе отгруппировать по контрагенту и получить максмум сумму(поместить в вт)
2) Во втором итоговом подзапросе связать вт с этим же регистром по контрагенту и получить даты
так имеете ввиду ?
---
Лучше вычислить максимальную сумму без лишних группировок во вложенном запросе и результат вытаскивать в качестве поля в результирующий запрос.
---
А связывать как и с чем в результирующем запросе ?
---
По приведенному в вопросе тексту запроса нет необходимости связывать. Просто берете полученное значение из вложенного запроса. Вложенный запрос - с суммированием, но без группировок:

```1c
    ВЫБРАТЬ

    МАКСИМУМ(ЛадСогласСуммаСрезПоследних.Сумма) КАК МаксСумма

    ИЗ

    РегистрСведений.ЛадСогласСумма.СрезПоследних(

    &ДатаНачала,

    Контрагент = &Контрагент

    И (&ДатаОкончания <= ДатаОкончанияДействия

    ИЛИ ДатаОкончанияДействия = ДАТАВРЕМЯ(1, 1, 1))) КАК ЛадСогласСуммаСрезПоследних
```
---
мне необходима на выходе
 дата начала и датаконца
---
Требуется подробное разжевывание? Извольте.

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

Выходит одно решение запихать ДатаОкончанияДействия в ресурсы и делать макс по нему так же ?
---
и еще,если регистр пуст,то все равно выходит null на выходе у значении
Почему так?
---
А если куча одинаковых сумм.

не понял почему я должен дать ответ на этот вопрос. это главный вопрос, на который точно не я должен знать ответ
---
Найдите макс сумму во вложенном запросе дата сумма, условия дата в периоде. Потом объедините с вашим запросом.
---
если во вложеном использую дату,то будет две строки
---
Хорошо, а если 2 одинаковые суммы будет в периоде допустим 10к на 10.10.10 и 10к на 12.10.10 какой результат должен быть ? контрагент один и тот же
Просто если нужен будет максимум нужно 2 вложенных использовать. если обе подходят то один
---
Так и возьмёт 10к как и надо,тут важнее уже датаначала и датаконца чтобы верное взялось.
---
Под руками была только 1.6 для беларуси. Выводит макс число на макс дату. периоды можете сами подставить и посмотреть что получилось. таблица услуги.

```1c
    ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслугУслуги.Ссылка.Дата) КАК Дата,
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент КАК Контрагент,
    МАКСИМУМ(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма
    ИЗ
    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    МАКСИМУМ(РеализацияТоваровУслугУслуги.Ссылка.Дата) КАК Дата,
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент КАК Контрагент,
    МАКСИМУМ(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма
    ИЗ
    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент КАК Контрагент,
    МАКСИМУМ(РеализацияТоваровУслугУслуги.Сумма) КАК Сумма
    ИЗ
    Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги

    СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент) КАК ВложенныйЗапрос
    ПО РеализацияТоваровУслугУслуги.Ссылка.Контрагент = ВложенныйЗапрос.Контрагент
    И РеализацияТоваровУслугУслуги.Сумма = ВложенныйЗапрос.Сумма

    СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент) КАК ВложенныйЗапрос
    ПО РеализацияТоваровУслугУслуги.Ссылка.Контрагент = ВложенныйЗапрос.Контрагент
    И РеализацияТоваровУслугУслуги.Сумма = ВложенныйЗапрос.Сумма

    СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугУслуги.Ссылка.Контрагент

    УПОРЯДОЧИТЬ ПО
    Контрагент
```

Если убрать второй вложеный запрос выведет по несколько дат в периоде с макс суммой.
---
Смысл такой, в первом вложенном ищем макс сумму по контрагенту за период. Второй вложеный ищет эту макс сумму на дату. В самом запросе ищем макс дату приближенную к концу. В итоге на каждого контрагента будет по одной строке.