Имя: Пароль:
1C
1С v8
СКД проверка наличия дока
0 Mr Elidan
 
10.08.16
14:24
УПП 8.2
Делаю обработку, которая на основании реализации/поступления делает ПланируемоеПоступлениеДенежСредств/ЗаявкаНаРасходованиеДенежСредств, все круто, обработка делает доки как надо, а вот в запросе касяк, и у меня умер мозг найти ошибку.

Нужно что бы в запросе проверялся:
1) Есть ли связь поступления с заявкой
             если нет, то находим док поступления
             если есть, то след условие
2) Есть ли проведенные заявки
             Нет? находим док поступления
             Есть? ничего не находим.

Криво конечно объяснил, но закипел...

вот код

ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка КАК Поступление,
    ЗаявкаНаРасходованиеСредств.Ссылка
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств КАК ЗаявкаНаРасходованиеСредств
        ПО ПоступлениеТоваровУслуг.Ссылка = ЗаявкаНаРасходованиеСредств.ДокументОснование
ГДЕ
    ПоступлениеТоваровУслуг.ПометкаУдаления = ЛОЖЬ
    И ПоступлениеТоваровУслуг.Проведен = ИСТИНА
    И ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)
    И ПоступлениеТоваровУслуг.Организация В(&Организация)
    И ПоступлениеТоваровУслуг.Контрагент В ИЕРАРХИИ(&Контрагент)
    И ВЫБОР
            КОГДА ЗаявкаНаРасходованиеСредств.Проведен = ИСТИНА
                ТОГДА ПоступлениеТоваровУслуг.Ссылка = НЕОПРЕДЕЛЕНО
        КОНЕЦ

СГРУППИРОВАТЬ ПО
    ПоступлениеТоваровУслуг.Ссылка,
    ЗаявкаНаРасходованиеСредств.Ссылка
1 Mr Elidan
 
10.08.16
14:25
Т.е. есть есть хоть один проведенный док заявка, ненаходить ничего.
2 youalex
 
10.08.16
14:35
Условие "ЗаявкаНаРасходованиеСредств.Проведен = ИСТИНА" - в условия соединения
3 aleks_default
 
10.08.16
14:35
Надо найти непроведенные заявки на расход по поступлениям товаров за период?
4 Mr Elidan
 
10.08.16
14:41
(2) Неа, пробовал. Он покажет поступления у которых заявка проведена, а нужно - (2) (3)   если хоть одна заявка по поступлению проведена, то это поступление не показывай.
5 Mr Elidan
 
10.08.16
14:42
всю обсурдность я пытался, в последний раз в условии, описать так:

ВЫБОР
            КОГДА ЗаявкаНаРасходованиеСредств.Проведен = ИСТИНА
                ТОГДА ПоступлениеТоваровУслуг.Ссылка = НЕОПРЕДЕЛЕНО
        КОНЕЦ
6 aleks_default
 
10.08.16
14:46
(4) в условие просто
НЕ ЗаявкаНаРасходованиеСредств.Проведен или ЗаявкаНаРасходованиеСредств.Ссылка is Null
7 Mr Elidan
 
10.08.16
14:51
(6) Не прокнуло, ибо он все равно находит поступления не проведенные. А нужно если есть ХОТЬ 1 проведенный док заявки не находить поступление.


Вот смотри, у тебя есть 2 дока заявки 1 проведен, другой нет, твоим условием он найдет не проведенный док. А тебе нужно что бы в этом случае ничего не нашел.
8 Mr Elidan
 
10.08.16
14:54
(7)  это была 1 ситуация

2 ситуация
есть 2 дока заявки, обе не проведенные, запрос должен найти док поступления

3 ситуация
нет ни одного дока, находим док поступления.
9 Mr Elidan
 
10.08.16
14:54
(8) (7)  и все это должно работать вместе.
10 Mr Elidan
 
10.08.16
14:55
Не слишком запутанно получилось?
11 aleks_default
 
10.08.16
14:56
(7) ну тогда делаешь поле МАКСИМУМ(ВЫБОР КОГДА ЗаявкаНаРасходованиеСредств.Проведен тогда 1 иначе 0 КОНЕЦ)

и условие

ИМЕЮЩИЕ
МАКСИМУМ(ВЫБОР КОГДА ЗаявкаНаРасходованиеСредств.Проведен тогда 0 иначе 1 КОНЕЦ) = 1
12 aleks_default
 
10.08.16
14:57
(11)+ исправь вверху тока условие
13 youalex
 
10.08.16
15:00
(4) тады два соединения с таблицей :
- первое с условием на ЗаявкаНаРасходованиеСредств.Проведен

- второе - без этого условия

+ в  ГДЕ - ЗаявкаНаРасходованиеСредств.Ссылка is null
14 youalex
 
10.08.16
15:04
(13) +
ВЫБРАТЬ
    ПоступлениеТоваровУслуг.Ссылка, Заявка.Ссылка
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств КАК ЗаявкаПроведен
        ПО ПоступлениеТоваровУслуг.Ссылка = ЗаявкаПроведен.ДокументОснование
            И (ЗаявкаПроведен.Проведен)
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств КАК Заявка
        ПО ПоступлениеТоваровУслуг.Ссылка = Заявка.ДокументОснование        
ГДЕ
    ЗаявкаПроведен.Ссылка ЕСТЬ NULL
15 Mr Elidan
 
10.08.16
15:17
(11) и он покажет док поступление по которому есть проведенная заявка.
16 aleks_default
 
10.08.16
15:19
(15) ты пробовал?
17 Mr Elidan
 
10.08.16
15:23
(16) Да, спасибо за помощь)

(14) Твой код прокнул, спасибо!
18 Mr Elidan
 
10.08.16
15:28
(14) только в чем подвох твоего запроса....... не понимаю...
19 youalex
 
10.08.16
15:46
(18)
По смыслу тоже самое, если бы ты сначала в вт залил все поступления, по которым нет проведенных заявок, так же через Левое Соединение, и условие is null
А потом уже к этой вт - цеплял все Заявки.

То есть - условие ЗаявкаПроведен.Ссылка ЕСТЬ NULL - оно фильтрует результат первого соединения на предмет наличия проведенных заявок.
Потом - к уже отфильтрованному соединению - снова цепляется та же таблица (проведенных там нет по условию)
20 aleks_default
 
10.08.16
16:01
(17) Вы ребята обдолбанные? это почему тогда (6) не подходит?
21 youalex
 
10.08.16
16:07
(20) ну сам смоделируй ситуацию и помедитируй над ней.
22 youalex
 
10.08.16
16:08
(21) + ситуацию, когда на одно поступление есть и проведенная, и непроведенная заявка.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс