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


Непонятности с регистром накопления и расчетом количества дней

Непонятности с регистром накопления и расчетом количества дней
Я
   asder117
 
12.06.18 - 22:33
Доброго времени суток. Имею на базе БИТ.Учет аренды, редакция 1.2
на базе бухгалтерии предприятия 2.0.
Есть документ акт возврата помещения, которым закрывается расчет с арендатором. так вот если в документе поставить время 14:00:00 или 11:12:15 то машина может посчитать или на день больше или на день меньше. Если ставить 23:59:59 или 12:00:00 то все нормально. Как будто где-то забита переодичность чуть ли не секунда, хотя этого нигде в коде нет. Кто что может посоветовать. Количество дней получается сворачиванием таблицы. Спасибо заранее.
Для информации Окончательный расчет за месяц считается модулем
РасчетСДняСдачи = Константы.бит_РасчетАрендыСДняСдачи.Получить();//ИСТИНА

    // 1CBiT_ABoltovich 24.11.2011 Начало{    

    УчитыватьДеньВозврата = Константы.бит_УчитыватьДеньВозвратаПомещения.Получить();//ИСТИНА

    // 1CBiT_ABoltovich 24.11.2011 }Конец

        
    //1. Создаем таблицу по площадям                      

    ТаблицаРасчета = Новый ТаблицаЗначений;
    ТаблицаРасчета.Колонки.Добавить("Период",                         ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
    // 1CBiT_ABoltovich 11.08.2011 Начало{            

    //ТаблицаРасчета.Колонки.Добавить("Договор",                     Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));

    ТаблицаРасчета.Колонки.Добавить("Договор",                         Новый ОписаниеТипов("СправочникСсылка.бит_КлючиДоговоров"));
    // 1CBiT_ABoltovich 11.08.2011 }Конец

    ТаблицаРасчета.Колонки.Добавить("Помещение",                    Новый ОписаниеТипов("СправочникСсылка.бит_Помещения"));
    ТаблицаРасчета.Колонки.Добавить("ВидПлощади",                    Новый ОписаниеТипов("СправочникСсылка.бит_ВидыПлощадей"));
    ТаблицаРасчета.Колонки.Добавить("Площадь",                        ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаРасчета.Колонки.Добавить("Объект",                        Новый ОписаниеТипов("СправочникСсылка.бит_ОбъектыНедвижимости"));// 1CBiT_ibaykov 03.09.2010 11:41:49    

    // 1CBiT_ABoltovich 27.07.2011 Начало{                

    //ТаблицаРасчета.Колонки.Добавить("Ставка",                        ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));

    ТаблицаРасчета.Колонки.Добавить("Ставка",                        ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(19,6));
    // 1CBiT_ABoltovich 27.07.2011 }Конец        

    ТаблицаРасчета.Колонки.Добавить("ДнейАренды",                    ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(5,0));
    ТаблицаРасчета.Колонки.Добавить("ДнейСкидки",                    ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(5,0));    // 1CBiT_ibaykov 11.11.2010 18:45:37

    ТаблицаРасчета.Колонки.Добавить("Результат",                    ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(32,16));
    ТаблицаРасчета.Колонки.Добавить("Валюта",                        Новый ОписаниеТипов("СправочникСсылка.Валюты"));
    // 1CBiT_ABoltovich 27.07.2011 Начало{                

    //ТаблицаРасчета.Колонки.Добавить("ЗначениеСкидки",                ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));  

    ТаблицаРасчета.Колонки.Добавить("ЗначениеСкидки",                ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(19,6));  
    // 1CBiT_ABoltovich 27.07.2011 }Конец    

    ТаблицаРасчета.Колонки.Добавить("СпособРасчетаСкидкиНаценки",     Новый ОписаниеТипов("ПеречислениеСсылка.бит_СпособыРасчетаСкидокНаценок"));
    ТаблицаРасчета.Колонки.Добавить("ДатаНачалаДействияСкидки",        ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));// 1CBiT_ibaykov 11.11.2010 18:38:52

    ТаблицаРасчета.Колонки.Добавить("ДатаОкончанияДействияСкидки",    ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));// 1CBiT_ibaykov 11.11.2010 18:38:54

    //bt_buld_251012_N 

    ТаблицаРасчета.Колонки.Добавить("СтавкаСНДС",                    ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    ТаблицаРасчета.Колонки.Добавить("РасчетПоСтавкеСНДС",            Новый ОписаниеТипов("Булево"));
    ТаблицаРасчета.Колонки.Добавить("РезультатСНДС",                ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(32,16));
    ТаблицаРасчета.Колонки.Добавить("СтавкаНДС",                    ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));
    //bt_buld_251012_K

    
    //2. Общие параметры запроса

                                                           
    ЗапросФАП  = Новый Запрос;
    ЗапросФАП.УстановитьПараметр("Период",                ПериодВзаиморасчетов);
    //bt_buld_040314_N 

    //ЗапросФАП.УстановитьПараметр("СписокДоговоров",    Договоры.ВыгрузитьКолонку("Договор"));

    ЗапросФАП.УстановитьПараметр("Договоры",            Договоры.Выгрузить(,"Договор, КлючСтроки"));
    ЗапросФАП.УстановитьПараметр("Помещения",            ФиксированнаяАП.Выгрузить(,"Помещение, КлючСтроки"));
    //bt_buld_040314_K

    ЗапросФАП.УстановитьПараметр("ПериодВзаиморасчетов",ПериодВзаиморасчетов);
    ЗапросФАП.УстановитьПараметр("Организация",            Организация);
    
    ЗапросФАП.Текст =
    //bt_buld_040314_N

    "ВЫБРАТЬ
    |    Договоры.Договор,
    |    Договоры.КлючСтроки
    |ПОМЕСТИТЬ Договоры
    |ИЗ
    |    &Договоры КАК Договоры
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    Помещения.КлючСтроки,
    |    Помещения.Помещение
    |ПОМЕСТИТЬ Помещения
    |ИЗ
    |    &Помещения КАК Помещения
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    Договоры.Договор КАК Договор,
    |    Помещения.Помещение КАК Помещение
    |ПОМЕСТИТЬ ДанныеДок
    |ИЗ
    |    Договоры КАК Договоры
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Помещения КАК Помещения
    |        ПО Договоры.КлючСтроки = Помещения.КлючСтроки
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Договор,
    |    Помещение
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    //bt_buld_040314_K

    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    &Период КАК Период,
    |    1 КАК ДнейАренды,
    |    ЗанятостьПомещений.Договор КАК Договор,
    |    ЗанятостьПомещений.Помещение КАК Помещение,
    |    ЕСТЬNULL(ЗанятостьПомещений.ПлощадьОстаток, 0) КАК Площадь,
    |    ВЫБОР
    |        КОГДА АрендуемыеПлощади.РасчетПоСтавкеСНДС = ИСТИНА
    |            ТОГДА ЕСТЬNULL(ЗанятостьПомещений.ПлощадьОстаток * АрендуемыеПлощади.СтавкаСНДС, 0)
    |        ИНАЧЕ ЕСТЬNULL(ЗанятостьПомещений.ПлощадьОстаток * АрендуемыеПлощади.Ставка, 0)
    |    КОНЕЦ КАК Результат,
    |    СкидкиИНаценкиПоАренде.СпособРасчетаСкидкиНаценки КАК СпособРасчетаСкидкиНаценки,
    |    СкидкиИНаценкиПоАренде.Значение КАК ЗначениеСкидки,
    |    ЗанятостьПомещений.Договор.Договор.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
    |    ЕСТЬNULL(ПараметрыДоговоровАренды.ВариантРасчетаМесячнойСтавкиАренды, ЗНАЧЕНИЕ(Перечисление.бит_ВариантыРасчетаМесячнойСтавкиАренды.ПустаяСсылка)) КАК ВариантРасчетаМесячнойСтавкиАренды,
    |    ЕСТЬNULL(ПараметрыДоговоровАренды.ВариантРасчетаАрендыПомещения, ЗНАЧЕНИЕ(Перечисление.бит_ВариантыРасчетаАрендыПомещений.ПустаяСсылка)) КАК ВариантРасчетаАрендыПомещения,
    |    ЕСТЬNULL(ПараметрыДоговоровАренды.ПериодичностьСтавкиЗаАрендуПомещения, ЗНАЧЕНИЕ(Перечисление.Периодичность.ПустаяСсылка)) КАК ПериодичностьСтавкиЗаАрендуПомещения,
    |    ЕСТЬNULL(АрендуемыеПлощади.Ставка, 0) КАК Ставка,
    |    ЗанятостьПомещений.ВидПлощади,
    |    СкидкиИНаценкиПоАренде.ДатаНачалаДействия КАК ДатаНачалаДействияСкидки,
    |    СкидкиИНаценкиПоАренде.ДатаОкончанияДействия КАК ДатаОкончанияДействияСкидки,
    |    ВЫБОР
    |        КОГДА НАЧАЛОПЕРИОДА(СкидкиИНаценкиПоАренде.ДатаНачалаДействия, ДЕНЬ) <= &Период
    |                И КОНЕЦПЕРИОДА(СкидкиИНаценкиПоАренде.ДатаОкончанияДействия, ДЕНЬ) >= &Период
    |            ТОГДА 1
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК ДнейСкидки,
    |    ЕСТЬNULL(АрендуемыеПлощади.РасчетПоСтавкеСНДС, ЛОЖЬ) КАК РасчетПоСтавкеСНДС,
    |    ЕСТЬNULL(АрендуемыеПлощади.СтавкаСНДС, 0) КАК СтавкаСНДС,
    |    ЕСТЬNULL(ЗанятостьПомещений.ПлощадьОстаток * АрендуемыеПлощади.СтавкаСНДС, 0) КАК РезультатСНДС,
    |    ВЫБОР
    |        КОГДА АрендуемыеПлощади.Ставка = 0
    |            ТОГДА 0
    |        ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(АрендуемыеПлощади.СтавкаСНДС, 1) / ЕСТЬNULL(АрендуемыеПлощади.Ставка, 1) КАК ЧИСЛО(15, 2))
    |    КОНЕЦ КАК СтавкаНДС
    |ИЗ
    |    РегистрНакопления.бит_ЗанятостьПомещений.Остатки(
    |            &Период,
    //bt_buld_040314_N

    //|            Договор В (&СписокДоговоров)

    |            (Договор, Помещение) В
    |                    (ВЫБРАТЬ
    |                        Т.Договор,
    |                        Т.Помещение
    |                    ИЗ
    |                        ДанныеДок КАК Т)
    //bt_buld_040314_K

    |                И Организация = &Организация) КАК ЗанятостьПомещений
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.бит_СкидкиИНаценкиПоАренде КАК СкидкиИНаценкиПоАренде
    |        ПО ЗанятостьПомещений.Договор = СкидкиИНаценкиПоАренде.ДоговорКонтрагента
    |            И ЗанятостьПомещений.Помещение = СкидкиИНаценкиПоАренде.Помещение
    |            И (СкидкиИНаценкиПоАренде.ПериодВзаиморасчетов = &ПериодВзаиморасчетов)
    //bt_buld_040314_N 

    //|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.бит_ПараметрыДоговоровАренды.СрезПоследних(&Период, ДоговорКонтрагента В (&СписокДоговоров)) КАК ПараметрыДоговоровАренды

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.бит_ПараметрыДоговоровАренды.СрезПоследних(&Период, ДоговорКонтрагента В (ВЫБРАТЬ Т.Договор ИЗ ДанныеДок КАК Т)) КАК ПараметрыДоговоровАренды
    //bt_buld_040314_K

    |        ПО ЗанятостьПомещений.Договор = ПараметрыДоговоровАренды.ДоговорКонтрагента
    //bt_buld_040314_N 

    //|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.бит_АрендуемыеПлощади.СрезПоследних(&Период, ДоговорКонтрагента В (&СписокДоговоров)) КАК АрендуемыеПлощади

    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.бит_АрендуемыеПлощади.СрезПоследних(&Период, ДоговорКонтрагента В (ВЫБРАТЬ Т.Договор ИЗ ДанныеДок КАК Т)) КАК АрендуемыеПлощади
    //bt_buld_040314_K

    |        ПО ЗанятостьПомещений.Договор = АрендуемыеПлощади.ДоговорКонтрагента
    |            И ЗанятостьПомещений.Помещение = АрендуемыеПлощади.Помещение
    |            И ЗанятостьПомещений.ВидПлощади = АрендуемыеПлощади.ВидПлощади
    |
    |УПОРЯДОЧИТЬ ПО
    |    Договор";
    
    //3. Выполняем запрос и заполняем таблицу

    ДнейВГоду    = ДеньГода(КонецГода(ПериодВзаиморасчетов));
    ДнейВМесяце  = День(КонецМесяца(ПериодВзаиморасчетов));
    ДеньРасчета  = 0;
    
    Корректировка = (РежимНачисленияАренднойПлаты = Перечисления.бит_РежимыНачисленияАренднойПлаты.Корректировка);
    
    Если Корректировка Тогда
        //Очистим выборочно

        СтрокиКУдалению = ФиксированнаяАП.НайтиСтроки(Новый Структура("Корректировка", Ложь));
        Инд = СтрокиКУдалению.ВГраница() - 1;
        Пока Инд >= 0 Цикл
            ФиксированнаяАП.Удалить(СтрокиКУдалению.Получить(Инд));
        КонецЦикла;   
    Иначе
        ФиксированнаяАП.Очистить();
    КонецЕсли; 
    
    Пока ДеньРасчета <= (ДнейВМесяце-1) Цикл
        
        Если РасчетСДняСдачи Тогда
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        Иначе
            Период = НачалоДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        КонецЕсли;
        
        ЗапросФАП.УстановитьПараметр("Период", Период);
        Таблица = ЗапросФАП.Выполнить().Выгрузить();
        
        Для каждого ВыборкаЗапроса Из Таблица Цикл
            
            НоваяСтрока = ТаблицаРасчета.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаЗапроса);
            
            Если НЕ ЗначениеЗаполнено(ВыборкаЗапроса.ВариантРасчетаМесячнойСтавкиАренды) Тогда
                НоваяСтрока.Результат = 0;
            Иначе
                Если ВыборкаЗапроса.ВариантРасчетаАрендыПомещения = Перечисления.бит_ВариантыРасчетаАрендыПомещений.ФиксированоЗаПериод Тогда
                    РасчетнаяПлощадь = 1;
                Иначе
                    РасчетнаяПлощадь = ВыборкаЗапроса.Площадь;
                КонецЕсли;     
                Если ВыборкаЗапроса.ПериодичностьСтавкиЗаАрендуПомещения = Перечисления.Периодичность.Месяц Тогда
                    //bt_buld_261012_N 

                    ДневнаяСтавка = ?(ВыборкаЗапроса.РасчетПоСтавкеСНДС, ВыборкаЗапроса.СтавкаСНДС/ДнейВМесяце, ВыборкаЗапроса.Ставка/ДнейВМесяце);
                    //ДневнаяСтавкаСНДС = ВыборкаЗапроса.СтавкаСНДС/ДнейВМесяце; 

                    //bt_buld_261012_K

                Иначе    
                    Если ВыборкаЗапроса.ВариантРасчетаМесячнойСтавкиАренды = Перечисления.бит_ВариантыРасчетаМесячнойСтавкиАренды.ГодНа12  Тогда
                        //bt_buld_291012_N

                        ДневнаяСтавка = ?(ВыборкаЗапроса.РасчетПоСтавкеСНДС, ВыборкаЗапроса.СтавкаСНДС/(ДнейВМесяце*12), ВыборкаЗапроса.Ставка/(ДнейВМесяце*12));
                        //ДневнаяСтавкаСНДС = ВыборкаЗапроса.СтавкаСНДС/(ДнейВМесяце*12); 

                        //bt_buld_291012_K

                    Иначе       
                        //bt_buld_291012_N 

                        ДневнаяСтавка = ?(ВыборкаЗапроса.РасчетПоСтавкеСНДС, ВыборкаЗапроса.СтавкаСНДС/ДнейВГоду, ВыборкаЗапроса.Ставка/ДнейВГоду);
                        //ДневнаяСтавкаСНДС = ВыборкаЗапроса.СтавкаСНДС/ДнейВГоду; 

                        //bt_buld_291012_K

                    КонецЕсли;
                КонецЕсли; 
                НоваяСтрока.Результат        = РасчетнаяПлощадь*ДневнаяСтавка;
                //bt_buld_291012_N 

                //НоваяСтрока.РезультатСНДС    = ВыборкаЗапроса.РезультатСНДС;

                Если ВыборкаЗапроса.РасчетПоСтавкеСНДС Тогда
                    НоваяСтрока.РезультатСНДС = НоваяСтрока.Результат;
                Иначе
                    НоваяСтрока.РезультатСНДС = НоваяСтрока.Результат * ВыборкаЗапроса.СтавкаНДС;
                КонецЕсли;
                //bt_buld_291012_K

            КонецЕсли;
        КонецЦикла;    
        ДеньРасчета = ДеньРасчета + 1;                  
    КонецЦикла;    
    
    Если ТаблицаРасчета.Количество() = 0 Тогда           
        ТекстСообщения = "Нет помещений, сданных в аренду.";
        ОбщегоНазначения.СообщитьОбОшибке(ТекстСообщения, Ложь, "Расчет арендной платы за площадь", СтатусСообщения.Информация);    
        Возврат;
    КонецЕсли;   
    
    // 1CBiT_ABoltovich 24.11.2011 Начало{            

    
    //Учитывать в расчетах день возврата помещения    

    ПараметрыОтбора = Новый Структура;    
    
    Если РасчетСДняСдачи Тогда
        
        Если УчитыватьДеньВозврата Тогда
            // ++

            
            ТЗИзмененияАренды = ОпределитьИзмененияАренды(Договоры.ВыгрузитьКолонку("Договор"));
            
            Для Каждого строка Из ТЗИзмененияАренды Цикл
                
                Если строка.ПлощадьОборот > 0 Тогда
                    Продолжить;
                КонецЕсли;
                
                Если строка.ПлощадьОстаток > 0 Тогда  
                    
                    ПараметрыОтбора.Вставить("Период", КонецДня(строка.ДатаИзменения));
                    ПараметрыОтбора.Вставить("Договор", строка.Договор);
                    ПараметрыОтбора.Вставить("Помещение", строка.Помещение);
                    ПараметрыОтбора.Вставить("ВидПлощади", строка.ВидПлощади);
                    НайденныеСтроки = ТаблицаРасчета.НайтиСтроки(ПараметрыОтбора);
                    
                    Если НайденныеСтроки.Количество() > 0 Тогда
                        
                        НайденныеСтроки[0].Площадь = строка.ПлощадьНачальныйОстаток;
                        
                    КонецЕсли;
                    
                Иначе
                    
                    ЗапросФАП.УстановитьПараметр("Период", НачалоДня(строка.ДатаИзменения));
                    Таблица = ЗапросФАП.Выполнить().Выгрузить();
                    
                    Для каждого ВыборкаЗапроса Из Таблица Цикл
                        
                        // 1CBiT_ABoltovich 11.01.2012 Начало{            

                        Если строка.Договор <> ВыборкаЗапроса.Договор
                            ИЛИ строка.Помещение <> ВыборкаЗапроса.Помещение
                            ИЛИ строка.ВидПлощади <> ВыборкаЗапроса.ВидПлощади Тогда
                            
                            Продолжить;
                            
                        КонецЕсли;
                        // 1CBiT_ABoltovich 11.01.2012 }Конец

                        
                        НоваяСтрока = ТаблицаРасчета.Добавить();
                        ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаЗапроса);
                        
                        Если НЕ ЗначениеЗаполнено(ВыборкаЗапроса.ВариантРасчетаМесячнойСтавкиАренды) Тогда
                            НоваяСтрока.Результат         = 0;
                            //bt_buld_291012_N 

                            НоваяСтрока.РезультатСНДС     = 0;
                            //bt_buld_291012_K

                        Иначе
                            Если ВыборкаЗапроса.ВариантРасчетаАрендыПомещения = Перечисления.бит_ВариантыРасчетаАрендыПомещений.ФиксированоЗаПериод Тогда
                                РасчетнаяПлощадь = 1;
                            Иначе
                                РасчетнаяПлощадь = ВыборкаЗапроса.Площадь;
                            КонецЕсли;     
                            Если ВыборкаЗапроса.ПериодичностьСтавкиЗаАрендуПомещения = Перечисления.Периодичность.Месяц Тогда
                                ДневнаяСтавка         = ВыборкаЗапроса.Ставка/ДнейВМесяце;
                                //bt_buld_291012_N 

                                ДневнаяСтавкаСНДС     = ВыборкаЗапроса.СтавкаСНДС/ДнейВМесяце;
                                //bt_buld_291012_K

                            Иначе    
                                Если ВыборкаЗапроса.ВариантРасчетаМесячнойСтавкиАренды = Перечисления.бит_ВариантыРасчетаМесячнойСтавкиАренды.ГодНа12  Тогда
                                    ДневнаяСтавка         = ВыборкаЗапроса.Ставка/(ДнейВМесяце*12);
                                    //bt_buld_291012_N 

                                    ДневнаяСтавкаСНДС    = ВыборкаЗапроса.СтавкаСНДС/(ДнейВМесяце*12);
                                    //bt_buld_291012_K

                                Иначе       
                                    ДневнаяСтавка         = ВыборкаЗапроса.Ставка/ДнейВГоду;
                                    //bt_buld_291012_N 

                                    ДневнаяСтавкаСНДС    = ВыборкаЗапроса.СтавкаСНДС/ДнейВГоду;
                                    //bt_buld_291012_K

                                КонецЕсли;
                            КонецЕсли; 
                            НоваяСтрока.Результат        = РасчетнаяПлощадь*ДневнаяСтавка;
                            //bt_buld_291012_N 

                            НоваяСтрока.РезультатСНДС     = РасчетнаяПлощадь*ДневнаяСтавкаСНДС;
                            //bt_buld_291012_K

                        КонецЕсли;
                    КонецЦикла;    
                    
                КонецЕсли;
                
            КонецЦикла;
            
        Иначе
            // ничего не делаем

        КонецЕсли;
        
    Иначе
        
        Если УчитыватьДеньВозврата Тогда
            // ничего не делаем

        Иначе
            
            ТЗИзмененияАренды = ОпределитьИзмененияАренды(Договоры.ВыгрузитьКолонку("Договор"));
            
            Для Каждого Строка Из ТЗИзмененияАренды Цикл
                
                Если Строка.ПлощадьОборот > 0 Тогда
                    Продолжить;
                КонецЕсли;
                
                ПараметрыОтбора.Вставить("Период", НачалоДня(строка.ДатаИзменения));
                ПараметрыОтбора.Вставить("Договор", строка.Договор);
                ПараметрыОтбора.Вставить("Помещение", строка.Помещение);
                ПараметрыОтбора.Вставить("ВидПлощади", строка.ВидПлощади);
                НайденныеСтроки = ТаблицаРасчета.НайтиСтроки(ПараметрыОтбора);
                
                Если НайденныеСтроки.Количество() > 0 Тогда
                    
                    Если Строка.ПлощадьОстаток > 0 Тогда  
                        
                        НайденныеСтроки[0].Площадь = Строка.ПлощадьОстаток;
                        
                    Иначе
                        
                        ТаблицаРасчета.Удалить(НайденныеСтроки[0]);
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
        
    КонецЕсли;
    
    ТаблицаРасчета.Сортировать("Период, Договор, Помещение, ВидПлощади");
    
    // 1CBiT_ABoltovich 24.11.2011 }Конец

    
    //расчет с учетом скидки

    РасчетыФАП = ТаблицаРасчета.Скопировать();
    РасчетыФАП.Свернуть("Договор, Помещение, ВидПлощади, СпособРасчетаСкидкиНаценки, ЗначениеСкидки, Площадь, Ставка, СтавкаСНДС, РасчетПоСтавкеСНДС, СтавкаНДС", "ДнейАренды, Результат, РезультатСНДС, ДнейСкидки");
    
    //bt_buld_291012_N 

    Для Каждого Строка Из РасчетыФАП Цикл
        //Строка.РезультатСНДС = Строка.РезультатСНДС / (ТаблицаРасчета.Количество() / РасчетыФАП.Количество());

        Если Строка.РасчетПоСтавкеСНДС Тогда
            Сообщить (Строка.Договор.Владелец.Наименование);
            Строка.Результат = Окр(Строка.РезультатСНДС, 2) / Строка.СтавкаНДС;
        КонецЕсли;
        //Строка.Результат        = Окр(Строка.Результат, 2);

        //Строка.РезультатСНДС    = Окр(Строка.РезультатСНДС, 2);

    КонецЦикла;
    //bt_buld_291012_K

    
    // 1CBiT_ABoltovich 27.07.2011 Начало{                

    //РасчетыФАП.Колонки.Добавить("СуммаСкидки", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2));

    РасчетыФАП.Колонки.Добавить("СуммаСкидки", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(19,6));
    // 1CBiT_ABoltovich 27.07.2011 }Конец

    РасчетыФАП.ЗаполнитьЗначения(0, "СуммаСкидки");
    
    //Нужны итоги для расчета коэффициента.

    ЗапросСкидки = Новый Запрос;
    ЗапросСкидки.Текст = 
    "ВЫБРАТЬ
    |    РасчетыСкидок.Договор,
    |    РасчетыСкидок.Помещение,
    |    РасчетыСкидок.ВидПлощади КАК ВидПлощади,
    |    РасчетыСкидок.СпособРасчетаСкидкиНаценки,
    |    РасчетыСкидок.ЗначениеСкидки,
    |    РасчетыСкидок.СуммаСкидки,
    |    РасчетыСкидок.Площадь,
    |    РасчетыСкидок.ДнейАренды,
    |    РасчетыСкидок.Результат КАК РезультатРасчета,
    |    РасчетыСкидок.Ставка,
    |    РасчетыСкидок.ДнейСкидки,
    //bt_buld_291012_N         

    |    РасчетыСкидок.СтавкаСНДС,
    |    РасчетыСкидок.РасчетПоСтавкеСНДС,
    |    РасчетыСкидок.РезультатСНДС КАК РезультатРасчетаСНДС,
    |    РасчетыСкидок.СтавкаНДС КАК СтавкаНДС
    //bt_buld_291012_K

    |ПОМЕСТИТЬ РасчетСкидок
    |ИЗ
    |    &РасчетыФАП КАК РасчетыСкидок
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    РасчетСкидок.Договор КАК Договор,
    |    РасчетСкидок.Помещение КАК Помещение,
    |    РасчетСкидок.ВидПлощади КАК ВидПлощади,
    |    РасчетСкидок.СпособРасчетаСкидкиНаценки,
    |    РасчетСкидок.ЗначениеСкидки КАК ЗначениеСкидки,
    |    РасчетСкидок.СуммаСкидки,
    |    РасчетСкидок.Площадь КАК Площадь,
    |    РасчетСкидок.ДнейАренды КАК ДнейАренды,
    |    РасчетСкидок.РезультатРасчета КАК РезультатРасчета,
    |    РасчетСкидок.Ставка,
    |    РасчетСкидок.ДнейСкидки,
    //bt_buld_291012_N

    |    РасчетСкидок.СтавкаСНДС,
    |    РасчетСкидок.РасчетПоСтавкеСНДС,
    |    РасчетСкидок.РезультатРасчетаСНДС КАК РезультатРасчетаСНДС,
    |    РасчетСкидок.СтавкаНДС
    //bt_buld_291012_K

    |ИЗ
    |    РасчетСкидок КАК РасчетСкидок
    |ИТОГИ
    |    МАКСИМУМ(ЗначениеСкидки),
    |    СУММА(Площадь),
    |    МАКСИМУМ(ДнейАренды),
    |    СУММА(РезультатРасчета),
    //bt_buld_291012_N

    |    СУММА(РезультатРасчетаСНДС)
    //bt_buld_291012_K

    |ПО
    |    Договор";
    
    ЗапросСкидки.УстановитьПараметр("РасчетыФАП", РасчетыФАП);    
    РезультатЗапроса    = ЗапросСкидки.Выполнить();
    ДеревоДоговоров        = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); 
    ДоговорыАрендаторов    = ДеревоДоговоров.Строки;    
    
    РасчетыФАП.Очистить();
    
    //bt_buld_311012_N 

    СкидкаПоРезультатуСНДС = Константы.бит_РасчетыСкидкиСНДС.Получить() И Дата > Константы.бит_ДатаСкидкиСНДС.Получить();
    //bt_buld_311012_K

    
    Для Каждого ДоговорАренды Из ДоговорыАрендаторов Цикл//Договор

        
        ДеревоПомещений = ДоговорАренды.Строки;
        
        Для Каждого Запись ИЗ ДеревоПомещений Цикл
            
            Результат         = 0;
            //bt_buld_291012_N 

            РезультатСНДС     = 0;
            //bt_buld_291012_K            

            
            КоэффициентСкидки     = Запись.ДнейСкидки/Запись.ДнейАренды;// 1CBiT_ibaykov 12.11.2010 18:15:55

            
            Если Запись.СпособРасчетаСкидкиНаценки = Перечисления.бит_СпособыРасчетаСкидокНаценок.Сумма Тогда
                СуммаСкидки     = Запись.ЗначениеСкидки*КоэффициентСкидки;// 1CBiT_ibaykov 12.11.2010 18:15:57

                //bt_buld_311012_N 

                СуммаСкидкиСНДС = СуммаСкидки;
                //bt_buld_311012_K

            ИначеЕсли Запись.СпособРасчетаСкидкиНаценки = Перечисления.бит_СпособыРасчетаСкидокНаценок.Процент Тогда
                СуммаСкидки     = Запись.РезультатРасчета * Запись.ЗначениеСкидки / 100 * КоэффициентСкидки;// 1CBiT_ibaykov 12.11.2010 18:15:59

                //bt_buld_311012_N 

                СуммаСкидкиСНДС = Запись.РезультатРасчетаСНДС * Запись.ЗначениеСкидки / 100 * КоэффициентСкидки;
                //bt_buld_311012_K

            Иначе
                СуммаСкидки     = 0;
                СуммаСкидкиСНДС = 0;
            КонецЕсли;
            
            // 1CBiT_ibaykov 19.11.2010  Начало{

            //bt_buld_311012_N 

            //Если СуммаСкидки > Запись.РезультатРасчета Тогда

            Если СуммаСкидки > Запись.РезультатРасчета ИЛИ СуммаСкидкиСНДС > Запись.РезультатРасчетаСНДС Тогда
                //bt_buld_311012_K

                Сообщить("Сумма скидки по помещению " + Запись.Помещение + " для договора " + Запись.Договор + " превышает величину арендной платы.");
                СуммаСкидки = Запись.РезультатРасчета;
            конецЕсли;
            // 1CBiT_ibaykov 19.11.2010 }Конец

            
            СтрокаТЧ = РасчетыФАП.Добавить();
            ЗаполнитьЗначенияСвойств(СтрокаТЧ, Запись);
            
            //bt_buld_291012_N 

            Если (СуммаСкидки + СуммаСкидкиСНДС) <> 0 Тогда
                Если СкидкаПоРезультатуСНДС Тогда
                    Результат                = Запись.РезультатРасчетаСНДС - СуммаСкидкиСНДС;
                    СтрокаТЧ.РезультатСНДС     = ?(Результат > 0, Результат, 0);
                    СтрокаТЧ.Результат         = СтрокаТЧ.РезультатСНДС / Запись.СтавкаНДС;
                    СтрокаТЧ.СуммаСкидки    = СуммаСкидкиСНДС;
                Иначе
                    Результат                = Запись.РезультатРасчета - СуммаСкидки;
                    СтрокаТЧ.Результат       = ?(Результат > 0, Результат, 0);
                    СтрокаТЧ.РезультатСНДС     = СтрокаТЧ.Результат * Запись.СтавкаНДС;
                    СтрокаТЧ.СуммаСкидки     = СуммаСкидки;
                КонецЕсли;
            Иначе
                СтрокаТЧ.Результат        = Запись.РезультатРасчета;
                СтрокаТЧ.РезультатСНДС    = Запись.РезультатРасчетаСНДС;
            КонецЕсли;
            //bt_buld_291012_K

            
        КонецЦикла; 
    КонецЦикла//Договор

    
    //4. Суммируем и выводим в ТЧ

    Запрос = Новый Запрос;
    Запрос.Текст = 
    
    // бит_GMagerya начало изменений    

    "ВЫБРАТЬ
    |    Расчет.Договор,
    |    Расчет.Помещение,
    |    Расчет.ВидПлощади,
    |    Расчет.СуммаСкидки,
    |    Расчет.Площадь,
    |    Расчет.ДнейАренды,
    |    Расчет.Результат,
    |    Расчет.Ставка,
    //bt_buld_251012_N

    |    Расчет.СтавкаСНДС,
    |    Расчет.РасчетПоСтавкеСНДС,
    |    Расчет.РезультатСНДС    
    //bt_buld_251012_K

    |ПОМЕСТИТЬ Расчет
    |ИЗ
    |    &Расчет КАК Расчет
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    Расчет.Договор,
    |    Расчет.Помещение,
    |    Расчет.ВидПлощади,
    |    Расчет.Ставка КАК Ставка,
    |    Расчет.СуммаСкидки КАК СуммаСкидки,
    |    Расчет.Площадь КАК Площадь,
    |    Расчет.ДнейАренды КАК ДнейАренды,
    |    Расчет.Результат КАК Результат,
    //bt_buld_261012_N 

    |    Расчет.СтавкаСНДС,
    |    Расчет.РасчетПоСтавкеСНДС,
    |    Расчет.РезультатСНДС
    //bt_buld_261012_K

    |ИЗ
    |    Расчет КАК Расчет";
    // бит_GMagerya конец изменений

    
    Запрос.УстановитьПараметр("Расчет",РасчетыФАП); 
    
    РасчетыФАП = Запрос.Выполнить().Выгрузить();
    
    //5. Заполним ключ отбора в результатах расчета

    Для каждого СтрокаРасчета Из РасчетыФАП Цикл
        СтрокаДоговор = Договоры.Найти(СтрокаРасчета.Договор,"Договор");
        Если НЕ СтрокаДоговор = Неопределено Тогда
            НоваяСтрока = ФиксированнаяАП.Добавить();
            НоваяСтрока.КлючСтроки    = СтрокаДоговор.КлючСтроки;
            НоваяСтрока.Объект        = СтрокаРасчета.Помещение.Владелец;// 1CBiT_ibaykov 03.09.2010 11:53:49

            //bt_buld_251012_N 

            //НоваяСтрока.Помещение    = СтрокаРасчета.Помещение;

            //НоваяСтрока.ВидПлощади    = СтрокаРасчета.ВидПлощади;

            //// 1CBiT_ABoltovich 27.07.2011 Начало{            

            ////НоваяСтрока.Результат    = ОКР(СтрокаРасчета.Результат, 2);

            //НоваяСтрока.Результат    = СтрокаРасчета.Результат;

            //// 1CBiT_ABoltovich 27.07.2011 }Конец            

            //НоваяСтрока.СуммаСкидки    = СтрокаРасчета.СуммаСкидки;

            //НоваяСтрока.ДнейАренды    = СтрокаРасчета.ДнейАренды;

            //НоваяСтрока.Площадь      = СтрокаРасчета.Площадь;

            //НоваяСтрока.Ставка      = СтрокаРасчета.Ставка;

            ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаРасчета);
            //bt_buld_251012_K

        КонецЕсли; 
    КонецЦикла; 
    
    //bt_buld_261012_N 

    ФиксированнаяАП.Сортировать("Помещение");
    //bt_buld_261012_K
 
 
   shuhard
 
1 - 12.06.18 - 22:37
(0)[ то машина может посчитать ]
чё ?
   asder117
 
2 - 12.06.18 - 22:41
(1) Звиняйте. В результате может получиться количество дней которые арендовал арендатор или на день больше или на день меньше
   zak555
 
3 - 12.06.18 - 22:56
Что там за запросы в цикле?
   asder117
 
4 - 13.06.18 - 06:42
(3) 1-ый запрос по регистру занятости..какиеместа занимал арендатор; 2-ой сколько дней предоставлялась и кому скидка
   hhhh
 
5 - 13.06.18 - 08:14
(4) приводите все даты к началу дня. или к концу дня.
   asder117
 
6 - 13.06.18 - 08:31
(5) я все это понимаю.
Имеете ввиду даты при записи документа?
А так в расчете 
Если РасчетСДняСдачи Тогда
            Период = КонецДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        Иначе
            Период = НачалоДня(ПериодВзаиморасчетов + ДеньРасчета*24*60*60);
        КонецЕсли;
        
        ЗапросФАП.УстановитьПараметр("Период", Период);
        Таблица = ЗапросФАП.Выполнить().Выгрузить();
   dubraver
 
7 - 13.06.18 - 08:48
А так?
Запрос.УстановитьПараметр("Период", Новый Граница(ПериодВзаиморасчетов , ВидГраницы.Включая));
   asder117
 
8 - 13.06.18 - 10:37
(7) Конечно попробую. Блин прогу делала суппер франчайзи....и столько косяков...просто не понятно откуда лезе все это главное изменить  стоит на час вперед или час назад и количество дней меняется
   Cyberhawk
 
9 - 13.06.18 - 10:45
Сколько платят за решение вопроса? 
   hhhh
 
10 - 13.06.18 - 10:57
(6) не при записи, а при чтении. В запросе.
 
 Рекламное место пустует
   asder117
 
11 - 13.06.18 - 11:04
(10) буду пробовать колдовать. А каким макером лучше сдеалать енто? (9) рассмешили....нифига...делай сказали сам..а биты отвертелись
   Cyberhawk
 
12 - 13.06.18 - 11:06
(11) Безоплатно работаешь что ли?
   asder117
 
13 - 13.06.18 - 11:29
зряплата
   catena
 
14 - 13.06.18 - 11:54
(8)А сам документ движения пишет в указанную дату? Может там в алгоритме проведения собака зарыта.
   hhhh
 
15 - 13.06.18 - 11:56
(11) а не всё ли равно сколько там дней. Обоснуй, объясни всем, что так и надо, что такая методика БИТа.
   asder117
 
16 - 13.06.18 - 13:19
(15) от количества дней арендная плата зависит.
(14) пишет и время присваивает то которое в доке
///

Процедура ВыполнитьДвиженияПоЗанятостиПомещений(ТаблицаПлощадей, СтруктураШапкиДокумента)

    ДвижениеЗанятость = Движения.бит_ЗанятостьПомещений;

    Для каждого СтрокаТаблицы Из ТаблицаПлощадей Цикл
        
        Движение = ДвижениеЗанятость.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        
        ЗаполнитьЗначенияСвойств(Движение, СтрокаТаблицы);
        Движение.Период      = СтруктураШапкиДокумента.Дата;
        Движение.Организация = СтруктураШапкиДокумента.Организация;
        Движение.Договор     = СтруктураШапкиДокумента.Договор;
    КонецЦикла; 
    
КонецПроцедуры

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