-- Шаблон создан мастером бланков
-- 13.10.2005 12:04:22
--
БланкСШаблоном "Конструктор корреспонденций счетов";

var Упр:I;

var Знак[]:s=["+"];
var Знак_[]:S=if(Знак[$]="+","По дебету",if(Знак[$]="-","По кредиту","По деб./кре."));
var МаскаСч1[]:S;
var МаскаСч2[]:S;

var Buf[]:S;

var FNameA_:S=PlanVar("Бух")+"\Счета\Дополнительные.lis";
--
--Процедуры и функции ------------- 
Proc Очистить;
 ClearVariable(Упр);
 ClearVariable(Знак);
 ClearVariable(МаскаСч1);
 ClearVariable(МаскаСч2);
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Упр do
  if МаскаСч1[Iter]="" and МаскаСч2[Iter]="": DeleteFrame(Упр,Iter); else Iter=Iter+1; fi;
 od;
end;

Func ПроверитьСч(Value:S):L;
var z:n;
 Try
  z=Saldo(Value+"{}",1.1.100);
 Except
  if ErrorCode=23759: Message('В условии отбора нельзя использовать операцию "+" или "-"',mtError);
    |True: Raise;
  fi;
  ^False;
 end;
 Return True;
end;

Func Проверить:L;
var Iter:I;
 УдалитьПустыеСтроки;
 for Iter=1..Упр do
  if МаскаСч1[Iter]="": Message("Введите корреспондирущие счета",mtError); Template.Field="МаскаСч1"; ^False; fi;
  if МаскаСч2[Iter]="": Message("Введите корреспондирущие счета",mtError); Template.Field="МаскаСч2"; ^False; fi;
  if ПроверитьСч(МаскаСч1[Iter])=False: Template.Field="МаскаСч1"; ^False; fi;
  if ПроверитьСч(МаскаСч2[Iter])=False: Template.Field="МаскаСч2"; ^False; fi;
 od;
 if Упр=0: Message("Заполните таблицу",mtError); Template.Field="МаскаСч1";  ^False; fi;
 ^True;
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func Знак_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="По дебету";
 Buf[2]="По кредиту";
 Buf[3]="По дебету/кредиту";
 n=Alternate("Знак корреспонденции",Buf,-1,1,12);
 if n=1: Знак[Iter]="+"; 
   |n=2: Знак[Iter]="-";
   |n=3: Знак[Iter]="";
 fi;
 Return False;
end;

Func МаскаСч_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter:I;
var FieldName,tmp:S;
 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);
 FieldName=AsString(Template.Field);
 tmp=Раб.КБК.Список("","","СЧ9 ВД+? ИГ");
 if tmp="": ^Cur; fi;
 if Match(tmp,"?."): tmp="*."+tmp+"???.??.???";
   |Match(tmp,"?.???."): tmp="*."+tmp+"??.???";
   |Match(tmp,"?.???.??."): tmp="*."+tmp+"???";
   |True: tmp="*."+tmp;
 fi;
 if FieldName="МаскаСч1": МаскаСч1[Iter]=Раб.Бюджет2005.Объединить(МаскаСч1[Iter],tmp,"|");
   |FieldName="МаскаСч2": МаскаСч2[Iter]=Раб.Бюджет2005.Объединить(МаскаСч2[Iter],tmp,"|");
 fi;
 Return Cur;
end;

Func МаскаСч_OnVerify(FieldName: String; Iter: Integer; Value:String): logical;
 Return ПроверитьСч(Value);
end;

Proc A_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 InsertFrame(Упр,Iter+1);
end;

Proc D_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Iter:I;
 Iter=AsInteger(Template.Frame);
 DeleteFrame(Упр,Iter);
end;
--Обработчики событий полей шаблона-----
--
--
--Обработчики событий объектов шаблона-----
Proc btnОчистить_OnClick(Sender: String);
 Очистить;
end;

Proc btnДобавить_OnClick(Sender: String);
var Iter,nAdd,F,b:i;
var FNameA:S;
var StoreAuto:L;
 if Проверить=False: Exit; fi;
 FNameA=Раб.Бюджет2005.Контроль2Слэш(FNameA_);
 if ExistFile(FNameA)=False:
    if ChooseFile(FNameA,"Файл описания счетов","Файлы описания счетов(*.lis)|*.lis")=cmCancel: Message("Отказ от добавления корреспонденции счетов"); Exit; fi;
    if ExistFile(FNameA)=False: CreateFile(FNameA); fi;
   else
    CopyFile(FNameA,FNameA+".bak");
 fi;
 F=TextFileOpenWrite(FNameA);
 ShowProgress(Упр,"Добавление в план счетов....");
 Try
  Try
   StoreAuto=AutoRefresh;
   ToggleAutorefresh(False);
   TextFileGotoEnd(F);
   TextFileWriteLn(F,"КОРРЕСПОНДЕНЦИИ",True);
   for Iter=1..Упр do
    ProgressPos(Iter);
    TextFileAppendLn(F,Знак[Iter]);
    TextFileAppendLn(F,МаскаСч1[Iter]);
    TextFileAppendLn(F,"/");
    TextFileWriteLn(F,МаскаСч2[Iter]);
   od;
  Except
   Raise;
  end;
 Finally
  TextFileClose(F);
  CloseProgress;
  ToggleAutorefresh(StoreAuto);
 end;
 Очистить;
 Message("Добавление счетов завершено");
 Refresh;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 if Упр<2: Упр=20; fi;
end;
--Обработчики событий шаблона -----
--







Конец
