Имя: Пароль:
1C
1C 7.7
v7: Не выполняется запрос
0 balak05
 
14.10.13
14:39
Здравствуйте. Подскажите почему (Запрос.Группировка("Товар")) возвращает 0? Заранее спасибо.    
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса ="  
    |Товар = Регистр.ОстаткиТоваров.Товар;
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |Ост = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Функция ПолнОст = КонОст(Ост) ;
    |Группировка Товар упорядочить по Товар.Наименование;
    |Условие ((ПолнОст <> 0) и (Склад = ВыбСклад));";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
          Возврат;
    КонецЕсли;
    Пока Запрос.Группировка("Товар") = 1 Цикл              
        Твр = Запрос.Товар;
      Если Проверка(Твр)=1 Тогда
           СформироватьСтроку();
      КонецЕсли;
    КонецЦикла;
1 Arh01
 
14.10.13
14:43
(0) А если  Запрос.Группировка(1) попробовать?
2 balak05
 
14.10.13
14:44
(1) Сначала так и было. То же самое
3 palpetrovich
 
14.10.13
14:45
а это "Условие ((ПолнОст <> 0)" зачем?
4 balak05
 
14.10.13
14:47
(3) Мне нужен список товаров у которых имеется конечный остаток
5 palpetrovich
 
14.10.13
14:55
(4) нулевых и так не будет, вполне рабочий код:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Товар = Регистр.ПартииТоваров.Товар;      
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |ОстатокТовара = Регистр.ПартииТоваров.ОстатокТовара;
    |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
    |Группировка Товар Без групп упорядочить по Товар.Наименование;        
    |Условие (Склад = ВыбСклад);";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Пока Запрос.Группировка(1) = 1 Цикл
...    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Товар = Регистр.ПартииТоваров.Товар;      
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |ОстатокТовара = Регистр.ПартииТоваров.ОстатокТовара;
    |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
    |Группировка Товар Без групп упорядочить по Товар.Наименование;        
    |Условие (Склад = ВыбСклад);";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Пока Запрос.Группировка(1) = 1 Цикл
    КонецЦикла;
    КонецЦикла;
6 palpetrovich
 
14.10.13
14:55
+5 баден-баден получился :)
7 mikecool
 
14.10.13
14:57
а остатки по складу есть то?
8 Arh01
 
14.10.13
14:58
(3) Да, попробуйте убрать (ПолнОст <> 0).
9 balak05
 
14.10.13
15:05
(7) Да есть
10 balak05
 
14.10.13
15:05
(5) (8) Пробую
11 mikecool
 
14.10.13
15:05
(9) раздели условия на 2, сначала склад, потом остаток
12 balak05
 
14.10.13
15:09
(11) Выше же сказали что нулевой остаток и так не попадает, разве нет?
13 palpetrovich
 
14.10.13
15:09
(10) я надеюсь понятно, что 5 два раза скопировалось? :)
д.б. так
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Товар = Регистр.ПартииТоваров.Товар;      
    |Склад = Регистр.ОстаткиТоваров.Склад;
    |ОстатокТовара = Регистр.ПартииТоваров.ОстатокТовара;
    |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
    |Группировка Товар Без групп упорядочить по Товар.Наименование;        
    |Условие (Склад = ВыбСклад);";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Пока Запрос.Группировка(1) = 1 Цикл
        // тут что надо делать
    КонецЦикла;
14 balak05
 
14.10.13
15:10
(13) Да я понял. Спасибо
15 vladko
 
14.10.13
15:10
(0) ПолнОст <> 0 - лишнее в данном случае
16 viktor_vv
 
14.10.13
15:16
Я бы даже сказал, что с таким условием

    |Функция ПолнОст = КонОст(Ост) ;
    |Группировка Товар упорядочить по Товар.Наименование;
    |Условие ((ПолнОст <> 0));";


запрос вообще не выполнится, вывалится с ошибкой. ТС че-то недоговаривает.
17 viktor_vv
 
14.10.13
15:18
Вот так выполнится, но за рультат не поручусь.

   |Условие ((Запрос.ПолнОст <> 0));";
18 balak05
 
14.10.13
15:18
(16) может быть и вываливается. я отладчиком смотрю, и дальше не выполняю
19 viktor_vv
 
14.10.13
15:21
(18) :).

С одной группировкой, (17) нормально отработает, только такое условие бессмыслено, там и так нулевых остатков не будет, как правильно сказали (5) и (15).
20 Злопчинский
 
14.10.13
16:03
указание в услвоии ссылки запрос.Коност - вполне нормально
.
гораздо интереснее что будет если написать
Условие (Запрос.ПолнОст = 0);";
.
???
21 viktor_vv
 
14.10.13
16:06
(20) Это условие никак не повлияет на результат, именно с "=".
22 viktor_vv
 
14.10.13
16:08
Некоторые нюансы могут быть, если для одной из группировок нижнего уровня будет указано "все вошедшие в запрос", тогда это условие вполне может нивелировать "все вошедшие в запрос". Тут уже зависит в ккой последовательности там действия выполняются.
23 viktor_vv
 
14.10.13
16:12
(21)+ Ступил. По идее должно вернуть пустой результат.
24 viktor_vv
 
14.10.13
16:13
(23) Так и получилось.
Ошибка? Это не ошибка, это системная функция.