Имя: Пароль:
1C
1С v8
что не так в запросе
0 LivingStar
 
27.01.12
07:49
добавил кое что в запрос, что бы он делал отбор без фильтра по контрагенту
|
               УниверсальныйЗапрос.Текст = "
                   |ВЫБРАТЬ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Ссылка,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Номер,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата
                   |ИЗ
                   |    Документ."+Строка(ЭлементСписка.Значение.Имя)+" КАК "+Строка(ЭлементСписка.Значение.Имя)+"
                   |ГДЕ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата        >= &НачДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Дата      <= &КонДата ";
                   Если ЗначениеЗаполнено(Контрагент) Тогда
                       УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
                   Иначе
                       УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + "|";
                   КонецЕсли;
               УниверсальныйЗапрос.УстановитьПараметр("НачДата", ОтборДатаНач);
               УниверсальныйЗапрос.УстановитьПараметр("КонДата", КонецДня(ОтборДатаКон));
               УниверсальныйЗапрос.УстановитьПараметр("Контр",   Контрагент);
               РезультатУЗ = УниверсальныйЗапрос.Выполнить().Выбрать();
|
но на него выходит ошибка, что в нем не так?
1 БибиГон
 
27.01.12
07:52
прикольно :)
2 Escander
 
27.01.12
07:54
(0) ну так сам посмотри что у тебя в УниверсальныйЗапрос.Текст перед выполнением...

вот это нафига не понимаю

УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + "|";
3 Explorer1c
 
27.01.12
07:54
(0)А этот запрос в цикле чтоли? Блеать у меня мозг сломался
4 ponaroshku
 
27.01.12
07:55
а говорят у меня жесткий код:))
5 LivingStar
 
27.01.12
07:55
(3) да в цикле ((((
6 Escander
 
27.01.12
07:57
Да нормально, обычный пиленый запрос, вот только запрос в цикле - моветон!
7 LivingStar
 
27.01.12
07:58
вот ошибка
|
{Форма.Форма(115)}: Ошибка при вызове метода контекста (Выполнить): {(10, 46)}: Синтаксическая ошибка "|    И"
И СчетФактураВыданный.Дата      <= &КонДата <<?>>|    И СчетФактураВыданный.Контрагент = &Контр
               РезультатУЗ = УниверсальныйЗапрос.Выполнить().Выбрать();
по причине:
{(10, 46)}: Синтаксическая ошибка "|    И"
И СчетФактураВыданный.Дата      <= &КонДата <<?>>|    И СчетФактураВыданный.Контрагент = &Контр
8 LivingStar
 
27.01.12
07:59
(6) ну а как реализовать без цикла?
хотя подумаю как...

сам только с ваших слов сейчас заметил что в цикле, это же недопустимо!!!
9 Азат
 
27.01.12
07:59
автор - ты ваще сплошной пипец ходячий...

Имя = СокрЛП(ЭлементСписка.Значение.Имя);

УниверсальныйЗапрос.Текст = "
                   |ВЫБРАТЬ
                   |    Док.Ссылка,
                   |    Док.Номер,
                   |    Док.Дата
                   |ИЗ
                   |    Документ.Имя КАК Док                 |ГДЕ
                   |    Док.Дата МЕЖДУ &НачДата И &КонДата ";
                   Если ЗначениеЗаполнено(Контрагент) Тогда
                       УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + " И Док.Контрагент = &Контр";
КонецЕсли;
УниверсальныйЗапрос.УстановитьПараметр("НачДата", ОтборДатаНач);
УниверсальныйЗапрос.УстановитьПараметр("КонДата", КонецДня(ОтборДатаКон));
УниверсальныйЗапрос.УстановитьПараметр("Контр",   Контрагент);
РезультатУЗ = УниверсальныйЗапрос.Выполнить().Выбрать();
10 Escander
 
27.01.12
08:00
ну так вместо
УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";

воткни
УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +  " И "+ " +Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
11 Азат
 
27.01.12
08:01
(8) ну в цикле генери текст запроса...

Типа так:

Текст = "";
Для К = 1 По 100 Цикл
   Имя = СокрЛП(Список[К].Значение.Имя);
   Текст = Текст + " ОБЪЕДИНИТЬ ВСЕ
                   |ВЫБРАТЬ
                   |    Док.Ссылка,
                   |    Док.Номер,
                   |    Док.Дата
                   |ИЗ
                   |    Документ." + Имя + " КАК Док                 |ГДЕ
                   |    Док.Дата МЕЖДУ &НачДата И &КонДата ";
КонецЦикла;

Текст = Сред(Текст, 16)
12 Escander
 
27.01.12
08:01
(9) у него не
Док.Контрагент=&Контр
а
Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр"
13 Азат
 
27.01.12
08:03
(12) мммм, точно уверен, что не ошибаешься?
14 Explorer1c
 
27.01.12
08:04
(11)1Хорошай
15 Азат
 
27.01.12
08:04
(14) чо?
16 LivingStar
 
27.01.12
08:07
(9) не в этом причина
так выполняется

               УниверсальныйЗапрос.Текст = "
                   |ВЫБРАТЬ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Ссылка,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Номер,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата
                   |ИЗ
                   |    Документ."+Строка(ЭлементСписка.Значение.Имя)+" КАК "+Строка(ЭлементСписка.Значение.Имя)+"
                   |ГДЕ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата        >= &НачДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Дата      <= &КонДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";

так нет, -

               УниверсальныйЗапрос.Текст = "
                   |ВЫБРАТЬ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Ссылка,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Номер,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата
                   |ИЗ
                   |    Документ."+Строка(ЭлементСписка.Значение.Имя)+" КАК "+Строка(ЭлементСписка.Значение.Имя)+"
                   |ГДЕ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата        >= &НачДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Дата      <= &КонДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
                   //Если ЗначениеЗаполнено(Контрагент) Тогда
                       УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
                   //Иначе
                   //    УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + "|";
                   //КонецЕсли;
17 Escander
 
27.01.12
08:08
(13) первая строка не по глазам
18 LivingStar
 
27.01.12
08:09
(16+) то есть так не выполняется

               УниверсальныйЗапрос       = Новый Запрос;
               УниверсальныйЗапрос.Текст = "
                   |ВЫБРАТЬ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Ссылка,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Номер,
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата
                   |ИЗ
                   |    Документ."+Строка(ЭлементСписка.Значение.Имя)+" КАК "+Строка(ЭлементСписка.Значение.Имя)+"
                   |ГДЕ
                   |    "+Строка(ЭлементСписка.Значение.Имя)+".Дата        >= &НачДата
                   |    И "+Строка(ЭлементСписка.Значение.Имя)+".Дата      <= &КонДата";
                   //|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
                   //Если ЗначениеЗаполнено(Контрагент) Тогда
                       УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
                   //Иначе
                   //    УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + "|";
                   //КонецЕсли;
19 Азат
 
27.01.12
08:10
(16) причина в том, что кто-то даж на старости лет не понял, нафига нужна | в тексте запроса...
убери их и станет выполняться, а потом сделай, как я написал, и получишь нормальный читабельный текст запроса... если же ты гнилофранч, которому надо запутать все, в тч и себя самого, то, наоборот, усложняй код
20 Escander
 
27.01.12
08:10
(16) текст итогового запроса приведите
21 LivingStar
 
27.01.12
08:11
(9) ты чо знаком со мной что ли? суждения высказываешь ...
(19) фильтруй то что пишешь ?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
22 Explorer1c
 
27.01.12
08:11
(20)а вот этого не надо
23 Explorer1c
 
27.01.12
08:12
(21)Нехорошай
24 LivingStar
 
27.01.12
08:12
(20) он в 0
25 Escander
 
27.01.12
08:12
(22) пусть сам посмотрит - может самому станет очивидно
26 LivingStar
 
27.01.12
08:12
(22) ок, понял исправлюсь!!!
27 Escander
 
27.01.12
08:13
(24) в (0) - ваш код, а текст запроса в УниверсальныйЗапрос.Текст
28 LivingStar
 
27.01.12
08:17
(27) вот текст до
УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";

УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";


ВЫБРАТЬ
   СчетФактураВыданный.Ссылка,
   СчетФактураВыданный.Номер,
   СчетФактураВыданный.Дата
ИЗ
   Документ.СчетФактураВыданный КАК СчетФактураВыданный
ГДЕ
   СчетФактураВыданный.Дата        >= &НачДата
   И СчетФактураВыданный.Дата      <= &КонДата
29 LivingStar
 
27.01.12
08:20
проблема была, как сказал уважаемый (19) в |

УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   "|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";


так сработало

УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст +
                                                   " И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";
30 Escander
 
27.01.12
08:43
(29) ну конечно прочитать (10) было не судьба...
31 napagokc
 
27.01.12
09:01
(29) Вроде, нельзя начинать строку с "|". Вот если бы ты написал так:

УниверсальныйЗапрос.Текст = УниверсальныйЗапрос.Текст + "
|    И "+Строка(ЭлементСписка.Значение.Имя)+".Контрагент = &Контр";

тогда должно было сработать, по идее. Такие вещи даже я знаю :)
32 napagokc
 
27.01.12
09:04
+(31) суть в том, что перед "|" стоит невидимый символ переноса строки. Тогда все нормально работает.
33 LivingStar
 
27.01.12
11:50
(30) извиняюсь, пролетело ваше сообщение не заметил во время!!!
34 LivingStar
 
27.01.12
11:52
(31) я посмотрел текст сгенерированного запроса как мне советовали в (27) и увидел эту ошибку!!!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.