|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
Новичок_1С
06.04.21
✎
08:07
|
Добрый день.
Подскажите пожалуйста как сделать запрос. Есть две таблицы, первая это заявки контрагентов, вторая акты исполнения заявок. Упрощу структуру таблицы, для наглядности. В обоих таблицах два поля: Контрагент и дата. На выходе запроса необходимо иметь три колонки: Контрагент, дата заявка, дата акта. Причем Дата акта должна быть старше даты заявки, но не старше следующей даты заявки. Пример: Заявки а 01.01.20 а 03.02.20 б 05.02.20 акты а 01.01.20 а 02.01.20 а 04.01.20 б 03.02.20 б 06.02.20 Запрос а 01.01.20 02.01.20 а 03.02.20 04.01.20 б 05.02.20 06.02.20 Пробовал вложенный запрос с условием где заявка.Дата > ВложенныйЗапрос.акты.дата Так не получается, выводятся все даты актов. |
|||
1
Новичок_1С
06.04.21
✎
08:41
|
Уточню. Запрос для СКД, может быть можно средствами СКД сделать что-то ?
|
|||
2
Vadim_37
06.04.21
✎
08:45
|
а 03.02.20 04.01.20 - что-то по условию задачи не сходится
|
|||
3
Vadim_37
06.04.21
✎
08:46
|
а акт от 02.01 от какой заявки?
|
|||
4
JeHer
06.04.21
✎
08:56
|
Не проще связать Акт с Заявкой?
|
|||
5
kobzon2
06.04.21
✎
09:02
|
Реально, лучше поменять систему и создавать акты на основании заявки, чем городить вот это вот всё.
|
|||
6
Новичок_1С
06.04.21
✎
09:15
|
(2) (3) (4) Дело в том, что не всегда акт делается на основании заявки. Акт может быть создан по другим причинам.
|
|||
7
Dmitrii
гуру
06.04.21
✎
09:15
|
Сильно подозреваю, что речь идёт о выполнении тестового задания.
Для реально работающей системы подобная постановка задачи - бред и ахинея. Слишком много неоднозначностей появляется как только между двумя заявками вдруг встретится несколько актов или наоборот - несколько заявок подряд и только один акт после них (дата акта > даты всех заявок). |
|||
8
Dmitrii
гуру
06.04.21
✎
09:18
|
(6) >> Акт может быть создан по другим причинам.
И что? Либо этот акт относится к какой-либо из заявок, либо нет. Если это неизвестно в момент создания акта, то кто-то должен указать эту связь тогда, когда информация станет известной. В противном случае вы получите кашу из данных, где сопоставление актов заявкам основано на ложных предпосылках - см (7). |
|||
9
arsik
гуру
06.04.21
✎
09:18
|
Тебе просто таблицу
а 01.01.20 а 03.02.20 б 05.02.20 Нужно превратить в а 01.01.20 - 02.02.20 а 03.02.20 - 01.01.99 б 05.02.20 - 01.01.99 |
|||
10
Dmitrii
гуру
06.04.21
✎
09:24
|
(6) >> Акт может быть создан по другим причинам.
Кстати если в системе есть акты, вообще не относящиеся к заявкам, то отчет тем более превращается в ахинею, т.к. он не знает - какие акты надо полностью исключить, как выполненные вне заявок. |
|||
11
d4rkmesa
06.04.21
✎
09:30
|
(9) а 03.02.20 - 01.01.99
б 05.02.20 - 01.01.99 А почему правая граница именно 01.01.99? |
|||
12
fisher
06.04.21
✎
09:30
|
Что-то типа такого:
ВЫБРАТЬ ПериодыЗаявок.Контрагент, ПериодыЗаявок.ДатаЗаявки, ЕСТЬNULL(Акты.Дата, ДАТАВРЕМЯ(1,1,1)) КАК ДатаАкта ИЗ (ВЫБРАТЬ З1.Контрагент, З1.Дата КАК ДатаЗаявки, МИНИМУМ(З2.Дата) КАК ДатаСледующейЗаявки ИЗ Заявки КАК З1 ЛЕВОЕ СОЕДИНЕНИЕ Заявки КАК З2 ПО З1.Контрагент = З2.Контрагент И З1.Дата < З2.Дата СГРУППИРОВАТЬ ПО З1.Контрагент, З1.Дата) КАК ПериодыЗаявок ЛЕВОЕ СОЕДИНЕНИЕ Акты ПО ПериодыЗаявок.Контрагент = Акты.Контрагент И Акты.Дата >= ПериодыЗаявок.ДатаЗаявки И Акты.Дата < ПериодыЗаявок.ДатаСледующейЗаявки |
|||
13
fisher
06.04.21
✎
09:38
|
(12) + Нужно еще поправить для случая последней заявки. Будет домашним заданием.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |