Имя: Пароль:
1C
1C 7.7
v7: Запрос по БухИтогам, объединение балансового и забалансового счетов
0 prochor
 
15.11.12
08:43
Вопрос касается получения выборки по номенклатуре, которая находится на балансовом 29.10 и забалансовом 004 счетах.
У моего предшественника был написан такой код в отчете        

БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Филиал.ТекущийЭлемент(), 2);
БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
БухИт.ВыполнитьЗапрос(,ДатаОтчета,"29.10",,, 1,, 5);
БухИт.ВыбратьСубконто(2);                                                
Пока БухИт.ПолучитьСубконто(2)=1 Цикл  
   Если БухИт.СКД("К")>0 Тогда
       ТЗ.НоваяСтрока();
       ТЗ.Номенклатура=БухИт.Субконто(2).ТекущийЭлемент();  
       ТЗ.НаСкладе=БухИт.СКД("К");  
       ТЗ.БалСтоим=БухИт.СКД("С");
   КонецЕсли;
КонецЦикла;
       
БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Филиал.ТекущийЭлемент());
БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура,);
БухИт.ВыполнитьЗапрос(,ДатаОтчета,СчетПоКоду("004"),,,1,,5);
БухИт.ВыбратьСубконто(2);                                                
Пока БухИт.ПолучитьСубконто(2)=1 Цикл
   Если БухИт.СКД("К")>0 Тогда
       ТЗ.НоваяСтрока();
       ТЗ.Номенклатура=БухИт.Субконто(2).ТекущийЭлемент();  
       ТЗ.НаСкладе=БухИт.СКД("К");  
       ТЗ.БалСтоим=БухИт.СКД("С");
   КонецЕсли;
КонецЦикла;

Разумеется, я решил сумничать и сделать все одним запросом для экономии времени, т.е. записал такой фрагмент:

БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Филиал.ТекущийЭлемент(), 2);
БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
БухИт.ВыполнитьЗапрос(,ДатаОтчета,"29.10, 004",,, 1,, 5);
БухИт.ВыбратьСубконто(2);                                                
Пока БухИт.ПолучитьСубконто(2)=1 Цикл  
   Если БухИт.СКД("К")>0 Тогда
       ТЗ.НоваяСтрока();
       ТЗ.Номенклатура=БухИт.Субконто(2).ТекущийЭлемент();  
       ТЗ.НаСкладе=БухИт.СКД("К");  
       ТЗ.БалСтоим=БухИт.СКД("С");
   КонецЕсли;
КонецЦикла;

Однако в таблицу перестала попадать номенклатура с забалансового 004 счета.
Я вышел из положения следующим образом:

БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Филиал.ТекущийЭлемент(), 2);
БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
БухИт.ВыполнитьЗапрос(,ДатаОтчета,"29.10",,, 1,, 5);
БухИт.ВыбратьСубконто(2);                                                
Пока БухИт.ПолучитьСубконто(2)=1 Цикл  
БухИт.ВыбратьСчета();
Пока БухИт.ПолучитьСчет() = 1 Цикл
       Если БухИт.СКД("К")>0 Тогда
           ТЗ.НоваяСтрока();
           ТЗ.Номенклатура=БухИт.Субконто(2).ТекущийЭлемент();  
           ТЗ.НаСкладе=БухИт.СКД("К");  
           ТЗ.БалСтоим=БухИт.СКД("С");
       КонецЕсли;
КонецЦикла;
КонецЦикла;
1 Popkorm
 
15.11.12
08:46
(0)вопрос то в чем?!
2 prochor
 
15.11.12
10:59
(1) ну, а почему не работает первый вариант моего кода, без переборки по счетам?
или есть какие-то особенности для балансовых и забалансовых счетов
3 zak555
 
15.11.12
11:00
> БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Филиал.ТекущийЭлемент(), 2);


запрос в цикле ?
4 2S
 
15.11.12
11:01
(2) и не будет работать. Без выборки ты получишь сгруппированную сумму по счетам
77 форева!
5 zak555
 
15.11.12
11:02
(4) врёшь
6 zak555
 
15.11.12
11:02
(2) опции смотри
7 prochor
 
15.11.12
11:22
(6) так работало же, если делать два запроса, и без обхода по первому субконто, которое = конкретному значению.

кстати, я добавлял и обход по первому субконто, но результат тот же
8 chief accountant
 
15.11.12
11:51
(7) тебеж сказали в (6)
БухИт.Опции(1);
делов-то
9 prochor
 
15.11.12
11:54
(8) спасибо!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс