-- Шаблон создан мастером бланков
-- 07.02.2008 13:27:43
--
БланкСШаблоном "Опись выгрузки заявок";

var УпрНастр:L;
var НастрПоУмолч:S="Настройка по умолчанию";
var НастрЗакр:S="Закрыть настройку";

var Режим:S;

fВисячаяПодпись:L;

GUID:S;
BufДок[]:Record;

hGUID:S;

var НаимОпись:S=["Опись"];
var Загл:S=НаимОпись+" заявок на "+if(Режим="ЗВЗ","возврат","кассовый расход")+", представленных в";

Банк: Record;
НаимБанк:S;

Орг: Record;
НаимОрг:S;

ДатаОпись:D;

Упр:I;
var Упр_:I=Упр+1;

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

var пп[]:i=$;
var ДатаДок[]:D;
var НомерДок[]:S;
var СумДок[]:N;
var Контр[]:S;
var НазнПл[]:S;
var Примеч[]:S;
var recДок[]:Record;

var ВсегоСумДок:N=SumOfArray(СумДок,if(fВисячаяПодпись,Упр_,Упр));

ДолжнРук:S;
ФИОРук:S;
ДолжнБух:S;
ФИОБух:S;
Испол:S;
Тел:S;

ДолжнФК:S;
ФИОФК:S;
var ДатаФК:D;

var fКБК_В_Примеч:L;
var fКБК_В_Примеч_:S=if(fКБК_В_Примеч,"Да","Нет");
var fПодпись1:L;
var fПодпись1_:S=if(fПодпись1,"Да","Нет");
var fПодпись2:L;
var fПодпись2_:S=if(fПодпись2,"Да","Нет");
var extПримеч:S;

var НастрGUID:S;

var SelfCrd:S=if(Режим="ЗВЗ","РПО_ЗАЯВКА_ВОЗВРАТ","РПО_ЗАЯВКА_КР");
var SelfCfg:S="ТББ.ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.000.cfg";

btnПечать  : Object;
btnОчистить: Object;
btnНастр   : Object;
btnЗакрыть : Object;
cbВисячаяПодпись: Object;

var BufКБК[]:S;
var BufСум[]:N;
--
--Процедуры и функции -------------
Proc Настр(aСохр:L);
var Flag:L;
 if НастрGUID="" or aСохр: НастрGUID=GetGUID; fi;
 if Раб.Настр.Начать("ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК",0,0,"",НастрGUID):
    Раб.Настр.Добавить("fКБК_В_Примеч","L");
    Раб.Настр.Добавить("fПодпись1","L");
    Раб.Настр.Добавить("fПодпись2","L");
    Раб.Настр.Добавить("НаимОпись","S");
    Раб.Настр.Добавить("extПримеч","S");
    if aСохр: 
       Раб.Настр.Сохранить; 
      else 
       НастрGUID=Раб.Настр.Загрузить("","");
       if НастрGUID="":
          Flag=ExecuteFuncL("НастрПоУмолч_OnEnter","",1);
       fi;
    fi;
 fi;
end;

Proc ОткрНастр (Flag:L);
 btnПечать.Visible=not Flag;
 btnОчистить.Visible=not Flag;
 btnНастр.Visible=not Flag;
 btnЗакрыть.Visible=not Flag;
 cbВисячаяПодпись.Visible=not Flag;
 УпрНастр=Flag;
 if Flag=True: Template.Field="НастрЗакр"; Template.Frame=1; fi;
end;

Proc ОчиститьBuf;
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.GUID);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.BufДок);
end;

Proc Очистить;
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.Упр);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.ДатаДок);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.НомерДок);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.СумДок);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.Контр);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.НазнПл);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.Примеч);
 ClearVariable(ДОКУМЕНТЫ.БАНК.ОПИСЬ_ВЫГРУЗКИ_ЗАЯВОК.recДок);
end;

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

Proc Заполнить;
var OWA,n,nn,z,OA,i,ii:i;
var Flag:L;
 OA=0;
 if not GUID=hGUID:
    Flag=ProcExists(extПримеч);
    Очистить;
    OWA=OpenWorkArea(SelfCrd,"");
    Try
     nn=LengthOfArray(BufДок);
     ShowProgress(nn,"Расчет");
     for n=1..nn do
      ProgressPos(n);
      z=GetRecordNumber(OWA,BufДок[n]);
      InsertFrame(Упр,Упр+1);
      recДок[Упр]=BufДок[n];
      ДатаДок[Упр]=GetFieldD(OWA,z,"ДАТАДОК");
      НомерДок[Упр]=GetFieldS(OWA,z,"НОМЕРДОК");
      СумДок[Упр]=GetFieldN(OWA,z,"ДОК_СУМ");
      Контр[Упр]=GetFieldS(OWA,z,"БанкП.БанкИмя");
      НазнПл[Упр]=GetFieldS(OWA,z,"Док_НазнПл");
      if n=1:
         Орг=GetFieldR(OWA,z,"Рекв");
         Банк=GetFieldR(OWA,z,"Банк");
         ДолжнРук=GetFieldS(OWA,z,"ДолжнРук");
         ФИОРук=GetFieldS(OWA,z,"ФИОРук");
         ДолжнБух=GetFieldS(OWA,z,"ДолжнБух");
         ФИОБух=GetFieldS(OWA,z,"ФИОБух");
         if not Режим="ЗВЗ" and fКБК_В_Примеч and not Flag:
            OA=OpenArray(OWA,z,"Расшифр","КБК");
         fi;
      fi;
      if not OA=0:
         ClearVariable(BufКБК);
         ClearVariable(BufСум);
         ii=Records(OA);
         for i=1..ii do
          z=SearchInArray(BufКБК,GetFieldS(OA,i,"КБК"),True);
          if z=-1:
             z=InsertInArraySort(BufКБК,GetFieldS(OA,i,"КБК"));
             InsertInArray(BufСум,z,GetFieldN(OA,i,"Сум"));
            else
             BufСум[z]=BufСум[z]+GetFieldN(OA,i,"Сум");
          fi;
         od;
         ii=LengthOfArray(BufКБК);
         for i=1..ii do
          Примеч[Упр]=Раб.Бюджет2005.Объединить(Примеч[Упр],BufКБК[i]+"="+Format("%.2N",BufСум[i]),Chr(13));
         od;
      fi;
     od;
     if not Орг=nil: НаимОрг=GetCardFieldS("Контрагент",Орг,"КорИмя"); fi;
     if not Банк=nil: НаимБанк=GetCardFieldS("Банк_Счета",Банк,"РПО_ОФК_ИМЯ"); fi;
     hGUID=GUID;
    Finally
     CloseWorkArea(OWA);
     CloseProgress;
    end;
    if Flag: ExecuteProc(extПримеч); fi;
 fi;
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func НастрПоУмолч_OnEnter(FieldName: String; Iter: Integer): logical;
 if FieldName="НастрПоУмолч":
    if EnqOkCancel("Восстановить значения по умолчанию ?",mtWarning)=cmCancel: ^False; fi;
 fi;
 fКБК_В_Примеч=False;
 fПодпись1=False;
 fПодпись2=True;
 НаимОпись="Опись";
 if FieldName="НастрПоУмолч":
    Message("Значения по умолчанию восстановлены");
 fi;
 Return False;
end;

Func НастрЗакр_OnEnter(FieldName: String; Iter: Integer): logical;
 ОткрНастр(False);
 Настр(True);
 Return False;
end;

Func Flags_OnEnter(FieldName: String; Iter: Integer): logical;
 FieldName=SubStr(FieldName,1,Length(FieldName)-1);
 PutVariableL(FieldName,not GetVariableL(FieldName));
 Return False;
end;

Func extProc_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
 if not Value="":
    if not ProcExists(Value): Message("Процедура '"+Value+"' не найдена",mtError); ^False; fi;
 fi;
 Return True;
end;

Func НаимОрг_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 Rec=OpenCardFile("Контрагент","НАШЕ",Орг);
 if Rec=nil: ^False; fi;
 Орг=Rec;
 НаимОрг=GetCardFieldS("Контрагент",Rec,"КорИмя");
 Банк=Раб.Бюджет2005.БанкСчет(Орг,False);
 if not Банк=nil:
    НаимБанк=GetCardFieldS("Банк_Счета",Банк,"РПО_ОФК_ИМЯ");
 fi;
 Return False;
end;

Proc НаимОрг_OnExit(FieldName: String; Iter: Integer);
 Орг=nil;
 Банк=nil;
end;

Func НаимБанк_OnEnter(FieldName: String; Iter: Integer): logical;
var Rec: Record;
 if Орг=nil: Message("Выберите организацию",mtError); Template.Field="НаимОрг"; ^False; fi;
 Rec=OpenCardFile("Банк_Счета","Контрагент="+RecordToString(Орг),Банк);
 if Rec=nil: ^False; fi;
 Банк=Rec;
 НаимБанк=GetCardFieldS("Банк_Счета",Банк,"РПО_ОФК_ИМЯ");
end;

Proc НаимБанк_OnExit(FieldName: String; Iter: Integer);
 Банк=nil;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:D;
 Template.HideEditor(False);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(AsString(Template.Field),tmp);
 Return Cur;
end;

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

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

Func onEnter(FieldName: String; Iter: Integer): logical;
var Rec: record;
var F:S;
var z:i;
 F="Учитывать and ВБанк";
 if recДок[Iter]=nil:
    Rec=Раб.Документы.ВыборСФильтром(SelfCrd,"НомерДок",F);
   else
    Rec=OpenCardFile(SelfCrd,F,recДок[Iter]);
 fi;
 if not Rec=nil:
    z=SearchInArray(recДок,Rec,False,1);
    if not z=-1:
       if z=Iter: z=SearchInArray(recДок,Rec,False,Iter+1); fi;
       if not z=-1: Message("Повторный ввод заявки",mtError); Template.Field="НомерДок"; Template.Frame=z; ^False; fi;
    fi;
    recДок[Iter]=Rec;
    ДатаДок[Iter]=GetCardFieldD(SelfCrd,Rec,"ДАТАДОК");
    НомерДок[Iter]=GetCardFieldS(SelfCrd,Rec,"НОМЕРДОК");
    СумДок[Iter]=GetCardFieldN(SelfCrd,Rec,"ДОК_СУМ");
    Контр[Iter]=GetCardFieldS(SelfCrd,Rec,"БанкП.БанкИмя");
    НазнПл[Iter]=GetCardFieldS(SelfCrd,Rec,"Док_НазнПл");
 fi;
 Return False;
end;

Proc OnExit(FieldName: String; Iter: Integer);
 ДатаДок[Iter]=1.1.100;
 НомерДок[Iter]="";
 СумДок[Iter]=0;
 Контр[Iter]="";
 НазнПл[Iter]="";
 recДок[Iter]=nil;
end;

Func ФИО_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Field:S;
var Rec:Record;
var v1,v2:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 Template.HideEditor(False);
 Rec=OpenCardFile("Сотрудники");
 if not Rec=nil:
    v1=GetCardFieldS("Сотрудники",rec,"ДОЛЖНОСТЬ.Долж");
    v2=GetCardFieldS("Сотрудники",rec,"ФАМИЛИЯ")+" "+GetCardFieldS("Сотрудники",rec,"ИНИЦИАЛЫ");
    if Field="ДолжнРук" or Field="ФИОРук": ДолжнРук=v1; ФИОРук=v2;
      |Field="ДолжнБух" or Field="ФИОБух": ДолжнБух=v1; ФИОБух=v2;
      |Field="Испол": Испол=v1+" "+v2;
    fi;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","",SelfCfg,"",1);
end;

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

Proc btnНастр_OnClick(Sender: String);
 ОткрНастр(True);
end;

Proc cbВисячаяПодпись_OnChange(Sender: String);
 if fВисячаяПодпись:
    if Упр<2: 
       Message("Не требуется");
       fВисячаяПодпись=False;
       cbВисячаяПодпись.State=fВисячаяПодпись;
      else
       Упр=Упр-1;
    fi;
   else
    Упр=Упр+1;
 fi;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
 ОткрНастр(False);
 Настр(False);
 Раб.Настр_Печать.Cfg("",SelfCfg);
 Заполнить;
end;

Proc OnClose(Destroy: Logical);
 fВисячаяПодпись=False;
end;
--Обработчики событий шаблона -----

Конец
