Имя: Пароль:
1C
1C 7.7
v7: неопределенный вид документа в пречерном запросе
,
0 Злопчинский
 
06.08.13
19:24
есть документ, дРегистратор (ТЧ - товар, количество), в нем есть реквизит ДокОснование - тип = Документ.
ДокОснованием может быть Документ.Реализация.
.
как чорным запросом вытянуть состав ТЧ дРегистратор, для которых выполняется условие Контрагент Реализации = выбКонтрагент.
.
не получается!
спсб.
1 Тьма
 
06.08.13
19:35
Внешняя функция в условии не?
2 Злопчинский
 
06.08.13
19:47
можно и так...
3 Dolly_EV
 
07.08.13
12:03
(0) прямой запрос не предлагать?
4 Dolly_EV
 
07.08.13
12:28
таки предложу:
        лТекстЗапроса = "
        |ВЫБРАТЬ
        |    $дРегистраторТЧ.Товар КАК [Товар $Справочник.Номенклатура]
        |    ,$дРегистраторТЧ.Количество КАК Кво
        |ИЗ
        |    ДокументСтроки.дРегистратор КАК дРегистраторТЧ $nolock
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    ЖурналДокументов КАК Жур $nolock
        |ПО $дРегистраторТЧ.ТекущийДокумент=$Жур.ТекущийДокумент
        |    И $Жур.Проведен=1
        |    И $Жур.ДатаДокумента МЕЖДУ :лНачДата И :лКонДата~
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Документ.дРегистратор КАК дРегистратор $nolock
        |ПО $дРегистраторТЧ.ТекущийДокумент=$дРегистратор.ТекущийДокумент
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Документ.Реализация КАК Реализация $nolock
        |ПО ПРАВО($дРегистратор.ДокОснование,9)=$Реализация.ТекущийДокумент
        |    И $Реализация.Контрагент=:выбКонтрагент
        |СГРУППИРОВАТЬ
        |    $дРегистраторТЧ.Товар,$дРегистраторТЧ.Количество";
5 Злопчинский
 
07.08.13
14:17
скопипастил, разбираться на будущее,
спсб!
6 Ёпрст
 
07.08.13
14:24
(0) наслаждайся

|ДокОснование = Документ.дРегистратор.ДокОснование;  
|Условие((ДокОснование.Вид()=""Реализация"") и (Док.Контрагент в ВыбКонтрагент));
7 Dolly_EV
 
07.08.13
15:24
Я после прямых запросов теперь вообще не могу понять логики "чорных":-)) ужас!
8 Злопчинский
 
07.08.13
18:52
(7) я тоже, поэтому чорные запросы  пишу просто.
9 Злопчинский
 
07.08.13
18:52
(6) ууу. мне надо чтобы
докОнсование.Контрагент = выбконтрагент
10 Dolly_EV
 
08.08.13
05:44
(9) походу никак... ПРАВО($дРегистратор.ДокОснование,9) в чорном запросе не напишешь..
так возьми (4) и попробуй уже!
11 Dolly_EV
 
08.08.13
05:49
может так?

Функция лПроверкаКонтра(п_Док)
    Если п_Док.Вид()="Реализация" Тогда
        Если п_Док.Контрагент=ВыбКонтрагент Тогда
            Возврат 1;
        Иначе
            Возврат 0;
        КонецЕсли;
    Иначе
        Возврат 0;
    КонецЕсли
КонецФункции
...
|ДокОснование = Документ.дРегистратор.ДокОснование;  
|Условие((ДокОснование.Вид()=""Реализация"") и (лПроверкаКонтра(ДокОснование)=1);
12 ЧеловекДуши
 
08.08.13
06:16
(7) Аналогично :)
Но если опустить логику SQL и вернуться к то му времени, когда я постигал FoxPro по команде "Hello World!"...
То все встает на места, логика там до противности детсадовская :)
13 Ёпрст
 
08.08.13
08:36
(9) это оно и есть.
14 Ёпрст
 
08.08.13
08:36
просто ошибка в синтаксисе

|ДокОснование = Документ.дРегистратор.ДокОснование;  
|Условие((ДокОснование.Вид()=""Реализация"") и (ДокОснование.Контрагент в ВыбКонтрагент));
15 Ёпрст
 
08.08.13
08:36
и не надо там никаких функций.
16 Ёпрст
 
08.08.13
08:37
условия в запросе проверяются по сокращенному варианту, если первое ложь, то второе уже не проверяется. Как в снеговике.
17 ЧеловекДуши
 
08.08.13
13:12
(16) Ты уверен?
В обычном "Если <?> Тогда" выполняются все условия в независимости от результата :)
18 Ёпрст
 
08.08.13
13:27
(17) да.
19 ЧеловекДуши
 
08.08.13
13:59
(18) Спасибо :)
20 Ёпрст
 
08.08.13
14:03
(19) можешь сам проверить..

так, например

Функция МояФункция1(парам)
сообщить("работает первая");
  возврат 0;
КонецФункции
Функция МояФункция2(парам)
сообщить("работает вторая");
  возврат 1;
КонецФункции

|Условие(МояФункция1(ПеремЗапроса)=1 и (МояФункция2(ПеремЗапроса)=1));
21 Злопчинский
 
08.08.13
22:30
читаю.
22 Ёпрст
 
09.08.13
09:14
(21) делай, а не читай - солнце еще высоко!
23 Злопчинский
 
09.08.13
20:34
(220 я плачу...