Здравствуйте. Обычные формы 8.2

Есть запрос:

```1c
    ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК Заказ,
    ЗаказПокупателя.СуммаДокумента КАК СуммаЗаказов,
    СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК СуммаРеализации
    ПОМЕСТИТЬ ЗаказыРеализации
    ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО ЗаказПокупателя.Ссылка = РеализацияТоваровУслуг.Сделка
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ЗаказПокупателя.Контрагент = &Контрагент
    И ЗаказПокупателя.Проведен = ИСТИНА
    СГРУППИРОВАТЬ ПО
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.СуммаДокумента
    ИНДЕКСИРОВАТЬ ПО
    Заказ
    ;
    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА НЕ ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И НЕ ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ВЫБОР
    КОГДА ЗаказыРеализации.СуммаЗаказов = ЗаказыРеализации.СуммаРеализации
    ТОГДА ЗаказыРеализации.СуммаРеализации
    КОГДА ЗаказыРеализации.СуммаЗаказов > ЗаказыРеализации.СуммаРеализации

    ТОГДА ЗаказыРеализации.СуммаЗаказов
    КОГДА ЗаказыРеализации.СуммаЗаказов < ЗаказыРеализации.СуммаРеализации
    ТОГДА ЗаказыРеализации.СуммаРеализации
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И НЕ ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ЗаказыРеализации.СуммаЗаказов
    КОГДА НЕ ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ЗаказыРеализации.СуммаРеализации
    ИНАЧЕ 0
    КОНЕЦ
    КОНЕЦ) КАК СуммаЗаПериод
    ИЗ
    ЗаказыРеализации КАК ЗаказыРеализации
```

Как ни крути выводит грёбанный NULL ! Хотя есть хотя бы одна сумма.
В коде если смотреть по отладчику, то вместе null вылазит хер пойми откуда какая то сумма!
Подскажите, как подкорректировать запрос, я новичок. Спасибо.
---
вот итоговый запрос. Что не так?

```1c
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ЗаказПокупателя.СуммаДокумента <= ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
    ТОГДА ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
    ИНАЧЕ ЗаказПокупателя.СуммаДокумента
    КОНЕЦ) КАК СуммаДокумента
    ПОМЕСТИТЬ ВТ_Сумма
    ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
    И (РеализацияТоваровУслуг.Проведен)
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЗаказПокупателя.Контрагент = &Контрагент
    И ЗаказПокупателя.Проведен

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    СУММА(РеализацияТоваровУслуг.СуммаДокумента)
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
    РеализацияТоваровУслуг.Сделка = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
    И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И РеализацияТоваровУслуг.Контрагент = &Контрагент
    И РеализацияТоваровУслуг.Проведен
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ВТ_Сумма.СуммаДокумента) КАК СуммаДокумента
    ИЗ
    ВТ_Сумма КАК ВТ_Сумма
```
---
в блоке вложенного ВЫБОР тоже нужно использовать ИНАЧЕ, или приводить NULL к 0.

```1c
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА НЕ ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И НЕ ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ВЫБОР
    КОГДА ЗаказыРеализации.СуммаЗаказов = ЗаказыРеализации.СуммаРеализации
    ТОГДА ЗаказыРеализации.СуммаРеализации
    КОГДА ЗаказыРеализации.СуммаЗаказов > ЗаказыРеализации.СуммаРеализации
    ТОГДА ЗаказыРеализации.СуммаЗаказов
    КОГДА ЗаказыРеализации.СуммаЗаказов < ЗаказыРеализации.СуммаРеализации
    ТОГДА ЗаказыРеализации.СуммаРеализации
    ИНАЧЕ ЗаказыРеализации.СуммаЗаказов
    КОНЕЦ
    ИНАЧЕ ВЫБОР
    КОГДА ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И НЕ ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ЗаказыРеализации.СуммаЗаказов
    КОГДА НЕ ЗаказыРеализации.СуммаРеализации ЕСТЬ NULL
    И ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL
    ТОГДА ЗаказыРеализации.СуммаРеализации
    ИНАЧЕ 0
    КОНЕЦ
    КОНЕЦ) КАК СуммаЗаПериод
    ИЗ
    ЗаказыРеализации КАК ЗаказыРеализации
```

И еще, ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL никогда не выполниться. в этом поле NULL не может быть.
---
И еще, ЗаказыРеализации.СуммаЗаказов ЕСТЬ NULL никогда не выполниться. в этом поле NULL не может быть.

Значит условие на СуммаЗАказов ЕстьNull имеете ввиду ?
Но реализация может быть без заказа и мне надо её учитывать тоже.
---
тогда изначально запрос неверный.
Левое соединение означает, что будет соединение только с имеющимися записями в левой таблице.
---
Подскажите как верно сделать запрос ? Весь день пыхчу уже над этим )
внутренее соединение и исходить из этого ?
---
не совсем понятна конечная цель.
Но вот для примера:

```1c
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ЗаказПокупателя.СуммаДокумента <= ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
    ТОГДА РеализацияТоваровУслуг.СуммаДокумента
    ИНАЧЕ ЗаказПокупателя.СуммаДокумента
    КОНЕЦ) КАК СуммаДокумента
    ПОМЕСТИТЬ ВТ_Сумма
    ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    СУММА(РеализацияТоваровУслуг.СуммаДокумента)
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
    РеализацияТоваровУслуг.Сделка = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
    И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ВТ_Сумма.СуммаДокумента) КАК СуммаДокумента
    ИЗ
    ВТ_Сумма КАК ВТ_Сумма
```
---
Цель получить за промежуток времени все связки Заказов+Реализации по контрагенту.
Но есть ньюансы, у заказа может быть несколько реализации.
И Реализация может быть без заказа.

Ваш запрос подходит разве под это ?
---
если добавить условие на контрагента, то да, подходит. Только учтите, что реализации без заказа будут отобраны только за тот же период.
---
Сейчас затестирую.
---
и еще. Сумма будет не правильная. Я выбирал сумму по начальному алгоритму.
Наверно все же сумма должна браться по другому.
---
Вот! Собственно как и интересует меня)
---
скорее всего тут:
КОГДА ЗаказПокупателя.СуммаДокумента <= ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
Нужно поменять на
КОГДА ЗаказПокупателя.СуммаДокумента > ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
---
Вроде проверил. Сумма та. Почему вы сомневаетесь?
---
если сумма заказа меньше суммы реализации и брать сумму реализации, то сумма будет больше суммы заказа.
Скорее всего такой ситуации просто не возникает, от этого и сумма сходится.
---
если сумма заказа меньше суммы реализации и брать сумму реализации, то сумма будет больше суммы заказа.

Но это как раз так и правильно. Мне нужно всегда брать большую сумму заказа или реализации по сути.
---
тогда нормально. Я же сразу сказал: не совсем понятна конечная цель.
---
Благодарю Вас.
Завтра пущу в работу, если всё ок поступит от пользователей, то мани ваши )
---
И кстати, условие по контрагенту же на все реализации и заказы необходимо поставить ?
ну тоесть при объединение - в 1 подзапросе на реализацию и заказ и во 2ом подзапросе на реализацию.
---
да. в обоих подзапросах в объединении.
В 1 подзапросе достаточно на заказ. Реализация по ссылке подтянется.
---
Забавно, сейчас снова тестил, только уже в коде в обработке проведения заказа.
По контрагенту вообще нету ни заказов ни реализации за период.
Но на выходе сумма из запроса выходит Та которая указана в текущемдокументе ( СуммаДокумента),который пытаюсь провести.
То есть программа уже учитывает эту сумму хотя ещё не провёл? Или в чем дело не пойму.
---
учитывается все записанные документы. Для отбора только проведенных нужно добавить условие что Проведен.
---
Да.Путём анализа уже понял это :)

Значит и на реализации и на заказ что проведен снова же в обоих подразпросах ?
---
да, если нужны только проведенные.
---
И вернусь в итоге к тому, что будет null. В принципе это и была изначальная проблема

Или достаточно в конце на сумму проверку на null Добавить?
---
вот итоговый запрос. Что не так?

```1c
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ЗаказПокупателя.СуммаДокумента <= ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
    ТОГДА ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0)
    ИНАЧЕ ЗаказПокупателя.СуммаДокумента
    КОНЕЦ) КАК СуммаДокумента
    ПОМЕСТИТЬ ВТ_Сумма
    ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
    И (РеализацияТоваровУслуг.Проведен)
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЗаказПокупателя.Контрагент = &Контрагент
    И ЗаказПокупателя.Проведен

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    СУММА(РеализацияТоваровУслуг.СуммаДокумента)
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
    РеализацияТоваровУслуг.Сделка = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
    И РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И РеализацияТоваровУслуг.Контрагент = &Контрагент
    И РеализацияТоваровУслуг.Проведен
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    СУММА(ВТ_Сумма.СуммаДокумента) КАК СуммаДокумента
    ИЗ
    ВТ_Сумма КАК ВТ_Сумма
```
---
Моя ошибка. Извините.
В первом подзапросе сделал проведен на реализацию тоже.
Пойду ка спать, утро вечера мудренее.
---
Взял этот Ваш запрос.
По контрагенту ничего нету за период:
1) Запустил в консоль - вывело null
2) В коде прошёл отладчиком - вывело суммудокумента который пытаюсь провести.

Почему так ?

ну во первых естьnull выходит не отрабатывает вовсе почему то.
а во вторых откуда берётся сумма ума не приложу
1с бредит ?
---
это в обработчике проведения. Отладчик дополнительно вычисляет из транзакции.
---
И как то исправить ? Запрос в точь точь такой же,параметры те же.

Делаю
Результат = Запрос.Выполнить.Выбрать();

Если Результат.Следующий() Тогда
 СуммаЗаПериод = Результат.СуммаПоДокументу;
конецесли

и в суммезапериод берётся текущая сумма документа...
---
самый простой способ в запрос добавить условие:

```1c
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ЗаказПокупателя.Контрагент = &Контрагент
    И ЗаказПокупателя.Проведен
    И НЕ ЗаказПокупателя.Ссылка = &Заказ
```

И передавать текущую ссылку заказа. Но это только в обработке проведения заказа.
---
Уже пробую.
Но почему так, интересно стало прямо. Ответа не нашёл.
А если перепроведение будет с другой суммой ?
---
если будет перепроведение, то любая сумма не будет учитываться из этого заказа.
---
Может у меня база багнутая какая то ? У Вас нету случайно тестовой ут 10 ? хотя это уже нагло с моей стороны )
---
Вопрос появился. Сейчас учитываются Заказы без реализации. Как это исключить ? Только Связки Заказ-Реализация по условию и Реализация без заказа.
---
можно использовать внутреннее соединение вместо левого
---
В первом запросе когда связываю заказы и реализации ?
Не помогает.. Вообще там же связь по Реализация.Проведен = Истина стоит. Странно почему так.

Может достаточно в первом подзапросе в условиях сделать Реализация.Проведен. Или это тоже самое в связях ?
---
Добавил на ЕСТЬNULL(СуммаДокумента,0) в итоговом запросе.

Создал заказ на 5000. Сумма вышла 0. Всё ок - провелось.
Создал ещё один заказ на 2000 по этому контрагенту. Сумма снова 0.
Что за чертовщина )
---
А подскажите зачем объединение делается ?
---
добавить реализации без заказа
---
Попробуй сразу при левом соединении проверять на нул и вместо него выводить ноль:

```1c
    СУММА(ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента,0))
```

ЕСТЬNULL(<Выражение>, <Выражение>)
---
Пробовал, тоже криво выводит.
---
NULL - это ничто. Он имеет право бывать в поле любого типа в результате любого внешнего соединения таблиц (левого, правого, полного). Он не бывает при внутреннем соединении и при перемножении таблиц.

Попробуйте первый запрос пакета так записать:

```1c
    ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК Заказ,
    ISNULL(ЗаказПокупателя.СуммаДокумента, 0) КАК СуммаЗаказов,
    СУММА( ISNULL(РеализацияТоваровУслуг.СуммаДокумента, 0) ) КАК СуммаРеализации
    ПОМЕСТИТЬ ЗаказыРеализации
    ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПО ЗаказПокупателя.Ссылка = РеализацияТоваровУслуг.Сделка
    ГДЕ
    ЗаказПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ЗаказПокупателя.Контрагент = &Контрагент
    И ЗаказПокупателя.Проведен = ИСТИНА
    СГРУППИРОВАТЬ ПО
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.СуммаДокумента
    ИНДЕКСИРОВАТЬ ПО
    Заказ
    ;
```
---
Как то так:

```1c
    ВЫБРАТЬ
    ЕСТЬNULL(ЗаказПокупателя.Контрагент, РеализацияТоваровУслуг.Контрагент) КАК Контрагент,
    ЕСТЬNULL(ЗаказПокупателя.Ссылка, "Нет заказа") КАК Заказ,
    ЕСТЬNULL(ЗаказПокупателя.СуммаДокумента, 0) КАК СуммаЗаказа,
    ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка, "Нет рту") КАК РТУ,
    ЕСТЬNULL(РеализацияТоваровУслуг.СуммаДокумента, 0) КАК СуммаДокументаРТУ
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
    ПО РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка
    ГДЕ
    ЕСТЬNULL(ЗаказПокупателя.Контрагент, РеализацияТоваровУслуг.Контрагент) = &Контрагент
```
---
А что думаете о (9) в посте ?
---
По оптимальности или о чем именно?
Если задачу решает то можно использовать... я все условия не прописывал в своем. Как больше нравится...
Суть была еще в первом моем посте
ЕСТЬNULL(<Выражение>, <Выражение>)
А дальше соединяйте как надо.