Вход | Регистрация

1С:Предприятие ::

Метки:Встроенный язык

БухИтоги. Странность.

Я
   maxi2
 
17.11.04 - 06:15
Есть такой код в процедуре:
БухИт.Рассчитать(,КонМесяца(ДатаДок),"01.1;01.2;01.3;01.4;01.5;01.6;01.7;01.8;01.9;001;021;02;014;015",0)
Потом идет проход по строкам в документе:
        Пока ПолучитьСтроку() = 1 Цикл
            СтЦена = 0; СтИзносА = 0; СтИзносИ = 0;
            Если ОС.Выбран()=1 Тогда
                Если ДатаДок <= КонецРассчитанногоПериодаБИ() Тогда
                    ОпределениеЦеныИзноса(БухИт2,ОС,СтЦена,СтИзносА,СтИзносИ);
                Иначе
                    Сообщить("Не рассчитаны бухгалтерские итоги на дату документа!");
                КонецЕсли;
                БалансоваяСтоимость = СтЦена;
                Износ = СтИзносА;
                ИзносИ = СтИзносИ;
                Стоимость = СтЦена+СтЦена*СтавкаНДС.Ставка/100;
            КонецЕсли;
        КонецЦикла;

И вот процедурка ОпределениеЦеныИзноса, которая тут выхывается. Находится она в Глобальном.
   Если ТекТМЦ.Вид() = "ОсновныеСредства" Тогда
      Сумм011 = БухИт.СКД("01.1",,,ТекТМЦ);
      Сумм012 = БухИт.СКД("01.2",,,ТекТМЦ);
      Сумм013 = БухИт.СКД("01.3",,,ТекТМЦ);
      Сумм014 = БухИт.СКД("01.4",,,ТекТМЦ);
      Сумм015 = БухИт.СКД("01.5",,,ТекТМЦ);
      Сумм016 = БухИт.СКД("01.6",,,ТекТМЦ);
      Сумм017 = БухИт.СКД("01.7",,,ТекТМЦ);
      Сумм019 = БухИт.СКД("01.9",,,ТекТМЦ);
      Сумм0110 = БухИт.СКД("01.10",,,ТекТМЦ);

      Сумм018 = БухИт.СКД("01.8",,,ТекТМЦ);
      Сумм084 = БухИт.СКД("08.4",,,ТекТМЦ);
      Сумм0811 = БухИт.СКД("08.11",,,ТекТМЦ);
      Сумм001 = БухИт.СКД("001",,,ТекТМЦ);
      Сумм021 = БухИт.СКД("021",,,ТекТМЦ);
Ну и т.д.

Суть в том что при работе этой схемы данные я неполучаю. А если перед этим запустить дуругую процедуру которая работает с другими БухИтогами:
Процедура Пров()
    
    БухИт2.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства,,1);
    Счета="01.1,01.2,01.3,01.4,01.5,01.6,01.7,01.8,01.9,01.10,02";
    БухИт2.ВыполнитьЗапрос(,КонМесяца(ДатаДок),Счета)//,,,1);

    БухИт2.ВыбратьСчета();
    Пока БухИт2.ПолучитьСчет() = 1 Цикл
        Если (
        (БухИт2.Счет.Родитель(1) = СчетПоКоду("01"))
        И (БухИт2.СКК()<>0) )
        ИЛИ ((БухИт2.Счет = СчетПоКоду("02")) И (БухИт2.СКД()<>0)) Тогда
            Сообщить("Неверные остатки по счету " + БухИт2.Счет);
            Возврат;
        КонецЕсли;
    КонецЦикла;
    
    СубТабл=СоздатьОбъект("ТаблицаЗначений");
    СубТабл.НоваяКолонка("ОС");
    СубТабл.НоваяКолонка("СС");
    СубТабл.НоваяКолонка("Деб","Число",15,2);
    СубТабл.НоваяКолонка("Кред","Число",15,2);
    СубТабл.НоваяКолонка("НПА","Число",10,2);
    СубТабл.НоваяКолонка("ПА","Число",10,2);
    СубТабл.НоваяКолонка("А","Число",10,2);
    СубТабл.НоваяКолонка("СНПА","Число",15,2);
    СубТабл.НоваяКолонка("СПА","Число",15,2);
    СубТабл.НоваяКолонка("СА","Число",15,2);
   //НПА - НеПолностьюАмортизированные

   //ПА - ПолностьюАмортизированные

   //А - Амортизируемые

   //СНПА - тоже самое но в суммовом вырожении

    
    БухИт2.ВыбратьСубконто();
    Состояние("Заполнение таблицы");
    Пока БухИт2.ПолучитьСубконто()=1 Цикл
        ОС=БухИт2.Субконто(1);
       //Сообщить(" "+"Зап. ОС:"+ОС);        

        БухИт2.ВыбратьСчета();
        Пока БухИт2.ПолучитьСчет() = 1 Цикл
           //Если (НалБаза=2) И (ОС.Налогообложение<>1) Тогда

           //    продолжить;

           //ИначеЕсли (НалБаза=3) И (ОС.Налогообложение=1) Тогда

           //    продолжить;

           //КонецЕсли;

            СубТабл.НоваяСтрока();
            СубТабл.ОС=ОС;
            СубТабл.Деб=БухИт2.СКД();
            СубТабл.Кред=БухИт2.СКК();
           //Сообщить(" "+"ОС:"+СубТабл.ОС+" Дебет="+СубТабл.Деб);

            Если СубТабл.Деб>0 Тогда
                СубТабл.СС=БухИт2.Счет;
            КонецЕсли;
            тт=СубТабл.Деб-СубТабл.Кред;            
            Если тт<=0 тогда
                СубТабл.ПА=1;
                СубТабл.НПА=0;
                СубТабл.СНПА=0;
                СубТабл.СПА=СубТабл.Кред;
               //Сообщить(СубТабл.Деб);

               //сообщить(" "+"ОС: "+ОС+"полностью аммортизировано ( "+тт+" )");

            иначе
                СубТабл.НПА=1;
                СубТабл.ПА=0;
                СубТабл.СПА=0;
                СубТабл.СНПА=СубТабл.Деб;
               //Сообщить(СубТабл.Деб);

               //сообщить(" "+"ОС: "+ОС+"НЕ полностью аммортизировано ( "+тт+" )");

            КонецЕсли;        
            
            
            СубТабл.А=1;
            СубТабл.СА=СубТабл.Деб;
            
        КонецЦикла;
    КонецЦикла;
    
    Сообщить(" "+"1Строк:"+СубТабл.КоличествоСтрок());    
    Состояние("Первая свертка");
   //СубТабл.Свернуть("ОС","СС,Деб,Кред");

    СубТабл.Свернуть("ОС","СС,Деб,Кред,НПА,ПА,А,СНПА,СПА,СА");
    
    Состояние("Проверка субсчета");
   //Проверка по СС

    СубТабл.ВыбратьСтроки();
    Пока СубТабл.ПолучитьСтроку() = 1 Цикл
        Если ПустоеЗначение(СубТабл.СС)=1 Тогда
            Сообщить("ОС "+СубТабл.ОС+" "+СубТабл.ОС.Код+" нет остатков на 01 счете");
            Сообщить("Будет использован реквизит справочника");
            СубТабл.СС=СубСчет(СубТабл.ОС.Группа);
        КонецЕсли;
    КонецЦикла;
    
   //Сообщить(" "+"2Строк:"+СубТабл.КоличествоСтрок());    

   //Состояние("Вторая свертка");

   //СубТабл.Свернуть("СС","Деб,Кред");

   //СубТабл.Свернуть("СС","Деб,Кред,НПА,ПА,А,СНПА,СПА,СА");

   //СубТабл.Сортировать("СС");

    
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 цикл
        Стр="";
        Кол="";
       //Сообщить(" "+"Строк:"+СубТабл.КоличествоСтрок());

       //Сообщить(ОС);

        Если СубТабл.НайтиЗначение(ОС,Стр,Кол)=1 тогда
            Сообщить(" "+"Стр="+Стр);
            Б=СубТабл.ПолучитьЗначение(Стр,"Деб");
            Сообщить(" "+"Балансовая стоимость ОС:"+ОС+" равна "+Б);
        Иначе
            Сообщить(" "+"Движения по ОС:"+ОС+" ненайдены!");
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

То и нужная мне отрабатывается нормально, т.е. цифры и получаю. Что такое, как такое может быть?
 
  Рекламное место пустует
   SnarkHunter
 
1 - 17.11.04 - 06:41
Я бы удивился, если бы работало... Рассчитать по одному объекту, в процедуру передается другой...
   maxi2
 
2 - 17.11.04 - 07:42
Сори тут ошибочка вышла.
Конечно строка выглядит:
 ОпределениеЦеныИзноса(БухИт,ОС,СтЦена,СтИзносА,СтИзносИ); 
а не
 ОпределениеЦеныИзноса(БухИт2,ОС,СтЦена,СтИзносА,СтИзносИ); 

И неработает. с БухИт. :(
   bsg
3 - 17.11.04 - 10:08
Попробуй вместо БухИт.СКД использовать БухИт.СКДРС
   maxi2
 
4 - 17.11.04 - 11:06
Написал вот так:
      Сумм011 = БухИт.СКДРС("01.1",,,ВидыСубконто.ОсновныеСредства,ТекТМЦ);
Так он вместо того чтобы отбирать по этому субконто все отбирает. Т.е. общая сумма на этот счет. Страно вобщем. Хотя написано формат:
СКДРС(<Счет>,<ТипСуммы>,<Валюта>,<Субконто1>,<ТипФильтра1>,<Субконто2>,<ТипФильтра2>)

Пробовал даже:
Сумм011 = БухИт.СКДРС("01.1",,,,ТекТМЦ);
Результат тот-же. :(
   bsg
5 - 17.11.04 - 12:13
СКДРС(<Счет>,<ТипСуммы>,<Валюта>,<Субконто1>,<ТипФильтра1>,<Субконто2>,<ТипФильтра2>)
А, если ТипФильтра, все-таки поставить?
   maxi2
 
6 - 17.11.04 - 12:53
Справка:
СКДРС(<?>,,,,,,)
Синтаксис:
СКДРС(<Счет>,<ТипСуммы>,<Валюта>,<Субконто1>,<ТипФильтра1>,<Субконто2>,<ТипФильтра2>)
Назначение:
Возвращает дебетовое развернутое сальдо по субконто на конец периода.
Параметры:
<Счет> - значение типа ''Счет'' - счет, для которого необходимо рассчитать развернутое сальдо. Может использоваться строка - код счета.
<ТипСуммы> - необязательный параметр. Число или строка - тип возвращаемой суммы. Может принимать одно из следующих значений: 1 (''C'') - сумма; 2 (''В'') - валютная сумма; 3 (''К'') - количество. Если параметр не указан, метод возвращает сумму.
<Валюта> - необязательный параметр. Значение типа ''Справочник.Валюты''. Если параметр не указан, то итоги выдаются без учета валюты.
<Субконто1>,<Субконто2>,... - значения субконто.
<ТипФильтра1>,<ТипФильтра2>,... - тип использования субконто. (Строка или число). ''*'' (1) - Разворачивать по данному субконто. ''!'' (2) - Отбирать по данному субконто. '' '' (3) - Не учитывать данный субконто. Значения по умолчанию: ''*'' (1) - для первого субконто, '' '' (3) - для остальных субконто.

Поставил...
      Сумм011 = БухИт.СКДРС("01.1",1,,ТекТМЦ,2);
      Сумм012 = БухИт.СКДРС("01.2",1,,ТекТМЦ,2);
      Сумм013 = БухИт.СКДРС("01.3",1,,ТекТМЦ,2);
      Сумм014 = БухИт.СКДРС("01.4",1,,ТекТМЦ,2);
      Сумм015 = БухИт.СКДРС("01.5",1,,ТекТМЦ,2);
      Сумм016 = БухИт.СКДРС("01.6",1,,ТекТМЦ,2);
      Сумм017 = БухИт.СКДРС("01.7",1,,ТекТМЦ,2);
      Сумм019 = БухИт.СКДРС("01.9",1,,ТекТМЦ,2);
      Сумм0110 = БухИт.СКДРС("01.10",1,,ТекТМЦ,2);
      Сумм018 = БухИт.СКДРС("01.8",1,,ТекТМЦ,2);
      Сумм084 = БухИт.СКДРС("08.4",1,,ТекТМЦ,2);
      Сумм0811 = БухИт.СКДРС("08.11",1,,ТекТМЦ,2);
      Сумм001 = БухИт.СКДРС("001",1,,ТекТМЦ,2);
      Сумм021 = БухИт.СКДРС("021",1,,ТекТМЦ,2);
      Износ02А = БухИт.СККРС("02",1,,ТекТМЦ,2,,,Перечисление.ТипАмортизации.Аморт,2);
      Износ02И = БухИт.СККРС("02",1,,ТекТМЦ,2,,,Перечисление.ТипАмортизации.Износ,2);

Вот так. Но. Сумма всеравно нулевая. Если тип фильтра поставить 1 тогда отбирает без учета субконто, т.е. всю сумму.
А в первый раз ошибка была. Вот так получается правильно СКДРС делать. Так ведь?
При типе фильтра 3 результат тот-же что и при фильтре 1. Т.е. вся сума по счету, без учета субконто.
   maxi2
 
7 - 17.11.04 - 13:51
Ну может кто-нибуть еще что-нибыть подскажет все-таки?
   maxi2
 
8 - 17.11.04 - 14:03
Сори, проблема решилась. Стормозил непроверил а есть ли действительно обороты по этому ОС. %)


Список тем форума
Рекламное место пустует   Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует