Расчет БИ по каждому контрагенту в разрезе 36 и 63 счетов

YoungBoy

New member
Регистрация
24 Янв 2012
Сообщения
1
Реакции
0
Друзья, срочно нужна ваша помощь! Нужно рассчитать дебет/кредит на начало и конец периода для каждого контрагента с справочника контрагентов в разрезе 361, 362, 631 и 632 счетов. Я написал отчет со следующим алгоритмом:
1. Перебираю циклом справочник контрагентов.
2. Для каждого контрагента в цикле перебираю нужные 4 счета
3. Для каждого счета делаю запрос к БИ.

Код:
Для прклСчет=1 По 4 Цикл
		
Если прклСчет=1 Тогда Счет="361";
		
	би1 = СоздатьОбъект("БухгалтерскиеИтоги");
	би1.ИспользоватьСубконто(ВидыСубконто.Контрагенты,ТекКонтрагент,,1);
	би1.использоватьсубконто(видысубконто.заказы,,,1);
	би1.ВыполнитьЗапрос(Дата1,Дата2,Счет,,,,,); 
        би1.ВыбратьСубконто(); 
	
    Пока би1.ПолучитьСубконто()=1 Цикл  
		ЗадолженностьН = Строка(би1.Субконто(2));
		ДебитовоеСальдо=би1.СНД(Счет);
		КредитовоеСальдо=би1.СНК(Счет);
		ДебитовоеСальдоКонец=би1.СКД(Счет);
		КредитовоеСальдоКонец=би1.СКК(Счет);
    КонецЦикла;
		
ИначеЕсли прклСчет=2 Тогда Счет="362";

и т.д.

Оно работает и все правильно считает, но работает МЕДЛЕННО :( А учитывая, что в справочнике 15000 контрагентов и расчет нужен поквартально за несколько лет, то результаты ждать по сутках... :((( Подскажите, пожалуйста, можно ли как-то упростить код и ускорить расчет????? Спасибо!
 
ну вот как то так:

спСчетов = "36;63";
ВыбРазделительУчета = Константа.БазФирма;
би1 = СоздатьОбъект("БухгалтерскиеИтоги");
би1.ИспользоватьРазделительУчета(ВыбРазделительУчета);
би1.ИспользоватьСубконто(ВидыСубконто.Контрагенты,,,1);
би1.ВключатьСубсчета(-1);
би1.ВыполнитьЗапрос(Дата1,Дата2,спСчетов,,,,,);

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