|
v7: помогите с запросом. | ☑ | ||
---|---|---|---|---|
0
r_i_n_i_k
11.01.12
✎
21:06
|
Я в 7.7 плохо ориентируюсь, прошу помочь.
Есть документ "ЗаявкаПокупателя", есть в нем реквизит СрокРезерва, вот мне бы запросом пройтись по этим документам и найти все те, СрокРезерва которых превышает ТекущуюДату() вот как то так: |
|||
1
r_i_n_i_k
11.01.12
✎
21:06
|
Перем Запрос, ТекстЗапроса;
//Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ТекущаяДата()-7*86400 по ТекущаяДата(); |Обрабатывать НеПомеченныеНаУдаление; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Условие(ЗаявкаПокупателяСрокРезерва>ТекущаяДата()); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; а что теперь с этим подскажите? |
|||
2
Попытка1С
11.01.12
✎
21:10
|
В 7.7 группировка в запросе обязательна.
|
|||
3
Rie
11.01.12
✎
21:11
|
(0) Во-первых, в 7.7 даты не содержат времени, поэтому *86400 - не надо.
Во-вторых, если мне память не изменяет, в Период - выражения не допустимы. В-третьих, в Условие - пропущена точка между ЗаявкаПокупателя и СрокРезерва. |
|||
4
zak555
11.01.12
✎
21:12
|
> 7*86400
жесть |
|||
5
viktor_vv
11.01.12
✎
21:12
|
Запрос = СоздатьОбъект("Запрос");
лдДатаНач = ТекущаяДата()-7 ; лдДатаКон = ТекущаяДата() ; ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с лдДатаНач по лдДатаКон; |Обрабатывать НеПомеченныеНаУдаление; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Групировка ЗаявкаПокупателя ; |Условие(ЗаявкаПокупателяСрокРезерва>лдДатаКон); |"//}}ЗАПРОС ; Пока Запрос.Группировка() = 1 Цикл КонецЦикла ; |
|||
6
viktor_vv
11.01.12
✎
21:13
|
|Период с лдДатаНач по лдДатаКон;
|Обрабатывать НеПомеченныеНаУдаление; |СрокРезерва = Документ.ЗаявкаПокупателя.СрокРезерва ; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Групировка ЗаявкаПокупателя ; |Условие(СрокРезерва>лдДатаКон); |
|||
7
r_i_n_i_k
11.01.12
✎
21:14
|
а чтио значит вот это:
|ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; мне бы ПриНачалеРаботыСистемы обойти все заявки |
|||
8
Rie
11.01.12
✎
21:15
|
(7) Это по сути и означает перебор всех документов.
Почитай ЖКК - полезнейшая вещь. |
|||
9
r_i_n_i_k
11.01.12
✎
21:16
|
ЖКК?
|
|||
10
Попытка1С
11.01.12
✎
21:16
|
(7) Юзай прямой запрос.
|
|||
11
r_i_n_i_k
11.01.12
✎
21:17
|
(10) как это?
|
|||
12
viktor_vv
11.01.12
✎
21:17
|
(7) Это Select скрещенный с From .
|
|||
13
Попытка1С
11.01.12
✎
21:20
|
Процедура Сформировать()
Перем тз; рс = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " |SELECT ЗаявкаПокупателя.IDDOC [Ссылка $Документ.ЗаявкаПокупателя] |FROM $Документ.ЗаявкаПокупателя AS ЗаявкаПокупателя |WHERE ($ЗаявкаПокупателя.СрокРезерва > :ВыбДата) |"; рс.УстановитьТекстовыйПараметр("ВыбДата", ТекущаяДата()); тз = рс.ВыполнитьИнструкцию(ТекстЗапроса); тз.ВыбратьСтроку(); КонецПроцедуры |
|||
14
r_i_n_i_k
11.01.12
✎
21:21
|
а как обйти затем?
|
|||
15
r_i_n_i_k
11.01.12
✎
21:21
|
*обОйти результат запроса?
|
|||
16
Попытка1С
11.01.12
✎
21:22
|
(15) тз это ТаблицаЗначений.
|
|||
17
Попытка1С
11.01.12
✎
21:25
|
Только учти что тебе нужна 1с++, и к примеру класс прямой запрос если у тебя dbf.
|
|||
18
slowpoke1C
11.01.12
✎
21:30
|
(5) можно написать
[code] "|Группировка Документ;" [/code] И запрос вполне себе отработает, это встроенная в язык запросов разновидность группировок. Иногда даже работает побыстрее. |
|||
19
r_i_n_i_k
11.01.12
✎
21:32
|
ничего не понял :(
|
|||
20
r_i_n_i_k
11.01.12
✎
21:33
|
делаю так:
Запрос = СоздатьОбъект("Запрос"); лдДатаНач = ТекущаяДата()-7 ; лдДатаКон = ТекущаяДата() ; ТекстЗапроса = " |Период с лдДатаНач по лдДатаКон; |Обрабатывать НеПомеченныеНаУдаление; |СрокРезерва = Документ.ЗаявкаПокупателя.СрокРезерва ; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Групировка ЗаявкаПокупателя ; |Условие(СрокРезерва>лдДатаКон);"; Пока Запрос.Группировка() = 1 Цикл КонецЦикла ; есть подходящий документ от 05.01.2012, но отладчик показывает что Запрос.Группировка() = 0 |
|||
21
Дядя Васька
11.01.12
✎
21:55
|
(20) Ну может выполнить его надо )
|
|||
22
r_i_n_i_k
11.01.12
✎
21:56
|
(21) Как?)
|
|||
23
Дядя Васька
11.01.12
✎
21:57
|
(22) Ты не поверишь :)
|
|||
24
Дядя Васька
11.01.12
✎
21:58
|
Выполнить(<?>)
Синтаксис: Выполнить(<ТекстЗапроса>) Назначение: Выполнить запрос. Возвращает: 1 - если запрос выполнен, 0 - иначе. Параметры: <ТекстЗапроса> - строка с текстом запроса на языке генерации запросов. Подробнее см. в документации, глава 'Работа с Запросами' |
|||
25
Дядя Васька
11.01.12
✎
21:59
|
В сабже что интересно еще умел, а потом видать "забыл семерку" ))
|
|||
26
r_i_n_i_k
11.01.12
✎
22:00
|
не могу ничего понять млин:(
сижу вот тыкаюсь.. поможешь?:) |
|||
27
Дядя Васька
11.01.12
✎
22:01
|
(26) Да чего еще непонятно-то?
Запрос = СоздатьОбъект("Запрос"); лдДатаНач = ТекущаяДата()-7 ; лдДатаКон = ТекущаяДата() ; ТекстЗапроса = " |Период с лдДатаНач по лдДатаКон; |Обрабатывать НеПомеченныеНаУдаление; |СрокРезерва = Документ.ЗаявкаПокупателя.СрокРезерва ; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Групировка ЗаявкаПокупателя ; |Условие(СрокРезерва>лдДатаКон);"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка() = 1 Цикл КонецЦикла ; |
|||
28
r_i_n_i_k
11.01.12
✎
22:02
|
(27) сделал у меня
Запрос.Выполнить(ТекстЗапроса) возвращает 0 |
|||
29
Дядя Васька
11.01.12
✎
22:07
|
Запрос = СоздатьОбъект("Запрос");
лдДатаНач = ТекущаяДата()-7 ; лдДатаКон = ТекущаяДата() ; ТекстЗапроса = " |Период с лдДатаНач по лдДатаКон; |ОбрабатыватьДокументы Все; |Обрабатывать НеПомеченныеНаУдаление; |СрокРезерва = Документ.ЗаявкаПокупателя.СрокРезерва ; |ЗаявкаПокупателя = Документ.ЗаявкаПокупателя.ТекущийДокумент; |Групировка ЗаявкаПокупателя ; |Условие(СрокРезерва>лдДатаКон);"; Запрос.Выполнить(ТекстЗапроса); Пока Запрос.Группировка(1) = 1 Цикл КонецЦикла ; |
|||
30
viktor_vv
11.01.12
✎
22:08
|
Ну извини :),
|Группировка ЗаявкаПокупателя ; |
|||
31
r_i_n_i_k
11.01.12
✎
22:09
|
(30) это я в начале ещё исправил)
|
|||
32
viktor_vv
11.01.12
✎
22:11
|
(31) А описание ошибки не вываливает что ли ?
|
|||
33
r_i_n_i_k
11.01.12
✎
22:11
|
СРАБОТАЛО!!!!
а теперь как мне вид операции поменять в найденном документе? с "заявка на склад" сделать просто "неподтвержденная заявка"? |
|||
34
viktor_vv
11.01.12
✎
22:16
|
ладДокЗаявка = СоздатьОбъект("Документ.ЗаявкаПокупателя") ;
Пока Запрос.Группировка(1) = 1 Цикл Если ладДокЗаявка.НайтиДокумент(Запрос.ЗаявкаПокупателя) = 1 Тогда ладДокЗаявка.ИмяРеквизитаСВидомОперации = СсылкаНаНеобзодимыйВидОперации ; ладДокЗаявка.Записать() ; // Может еще провести надо будет ладДокЗаявка.Провести() ; КонецЕсли ; КонецЦикла ; |
|||
35
Дядя Васька
11.01.12
✎
22:16
|
НайтиДокумент(); потом реквизиту ВидОперации присвоить Перечисление.ВидыОперацийЗаявок.Неподтвержденная
|
|||
36
r_i_n_i_k
11.01.12
✎
22:18
|
а как пустая строка в 7ке?
мне бы в запрос ещё 2 условия "Условие(СрокРезерва)<>'00010101' Условие(ВидОперации)<>Перечисление.ВидыОперацийЗаявок.НаСклад" так можно? |
|||
37
r_i_n_i_k
11.01.12
✎
22:20
|
(36) пустая дата в смысле
|
|||
38
Дядя Васька
11.01.12
✎
22:22
|
так вроде: Условие(СрокРезерва)<>''
|
|||
39
viktor_vv
11.01.12
✎
22:22
|
|Условие ((ПустоеЗначение(СрокРезерва) <>1) или ВидОперации<>Перечисление.ВидыОперацийЗаявок.НаСклад)) ;
|
|||
40
viktor_vv
11.01.12
✎
22:24
|
Скобку одну потерял.
|Условие ((ПустоеЗначение(СрокРезерва) <>1) или (ВидОперации<>Перечисление.ВидыОперацийЗаявок.НаСклад)) ; |
|||
41
Дядя Васька
11.01.12
✎
22:25
|
точнее так: Условие(СрокРезерва)<>'..'
|
|||
42
Дядя Васька
11.01.12
✎
22:25
|
(39) А почему 1-то?
|
|||
43
viktor_vv
11.01.12
✎
22:25
|
Ну и со знаком
|Условие ((ПустоеЗначение(СрокРезерва) <>1) и (ВидОперации<>Перечисление.ВидыОперацийЗаявок.НаСклад)) ; |
|||
44
Дядя Васька
11.01.12
✎
22:27
|
+(42) Тьфу, торможу... ПустоеЗначение() не увидел ))
|
|||
45
viktor_vv
11.01.12
✎
22:28
|
Блин с этим пустым значением постоянно путаюсь, вроде так.
|Условие ((ПустоеЗначение(СрокРезерва) = 0) и (ВидОперации<>Перечисление.ВидыОперацийЗаявок.НаСклад)) ; |
|||
46
Дядя Васька
11.01.12
✎
22:31
|
(45) Монописуально )
|
|||
47
viktor_vv
11.01.12
✎
22:34
|
(46) Да вот и я о том же :). Как-то ЗначениеЗаполнено() более логично.
|
|||
48
SnarkHunter
11.01.12
✎
23:45
|
А ЗначениеЗаполнено() еще логичнее...
|
|||
49
Дядя Васька
11.01.12
✎
23:48
|
(48) трава-то знатная видать )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |