Имя: Пароль:
1C
1C 7.7
v7: Странная работа простого запроса? Не вижу где глюк.
0 Alexor
 
06.09.13
11:51
Всем привет.

Есть запрос.

    Запрос=СоздатьОбъект("Запрос");
        ТекстЗапроса = "Период с НачДата по КонДата;
        |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
        |Док            = Регистр.ОстаткиТМЦ.ТекущийДокумент;
        |Контрагент        = Регистр.ОстаткиТМЦ.ТекущийДокумент.ПоступлениеТМЦ.Контрагент;
        |Количество = Регистр.ОстаткиТМЦ.количество;
        |Группировка Номенклатура без групп;
        |Группировка Док;
        |Функция КолПриход=Приход(Количество);
        |Условие (Номенклатура В ВыбНоменклатура);";

        Запрос = СоздатьОбъект("Запрос");
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;
        
        Пока Запрос.Группировка("Номенклатура")=1 Цикл
            Сообщить(Запрос.Номенклатура);
            Пока Запрос.Группировка("Док")=1 Цикл
                Сообщить(Запрос.Док);
            КонецЦикла;    
        КонецЦикла;


В группе 6 товаров.
Если в ВыбНоменклатура выбираю группу, то выдает все 6 товаров, но по товару1 не показывает документов.
Если в ВыбНоменклатура выбираю товар1, то документы показывает.

Уже час парюсь понять не могу.
Индексы перестроил.
Где я ошибся?
1 Alexor
 
06.09.13
12:22
Хм. Я код не весь привел.
данный отрабатывает нормально.

А вот на таком через одну номенклатуру документы не показывает, хотя они есть.


        Пока Запрос.Группировка("Номенклатура")=1 Цикл
            Сообщить(Запрос.Номенклатура);
            Пока Запрос.Группировка("Док")=1 Цикл
                Если Лев(Запрос.Док.Вид(),6)="Поступ" Тогда
                    Сообщить(Запрос.Док);
                    Прервать;
                КонецЕсли;
            КонецЦикла;    
        КонецЦикла;
2 viktor_vv
 
06.09.13
12:24
А это так надо ?

                    Сообщить(Запрос.Док);
                    Прервать; !!!
3 viktor_vv
 
06.09.13
12:26
Попробуй для проверки так

                Если Лев(Запрос.Док.Вид(),6)<>"Поступ" Тогда
                    
                    Продолжить;
                Иначе
                    Сообщить(Запрос.Док);
                КонецЕсли;
4 Alexor
 
06.09.13
12:31
Мне надо найти первый документ поступления.
5 Толич
 
06.09.13
12:35
Товарищ. В данном участке кода косяков нет.
Посмотри может чуть ранее переменные меняются НачДата, КонДата, ВыбНоменклатура.
6 Толич
 
06.09.13
12:37
ТИИ делал?
7 Alexor
 
06.09.13
12:38
(5) Нет.

У меня выдает
Товар0
Док
Товар1
Товар2
Док
....

Я Товар0 переименовал в товар9
Теперь у меня
товар1
Док
Товар2
товар3
Док
8 Alexor
 
06.09.13
12:38
(6) да.
9 Толич
 
06.09.13
12:39
(8) Попробуй как в (3) подсказывали.
10 Толич
 
06.09.13
12:40
Исключи прервать
11 Ёпрст
 
гуру
06.09.13
12:40
выгрузи запрос в ТЗ..
там всё есть хоть ?
12 Alexor
 
06.09.13
12:48
(11) В ТЗ все есть.
Да и выборка когда без прервать, нормально проходит.
13 Alexor
 
06.09.13
12:51
Если что:
Gлатформа 7.7.027 DBF
Работаю в терминале 2008 сервер.
Все лицензия.

Дополнительно 1с++ formex есть
dbeng пропатчен на работу с файлом более 1 гига.
14 Alexor
 
06.09.13
12:57
(9) Попробовал. вываливает все.
А мне надо первое поступление.
15 viktor_vv
 
06.09.13
13:03
А если так, это для проверки

Пока Запрос.Группировка("Док")=1 Цикл
//                Если Лев(Запрос.Док.Вид(),6)="Поступ" Тогда
  //                  Сообщить(Запрос.Док);
                    Прервать;
//                КонецЕсли;
            КонецЦикла;  

номенклатуру пропускает через одну?
16 Alexor
 
06.09.13
13:05
(15) Не проверял, но думаю номенклатуру не будет пропускать.
Он ее выдает всегда.
17 Alexor
 
06.09.13
13:06
Переделал на

        
        ТекстЗапроса = "Период с НачДата по КонДата;
        |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
        |Док            = Регистр.ОстаткиТМЦ.ТекущийДокумент;
        |Количество = Регистр.ОстаткиТМЦ.количество;
        |Группировка Номенклатура без групп;
        |Группировка Док;
        |Функция КолПриход=Приход(Количество);
        |Условие (Номенклатура В ВыбНоменклатура);
        |Условие (Док.Вид()=""ПоступлениеТМЦ"");";
        
        Запрос = СоздатьОбъект("Запрос");
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;

        Пока Запрос.Группировка("Номенклатура")=1 Цикл
            Сообщить(Запрос.Номенклатура);
            Если Запрос.Группировка("Док")=1 Тогда
                Сообщить(Запрос.Док);
            КонецЕсли;
        КонецЦикла;


Один фиг.
18 viktor_vv
 
06.09.13
13:09
А отладчик что говорит для (1)? Куда переходит после прервать ?
19 Alexor
 
06.09.13
13:22
пока обработку последнего запроса переделал на
        Пока Запрос.Группировка("Номенклатура")=1 Цикл
            Сообщить(Запрос.Номенклатура);
            Пока Запрос.Группировка("Док")=1 Цикл
                Если Товар=Запрос.Номенклатура Тогда
                    
                Иначе
                    Сообщить(Запрос.Док);    
                    Товар=Запрос.Номенклатура;
                КонецЕсли;
                
            КонецЦикла;
        КонецЦикла;
20 Alexor
 
06.09.13
13:22
Но вообще странно.
(18) попробую посмотреть
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой