![]() |
![]() |
|
есть тз. с колонками . вычисление по формуле . вывод в СКД. | ☑ | ||
---|---|---|---|---|
0
zladenuw
30.03.13
✎
03:00
|
Делаю вот так.
Возможно есть более оптимальней вариант ? Процедура ЗаполнитьТаблицуОбщию(ТЗОбщие,ТЗ,Формула,Колонки,ПараметрыФормулы,УровеньОтчета,ФункцияОбщийПроцент,ФормулыПериод) Для каждого СтрТЗ из ТЗ Цикл СТрОбщие = ТЗОбщие.Добавить(); ЗаполнитьЗначенияСвойств(СТрОбщие,СтрТЗ); Если СТрОбщие.Раздел = "<>" Тогда СТрОбщие.Раздел = ""; КонецЕсли; Для каждого ТекКолонка из Колонки цикл ФормулаВычисления = Формула; ФормулаВычисленияКолонки = Формула; Для каждого СтрПараметр из ПараметрыФормулы цикл //Если ФункцияОбщийПроцент Тогда ИтогКолонки = ТЗ.Итог(?(ПараметрыФормулы[0].ПараметрИмя=СтрПараметр.ПараметрИмя,"",СтрПараметр.ПараметрИмя)+ТекКолонка); ИтогКолонки = ?(ЗначениеЗаполнено(Формат(ИтогКолонки,"ЧРД=.; ЧГ=0")),Формат(ИтогКолонки,"ЧРД=.; ЧГ=0"),0); ФормулаВычисленияКолонки = СтрЗаменить(ФормулаВычисленияКолонки,СтрПараметр.ПараметрИмя,ИтогКолонки); //Иначе КолонкиПоказатель = СтрТЗ[?(ПараметрыФормулы[0].ПараметрИмя=СтрПараметр.ПараметрИмя,"",СтрПараметр.ПараметрИмя)+ТекКолонка]; КолонкиПоказатель = ?(ЗначениеЗаполнено(Формат(КолонкиПоказатель,"ЧРД=.; ЧГ=0")),Формат(КолонкиПоказатель,"ЧРД=.; ЧГ=0"),0); ФормулаВычисления = СтрЗаменить(ФормулаВычисления,СтрПараметр.ПараметрИмя,КолонкиПоказатель); //КонецЕсли; КонецЦикла; СуммаВывода = 0; СуммаВыводаИтог = 0; Попытка СуммаВыводаИтог = Вычислить(ФормулаВычисленияКолонки); Исключение КонецПопытки; Попытка СуммаВывода = Вычислить(ФормулаВычисления); Исключение КонецПопытки; Если ФормулыПериод Тогда Если ФункцияОбщийПроцент Тогда //Для процентов отклонение высчитывается корректировка-первонач //Если СуммаВывода<>0 Тогда Если (СТрОбщие[Колонки[2]]-СТрОбщие[Колонки[1]]=0) и (ТекКолонка = Колонки[2] или ТекКолонка = Колонки[1])Тогда СТрОбщие[ТекКолонка] =0; Иначе Если ТекКолонка =Колонки[2] Тогда СТрОбщие[ТекКолонка] = СТрОбщие[Колонки[1]]-СТрОбщие[Колонки[0]]; ИначеЕсли ТекКолонка =Колонки[3] Тогда СТрОбщие[ТекКолонка] = СТрОбщие[Колонки[0]]+СТрОбщие[Колонки[2]]; Иначе СТрОбщие[ТекКолонка] =Окр(СуммаВывода,2);//СуммаВыводаИтог/?(ФункцияОбщийПроцент,ТЗ.Количество(),1); КонецЕсли; КонецЕсли; Если ТекКолонка =Колонки[2] Тогда СТрОбщие["И"+ТекКолонка] = СТрОбщие["И"+Колонки[1]]-СТрОбщие["И"+Колонки[0]]; ИначеЕсли ТекКолонка =Колонки[3] Тогда СТрОбщие["И"+ТекКолонка] = СТрОбщие["И"+Колонки[0]]+СТрОбщие["И"+Колонки[2]]; СТрОбщие[Колонки[3]] =Окр(СуммаВывода/ТЗ.Количество(),2); //СТрОбщие["И"+Колонки[2]] = СТрОбщие[ТекКолонка]+СТрОбщие["И"+Колонки[0]]; ИначеЕсли ТекКолонка <> Колонки[2] Тогда СТрОбщие["И"+ТекКолонка] = СуммаВыводаИтог/?(ФункцияОбщийПроцент,ТЗ.Количество(),1); ИначеЕсли ТекКолонка <> Колонки[3] Тогда СТрОбщие[Колонки[3]] =Окр(СуммаВывода/ТЗ.Количество(),2); КонецЕсли; Иначе Если СуммаВывода <>0 Тогда СТрОбщие["И"+ТекКолонка] = Окр(Вычислить(ФормулаВычисления),2); СТрОбщие[ТекКолонка] =Окр(СуммаВывода,2); СТрОбщие[Колонки[3]] =Окр(Вычислить(ФормулаВычисления),2); Иначе СТрОбщие["И"+ТекКолонка] = 0; СТрОбщие[ТекКолонка] =Окр(СуммаВывода,2); СТрОбщие[Колонки[3]] =0; КонецЕсли; КонецЕсли; Иначе Если ФункцияОбщийПроцент Тогда Если СуммаВывода >0 Тогда СТрОбщие["И"+ТекКолонка] = Окр(СуммаВывода/?(ФункцияОбщийПроцент,ТЗ.Количество(),1),2); СТрОбщие[Колонки[3]] =Окр(СуммаВывода/ТЗ.Количество(),2); СТрОбщие[ТекКолонка] =0; ИначеЕсли СуммаВыводаИтог>0 Тогда СТрОбщие["И"+ТекКолонка] = Окр(СуммаВыводаИтог/?(ФункцияОбщийПроцент,ТЗ.Количество(),1),2); Иначе СТрОбщие[Колонки[3]] = 0; СТрОбщие[ТекКолонка] =0; КонецЕсли; Иначе Если СуммаВывода <>0 Тогда СТрОбщие["И"+ТекКолонка] = Окр(Вычислить(ФормулаВычисления)/1,2); СТрОбщие[Колонки[3]] =Окр(Вычислить(ФормулаВычисления)/1,2); СТрОбщие[ТекКолонка] =0; Иначе СТрОбщие["И"+ТекКолонка] = 0; СТрОбщие[Колонки[3]] =0; СТрОбщие[ТекКолонка] =0; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |