Имя: Пароль:
1C
1C 7.7
v7: Ошибка в простом запросе
0 bas28000
 
05.10.12
10:22
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |Группировка СтатусВМС;
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |Условие(СтатусВМС.Документ.ДатаДок >= ДатаНачала);
   |Условие(СтатусВМС.Документ.ДатаДок <= ДатаКонец);
   |"//}}ЗАПРОС

Ругается вот так:

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:\DOCUMENTS AND SETTINGS\S.BELICHENKO\РАБОЧИЙ СТОЛ\TEMP.ERT(27)}: Условие(СтатусВМС. <<?>> Документ.ДатаДок >= ДатаНачала);
Запрос[5] : Ожидается имя переменной или ее составляющая перед 'Документ'
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{C:\DOCUMENTS AND SETTINGS\S.BELICHENKO\РАБОЧИЙ СТОЛ\TEMP.ERT(27)}: Условие(СтатусВМС.Документ.ДатаДок <= ДатаКонец <<?>> );
Запрос[6] : Ошибка в условии


Подскажите, в чем проблема? Редко работаю с запросами, совершенно не понимаю, что ему не нравится. Реквизит "документ" конечно же у справочника есть.
1 ДенисЧ
 
05.10.12
10:23
Условие(СтатусВМС.Документ.ДатаДок >= ДатаНачала);

так нельзя в 77 писать. Это не снеговик.
2 Нуф-Нуф
 
05.10.12
10:23
переходите на 8ку
3 bas28000
 
05.10.12
10:25
(2) Спасибо, уже который год "начальство думает".
(1) Поясните, я понял что так нельзя писать, но почему тогда не ругается на предыдущее условие?
4 Sh1ko
 
05.10.12
10:25
ДатаД = Справочник.СтатусВМС.Документ.ДатаДок
Условие(СДатаД  >= ДатаНачала)
5 Sh1ko
 
05.10.12
10:26
короче через переменную в запросе
6 Sh1ko
 
05.10.12
10:26
Можно еще через функцию извратиться
7 Sh1ko
 
05.10.12
10:26
А (2) не слушай, 8-ка сырая еще
8 bas28000
 
05.10.12
10:30
(4) А, то есть когда один уровень вложения, как в "|Условие(СтатусВМС.СтатусВМС <> 2);", то так можно, а два - уже перебор, верно?
9 bas28000
 
05.10.12
10:31
(7) Восьмерку уже под Андроид и АйОС можно использовать, а мы тут все с поделками из нулевых мучаемся :)
10 bas28000
 
05.10.12
10:45
А, ребят, еще вопрос: если пустые даты, то запрос ничего не выводит - как обычно это решается?
11 Sh1ko
 
05.10.12
10:51
(10)
Если пустоеЗначение(начдата)=0 Тогда
Текстзапроса = текстЗапроса+"
|Условие ...
12 bas28000
 
05.10.12
11:11
Теперь другая проблема. Вот такой код:

   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |ДатаД = Справочник.СтатусВМС.Документ.ДатаДок;
   |Группировка СтатусВМС;
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |Условие((ДатаД <= ДатаКонец) И (ДатаД >= ДатаНачала));
   |"//}}ЗАПРОС

Как и такой:

   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |ДатаД = Справочник.СтатусВМС.Документ.ДатаДок;
   |Группировка СтатусВМС;
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |Условие(ДатаД >= ДатаНачала);
   |Условие(ДатаД <= ДатаКонец);
   |"//}}ЗАПРОС

работать не хочет. Зато хочет такой:

   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |ДатаД = Справочник.СтатусВМС.Документ.ДатаДок;
   |Группировка СтатусВМС;
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |Условие(ДатаД <= ДатаКонец);
   |"//}}ЗАПРОС

В чем причина, не подскажете?
13 Эльниньо
 
05.10.12
11:13
(7) К какому релизу испечется? К 8.8?
14 Иоканаан
 
05.10.12
11:21
(12) Такое условие:
Условие((ДатаД <= ДатаКонец) И (ДатаД >= ДатаНачала));
выглядить странновато.
Я бы написал, например, так:
Условие((ДатаД <= ДатаКонец) И (ДатаД > ДатаНачала));
15 bas28000
 
05.10.12
11:29
(14) Или я тупой, или в таком случае когда ДатаНачала=ДатаКонец будет пустота в запросе? А если человек периодом день выбирает?
16 Иоканаан
 
05.10.12
11:34
(15)А где он выбирает период? Вот и указал бы
Период С ДатаНачала По ДатаКонец;

С заданием таким заданием условия, когда дата может быть равна одновременно и ДатаНачала, и ДатаКонец, я не сталкивался, поэтому лишь предполагаю здесь наличие ошибки компиляции при исполнении запроса.
17 bas28000
 
05.10.12
11:36
(16)

В том-то и дело что "Период С ДатаНачала По ДатаКонец;" использовать не получится, выбирается-то справочник, у которого есть реквизит "Документ", и вот по датам этих документов и надо выбирать элементы справочника.
18 1Сергей
 
05.10.12
11:41
|Группировка СтатусВМС Без Групп;

не?
19 Boroda
 
05.10.12
11:43
Может попробовать так? :
Сперва делаем запрос по документам за нужный период. Эти документы переносим в список, а потом уже пробуем вот так:
|Условие(СтатусВМС.Документ в спДок);

И еще вопрос, реквизит "Документ" у справочника определенного вида?
20 bas28000
 
05.10.12
12:07
(18) Не помогло.
(19) нет, просто вида документ. Попробую сейчас сделать второй запрос, да, просто переходить к варианту когда выбирается весь справочник и потом в цикле колбасится по условию совсем не хочется - тогда вкуснота запроса пропадает - время выполнения будет всегда одинаковое.
21 bas28000
 
05.10.12
12:14
+(20) А как именно может влиять тот факт, что реквизит "Документ" вида "Документ", а не какого-то определенного? Ведь запрос срабатывает когда условие "|Условие(ДатаД <= ДатаКонец);", и перестает работать только когда появляется второе условие "(ДатаД > ДатаНачала)" выборка оказывается пустой.
22 1Сергей
 
05.10.12
12:18
(21) ты знаешь что реквизит ДатаДок есть у всех видов документов, а машина этого не знает
23 Иоканаан
 
05.10.12
12:18
(20)Я попытался наиграть Вашу ситуацию, но только у меня поле справочника "Документ" имеет тип конкретного документа: первый Ваш вариант в (12) прекрасно работает, т. е. запрос выполняется без ошибок. Быть может, действительно дело в типе поля справочника.
24 bas28000
 
05.10.12
12:20
(22)(23) Тогда я в очередной раз посылаю лучи ненависти разработчикам 1С в их далекий какой-то там год. Ладно, буду перебирать в цикле, судя по всему.
25 1Сергей
 
05.10.12
12:22
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с НачДата по КонДата;
   |Документ = Справочник.СтатусВМС.Документ;
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |Группировка Документ;
26 bas28000
 
05.10.12
12:23
(25) А это мысль, сейчас попробую.
27 bas28000
 
05.10.12
12:35
+(26) Условие "|Период с НачДата по КонДата;" не заработало, в таком виде:

   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонец;
   |Накладная = Справочник.СтатусВМС.Документ;
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |Группировка Накладная;
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |"//}}ЗАПРОС

просто выбираются все элементы справочника. Зато заработало вот так:

   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Накладная = Справочник.СтатусВМС.Документ;
   |СтатусВМС = Справочник.СтатусВМС.ТекущийЭлемент;
   |Группировка Накладная;
   |Условие(Накладная.ДатаДок <= ДатаКонец);
   |Условие(Накладная.ДатаДок >= ДатаНачала);
   |Условие(СтатусВМС.СтатусВМС <> 2);
   |"//}}ЗАПРОС

Чудны дела твои, Господи.
28 bas28000
 
05.10.12
12:35
Да, и всем спасибо.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn