Вход | Регистрация
 
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
(2) (3) (4) Дело в том, что не всегда акт делается на основании заявки. Акт может быть создан по другим причинам.
   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) + Нужно еще поправить для случая последней заявки. Будет домашним заданием.

Список тем форума
 
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.