Как правильно связать две таблицы в запросе?
Доброго дня!
Проблема такая, делаю отчет, на скд, необходимо по бизнес процессу создать отчет. В отчете есть поле: ДатаПоступления.
Это вычисляемое поле. Вот так оно вычисляется: В БП есть поле ПлановыйСрок(тут указываются дни, 10,11 и тд) и есть дата задачи.
Эта ДатаПОступления = ДАтаЗадачи+ПлановыйСрок. Проблема в том что на определенно точке маршрута создается задача(тут и заполняется этот ПЛАНОВЫЙ СРОК). Я взял БП, Взял задачу по ней, связал их левым соединением(полным не вариант, потому что тогда выводится все задачи по БП, и получатеся тупо одна и таже строка выводится много раз), задал задаче параметр что точка маршрута = тойточкекотораямненужна. Все хорошо, все работает. Но проблема в том что отчет выводит только те процессы, в которых есть эта задача. Он не выводит те процессы в которых карта маршрута не дошла до этой точки маршрута. Всего БП 236. из них только в 88 есть задача(напомню из этой задачи мне нужна дата ее создания для того чтобы вычислить ДАТуПоступления). Сейчас у меня запрос выводит 88 записей. а надо чтобы он выводил все 236. и если где-то такоц задачи нет, то просто чтоб поле ДатаПоступления было пустым.
Прошу помощи)
Запрос.
Проблема такая, делаю отчет, на скд, необходимо по бизнес процессу создать отчет. В отчете есть поле: ДатаПоступления.
Это вычисляемое поле. Вот так оно вычисляется: В БП есть поле ПлановыйСрок(тут указываются дни, 10,11 и тд) и есть дата задачи.
Эта ДатаПОступления = ДАтаЗадачи+ПлановыйСрок. Проблема в том что на определенно точке маршрута создается задача(тут и заполняется этот ПЛАНОВЫЙ СРОК). Я взял БП, Взял задачу по ней, связал их левым соединением(полным не вариант, потому что тогда выводится все задачи по БП, и получатеся тупо одна и таже строка выводится много раз), задал задаче параметр что точка маршрута = тойточкекотораямненужна. Все хорошо, все работает. Но проблема в том что отчет выводит только те процессы, в которых есть эта задача. Он не выводит те процессы в которых карта маршрута не дошла до этой точки маршрута. Всего БП 236. из них только в 88 есть задача(напомню из этой задачи мне нужна дата ее создания для того чтобы вычислить ДАТуПоступления). Сейчас у меня запрос выводит 88 записей. а надо чтобы он выводил все 236. и если где-то такоц задачи нет, то просто чтоб поле ДатаПоступления было пустым.
Прошу помощи)
Запрос.
ВЫБРАТЬ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Номер,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Дата,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Номенклатура,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Количество,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаПредыдущейЗакупки,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.СуммаИнициатор КАК СуммаИнициатор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаСНДС,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Сумма КАК Сумма,
УниверсальнаяЗадача.Дата КАК ДатаЗадачи,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПлановаяДатаПоставки
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
ГДЕ
УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
ПоказатьПо теме из базы знаний
Найденные решения
(3) Буквально:
...
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Буквально:
...
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
(5) Условием соединения таблиц может быть произвольное выражение любой сложности. Главное, чтобы оно булево возвращало. Простые условия на равенство просто чаще всего используются, так как обычно отражают естественные связи таблиц и максимально производительны.
(23)ДА. Вы правы, по точке маршрута в некоторых случаях, похоже, после выполнения задачи, если кто-то там отклоняет следующую, то задача опять идет на ту точку, которую я получаю, тогда да, записи плодятся. Даже не представляю как это решить, выбрать первые 1 может? с упорядочиванием по дате убыв?
(26) Быть может есть какой-то признак, по которому можно отбирать нужные задачи, например "Выполнена"? Скажем, если только одна задача для точки БП в один момент может быть выполнена, то это условие также можно добавить в условия связи:
...
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
И УниверсальнаяЗадача.Выполнена
(33)Дата автоматическая при создании задачи. Я решил данную проблему группировкой по максимуму, теперь выбирается максимальная дата, и она одна, соответственно записи не дублируются
UPD.
UPD.
Если есть 2 выполненные задачи, то как выбрать дату задачи для результирующего запроса?
Надо было выбрать самую последнюю дату. ну в смысле если есть 01.01.0001 и 02.01.0001 то выбрать 02.01.0001))
(8) Не согласен, что это нужно. Видите ли, автор к дате задачи прибавляет срок. Если оставить NULL, результат сложения будет также NULL, что можно интерпретировать, как отсутствие даты поступления. Если привести установить "-" получим строку, например "-5", что вообще не похоже на дату поступления. Если зададим пустую дату, то получим дату поступления как "05.01.0001", что также некорректно.
(11)
Прошу прощения, в описании использовал некорректную операцию. Действительно, здесь требуется не сложение, а функция "ДобавитьКДате". Однако применительно к этой функции все мои рассуждения верны: ошибки не будет, результат будет равен NULL.
ДАтаЗадачи+ПлановыйСрок
Прошу прощения, в описании использовал некорректную операцию. Действительно, здесь требуется не сложение, а функция "ДобавитьКДате". Однако применительно к этой функции все мои рассуждения верны: ошибки не будет, результат будет равен NULL.
(14)НУ это да, прибавить к дате(ДатаЗадач, "ДЕНЬ", ПланвоыйСрок) так я делал.
А еще вопрос, вот тут:
Надо добавить еще одну точку, то есть если она есть, ее дата тоже нужна.
если прибавить сюда И (УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута ИЛИ УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута2)
То тогда записии плодятся. В итоге неверное вычисляются суммы. Так вот, как взять дату задачи другой точки маршрута, не плодя записи?
А еще вопрос, вот тут:
...
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута
Надо добавить еще одну точку, то есть если она есть, ее дата тоже нужна.
если прибавить сюда И (УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута ИЛИ УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута2)
То тогда записии плодятся. В итоге неверное вычисляются суммы. Так вот, как взять дату задачи другой точки маршрута, не плодя записи?
(17)Да, всегда одна задача.
Не получается че то у меня))
есть в запросе строчка: УниверсальнаяЗадача.Дата КАК ДатаЗадачи(тут дата задачи &точкимаршрута)
А мне надо отдельной колнкой дату где УниверсальнаяЗадача.Дата КАК ДатаЗадачи1(тут дата задачи &точкимаршрута1)
а он мне сует все в одну дату, из за чего плодятся записи.
Не получается че то у меня))
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута),
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадачаДАта
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута1)
Показатьесть в запросе строчка: УниверсальнаяЗадача.Дата КАК ДатаЗадачи(тут дата задачи &точкимаршрута)
А мне надо отдельной колнкой дату где УниверсальнаяЗадача.Дата КАК ДатаЗадачи1(тут дата задачи &точкимаршрута1)
а он мне сует все в одну дату, из за чего плодятся записи.
(25)(27)Получилось вот так: и еще надо было задачу брать второй раз, а я брал один раз.
ВЫБРАТЬ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор КАК Автор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Номер КАК Номер,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Дата КАК Дата,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Номенклатура КАК Номенклатура,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Количество КАК Количество,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаПредыдущейЗакупки КАК ЦенаПредыдущейЗакупки,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.СуммаИнициатор КАК СуммаИнициатор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаСНДС КАК ЦенаСНДС,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Сумма КАК Сумма,
УниверсальнаяЗадача.Дата КАК ДатаЗадачи,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
УниверсальнаяЗадача1.Дата КАК ДатаБУХ
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс)
И (УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута)
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача1
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача1.БизнесПроцесс)
И (УниверсальнаяЗадача1.ТочкаМаршрута = &ТочкаМаршрута1)
ГДЕ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор = &Автор
Показать
(18)
ТАк?
ТАк?
ВЫБРАТЬ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор КАК Автор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Номер КАК Номер,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Дата КАК Дата,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Номенклатура КАК Номенклатура,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Количество КАК Количество,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаПредыдущейЗакупки КАК ЦенаПредыдущейЗакупки,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.СуммаИнициатор КАК СуммаИнициатор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаСНДС КАК ЦенаСНДС,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Сумма КАК Сумма,
УниверсальнаяЗадача.Дата КАК ДатаЗадачи,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
УниверсальнаяЗадача.Наименование КАК Наименование
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута)
ГДЕ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПометкаУдаления = ЛОЖЬ
И ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор = &Автор
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор КАК Автор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Номер КАК Номер,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Дата КАК Дата,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Номенклатура КАК Номенклатура,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Количество КАК Количество,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаПредыдущейЗакупки КАК ЦенаПредыдущейЗакупки,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.СуммаИнициатор КАК СуммаИнициатор,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.ЦенаСНДС КАК ЦенаСНДС,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Сумма КАК Сумма,
УниверсальнаяЗадача.Дата КАК ДатаЗадачиБУХ,
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПлановаяДатаПоставки КАК ПлановаяДатаПоставки,
УниверсальнаяЗадача.Наименование КАК Наименование
ИЗ
БизнесПроцесс.ЗакупкиКомпьютернойТехникиИМебели.Продукция КАК ЗакупкиКомпьютернойТехникиИМебелиПродукция
ЛЕВОЕ СОЕДИНЕНИЕ Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
ПО (ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка = УниверсальнаяЗадача.БизнесПроцесс
И УниверсальнаяЗадача.ТочкаМаршрута = &ТочкаМаршрута1)
ГДЕ
ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.ПометкаУдаления = ЛОЖЬ
И ЗакупкиКомпьютернойТехникиИМебелиПродукция.Ссылка.Автор = &Автор
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот