-- Шаблон создан мастером бланков
-- 27.02.2010 14:20:51
--
БланкСШаблоном "Конвертация остатков счета 303.02 для 152н";

ДК:D;

var МаскаСч:S="*.?.303.02.*";

var A:S="+";
var D:S="-";

var Упр1:I;

var пп[]:i=$;
var СумД1[]:N;
var СумК1[]:N;
var Сч1[]:S;
var Призн1[]:S;
var ВсегоСумД1:N=SumOfArray(СумД1,Упр1);
var ВсегоСумК1:N=SumOfArray(СумК1,Упр1);

Кмнт:S;

var Упр2:I;

var СумД2[]:N;
var СумК2[]:N;
var Сч2[]:S;
var newСч[]:S;
var Призн2[]:S;
var ВсегоСумД2:N=SumOfArray(СумД2,Упр2);
var ВсегоСумК2:N=SumOfArray(СумК2,Упр2);

var Buf[]:S;

var hСчКод:S;
var hЗнач:S;
--
--Процедуры и функции -------------
Proc Очистить1;
 ClearVariable(Упр1);
 ClearVariable(СумД1);
 ClearVariable(СумК1);
 ClearVariable(Сч1);
 ClearVariable(Призн1);
end;

Proc Очистить2;
 ClearVariable(Упр2);
 ClearVariable(СумД2);
 ClearVariable(СумК2);
 ClearVariable(Сч2);
 ClearVariable(newСч);
 ClearVariable(Призн2);
end;

Proc Перенос;
var Iter:I;
 Очистить2;
 for Iter=1..Упр1 do
  InsertFrame(Упр2,Iter);
  СумД2[Iter]=СумД1[Iter];
  СумК2[Iter]=СумК1[Iter];
  Сч2[Iter]=Сч1[Iter];
  Призн2[Iter]=Призн1[Iter];
 od;
end;

Proc Расчет;
var FName:S;
var n,nn,s,ss:i;
var tВал1,tВал2,tСчДеб,tСчКре,tКмнт,tmp:S;
var tДата:D;
var tСум1,tСум2:N;
 Очистить1;
 FName=PlanVar("CACHE")+"\"+GetGUID;
 nn=TujReport(FName,1.1.100,ДК+1,МаскаСч,"","","","",TujRepBalAccount+TujRepNoNullBal+TujRepZabalance+TujRepCombinedAna,False);
 if ExistFile(FName)=False: Exit; fi;
 OpenTextJur(FName);
 Try
  While not GetTransFromTextJur(tДата,tСум1,tВал1,tСум2,tВал2,tСчДеб,tСчКре,Buf,tКмнт) do
   n=n+1;
   InsertFrame(Упр1,Упр1+1);
   if tСчДеб="00" or tСчДеб="00Z":
      СумК1[Упр1]=tСум1;
      Сч1[Упр1]=tСчКре;
     else
      СумД1[Упр1]=tСум1;
      Сч1[Упр1]=tСчДеб;
   fi;
   ss=LengthOfArray(Buf);
   for s=1..ss do
    Призн1[Упр1]=Призн1[Упр1]+" "+Buf[s];
   od;
   Призн1[Упр1]=Trim(Призн1[Упр1]);
   if tСчДеб="00" or tСчДеб="00Z": tmp=tСчКре; else tmp=tСчДеб; fi;
  od; --While not GetTransFromTextJur(tДата,tСум1,tВал1,tСум2,tВал2,tСчДеб,tСчКре,Buf,tКмнт) do
 Finally
  CloseTextJur;
 end;
 SortSection(Упр1,"Сч1");
 Перенос;
end;

Proc БухСправка;
var Crd,tmp:S;
var OWA,n,nr,OA,i,Iter:I;
var Rec: Record;
 Crd="РПО_БУХСПРАВКА";
 if not ExistsCardFile(Crd): Message("Картотека '"+Crd+"' не найдена",mtError); Exit; fi;
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 OWA=OpenWorkArea(Crd,"","1=0");
 Try
  BeginChanging(OWA,False);
  Try
   n=InsertRecord(OWA);
   n=PutFieldI(OWA,n,"НОМЕР",Раб.Обл.СледСУчетомДаты(Crd,"Номер","ДатаСпр",ДК));
   Rec=GetRecordKey(OWA,n);
   n=PutFieldD(OWA,n,"ДАТАСПР",ДК);
   n=PutFieldR(OWA,n,"РЕКВ",Раб.Бюджет2005.НашРекв);
   OA=OpenArray(OWA,n,"ПОЗИЦИИ","");
   for Iter=1..Упр2 do
    if not Round(СумД2[Iter],2)=0 or not Round(СумК2[Iter],2)=0:
       i=InsertRecord(OA);
       i=PutFieldS(OA,i,"СОДЕРЖ",Кмнт);
       i=PutFieldS(OA,i,"СЧДЕБ",if(not Round(СумД2[Iter],2)=0,Сч2[Iter],"00"));
       i=PutFieldS(OA,i,"СЧКРЕ",if(not Round(СумК2[Iter],2)=0,Сч2[Iter],"00"));
       i=PutFieldN(OA,i,"СУММА",-Max(СумД2[Iter],СумК2[Iter]));
       i=PutFieldS(OA,i,"ПРИЗН",Призн2[Iter]);
       i=InsertRecord(OA);
       i=PutFieldS(OA,i,"СОДЕРЖ","");
       i=PutFieldS(OA,i,"СЧДЕБ",if(not Round(СумД2[Iter],2)=0,newСч[Iter],"00"));
       i=PutFieldS(OA,i,"СЧКРЕ",if(not Round(СумК2[Iter],2)=0,newСч[Iter],"00"));
       i=PutFieldN(OA,i,"СУММА",Max(СумД2[Iter],СумК2[Iter]));
       i=PutFieldS(OA,i,"ПРИЗН",Призн2[Iter]);
    fi;
   od;
   CloseWorkArea(OA);
   EndChanging(OWA);
  Except
   CancelChanging(OWA);
   Raise;
  end;
 Finally
  CloseWorkArea(OWA);
 end;
 OpenBlank("ДОКУМЕНТЫ.ПРОЧИЕ.БУХСПРАВКА",True,Rec);
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func ДК_OnEnter(FieldName: String; Iter: Integer): logical;
 if not Упр2=0:
    if EnqOkCancel("Изменение даты приведет к очистке таблицы переноса, продолжить ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 Return True;
end;

Proc ДК_OnExit(FieldName: String; Iter: Integer);
 Очистить1;
 Очистить2;
end;

Func ДК_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
 Template.HideEditor(False);
 tmp=Calendar;
 if not tmp=1.1.100:
    ДК=tmp;
    Очистить1;
    Очистить2;
 fi;
 Return Cur;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр2,Iter+1);
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр2,Iter);
 Return False;
end;

Func Сч2_OnEnter(FieldName: String; Iter: Integer): logical;
var i:i;
 ClearVariable(Buf);
 for i=1..Упр1 do
  Buf[i]=Сч1[i]+"   {"+Призн1[i]+"}  ="+Format("%.2N",Max(СумД1[i],СумК1[i]));
 od;
 i=Alternate("Выберите счет",Buf,-1,SearchInArray(Buf,hЗнач),12);
 if not i=0:
    if Упр2=0: InsertFrame(Упр2,1); fi;
    if Round(СумД2[Iter],2)=0 and Round(СумК2[Iter],2)=0:
       СумД2[Iter]=СумД1[i];
       СумК2[Iter]=СумК1[i];
    fi;
    Сч2[Iter]=Сч1[i];
    Призн2[Iter]=Призн1[i];
    hЗнач=Buf[i];
 fi;
 Return False;
end;

Func newСч_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp:S;
 if Сч2[Iter]="": Message("Введите исходный счет",mtError); Template.Field="Сч2"; Template.Frame=Iter; ^False; fi;
 tmp=Раб.Бюджет2005.ВзятьКодСчета(Сч2[Iter],"","ВД",True)+"."+hСчКод+if(hСчКод="","","."+Раб.Бюджет2005.ВзятьКодСчета(Сч2[Iter],"","КОСГУ",False));
 tmp=AccountElection("(*.303.02.*|*.303.05.*|*.303.07.*|*.303.08.*|*.303.09.*|*.303.10.*|*.303.11.*)&*."+Раб.Бюджет2005.ВзятьКодСчета(Сч2[Iter],"","КОСГУ",False),False,tmp);
 if not tmp="":
    newСч[Iter]=tmp;
    hСчКод=Раб.Бюджет2005.ВзятьКодСчета(tmp,"","Сч5",False);
 fi;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnРасчет_OnClick(Sender: String);
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 if not Упр1=0:
    if EnqOkCancel("Таблицы будут очищены, продолжить ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 Расчет;
end;

Proc btnПеренос_OnClick(Sender: String);
 if not Упр2=0:
    if EnqOkCancel("Таблица переноса будет очищена, продолжить ?",mtWarning)=cmCancel: Exit; fi;
    Перенос;
 fi;
end;

Proc btnБухСправка_OnClick(Sender: String);
var Iter,z:I;
 if ДК=1.1.100: Message("Введите дату",mtError); Template.Field="ДК"; Exit; fi;
 if Упр1=0: Message("Необходимо выполнить расчет",mtError); Template.Object="btnРасчет"; Exit; fi;
 if Кмнт="": Message("Заполниет комментарий",mtError); Template.Field="Кмнт"; Exit; fi;
 if Упр2=0: Message("Заполните таблицу переноса",mtError); Template.Object="СумД2"; Template.Frame=1; Exit; fi;
 if not Round(ВсегоСумД1,2)=Round(ВсегоСумД2,2): Message("Итоговая сумма переноса по дебету должна совпадать с исходной",mtError); Template.Field="ВсегоСумД2"; Exit; fi;
 if not Round(ВсегоСумК1,2)=Round(ВсегоСумК2,2): Message("Итоговая сумма переноса по кредиту должна совпадать с исходной",mtError); Template.Field="ВсегоСумК2"; Exit; fi;
 for Iter=1..Упр2 do
  if Round(Max(СумД2[Iter],СумК2[Iter]),2)=0: Message("Заполните сумму",mtError); Template.Field="ВсегоСумД2"; Template.Frame=Iter; Exit; fi;
  if not Round(СумД2[Iter],2)=0 and not Round(СумК2[Iter],2)=0: Message("Должна быть заполнена только одна из сумм",mtError); Template.Field="СумД2"; Template.Frame=Iter; Exit; fi;
  if Сч2[Iter]="" and not newСч[Iter]="": Message("Заполните исходный счет",mtError); Template.Field="Сч2"; Template.Frame=Iter; Exit; fi;
  if newСч[Iter]="": Message("Заполните счет",mtError); Template.Field="newСч"; Template.Frame=Iter; Exit; fi;
  z=SearchInArray(Сч1,Сч2[Iter],False);
  if z=-1: Message("Счет "+Сч2[Iter]+" не найден в исходной таблице",mtError); Template.Field="Сч2"; Template.Frame=Iter; Exit; fi;
  if not Призн1[z]=Призн2[Iter]:
     z=SearchInArray(Призн1,Призн2[Iter],False,z+1);
     if z=-1 or not Сч1[z]=Сч2[Iter]: Message("Счет "+Сч2[Iter]+" {"+Призн2[Iter]+"} не найден в исходной таблице",mtError); Template.Field="Сч2"; Template.Frame=Iter; Exit; fi;
  fi;
  if not ((Round(СумД1[z],2)=Round(СумД2[Iter],2) and Round(СумД1[z],2)=0) or (Round(СумК1[z],2)=Round(СумК2[Iter],2) and Round(СумК1[z],2)=0)):
     Message("Наличие суммы по дебету/кредиту должно совпадать с исходной",mtError); Template.Field="СумД2"; Template.Frame=Iter; Exit;
  fi;
 od;
 БухСправка;
 Message("Справка сформирована");
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
--Обработчики событий шаблона -----
--





Конец
