# Расчет арендной платы по всей базе "Земля" STRING Nom_dog = "1494"; # переменная с номером договора FLOAT s = 0.0; # переменная с суммой всех основных платежей FLOAT SumPena = 0; # переменная с суммой всех платежей по пени FLOAT Nal_den=0; # Налог в день FLOAT ar_plat=0.0; # Арендная плата за год DATE srok[13]; DATE srok_p[24]; # Сроки платежей DATE dat_plat[24]; # Даты фактических платежей DATE dat_ras="31.12.2003"; # Дата расчета DATE dat_peni="01.01.2003"; # Дата начала расчета пени FLOAT sum_fact[24]; # Суммы фактических платежей FLOAT penia[24]; # Пеня FLOAT nedoim[24]; # Недоимка по платежам FLOAT sum_ned=0; # Суммарная Недоимка FLOAT sum_pen=0; # Суммарная Пеня int del_plat=0; # Смещение платежа int last_plat=7; # Смещение последнего платежа назад в днях FLOAT kol[13]; # Количество оплачиваемых дней в месяце FLOAT kol1[13]; FLOAT k_p[12]; # Коэффициент периода(сезонный)( по умолчанию = 1 ) FLOAT proc_pen=0.001; # Процент пени int kol_per=1; date d1 = "01.01.2003"; date d2 = "01.01.99"; date d_beg = "01.01.99"; date d_end = "01.01.99"; int i = 1; int ind = 1; FLOAT rab=0; FLOAT rab1=0; FLOAT rab2=0; FLOAT kol_d=0; int i1 = 0; FLOAT Per=0; FLOAT sum_plat[24]; # Расчитанные платежи за периоды FLOAT sum_per[24]; # Суммы за периоды string str=""; int period=0; open "Земля", Z; open "Расчет1", R; trunc R; #new R; # Инициирование нулевой записи # R%"Номер_д"="Пустой"; open "Дан", D; cursor D index "Номер"=0 begin dat_ras=D%"Дата_р"; proc_pen=D%"Кпен"; end; #print dat_ras,proc_pen*100,period; #write new "data.txt", "Дата расчета арендных платежей",dat_ras; cursor Z begin Nom_dog = Z%"Номер1"; Nal_den=Z%"Налог"; period =0+Z%"Срок"; d_beg=Z%"Дн1"; d_end= Z%"Дк1"; # print Nom_dog, Nal_den, period,d_beg,d_end; # print Z%"Номер1" , Z%"Налог", Z%"Срок", Z%"Дн", Z%"Дк"; # Чтение из Справочника сроков платежей и дат расчета пени cursor D # index "Номер" = period begin # print "Первый",period,D%"Номер"; if period = D%"Номер" begin kol_per=0; i=1; loop i<13 begin # print D%"Кд"+i,D%"Др"+i,D%"К"+i; if def (D%"Кд"+i) begin kol_per=kol_per+1; kol1[i-1]=D%"Кд"+i; srok_p[i-1]=D%"Др"+i; k_p[i-1]=D%"К"+i; end; # print "Первый"; if def (D%"Дн"+i) begin srok[i-1]=D%"Дн"+i; end; i=i+1; if def (D%"Дн"+i) begin srok[i-1]=D%"Дн"+i; end; end; end; end; i=0; ar_plat=0; loop i srok[i1] | d_end < srok[i] | d_beg = srok[i1] begin kol1[i]=0; end; if d_beg > srok[i] & d_beg < srok[i1] begin kol1[i]=srok[i1]-d_beg; end; if d_end > srok[i] & d_end < srok[i1] begin kol1[i]=d_end-srok[i]+1; end; sum_plat[i]=kol1[i]*Nal_den; # print dat_ras , srok[i1],ar_plat; if dat_ras > srok[i1] | dat_ras = srok[i1] begin ar_plat=ar_plat+sum_plat[i]; end; # print i, srok[i], kol1[i],Nal_den*kol1[i]; i=i+1; end; i=0; #first R; new R; # Инициирование и обнуление полей новой записи R%"Номер_д"=Nom_dog; R%"Дата_расчета"=dat_ras; R%"Пред_нед"=0+period; R%"Ар_плата"=ar_plat; # Расчет пени open "Платежи", P; i=0; s=0; cursor P #index "Договор1"=Nom_dog begin # print Nom_dog , P%"Договор1"; if Nom_dog = P%"Договор1" begin dat_plat[i]=P%"Дата"; sum_fact[i]=P%"Сумма"; s=s+sum_fact[i]; # print i, dat_plat[i], sum_fact[i],s; i=i+1; end; end; R%"Фак_плата"=s; close P; # Сортировка платежей по возрастанию дат loop i>1 begin i1=1; loop i1 dat_plat[i1] begin d1=dat_plat[i1]; dat_plat[i1]=dat_plat[i1-1]; dat_plat[i1-1]=d1; s=sum_fact[i1]; sum_fact[i1]=sum_fact[i1-1]; sum_fact[i1-1]=s; end; i1=i1+1; end; i=i-1; end; # Сортировка закончена #print dat_ras, proc_pen*100, del_plat, last_plat; print " ***** Расчет арендной платы на ",dat_ras, "Договор", Nom_dog, " *****"; #write "data.txt", " ***** Расчет арендной платы на ",dat_ras, "Договор", Nom_dog, " *****"; # Расчет пени i1=0; # по периодам i=0; # по платежам sum_per[i1]=0; #print "Срок плат Сумма Дата плат Сумма Всего","Остал Недоим Пеня"; #write "data.txt", "Срок плат Сумма Дата плат Сумма","Всего","Остал Недоим Пеня"; #print srok_p[i1], sum_plat[i1],dat_plat[i],dat_ras,sum_fact[i]; #write "data.txt" , srok_p[i1], sum_plat[i1]; loop dat_plat[i] < dat_ras | dat_plat[i] = dat_ras & sum_fact[i]>0 # Цикл по платежам begin penia[i]=0; if dat_plat[i] > srok_p[i1] # Переход на следующий период begin nedoim[i1]=sum_plat[i1]-sum_per[i1]; sum_ned=sum_ned+nedoim[i1]; if sum_ned < 0 begin sum_per[i1+1]=0-sum_ned; sum_ned=0; end; dat_peni=srok_p[i1]; penia[i1]=nedoim[i1]*proc_pen*(dat_plat[i]-dat_peni); if sum_ned < 0.001 begin penia[i1]=0; end; sum_pen=sum_pen+penia[i1]; ind=i1+1; R%"Дата"+ind=srok_p[i1]; R%"Р_плат"+ind=sum_plat[i1]; R%"Ф_плат"+ind=sum_per[i1]; R%"Недоимка"+ind=sum_ned; R%"Пеня"+ind=sum_pen; # print "Итог периода платежа: ",sum_per[i1],nedoim[i1],sum_ned,sum_pen; i1=i1+1; # print srok_p[i1], sum_plat[i1]; end; # Конец условия переход на следующий период # Обработка платежа внутри периода if dat_plat[i] < srok_p[i1] | dat_plat[i] = srok_p[i1] begin rab=sum_fact[i] - sum_ned; # Остаток платежа после погашения недоимки if sum_ned < 0.001 # Недоимки нет begin sum_per[i1]=sum_per[i1]+sum_fact[i]; nedoim[i1]=sum_plat[i1]-sum_per[i1]; end; if sum_ned > 0.001 # Недоимка есть begin penia[i1]=sum_ned*proc_pen*(dat_plat[i]-dat_peni); # Начисление пени # print "Пеня с",sum_ned,dat_plat[i], dat_peni , penia[i1]; #sum_pen=sum_pen+penia[i1]; if rab < 0 # Недоимка гасится частично begin nedoim[i1]=sum_plat[i1]-sum_per[i1]; # Осталось заплатить за период sum_ned=sum_ned-sum_fact[i]; # Осталось недоимки за предыдущий период dat_peni=dat_plat[i]; end; if rab>0 | rab=0 # Недоимка гасится полностью begin sum_per[i1]=sum_per[i1]+rab; sum_ned=0; end; end; # Недоимка есть rab1=rab - sum_pen; # Остаток платежа после погашения пени if rab1 > 0 | rab1 = 0 & sum_pen > 0 begin sum_per[i1]=sum_per[i1]-sum_pen; sum_pen=0; end; if rab1 < 0 & sum_ned = 0 begin sum_pen=sum_pen-rab; sum_per[i1]=sum_per[i1]-rab; end; nedoim[i1]=sum_plat[i1]-sum_per[i1]; ind=i1+1; R%"Дата"+ind=srok_p[i1]; R%"Р_плат"+ind=sum_plat[i1]; R%"Ф_плат"+ind=sum_per[i1]; R%"Недоимка"+ind=sum_ned; R%"Пеня"+ind=sum_pen; # print "Внутри ",dat_plat[i],sum_fact[i],sum_per[i1],nedoim[i1],sum_ned,sum_pen; i=i+1; end; # Конец обработки платежа внутри периода end; # Конец цикла по платежам # Расчет по остальным периодам #print "Платежи закончились"; # Итог за текущий период if nedoim[i1] > 0 | nedoim[i1] = 0 #| dat_plat[i] > srok_p[i1+1] begin if dat_plat[i] > srok_p[i1] | srok_p[i1] < dat_ras | srok_p[i1] = dat_ras begin nedoim[i1]=sum_plat[i1]-sum_per[i1]; # print "Дата расчета>",dat_ras,"Срок платежа>",srok_p[i1],dat_ras-srok_p[i1],nedoim[i1]; penia[i1]=nedoim[i1]*proc_pen*(dat_ras-srok_p[i1]); sum_ned=sum_ned+nedoim[i1]; sum_pen=sum_pen+penia[i1]; end; end; if nedoim[i1] < 0 begin sum_ned=sum_ned+nedoim[i1]; sum_per[i1+1]=0-sum_ned; sum_ned=0; end; # print "Итог периода платежа: ",sum_per[i1],nedoim[i1],sum_ned,sum_pen; ind=i1+1; R%"Дата"+ind=srok_p[i1]; R%"Р_плат"+ind=sum_plat[i1]; R%"Ф_плат"+ind=sum_per[i1]; R%"Недоимка"+ind=sum_ned; R%"Пеня"+ind=sum_pen; # write "data.txt", "Итог периода: ",sum_per[i1],nedoim[i1],sum_ned,sum_pen; # Итог за остальные периоды i1=i1+1; loop i1 < kol_per begin # print srok_p[i1] , dat_ras; if srok_p[i1] < dat_ras | srok_p[i1] = dat_ras begin # sum_per[i1]=0-sum_ned; nedoim[i1]=sum_plat[i1]-sum_per[i1]; sum_ned=sum_ned+nedoim[i1]; if sum_ned > 0 begin # print "Дата расчета>",dat_ras,"Срок платежа>",srok_p[i1],dat_ras-srok_p[i1],nedoim[i1]; penia[i1]=nedoim[i1]*proc_pen*(dat_ras-srok_p[i1]); sum_pen=sum_pen+penia[i1]; end; if nedoim[i1] < 0 begin sum_per[i1+1]=0-sum_ned; sum_ned=0; end; # print srok_p[i1],sum_plat[i1]; # write "data.txt", srok_p[i1],sum_plat[i1]; # print "Пеня с",sum_ned,dat_plat[i], dat_peni , penia[i1]; ind=i1+1; R%"Дата"+ind=srok_p[i1]; R%"Р_плат"+ind=sum_plat[i1]; R%"Ф_плат"+ind=sum_per[i1]; R%"Недоимка"+ind=sum_ned; R%"Пеня"+ind=sum_pen; # print "Итог периода:остаток ",sum_per[i1],nedoim[i1],sum_ned,sum_pen; # write "data.txt", "Итог периода:остаток ",sum_per[i1],nedoim[i1],sum_ned,sum_pen; end; i1=i1+1; end; Z%"Срок-пл"=dat_ras; Z%"Суммапл"=sum_ned; Z%"Пеня"=sum_pen; sum_ned=0; sum_pen=0; ar_plat=0; #print "******************Обнуление платежей******************"; i=0; i1=0; loop i<24 begin srok_p[i]=0; sum_plat[i]=0; sum_per[i]=0; sum_fact[i]=0; nedoim[i]=0; i=i+1; end; end; close Z; close R; close D;