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