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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.