Имя: Пароль:
1C
1C 7.7
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) трава-то знатная видать )