Имя: Пароль:
1C
1C 7.7
v7: Как исключить внутренние обороты?
0 Lsr
 
22.10.12
13:12
Сформировал список значений с интересующим меня материалом. Скормил бух. запросу
В бух запрос (см ниже)попадают внутренние обороты по счету 10 ИТ.КО(), а меня интересует только списанный материал.
Оставил лишний код, что бы видели, куда "копал". Может кто поправит мой код.
//теперь выберем списанные материалы Д20К10
//сообщить("***************113_формируем таблицу списания материала**********************");
//Внимание!!!! 1)Поступление одного и того же материала может быть от разных контрагентов
//             2)Могут быть исправительные (красное сторно) проводки
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,СЗпоступл, 2);//1 - разворачивать по данному субконто, 2 - отбирать по данному субконто, 3-
//Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10","20,10",,2,,);
Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10","20",,2,,);// 1 - остатки и обороты по счету в целом; 2 - обороты между счетами; 3 - первое и второе вместе. По умолчанию: 1.
// (1-попадают внутренние обороты)  2,3-сальдо =оборотам            3-попадает внутр перемещ
Если Ит.ВыбратьКорСчета(1,,)=1 Тогда
Пока Ит.ПолучитьКорСчет(,)>0 Цикл
   //Сообщить("122_Ит.КорСчет="+Ит.КорСчет);
   Если Ит.КорСчет=СчетПоКоду("10") Тогда
       //Сообщить("124_Продолжить");
       Продолжить
   КонецЕсли;
   
   Если Ит.ВыбратьСубконто()=1 Тогда
   Пока ИТ.ПолучитьСубконто()>0 Цикл
       Матер= Ит.Субконто();
       //КолРасх=Ит.ОК("К");
       //СумРасх=Ит.ОК("С");
       КолРасх=-Ит.СКД("К");//?????????
       СумРасх=-Ит.СКД("С");//????????? бред,но работает
       //СальдоКД=Ит.СКД("С");
       //Сообщить("133_Матер="+Матер+", СумРасх="+СумРасх+",   Ит.КорСчет="+Ит.КорСчет);
       //2)сформировать список материалов с ненулевыми оборотами по сумме или колич
       Если  (СумРасх<>0) или (КолРасх<>0)Тогда  // (Кол<>0) или
           НомСтроки=0;
       Если ТЗматер.НайтиЗначение(Матер,НомСтроки,"Материал") = 1 Тогда // Возвращает число: 0 - значение не найдено; 1 - значение найдено
           ТЗматер.ПолучитьСтрокуПоНомеру(НомСтроки);
           //Сообщить("118_НомСтроки = "+НомСтроки+",  Матер="+Матер);
           ТЗматер.КолРасх=КолРасх;
           ТЗматер.СуммаРасх=СумРасх;
           //ТЗматер.СуммаКД=СальдоКД;
           //Сообщить("145_Матер="+Матер+", СумРасх="+СумРасх+", СальдоКД="+Ит.СКД("С"));
           Если  (КолРасх<>0) Тогда ТЗматер.ЦенаРасх=СумРасх/КолРасх КонецЕсли;
       КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   КонецЕсли;
КонецЦикла;
   КонецЕсли;
1 Lsr
 
22.10.12
22:34
Сам себе и отвечу.
При расчете бух итогов встречается ситуация, когда нас не интересует весь оборот по счету,
например, внутрее перемещение со склада на склад, а только приход или уход, т.е корреспонденция
с другими счетами. Например Д10К60, Д20К10, Д41К60.
Для этого можно воспользоваться двумя методами.
Метод1. В запросе использовать КорСубконто
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,ВыбСубконто1,1,);
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,, 1);
Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10","60;62;76",,3,, "С");
Однако использовать КорСубконто не всегда возможно.
Метод2. Использовать ВыбратьСубконто(,,2) с флагами//1 - включать в выборку счета только с дебетовыми оборотами; 2 - включать в выборку счета только с кредитовыми оборотами.
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,СЗпоступл, 2);// 2 - отбирать по данному субконто
Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10","20",,2,,);// 1 - остатки и обороты по счету в целом; 2 - обороты между счетами; 3 - первое и второе вместе.
   Если Ит.ВыбратьСубконто(,,2)=1 Тогда//1 - включать в выборку счета только с дебетовыми оборотами; 2 - включать в выборку счета только с кредито-выми оборотами.
2 zak555
 
22.10.12
22:38
> Однако использовать КорСубконто не всегда возможно.

почему ?
3 Lsr
 
23.10.12
01:28
Однако использовать КорСубконто не всегда возможно.
почему ?
Не вписывается в логику. Из второго примера видно. Нас не всегда интересует "кому ушло" или "от кого пришло". Достаточно факта, что "ушло"
4 zak555
 
23.10.12
01:33
(3) делам просто

Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "10",,,2,,1)