Доброго дня!
Проблема такая, делаю отчет, на скд, необходимо по бизнес процессу создать отчет. В отчете есть поле: ДатаПоступления.
Это вычисляемое поле. Вот так оно вычисляется: В БП есть поле ПлановыйСрок(тут указываются дни, 10,11 и тд) и есть дата задачи.
Эта ДатаПОступления = ДАтаЗадачи+ПлановыйСрок. Проблема в том что на определенно точке маршрута создается задача(тут и заполняется этот ПЛАНОВЫЙ СРОК). Я взял БП, Взял задачу по ней, связал их левым соединением(полным не вариант, потому что тогда выводится все задачи по БП, и получатеся тупо одна и таже строка выводится много раз), задал задаче параметр что точка маршрута = тойточкекотораямненужна. Все хорошо, все работает. Но проблема в том что отчет выводит только те процессы, в которых есть эта задача. Он не выводит те процессы в которых карта маршрута не дошла до этой точки маршрута. Всего БП 236. из них только в 88 есть задача(напомню из этой задачи мне нужна дата ее создания для того чтобы вычислить ДАТуПоступления). Сейчас у меня запрос выводит 88 записей. а надо чтобы он выводил все 236. и если где-то такоц задачи нет, то просто чтоб поле ДатаПоступления было пустым.
Прошу помощи)

Запрос.

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

```1c
    ...
    ИЗ
    БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
    ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
    И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
```
---
Еще одно соединение.

UPD. Все это конечно при условии, что на Ваши выбираемые точки БП приходится всегда по одной задаче.
---
Накладывая условие на поля подчиненной таблицы Вы из ЛЕВОГО соединения делаете ВНУТРЕННЕЕ. Так работает платформа.

Перенесите условие из секции ГДЕ в условие связи таблиц.
---
а как это сделать? ГДЕ поместить в ПО?
---
Буквально:

```1c
    ...
    ИЗ
    БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
    ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
    И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
```
---
Сейчас попробую
---
Условием соединения таблиц может быть произвольное выражение любой сложности. Главное, чтобы оно булево возвращало. Простые условия на равенство просто чаще всего используются, так как обычно отражают естественные связи таблиц и максимально производительны.
---
Спасибо, работает, но количество записей стало 255, должно было быть(по идее), 236. С чем это может быть связано?
---
Очевидных ошибок не вижу, к сожалению.
---
В любом случае спасибо!
Просто брал запросом только записи из бп, было 236, прибавил к ним задачу, стало 255))
---
Быть может Вы выбирали не продукцию, а сами БП?
---
Нет, самих БП вообще 189, я выбирал именно продукцию.
---
Тогда единственное мое предположение, что на некоторые бизнес-процессы таки приходится по несколько задач. Может помеченные на удаление еще есть?
---
ДА. Вы правы, по точке маршрута в некоторых случаях, похоже, после выполнения задачи, если кто-то там отклоняет следующую, то задача опять идет на ту точку, которую я получаю, тогда да, записи плодятся. Даже не представляю как это решить, выбрать первые 1 может? с упорядочиванием по дате убыв?
---
Быть может есть какой-то признак, по которому можно отбирать нужные задачи, например "Выполнена"? Скажем, если только одна задача для точки БП в один момент может быть выполнена, то это условие также можно добавить в условия связи:

```1c
    ...
    ИЗ
    БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
    ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
    И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
    И УниверсальнаяЗадача.Выполнена
```
---
Так в том то и дело что может быть две задачи и оба выполнены, и тогда будет дубль записей.
Может как-то можно с временными таблицами?
Потому что все я уже сделал, все как надо, но записи дублируются, а в отчете есть важные показатели, и они неверные.
---
А как заполняется в задачах нужная Вам дата? Если есть 2 выполненные задачи, то как выбрать дату задачи для результирующего запроса?
---
Дата автоматическая при создании задачи. Я решил данную проблему группировкой по максимуму, теперь выбирается максимальная дата, и она одна, соответственно записи не дублируются
UPD. Если есть 2 выполненные задачи, то как выбрать дату задачи для результирующего запроса? Надо было выбрать самую последнюю дату. ну в смысле если есть 01.01.0001 и 02.01.0001 то выбрать 02.01.0001))
---
Только еще нужно
указать
ЕСТЬNULL(УниверсальнаяЗадача.Дата,"-") КАК ДатаЗадачи

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

```1c
    ...
    ИЗ
    БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
    ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
    И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
```

Надо добавить еще одну точку, то есть если она есть, ее дата тоже нужна.
если прибавить сюда И (УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута ИЛИ УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута2)
То тогда записии плодятся. В итоге неверное вычисляются суммы. Так вот, как взять дату задачи другой точки маршрута, не плодя записи?
---
Еще одно соединение.

UPD. Все это конечно при условии, что на Ваши выбираемые точки БП приходится всегда по одной задаче.
---
Да, всегда одна задача.
Не получается че то у меня))

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

есть в запросе строчка: УниверсальнаяЗадача.Дата КАК ДатаЗадачи(тут дата задачи &точкимаршрута)
А мне надо отдельной колнкой дату где УниверсальнаяЗадача.Дата КАК ДатаЗадачи1(тут дата задачи &точкимаршрута1)
а он мне сует все в одну дату, из за чего плодятся записи.
---
Вы запутались в псевдонимах присоединяемых таблиц.
---
Я так написал потому что он ругается на то что одинаковый псевдоним
---
Тут все верно. А вот в условиях связи со второй таблицей задач используется псевдоним первой.
---
(27)Получилось вот так: и еще надо было задачу брать второй раз, а я брал один раз.

```1c
    ВЫБРАТЬ
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор КАК Автор,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Номер КАК Номер,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Дата КАК Дата,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Номенклатура КАК Номенклатура,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Количество КАК Количество,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаПредыдущейЗакупки КАК ЦенаПредыдущейЗакупки,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.СуммаИнициатор КАК СуммаИнициатор,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаСНДС КАК ЦенаСНДС,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Сумма КАК Сумма,
    УниверсальнаяЗадача.Дата КАК ДатаЗадачи,
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
    УниверсальнаяЗадача1.Дата КАК ДатаБУХ
    ИЗ
    БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
    ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс)
    И (УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута)
    ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача1
    ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача1.БизнесПроцесс)
    И (УниверсальнаяЗадача1.ТочкаМаршрута = &ТочкаМаршрута1)
    ГДЕ
    ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор = &Автор
```
---
Вы получите 2 даты вместо одной! И к какой потом прибавлять?
 При ОБЪЕДИНЕНИИ у вас бы все было более корректно.
Там будет точно одна дата, и не будет проблемы с выбором к чему прибавлять
---
так мне надо две даты двух разных точек маршрута. Это как плановая дата и факктическая дата.
---
Примените лучше в запросе обединение 2 частей с разными точками..
ОБЪЕДИНИТЬ
---
ТАк?

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

Возможно вам понадобится....