|
v7: Обработка результата запроса | ☑ | ||
---|---|---|---|---|
0
Patrio_
O_Muerte 11.05.13
✎
13:26
|
Есть запрос, по справочнику подчиненному главному справочнику "Акции". Пытаюсь получить всю номенклатуру в соответствие с условиями. Запрос получается, нужный результат вижу в таблице значений, куда я выгружаю результат таблицы - то есть все акции и товары принадлежащие этим акциям.
Проблема заключается в обходе результата запроса по групировкам - отладчик корректно обрабатывает только одну акцию пока не понял какую - последнюю чтоли... Если точнее, то в первую группировку отладчик входит и обходит все полученные акции, а вот во вторую группировку я вхожу только по одной акции, хотя в ТЗ я вижу что есть товары и по другим акциям и их тоже надо проверить на актуальность. Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Номенклатура = Справочник._ИсходнаяНоменклатура.Номенклатура; |Владелец = Справочник._ИсходнаяНоменклатура.Владелец; |Количество = Справочник._ИсходнаяНоменклатура.Количество; |ЕИ = Справочник._ИсходнаяНоменклатура.ЕИ; |ТипВхождения = Справочник._ИсходнаяНоменклатура.ТипВхождения; |Сумма = Справочник._ИсходнаяНоменклатура.Сумма; |Группировка Владелец без групп; |Группировка Номенклатура без групп; |Условие(Владелец.Активно.Получить(ТекущаяДата()) = 1); |Условие(Владелец в СЗАкций); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Запрос.Выгрузить(ТЗИсхНом); ТЗИсхНом.Выгрузить(СЗИсхНом,,,"Номенклатура"); СПАктуальныхАкций = СоздатьОбъект("СписокЗначений"); ТЗНом = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТЗНом); Пока Запрос.Группировка(1) = 1 Цикл //сюда входим нормально Акц = Запрос.Владелец; Если Акц.Тип = 1 Тогда Пока Запрос.Группировка(2) = 1 Цикл //сюда входим только по одной акции КонецЦикла; ИначеЕсли Акц.Тип = 2 Тогда Пока Запрос.Группировка(2) = 1 Цикл Конеццикла; ИначеЕсли Акц.Тип = 3 Тогда Пока Запрос.Группировка(2) = 1 Цикл Конеццикла; ИначеЕсли Акц.Тип = 4 Тогда Пока Запрос.Группировка(2) = 1 Цикл КонецЦикла; КонецЕсли; КонецЦикла; Подскажите, как победить проблему? |
|||
1
Злопчинский
11.05.13
✎
13:34
|
|Условие(Владелец.Активно.Получить(ТекущаяДата()) = 1);
наверное можно убрать, написав простое обращение к реквизиту - периодику возьмет на конец даты запроса |
|||
2
Cthulhu
11.05.13
✎
13:34
|
При использовании в запросе периодического реквизита - получается его значение на конец периода.
Установи период, добавь переменную - периодический реквизит (прямо-тупо) и поставь услове по прямому равенству этой переменной. И - так, на всякий случай - добавь функцию (если ничего не надо - хотя бы Счётчик) |
|||
3
Cthulhu
11.05.13
✎
13:34
|
(1): у дур... эээ, дворников мысли сходятся?.. ))
|
|||
4
Злопчинский
11.05.13
✎
13:35
|
Если Акц.Тип = 1 Тогда
Пока Запрос.Группировка(2) = 1 Цикл //сюда входим только по одной акции . а почему должно быть на 100% иначе - если вверху у тебя стоит ограничение по типу = 1? |
|||
5
Злопчинский
11.05.13
✎
13:35
|
(3) угу...
|
|||
6
Злопчинский
11.05.13
✎
13:36
|
(3) уже не первый раз.
тут как-то раз на мисте писал ответ на вопрос - практически одновременно с кем-то - так ответы пор коду почти на 100% сошлись.. ;_) |
|||
7
Patrio_
O_Muerte 11.05.13
✎
13:40
|
(4)Наверное не совсем понятно - во вторую группировку входит только один раз вне зависимости от того, сколько акций и с какими типами у меня есть.
Вернее надо было написать так Пока Запрос.Группировка(2) = 1 Цикл //входит во вторую группировку только один раз вне зависимости от любых условий (типов). |
|||
8
Злопчинский
11.05.13
✎
13:43
|
используй систему разработки "сверху вниз". пиши крупными блоками. потом постепенно детализируй.
. убери на! все лишнее!!! все условниые операторы и прочую логику. . для начала добейся простого обхода двух вложенных группировок. Пока Запрос.Группировка(1) = 1 Цикл //сюда входим нормально //вывести группировку1 Пока Запрос.Группировка(2) = 1 Цикл //вывести группировку2 . результат - в студжию!! |
|||
9
Patrio_
O_Muerte 11.05.13
✎
13:52
|
(8)В простом варианте обход результата корректный.
|
|||
10
Patrio_
O_Muerte 11.05.13
✎
13:53
|
+(9)Получил все акции и товары по акциям и вывел в строку сообщений.
|
|||
11
Злопчинский
11.05.13
✎
13:58
|
(9) дальше помочь или сам справишься? ;-)
|
|||
12
Злопчинский
11.05.13
✎
14:00
|
дальше делай так:
Пока Запрос.Группировка(2) = 1 Цикл если Акц.Тип=1 тогда //1 иначеесли Акц.Тип=2 тогда //2 ... КонецЕсли; Конеццикла; |
|||
13
Patrio_
O_Muerte 11.05.13
✎
14:00
|
Лучше ткни носом где я неправ, а то чет торможу.
|
|||
14
Patrio_
O_Muerte 11.05.13
✎
14:01
|
(12)Бл*, именно от этого я и хотел избавиться :)
Но видимо не судьба.. |
|||
15
Злопчинский
11.05.13
✎
14:02
|
а то ты если положил на верхний уровень
и вторая группировка у тебя отрабатывает как минимум один раз в каком то условии - ПРИЧЕМ ПО ПОЛНОМУ ЦИКЛУ ОБХОДА. . а при другом значении типа - ты же НЕ ПОЗИЦИОНИРУЕШЬСЯ В НАЧАЛО второй группировки |
|||
16
Patrio_
O_Muerte 11.05.13
✎
14:06
|
(15)Ну так яж вторую группировку обхожу именно в пределах одной акции а не всю целиком, поэтому я полагаю, что вторая группировка должна стартовать с самого начала каждой группировки второго уровня.
А тут получается фуй. |
|||
17
Злопчинский
11.05.13
✎
14:08
|
(16) надо подумать, возможно туплю
|
|||
18
Злопчинский
11.05.13
✎
14:10
|
Все равно в (0) херня написана.
независимо от типа акции ты ВСЕ РАВНО обходишь вторую группировку. всегда. . поэтому в (12) более адекватный вариант |
|||
19
Patrio_
O_Muerte 11.05.13
✎
14:12
|
(18)Не ну я согласен, что в (12) код более корректен, но бл*ха муха придется попотеть, чтобы привести к такому варианту..
Кстати а метод ВНачалоВыборки() не поможет? |
|||
20
Cthulhu
11.05.13
✎
14:13
|
(0):
и эцсамое. тест не полностью виден - поэтому фигзнает, возможно у тебя в каком-то внутреннем цикле обхода по внутренней группировке есть "Прервать"?.. Так вот, ЕСЛИ ЕСТЬ - то это охренительная ошибка, результатом которой является полный улёт позиционирования обхода группировки. и в результате слетание всего обхода результата запроса. |
|||
21
Cthulhu
11.05.13
✎
14:14
|
(19): а толку?
|
|||
22
Злопчинский
11.05.13
✎
14:16
|
(19) мозг включи.
в твоем коде для текущего значения первой группировки ты обходишь вторую группировку. всегда. независимо от типа первой группировки. ну так и напиши именно так. . а во второй группировке по типу первой делай что надо. |
|||
23
Злопчинский
11.05.13
✎
14:17
|
(20) присоединяюсь к мнению.
|
|||
24
Patrio_
O_Muerte 11.05.13
✎
14:22
|
(20)Есть такая вещь - Прервать присутствует.
Будем починять, благодарю за подсказку |
|||
25
Cthulhu
11.05.13
✎
14:32
|
(24): "спасибо" не капает, ВМ в профиле.
|
|||
26
Злопчинский
11.05.13
✎
14:36
|
(25) возьми еще участок в придачу! ;-) и не трогай жителей ;-)
|
|||
27
Cthulhu
11.05.13
✎
14:49
|
(26): это я от Ёпрст-а научился.
а чо, пусть себе висит. жрать не просит, и ничего никто не требует. кто посчитает нужным - тот сколько посчитает нужным копеек и кинет, а нет - так нет. ))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |