Имя: Пароль:
1C
1C 7.7
v7: БухИтоги по корсубконто
,
0 Nik_nik_nik
 
14.09.12
10:48
Хочу получить бух.итоги между счетами с детализацией по корсубконто. Делаю так:

   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Договоры);
   Ит.ВключатьСубсчета(1);
   Ит.ВыполнитьЗапрос(НачДата, КонДата, "41,43",,,2,, "СК");
   Ит.ВыбратьСубконто(1);
   Пока Ит.ПолучитьСубконто(1) = 1 Цикл
       Себестоимость = ?((Ит.ДО(3) - Ит.КО(3))<>0,(Ит.ДО(1) - Ит.КО(1))/(Ит.ДО(3) - Ит.КО(3)),0);
       Ит.ВыбратьСубконто(2);
       Пока Ит.ПолучитьСубконто(2) = 1 Цикл
           Ит.ВыбратьКорСубконто(1);
           Пока Ит.ПолучитьКорСубконто(1) = 1 Цикл  
               Если СписокВГО.Принадлежит(Ит.КорСубконто(1)) = 1 Тогда
                   ИдВКСМ = "Н" + Ит.Субконто(1).Код + Ит.Счет + Ит.Субконто(2);
                   НомСтр = ПолучитьПустоеЗначение("Число");
                   Если ТабЗапасов.НайтиЗначение(ИдВКСМ, НомСтр, "ИдВКСМ") = 0 Тогда
                       Продолжить;
                   Иначе
                       ТабЗапасов.УстановитьЗначение(НомСтр, "ПрКолВГО", Ит.ДО(3) - Ит.КО(3));
                       ТабЗапасов.УстановитьЗначение(НомСтр, "ПрСуммаВГО", Себестоимость*(Ит.ДО(3) - Ит.КО(3)));
                   КонецЕсли;      
                   
                   Ит.ВыбратьКорСубконто(2);
                   Пока Ит.ПолучитьКорСубконто(2) = 1 Цикл
                       
                       ТабКД.НоваяСтрока();
                       ТабКД.ИдВКСМ        = ИдВКСМ;
                       ТабКД.Контрагент    = Ит.КорСубконто(1);  
                       ТабКД.Договор        = Ит.КорСубконто(2);
                       ТабКД.Сумма        = Себестоимость*(Ит.ДО(3) - Ит.КО(3));   ///ПОЛУЧАЮ ТУТ
                       ТабКД.Количество    = Ит.ДО(3) - Ит.КО(3);                   /// И ТУТ НЕ ТЕ ИТОГИ
                       ТабКД.Счет            = Ит.Счет;
                       
                   КонецЦикла;
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;


Там где комменты, мне по Ит.ДО(3) и Ит.КО(3) - получаю итоги по субконто(2). Итоги по корсубконто(1) и корсубконто(2) не вычисляются. Почему нет и как сделать так "чтобы да!"?
1 chief accountant
 
14.09.12
11:08
Корсчета какие у тебя?
2 Nik_nik_nik
 
14.09.12
11:20
60
3 chief accountant
 
14.09.12
11:32
(2) Сделай так:
   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Договоры);
   //Ит.ВключатьСубсчета(1);
   Ит.ВыполнитьЗапрос('01/01/2012','14/09/2012', "41,43","60",,2);
   Ит.ВыбратьСубконто(1);
   Пока Ит.ПолучитьСубконто(1) = 1 Цикл
       Себестоимость = ?((Ит.ДО(3) - Ит.КО(3))<>0,(Ит.ДО(1) - Ит.КО(1))/(Ит.ДО(3) - Ит.КО(3)),0);
       Ит.ВыбратьСубконто(2);
       Пока Ит.ПолучитьСубконто(2) = 1 Цикл
           Ит.ВыбратьКорСубконто(1);
           Пока Ит.ПолучитьКорСубконто(1) = 1 Цикл  
               //Если СписокВГО.Принадлежит(Ит.КорСубконто(1)) = 1 Тогда
               //    ИдВКСМ = "Н" + Ит.Субконто(1).Код + Ит.Счет + Ит.Субконто(2);
               //    НомСтр = ПолучитьПустоеЗначение("Число");
               //    Если ТабЗапасов.НайтиЗначение(ИдВКСМ, НомСтр, "ИдВКСМ") = 0 Тогда
               //        Продолжить;
               //    Иначе
               //        ТабЗапасов.УстановитьЗначение(НомСтр, "ПрКолВГО", Ит.ДО(3) - Ит.КО(3));
               //        ТабЗапасов.УстановитьЗначение(НомСтр, "ПрСуммаВГО", Себестоимость*(Ит.ДО(3) - Ит.КО(3)));
               //    КонецЕсли;      
               //    
                   Ит.ВыбратьКорСубконто(2);
                   Пока Ит.ПолучитьКорСубконто(2) = 1 Цикл
                       
//                       ТабКД.НоваяСтрока();
//                       ТабКД.ИдВКСМ         = ИдВКСМ;
//                       ТабКД.Контрагент     = Ит.КорСубконто(1);  
//                       ТабКД.Договор         = Ит.КорСубконто(2);
//                       ТабКД.Сумма         = Себестоимость*(Ит.ДО(3) - Ит.КО(3));   ///ПОЛУЧАЮ ТУТ
//
//                       ТабКД.Количество    = Ит.ДО(3) - Ит.КО(3);                   /// И ТУТ НЕ ТЕ ИТОГИ
//
//                       ТабКД.Счет             = Ит.Счет;
                   Сообщить("ДО "+Ит.ДО(3));
                   КонецЦикла;
               //КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
4 chief accountant
 
14.09.12
11:33
работает?
5 fedoss
 
14.09.12
11:56
(0) так на 41 субсчета, без ВыбратьСчета() и не должно взлететь
6 chief accountant
 
14.09.12
11:58
(5) откуда такие познания?
7 fedoss
 
14.09.12
12:01
(6) я предположил, что это ПС типовой бухи. На 41-м счете там второе субконто не у всех субсчетов МестаХранения. Так что без ВыбратьСчета такой бух запрос даст неведомую фигню
8 chief accountant
 
14.09.12
12:20
(7) Это к сабжу не относится
9 Nik_nik_nik
 
14.09.12
12:31
(5) - проверяю
10 Nik_nik_nik
 
14.09.12
12:33
Нет, не помогло. Все равно выдало общие итоги по субконто1 и субконто2
11 chief accountant
 
14.09.12
12:39
(10) Ты про (3)?
12 Nik_nik_nik
 
14.09.12
12:43
(11) да
13 chief accountant
 
14.09.12
12:47
(12) Что-то не верится. Делаем так:

   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Договоры);
   Ит.ВыполнитьЗапрос('01/01/2012','14/09/2012', "41,43",,,2);
   Ит.ВыбратьСубконто(1);
   Пока Ит.ПолучитьСубконто(1) = 1 Цикл
       Сообщить("ДО1 "+Ит.ДО(3));
       Ит.ВыбратьСубконто(2);
       Пока Ит.ПолучитьСубконто(2) = 1 Цикл
           Ит.ВыбратьКорСубконто(1);
           Пока Ит.ПолучитьКорСубконто(1) = 1 Цикл
               Ит.ВыбратьКорСубконто(2);
               Пока Ит.ПолучитьКорСубконто(2) = 1 Цикл
                   Сообщить("ДО2 "+Ит.ДО(3));
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

Получаем:
ДО1 5
ДО2 5
ДО1 20
ДО2 20

Делаем так:

Ит.ВыполнитьЗапрос('01/01/2012','14/09/2012', "41,43","60",,2);

Получаем:
ДО1 20
ДО2 20
14 Nik_nik_nik
 
14.09.12
12:50
Нужно получить:
ДО1 20
ДО2 5
ДО2 7
ДО2 8
15 chief accountant
 
14.09.12
12:57
(14) Ну тык

Сообщить("КорДО2 "+Ит.КорДО(3));

ДО1 9
КорДО2 7
КорДО2 2

делов-то
16 Nik_nik_nik
 
14.09.12
13:04
(15) да это понятно, беда как раз в том что возвращает:

ДО1 9
КорДО2 9
КорДО2 9

Вместо:
ДО1 9
КорДО2 7
КорДО2 2
17 chief accountant
 
14.09.12
13:11
(16) Ещё раз:

   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Договоры);
   Ит.ВыполнитьЗапрос('01/01/2012','14/09/2012', "41,43","60",,2);
   Ит.ВыбратьСубконто(1);
   Пока Ит.ПолучитьСубконто(1) = 1 Цикл
       Сообщить("ДО1 "+Ит.ДО(3));
       Ит.ВыбратьСубконто(2);
       Пока Ит.ПолучитьСубконто(2) = 1 Цикл
           Ит.ВыбратьКорСубконто(1);
           Пока Ит.ПолучитьКорСубконто(1) = 1 Цикл
               Ит.ВыбратьКорСубконто(2);
               Пока Ит.ПолучитьКорСубконто(2) = 1 Цикл
                   Сообщить("КорДО2 "+Ит.КорДО(3));
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;


Возращает:
ДО1 9
Дом мод
17 от 17.02.03
КорДО2 7
Магазин
Основной договор
КорДО2 2
18 chief accountant
 
14.09.12
13:12
(17) Забыл это:
                   Сообщить(Ит.КорСубконто(1));
                   Сообщить(Ит.КорСубконто(2));
                   Сообщить("КорДО2 "+Ит.КорДО(3));
19 chief accountant
 
14.09.12
13:15
(18)+ Скрин ручной операции:
http://img826.imageshack.us/img826/1121/79147219.png
20 Nik_nik_nik
 
14.09.12
13:28
Пробую.

Почему нельзя делать "//Ит.ВключатьСубсчета(1);"?
21 chief accountant
 
14.09.12
13:31
(20) наперкуа это тебе?
22 Nik_nik_nik
 
14.09.12
13:40
(20) рядом есть такая же ерунда по 10-ым счетам, при заполнении таблицы мне нужно указывать на каком это счете происходит.

Пример отработал как надо. Теперь бы еще с субсчетами решить.
23 chief accountant
 
14.09.12
13:42
(22) Чего надо с субсчетами-то решить. Спрашивай внятно и доходчиво, а то прыгаешь от одной темы к другой
24 Nik_nik_nik
 
14.09.12
13:49
Мне нужно получить обороты в разрезе субконто 1,2 и корсубконто 1,2 по субсчетам
Т.е.
41.1 Товар1 Склад1 60(не важно какой) Контрагент1 Договор1 ДО=1
41.1 товар2 Склад1 60                 Контрагент2 Договор1 ДО=5
41.2 Товар1 Склад1 60                 Контрагент1 Договор2 ДО=3
25 chief accountant
 
14.09.12
14:01
(24) Ладно так и быть:

   Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   Ит.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
   Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты);
   Ит.ИспользоватьКорСубконто(ВидыСубконто.Договоры);
   Ит.ВыполнитьЗапрос('01/01/2012','14/09/2012', "41,43","60",,2);
   Ит.ВыбратьСчета();
   Пока Ит.ПолучитьСчет()=1 Цикл
       Ит.ВыбратьСубконто(1);
       Пока Ит.ПолучитьСубконто(1) = 1 Цикл
           Сообщить(Ит.Субконто(1));
           Сообщить(Ит.Субконто(2));
           Сообщить("Счет "+Ит.Счет);
           Сообщить("ДО1 "+Ит.ДО(3));
           Ит.ВыбратьСубконто(2);
           Пока Ит.ПолучитьСубконто(2) = 1 Цикл
               Ит.ВыбратьКорСубконто(1);
               Пока Ит.ПолучитьКорСубконто(1) = 1 Цикл
                   Ит.ВыбратьКорСубконто(2);
                   Пока Ит.ПолучитьКорСубконто(2) = 1 Цикл
                       Сообщить(Ит.КорСубконто(1));
                       Сообщить(Ит.КорСубконто(2));
                       Сообщить("КорДО2 "+Ит.КорДО(3));
                   КонецЦикла;
               КонецЦикла;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
26 Nik_nik_nik
 
14.09.12
14:04
Ясно. Вы мне очень помогли. Спасибо.