![]() |
![]() |
fisher 20.09.2004 - 14:32 |
Никогда раньше не пользовался, да вот, думал, пригодилось. Пытаюсь подряд открыть два ВыбратьСубконто() с разными номерами выборок. Предполагается, что дальше они будут по-разному обходиться. Первое прокатывает для любого номера выборки. На второе ругается "не указана вышестоящая группировка" или что-то в этом духе. Может, я не въезжаю в саму идеологию разных выборок одного и того же запроса? Тогда объясните дураку, плиз... |
wolk 1 - 20.09.2004 - 14:46 |
Можно кусок кода увидеть? Предполагаю, что у тебя вторая выборка идёт не внутри первой. Т.е. должно быть примерно так: БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл .............. КонецЦикла; КонецЦикла; |
fisher 2 - 20.09.2004 - 15:22 |
2(1) Немного не о том речь... Я пытаюсь: БИ.ВыбратьСубконто(1,,,1); БИ.ВыбратьСубконто(1,,,2); |
wolk 3 - 20.09.2004 - 15:26 | (2) - ты объясни, чего именно хочешь добиться. |
fisher 4 - 20.09.2004 - 15:40 |
Хм... Попытаюсь. Хотя, ИМХО, это только усложнит ;) 1. Нужно получить сумму итогов по определённым корреспонденциям счетов (с товарными счетами в разрезе Склад/ТМЦ/Партия). 2. По тем комбинациям аналитики (Склад/ТМЦ/Партия), по которым таковые итоги найдутся, нужно дополнительно рассчитать сумму итогов по другим корреспонденциям (других счетов с другими товарными счетами). 3. Т.к. аналитика одинаковая, то хотелось бы это сделать одним запросом (это бы значительно упростило алгоритм и ускорило его выполнение). И за один проход. Мне казалось, что с использованием механизма нумерованных выборок это реально. Мне виделось это так: обходим результаты запроса в двух синхронных выборках (по одной и той же комбинации Склад/ТМЦ/Партия). В первой получаем п.1, а по второй пытаемся получить п.2 ЗЫ. Если я пытаюсь неправильно использовать механизм нумерованных выборок, то объясните, в каких случаях и как правильно его нужно использовать. |
fisher 5 - 20.09.2004 - 16:11 | "Неужели никто не сталкивался?" (с) БМП |
fisher 6 - 20.09.2004 - 17:12 | Брум-брум-брум-брУрум... |
AStas 7 - 20.09.2004 - 17:28 | Сталкивался, однажды пол-дня потратил на это.. Похоже действительно не работает :( |
Bot 8 - 20.09.2004 - 17:43 | Не сталкивался... Похоже действительно не работает :))) |
Провинциал 9 - 20.09.2004 - 17:50 | Покажи код |
fisher 10 - 20.09.2004 - 17:54 | 2(9) Приведен в (2) |
sergfor1c 11 - 20.09.2004 - 17:57 | Загоняю в таблицу значений и гоняю ее как нужно. |
Провинциал 12 - 20.09.2004 - 18:07 | (10)Есть подозрение, что бухзапросы выстраивают порядок группировок по мере их вызова и в дальнейшем этот порядок не должен нарушаться. Чтобы увидеть, относится ли к этому твой случай, нужен весь код, хотя бы тот, где упоминаются группировки бухзапроса. |
fisher 13 - 20.09.2004 - 18:18 |
2(12) Код, можно сказать, умер не родившись (по причине неработоспособности). И я не совсем понял, что ты имеешь в виду (но не мой случай точно ;). Ведь бух. запросы выгодно отличаются от опер. именно тем, что группировки можно обходить в порядке, отличном от объявленного. К тому же в сабже речь об различных выборках одной и той же группировки. Т.е. не работает простейший код вида: БИ.ИспользоватьСубконто(ВидыСубконто.ТМЦ); БИ.ВыполнитьЗапрос(НачДата,КонДата,СчетУчета); БИ.ВыбратьСубконто(1,,,1); БИ.ВыбратьСубконто(1,,,2); |
mikeA 14 - 20.09.2004 - 20:06 |
БИ.ВыполнитьЗапрос(дата1,дата2,счетССубконто); БИ.ВыбратьСубконто(,,,1); Пока БИ.получитьСубконто(,1)=1 Цикл Сообщить(БИ.Субконто()); БИ.ВыбратьСубконто(,,,2); Пока БИ.получитьСубконто(,2)=1 Цикл Сообщить(" "+БИ.Субконто()); КонецЦикла; КонецЦикла; 1. работает 2. во внутреннем цикле получает только 1 субконто, которое было получено во внешнем цикле. наверное если бы во внешнем цикле было получено несколько субконто, внутренний цикл прошелся бы по ним. только ХЗ как в получитьСубконто() получить группу субконтов. буду лучше про ООП читать http://bugtraq.ru/library/programming/ |
mikeA 15 - 20.09.2004 - 21:05 |
дочитал про ООП. с номерами выборок фишка в следующем: второй параметр у ВыбратьСубконто называется ФлагВсе. если туда влепить -2, то ПолучитьСубконто будет выбирать те субконто, которые имели итоги на ВЫШЕСТОЯЩЕМ уровне. т.е. внутренний цикл опять пойдет по всем субконто из запроса. флагВсе= -2; БИ= СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.ХХХ,,,1); БИ.ВыполнитьЗапрос(дата1,дата2,счетССубконтоХХХ); БИ.ВыбратьСубконто(1,,,1); Пока БИ.получитьСубконто(,1)=1 Цикл Сообщить(БИ.Субконто(1)); БИ.ВыбратьСубконто(1,флагВсе,,2); // вот здесь ФлагВсе=-2 Пока БИ.получитьСубконто(,2)=1 Цикл Сообщить(" "+БИ.Субконто(1)); КонецЦикла; КонецЦикла; |
Бодун 16 - 20.09.2004 - 21:14 |
(1): А обходить можно и не в порядке - приколись, да? Не все так тупо в бух.компоненте, как в известном тебе опер.учете. |
fisher 17 - 21.09.2004 - 10:23 |
2(14) Приведенный пример рабочий, согласен. Одно НО ;) В нём теряется смысл использования нумерованных выборок. Можно было смело использовать везде нулевой номер выборки (по умолчанию). Результат был бы тот же. 2(15) Причем ""флагВсе" к сабжу я так и не понял. По-моему, вы неверно трактуете его смысл. флагВсе = 1, схож по смыслу с параметром Все ВошедшиеВЗапрос опер. запроса. флагВсе с отрицательными значениями - уточнение той же фигни до конкретных уровней вышестоящих группировок. В любом случае, к сабжу это отношения не имеет. |
fisher 18 - 21.09.2004 - 16:30 | Хотелось бы все-таки уяснить, что такое нумерованные выборки - атавизм или полезный рабочий механизм. Если второе, то как и в каких случаях его применять. |