Имя: Пароль:
1C
1C 7.7
v7: Некорректный вывод сумм амортизации ОС
0 slimuz
 
10.07.20
10:33
Добрый день.
1С 7.7. Отчёт "Регистр-расчет амортизации основных средств".
В отчете выводятся первоначальная стоимость по НУ, амортизационная премия по каждому ОС. Обычно всё нормально, но за январь 2020, почему-то с сортировкой по коду до 22 позиции суммы выводится правильно сальдо как в оборотке, а после 22ой позиции выводятся итоговые суммы сальдо по счетам. А с сортировкой по наименованию до 288 позиции суммы корректные, после итоговые суммы.

//______________________________________________________________________________
Процедура ПриОткрытии()
    Дата1=НачМесяца(ДобавитьМесяц(ТекущаяДата(),-1));
    Дата2=КонМесяца(Дата1);
    Группировка=1 ;
    Сортировка=1 ;
    Форма.ТолькоИтоги.Доступность(0);
КонецПроцедуры

//______________________________________________________________________________
Процедура ОбработкаТолькоИтоги()
    Если ТолькоИтоги=1 Тогда
        ДопРек=0 ;
        Форма.ДопРек.Доступность(0);
    Иначе
        Форма.ДопРек.Доступность(1);
    КонецЕсли;    
КонецПроцедуры    

//______________________________________________________________________________
Процедура ОбработкаГруппировка()
    Если Группировка=1 Тогда
        ТолькоИтоги=0 ;
        Форма.ТолькоИтоги.Доступность(0);
        ОбработкаТолькоИтоги();
    Иначе
        Форма.ТолькоИтоги.Доступность(1);
        ОбработкаТолькоИтоги();
    КонецЕсли;  
КонецПроцедуры

//______________________________________________________________________________
Процедура ОбработкаПринимаемые()
    Если ПринНалог=1 Тогда
        ВР="" ;
        Форма.ВР.Доступность(0);
    Иначе
        Форма.ВР.Доступность(1);
    КонецЕсли;  
КонецПроцедуры

//______________________________________________________________________________
Процедура ОчиститьОтборы()
    ВР="" ;
    АГ="" ;
    БСч="" ;
    Подр="" ;
    ИФ="" ;
    СК=0 ;
    ПринНалог=0 ;
    Форма.ВР.Доступность(1);
КонецПроцедуры

//______________________________________________________________________________
Функция ОпределитьПервоначальную(ОС)
    Спис=СоздатьОбъект("СписокЗначений");
    БИ.ПолучитьСубконто(,,ОС);
    БИ.ВыбратьСчета();
    БИ.ПолучитьСчет(,СчетПоКоду("Н05.01"));
    Перв=БИ.СКД();
    Спис.ДобавитьЗначение(Перв,"Перв");
    БИ.ПолучитьСчет(,СчетПоКоду("Н05.02.1"));
    Прем=БИ.СКК();
    Спис.ДобавитьЗначение(Прем,"Прем");
    Спис.ДобавитьЗначение((Перв-Прем),"ПервБА");
    Возврат Спис ;
    
КонецФункции        

//*******************************************
Процедура Сформировать()
    Если (Дата1<>НачМесяца(Дата1)) ИЛИ (Дата2<>КонМесяца(Дата2)) Тогда
        Предупреждение("Этот отчет формируется только за календарный период!",2);
        Возврат ;
    КонецЕсли;
    
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("");
    Таб.ВывестиСекцию("Отчет|Основная");        
    
    Если ПустоеЗначение(ВР)=0 Тогда
        ИмяОтбора="Вид расходов:" ;
        Отбор=""+ВР ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если ПустоеЗначение(АГ)=0 Тогда
        ИмяОтбора="Амортизационная группа:" ;
        Отбор=""+АГ ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если ПустоеЗначение(БСч)=0 Тогда
        ИмяОтбора="Балансовый счет:" ;
        Отбор=""+БСч ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если ПустоеЗначение(Подр)=0 Тогда
        ИмяОтбора="Подразделение:" ;
        Отбор=""+Подр.Наименование ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если ПустоеЗначение(ИФ)=0 Тогда
        ИмяОтбора="Источник финансирования:" ;
        Отбор=""+ИФ.Наименование ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если СК=1 Тогда
        ИмяОтбора="Специальный коэффициент <1" ;
        Отбор="" ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Если ПринНалог=1 Тогда
        ИмяОтбора="Учитываются при налогообложении прибыли" ;
        Отбор="" ;
        Таб.ВывестиСекцию("Отбор|Основная") ;
    КонецЕсли;
    Таб.ВывестиСекцию("Шапка|Основная");
    Если ДопРек=1 Тогда
        Таб.ПрисоединитьСекцию("Шапка|Доп");
    КонецЕсли;
    
    СчетАморт=СчетПоКоду("Н05.02.0");
    НеПринимаемые=Перечисление.ВидыРасходов.ЗначениеПоИдентификатору("НеПринимаемые");
    
    Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса="//{{ЗАПРОС(Запрос)
    |Период с Дата1 по Дата2;
    |Счет = Операция.Кредит.Счет;
    |ОсновныеСредства = Операция.Кредит.ОсновныеСредства;
    |Код = Операция.Кредит.ОсновныеСредства.Код;
    |Наименование = Операция.Кредит.ОсновныеСредства.Наименование;
    |АмортизационнаяГруппа = Операция.Кредит.ОсновныеСредства.АмортизационнаяГруппа;
    |ВидРасхода = Операция.Кредит.ОсновныеСредства.ВидРасхода;
    |ИсточникФинансирования = Операция.Кредит.ОсновныеСредства.ИсточникФинансирования;
    |Подразделение = Операция.Кредит.ОсновныеСредства.Подразделение;
    |СчетЗатрат = Операция.Кредит.ОсновныеСредства.СчетЗатрат;
    |СпециальныйКоэффициент = Операция.Кредит.ОсновныеСредства.СпециальныйКоэффициент;
    |Срок = Операция.Кредит.ОсновныеСредства.СрокПолезногоИспользованияН;
    |Сумма = Операция.Сумма;
    |Функция СуммаКО = КО(Сумма) ;
    |Условие(Счет = СчетАморт);
    |" ;//}}ЗАПРОС

    
    ЕстьОтбор=0 ;
    Если ПустоеЗначение(ВР)=0 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (ВидРасхода=ВР);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если ПустоеЗначение(АГ)=0 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (АмортизационнаяГруппа=АГ);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если ПустоеЗначение(БСч)=0 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (СчетЗатрат=БСч);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если ПустоеЗначение(Подр)=0 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (Подразделение=Подр);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если ПустоеЗначение(ИФ)=0 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (ИсточникФинансирования=ИФ);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если СК=1 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (СпециальныйКоэффициент<1);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    Если ПринНалог=1 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Условие (ВидРасхода<>НеПринимаемые);
        |" ;
        ЕстьОтбор=1 ;
    КонецЕсли;
    
    Если Группировка=2 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Группировка ВидРасхода;
        |" ;
    ИначеЕсли Группировка=3 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Группировка АмортизационнаяГруппа;
        |" ;
    ИначеЕсли Группировка=4 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Группировка СчетЗатрат;
        |" ;
    КонецЕсли;
    
    Если Сортировка=1 Тогда
        Текстзапроса=ТекстЗапроса+"
        |Группировка ОсновныеСредства Упорядочить по ОсновныеСредства.Код;
        |" ;
    Иначе
        Текстзапроса=ТекстЗапроса+"
        |Группировка ОсновныеСредства Упорядочить по ОсновныеСредства.Наименование;
        |" ;
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Сообщить("Ошибочка");
        Возврат ;
    КонецЕсли;
    
    БИ=СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто("ОсновныеСредства");
    БИ.ВыполнитьЗапрос(Дата1,Дата2,"Н05.01,Н05.02.1");
    Состояние("Запрос сделан. Обрабатываю...");
    БИ.ВыбратьСубконто();
    
    
    Счетчик=0 ;
    СчетчикГр=0 ;
    Если Группировка=1 Тогда
        Пока Запрос.Группировка(1)=1 Цикл
            Счетчик=Счетчик+1 ;
            Состояние(Счетчик);
            Спис=ОпределитьПервоначальную(Запрос.ОсновныеСредства) ;
            П=Спис.Получить("Перв");
            А=Спис.Получить("Прем");
            ПБА=Спис.Получить("ПервБА");
            Таб.ВывестиСекцию("Строка|Основная");
            Если ДопРек=1 Тогда
                Таб.ПрисоединитьСекцию("Строка|Доп");
            КонецЕсли;
        КонецЦикла;
    Иначе                      
        Пока Запрос.Группировка(1)=1 Цикл
            СчетчикГр=СчетчикГр+1 ;
            Состояние(СчетчикГр);
            Счетчик=0 ;
            Если Группировка=2 Тогда
                ИмяГруппы=""+Запрос.ВидРасхода ;
            ИначеЕсли Группировка=3 Тогда
                ИмяГруппы=""+Запрос.АмортизационнаяГруппа ;
            ИначеЕсли Группировка=4 Тогда
                ИмяГруппы=Запрос.СчетЗатрат.Код+"  "+СокрП(Запрос.СчетЗатрат.Наименование) ;
            КонецЕсли;
            Таб.ВывестиСекцию("Группа|Основная");
            Если ДопРек=1 Тогда
                Таб.ПрисоединитьСекцию("Группа|Доп");
            КонецЕсли;
            Если ТолькоИтоги=0 Тогда
                Пока Запрос.Группировка(2)=1 Цикл
                    Счетчик=Счетчик+1 ;
                    Состояние(""+СчетчикГр+"  "+Счетчик);
                    Спис=ОпределитьПервоначальную(Запрос.ОсновныеСредства) ;
                    П=Спис.Получить("Перв");
                    А=Спис.Получить("Прем");
                    ПБА=Спис.Получить("ПервБА");
                    Таб.ВывестиСекцию("Строка|Основная");
                    Если ДопРек=1 Тогда
                        Таб.ПрисоединитьСекцию("Строка|Доп");
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Итог=Запрос.СуммаКО ;
    Таб.ВывестиСекцию("Итог|Основная");
    
    Если ЕстьОтбор=0 Тогда
        БИ.ОсновныеИтоги();
        БИ.ПериодД(НачГода(Дата1),Дата2);
        НарИтог=БИ.КО("Н05.02.0");
        Таб.ВывестиСекцию("НарИтог|Основная");
    КонецЕсли;
    
    ОтветственныйЗаСоставление = ФИО(?(ПустоеЗначение(Константа.ОтветственныйЗаСоставлениеРегистровНУ)=0,Константа.ОтветственныйЗаСоставлениеРегистровНУ,ТекПользователь.ПолноеИмя));
    НижнийКолонтитул=("Регистр сформирован "+ ТекущаяДата()+"  "+ ТекущееВремя());
    
    Таб.ВывестиСекцию("Подвал|Основная");
    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,0,0);
    Таб.Показать("");

КонецПроцедуры
1 Злопчинский
 
10.07.20
10:46
ну, наверное, как флажков понаставил, так и выводит
2 slimuz
 
10.07.20
11:03
(1) Каких флажков ?
3 Злопчинский
 
10.07.20
11:07
я хз... мне отсюда не видно...
отрешись и посмотри на код, как будто в первый раз видишь.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн