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