Имя: Пароль:
1C
 
Не могу найти ошибку в запросе
0 Aleksey
 
08.11.04
20:11
Есть след процедура
Процедура Сформ(ТекстЗапроса, ВЗН, ВКС, ВРаб, ВКодК=0, ВКодР=0)
   ТекстЗапроса = "
   |Без итогов;
   |Владелец = Справочник.ТаблицаМатериалов.Владелец;
   |КС = справочник.ТаблицаМатериалов.кс;
   |Раб = Справочник.ТаблицаМатериалов.Раб;
   |Матер = справочник.ТаблицаМатериалов.Матер;
   |ЕдИзм = справочник.ТаблицаМатериалов.ЕдИзм;
   |Количество = Справочник.ТаблицаМатериалов.Количество;
   |Стоимость = Справочник.ТаблицаМатериалов.Стоимость;
   |КодК = Справочник.ТаблицаМатериалов.КодК;
   |КодР = Справочник.ТаблицаМатериалов.КодР;
   |ТекЭл = Справочник.ТаблицаМатериалов.ТекущийЭлемент;
   |Группировка ТекЭл Без групп;
   |Условие(КС = ВКС);
   |Условие(Раб=ВРаб);
   |Условие(Владелец = ЗН);";
   
   Если (ВКодР<>0) и (ВКодК<>0) Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Условие(КодК=ВКодК);
       |Условие(КодР=ВКодР);";
   КонецЕсли;    
Конецпроцедуры

При выполнении запроса вылезает ошибка

ВКОДК<<?>>
Переменная не определена (ВКОДК)
Если Запрос.Выполнить(ТекстЗапроса) <> 1 Тогда
{Справочник.ЗН.Форма.Модуль(472)}: Условие(КодК=ВКодК <<?>> );
Запрос[17] : Ошибка в выражении 'ВКодК'
ВКОДР<<?>>
Переменная не определена (ВКОДР)
Если Запрос.Выполнить(ТекстЗапроса) <> 1 Тогда
{Справочник.ЗН.Форма.Модуль(472)}: Условие(КодР=ВКодР <<?>> );
Запрос[18] : Ошибка в выражении 'ВКодР'

Уже полчаса ищу в чем проблема но понять не могу никак :((((
1 NiGMa
 
08.11.04
20:20
То есть КС и ВКС работает, а КодК с ВКодК и КодР с ВКодР - не хочет...
А тип-то у них какой? У КС, КодК и КодР?
2 Aleksey
 
08.11.04
20:21
Причем если я напишу вместо

Если (ВКодР<>0) и (ВКодК<>0) Тогда
      ТекстЗапроса=ТекстЗапроса+"
      |Условие(КодК=ВКодК);
      |Условие(КодР=ВКодР);";
  КонецЕсли;    


след
Если (ВКодР<>0) и (ВКодК<>0) Тогда
      ТекстЗапроса=ТекстЗапроса+"
      |Условие(КодК=7);
      |Условие(КодР=4);";
  КонецЕсли;    

то ошибки нет и все ищется
3 Aleksey
 
08.11.04
20:22
КодК и КодР -- Число
4 Aleksey
 
08.11.04
20:24
Смотрю в отладчике

ВкодК = 7
ВКодР = 4
ТипЗначенияСтр(ВКодР) = "Число"
ТипЗначенияСтр(ВКодК) = "Число"
5 Aleksey
 
08.11.04
20:25
То есть КС и ВКС работает, а КодК с ВКодК и КодР с ВКодР - не хочет...

да :(

А тип-то у них какой? У КС, КодК и КодР?
КС -- Справочник
6 NiGMa
 
08.11.04
20:32
Помнится, была в запросе какая-то .опа с числовыми переменными в условиях...

Ну что ж - делай так:
Если ВКодК = 1 Тогда
   ТекстЗапроса=ТекстЗапроса+"
     |Условие(КодК=1);";
ИначеЕсли ВКодК = 2 Тогда
   ТекстЗапроса=ТекстЗапроса+"
     |Условие(КодК=2);";
ИначеЕсли ВКодК = 3 Тогда
   ТекстЗапроса=ТекстЗапроса+"
     |Условие(КодК=3);";
....
КонецЕсли;
-----------------  зато точно сработает...
7 NiGMa
 
08.11.04
20:32
Что-то там было с проебразованием строки в число - или наоборот... какая-то фича ;(
8 aleksey
 
08.11.04
20:33
У меня ВКодК принимает неогранич число значений
9 Aleksey
 
08.11.04
20:33
NiGMa А не вспомнишь подробнее что там было?
10 NiGMa
 
08.11.04
20:41
Да вся беда в том, что текст запроса обрабатывается совсем не так, как текст программы.
Попробуй, что ли, написать
ЛКодР = Число(ВКодР);
и в запросе
|Условие(КодР=ЛКодР);
11 Aleksey
 
08.11.04
22:17
Завтра с утра пораньше попробую.
12 NiGMa
 
08.11.04
22:19
И то. У нас вообще глубокая ночь! (2:17)
13 Aleksey
 
08.11.04
22:21
Хотя это не поможет .Так как у меня уже передаются в процедуру аргумент в виде

ВКодР = Число(ЗапросКР.ТекЭл.Родитель.Код)
Где ЗапросКР это внешний запрос, для каждого элемента которого должен рассчитаываться запрос, который не работает.
14 Aleksey
 
08.11.04
22:23
>И то. У нас вообще глубокая ночь! (2:17)
Это где сейчас глубокая ночь ? :))
15 Aleksey
 
08.11.04
22:28
Кстати насчет
>Что-то там было с проебразованием строки в число - или наоборот... какая-то фича ;(

вспоминаю было такое, но в том случае помогло явное конвертация к числу. Но там не было ошибок при исполнении, там просто ничего в запрос не попадало.

PS Что-то мысли начинают приходить в голову ближе к ночи :)
16 NiGMa
 
08.11.04
22:38
Это да. Я вот вообще сова. Сибирская ;) Красноярские мы, да...
А попробуй - по приколу - в строку преобразовать? Чем черт не шутит... особенно по ночам ;-Q
17 GrayT
 
08.11.04
22:43
(16)Эх-эх. Привет Енисею :)
18 NiGMa
 
08.11.04
22:45
(17) Зачерпнуть, отсканировать, прислать? ;)
19 NiGMa
 
08.11.04
22:52
(17) Уже! Смотри:
http://webcam.kgs.ru/
20 GrayT
 
08.11.04
22:54
(18)Вроде того :)
(0)А может в запросе просто по ангельски несколько букв написал? Попробуй вставкой из формальных парамеров дернуть. Вед синтакс коньроль такую ошибку не кажет
21 GrayT
 
08.11.04
22:56
(19)Класс!!! :)
я 17 лет в Норильске прожил
22 NiGMa
 
08.11.04
22:59
Вот где не бывал... самая северная точка - Туруханск.

(20) да там похитрее закручено... что-то было такое - но не вспомню никак.
Я бы все же для начала попробовал (10).
23 Aleksey
 
08.11.04
23:01
>А может в запросе просто по ангельски несколько букв написал? Попробуй вставкой из формальных парамеров дернуть. Вед синтакс коньроль такую ошибку не кажет

Это было одно из первых, что мне пришло в голову. Так что я все эти ВКолК и ВКолР расклонировал с помощью Ctrl+c Ctrl + V
24 GrayT
 
08.11.04
23:02
Не думаю, ладно бы условие не срабатывало, а то ведь "переменная не определена" да еще большими буквами кажет. Неспроста это. По барабану еще число это или нет.
25 Aleksey
 
08.11.04
23:04
Сам чую что не с проста. Но я даже переименовал эти ВКолК и ВКолР --- хоть бы что
26 NiGMa
 
08.11.04
23:06
(25) я ж говорю - попробуй их локально объявить и переприсвоить.
27 Aleksey
 
08.11.04
23:09
Только завтра с утра. Нет у меня дома нужной базы. С утра на свежую голову на работе надеюсь быстро с этим разберусь
28 bsg
 
08.11.04
23:11
Попробуй объявить в процедуре пару переменных и приравняв их к этим ВКолК и ВКолР сделать запрос с ними.
29 NiGMa
 
08.11.04
23:12
(27) погоди! у тебя ж в этой процедуре только формируется текст запроса.
А Запрос.Выполнить() - где находится? Там видны эти ВКодР?
30 Aleksey
 
08.11.04
23:14
>27) погоди! у тебя ж в этой процедуре только формируется текст запроса.
А Запрос.Выполнить() - где находится? Там видны эти ВКодР?

А вот это идея!! Что-то мне это даже в голову не пришло. Первым делом посмотрю.
31 GrayT
 
08.11.04
23:15
29- Кажись попал!
32 Aleksey
 
08.11.04
23:16
>29- Кажись попал!
Надеюсь, что да. Завтра напишу. :)
33 NiGMa
 
08.11.04
23:18
Пошел спать. Завтра жду отчет ;)
34 Aleksey
 
08.11.04
23:21
Отчет будет утром. (Хотя для кого-то это будет день :) )
35 Aleksey
 
09.11.04
09:58
>Пошел спать. Завтра жду отчет ;)

Ты оказался абсолютно прав. При объявл процед использ аргументы ВКодК и ВКодР, а при вызове КодК и КодР.

Спасибо за помощь :)
36 NiGMa
 
09.11.04
10:00
Лучше три раза наступить на взрослые грабли, чем один раз на детские... (с) не помню чей.