Имя: Пароль:
1C
1C 7.7
v7: Как использовать метод получить
0 Adept
 
19.12.14
13:16
Народ, не пинайте сильно сам давно на 7 ке не писал.
Вобщем есть запрос

ТекстЗапросаСГ =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаС по ДатаПо;
|Товар = Регистр.СрокиГодности.Товар;
|Склад = Регистр.СрокиГодности.Склад;
|СрокГод = Регистр.СрокиГодности.СрокГод;
|ДатаПроизводства = Регистр.СрокиГодности.ДатаПроизводства;
|ОстатокТовара = Регистр.СрокиГодности.ОстатокТовара;
|Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
|Группировка Склад;
|Группировка Товар;
|"//}}ЗАПРОС


Надо обход результатов по конкретному складу и товару

делаю так:

Если ЗапросСГ.Получить(Склад,Товар)  = 1 Тогда
     Пока ЗапросСГ.Группировка(2) = 1 Цикл
         //обработка, сюда не заходит
     КонецЦикла;    
КонецЕсли;

Как правильно использовать этот метод
1 lavalit
 
19.12.14
13:18
используй конструктор запросов. там оно все сделает.. потом допилишь если чего не хватает
2 Adept
 
19.12.14
13:21
(1) Запрос формирует стандартный обход по группировкам
3 Мигало
 
19.12.14
13:24
Если ЗапросСГ.Получить(Склад,) = 1 Тогда // Тут получаем конкретное значение склада
     Пока ЗапросСГ.Группировка() = 1 Цикл // дальше бежим по группировкам (указание группировки обламывает выборку
         //обработка, сюда не заходит

     КонецЦикла;    
КонецЕсли;
4 Duke1C
 
19.12.14
13:27
(2) ну для начала объясни, чем стандартный обход группировок не устраивает. Если нужны итоги только по конкретному складу, то накладывай условие в самом запросе
5 Adept
 
19.12.14
13:31
(4) Если накладывать условия в запросе это получиться запрос в цикле

ЗапросСГ.Получить(Склад,Товар) - Склад,Товар это элементы из выборки другого запроса
6 antoneus
 
19.12.14
13:34
(5) с чего вдруг? условие в.
7 Adept
 
19.12.14
13:38
(6) Ну а с В по результатам запроса дополнительный поиск не придеться делать.

Есть регистр остатков в нем все остатки
Есть регистр остатков по срокам в нем остатки только с сроками и в разрезе сроков

при обходе первого, надо фильтровать результат по второму, и если такой результат есть, его надо обработать
8 Adept
 
19.12.14
13:39
+(7)
*(6) Ну а с В по результатам запроса дополнительный поиск не придеться делать?
9 Мигало
 
19.12.14
13:43
(8) Позиционироваться через .Получить() все равно придется, условием В ты только ограничиваешь выборку в запросе
10 Adept
 
19.12.14
14:01
(9) Почему то в
ЗапросСГ.Группировка() = 1
попадают другие номенклатуры, не только те которые в отборе
ЗапросСГ.Получить(Склад,Товар)
11 Мигало
 
19.12.14
14:18
(10) Если ты исполняешь ЗапросСГ.Получить(Склад,Товар) и группировок в запросе всего 2, то ЗапросСГ.Группировка() после .Получить() вызывать не нужно - запись и так спозиционированна.
12 Adept
 
19.12.14
14:51
(11) А если их несколько?
13 Adept
 
19.12.14
14:53
+(12) Всмысле записей с одинаковыми полями Склад и товар, но с разными сроками годности?
14 DCKiller
 
19.12.14
14:55
(13) Тогда делай еще группировку по сроку годности
15 Adept
 
19.12.14
14:55
(14) И потом
Пока ЗапросСГ.Группировка() = 1 Цикл
или
Пока ЗапросСГ.Группировка(3) = 1 Цикл
?
16 Мигало
 
19.12.14
14:57
Пока ЗапросСГ.Группировка() = 1 Цикл
17 vladko
 
19.12.14
16:10
Подитожим:
ТекстЗапросаСГ =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаС по ДатаПо;
|Товар = Регистр.СрокиГодности.Товар;
|Склад = Регистр.СрокиГодности.Склад;
|СрокГод = Регистр.СрокиГодности.СрокГод;
|ДатаПроизводства = Регистр.СрокиГодности.ДатаПроизводства;
|ОстатокТовара = Регистр.СрокиГодности.ОстатокТовара;
|Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
|Группировка Склад;
|Группировка Товар;
|Группировка СрокГод;
|"//}}ЗАПРОС
.....

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

Не забудь перед методом .Получить использовать .ВНачалоВыборки, т.к. .Получить работает только вниз от текущей позиции в запросе.
2 + 2 = 3.9999999999999999999999999999999...