К списку форумов К списку вопросов
Бухитоги. Разные номера выборок. Туплю :-(
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
Хотелось бы все-таки уяснить, что такое нумерованные выборки - атавизм или полезный рабочий механизм. Если второе, то как и в каких случаях его применять.

К списку вопросов на форуме 1C

>>