-- Шаблон создан мастером бланков
-- 23.01.2010 14:57:17
--
БланкСШаблоном "Подписи на документах, сегодня", Редактор РПО_ПОДПИСИ_СЕГОДНЯ;

--
--Процедуры и функции -------------
Proc Взять (aСегодня:D; aBln:S; aFields:S);
var w,ww:i;
var OWA,n: I;
var tField,sField,Typ,tmp:S;
 if aСегодня=1.1.100 or aBln="" or aFields="": Exit; fi;
 OWA=OpenWorkArea("РПО_ПОДПИСИ_СЕГОДНЯ","ДАТА_СЕГОДНЯ","ДАТА_СЕГОДНЯ<="+DateToString(aСегодня));
 Try
  n=Records(OWA);
  if n=0: Exit; fi;
  ww=WordsCount(aFields,"|");
  for w=1..ww do
   tmp=ExtractWord(w,aFields,"|");
   tField=ExtractWord(1,tmp,":");
   sField=ExtractWord(2,tmp,":");
   Typ=ExtractWord(3,tmp,":");
   if Typ="S": PutVariableS(aBln+"."+tField,GetFieldS(OWA,n,sField));
     |Typ="I": PutVariableI(aBln+"."+tField,GetFieldI(OWA,n,sField));
     |Typ="N": PutVariableN(aBln+"."+tField,GetFieldN(OWA,n,sField));
     |Typ="D": PutVariableD(aBln+"."+tField,GetFieldD(OWA,n,sField));
     |Typ="R": PutVariableR(aBln+"."+tField,GetFieldR(OWA,n,sField));
     |Typ="L": PutVariableL(aBln+"."+tField,GetFieldL(OWA,n,sField));
   fi;
  od;
 Finally
  CloseWorkArea(OWA);
 end;
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:
    PutVariableD(AsString(Template.Field),tmp);
 fi;
 Return Cur;
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="ДолжнКасс" or Field="ФИОКасс": ДолжнКасс=v1; ФИОКасс=v2;
    fi;
 fi;
 Return Cur;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnСохр_OnClick(Sender: String);
 EditorApply;
 Close;
end;

Proc btnЗакрыть_OnClick(Sender: String);
 Close;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnRead;
 if CurrentState=CrdusInserted:
    Дата_Сегодня=ToDay;
 fi;
end;
--Обработчики событий шаблона -----
--
--Библиотечные функции для работы с подтаблицей подписей в документе
var ПОДПИСЬ:i;-- поле для совместимости
Func Get_ПОЛЕ_ПОДПИСЬ(Field:S):s;
var ПОЛЕ_ПОДПИСЬ:s;
    if match(Field,"Подпись_Должность*"):
       ПОЛЕ_ПОДПИСЬ=up(SubStr(Field,18,255));
     | match(Field,"Подпись_ФИО*"):
       ПОЛЕ_ПОДПИСЬ=up(SubStr(Field,12,255));
     | match(Field,"Подпись_Дата?*"):
       ПОЛЕ_ПОДПИСЬ=up(SubStr(Field,13,255));
     | match(Field,"Подпись_ВРЕМЯ?*"):
       ПОЛЕ_ПОДПИСЬ=up(SubStr(Field,14,255));
     | true:^'';
    fi;
    ^ПОЛЕ_ПОДПИСЬ;
end;

Func Get_Ном_ПОДПИСЬ(Field:S):i;
var Ном_ПОДПИСЬ:i;
var ПОЛЕ_ПОДПИСЬ:s;
    ПОЛЕ_ПОДПИСЬ=Get_ПОЛЕ_ПОДПИСЬ(Field);
    if ПОЛЕ_ПОДПИСЬ='':^0;fi;
    Ном_ПОДПИСЬ=GetVariableI(ПОЛЕ_ПОДПИСЬ);
    if Ном_ПОДПИСЬ<1:
       Ном_ПОДПИСЬ=insertframe(ПОДПИСЬ,ПОДПИСЬ+1);
       PutVariableS('ПОДПИСЬ['+str(Ном_ПОДПИСЬ)+'].ПОЛЕ',ПОЛЕ_ПОДПИСЬ);
    fi;
    ^Ном_ПОДПИСЬ;
end;


Func Get_ПОДПИСЬ_Field_Save(Field:S): s;
var Ном_ПОДПИСЬ:i;
var res:s;
 Field=up(Field);
 try
   Ном_ПОДПИСЬ=Get_Ном_ПОДПИСЬ(Field);
   if Ном_ПОДПИСЬ>0:
      if match(Field,"Подпись_Должность?*"):Field='ДОЛЖНОСТЬ';
       | match(Field,"Подпись_ФИО?*"):Field='ФИО';
       | match(Field,"Подпись_Дата?*"):Field='ДАТА';
       | match(Field,"Подпись_ВРЕМЯ?*"):Field='ВРЕМЯ';
      fi;
      res='ПОДПИСЬ['+str(Ном_ПОДПИСЬ)+'].'+Field;
   fi;
 except
   res='';
 end;
 ^res;
end;


Func ПОДПИСЬ_SaveS(Field:S; Value:S): L;
var res:l;
 try
   Field=Get_ПОДПИСЬ_Field_Save(Field);
   if Field<>'':
     PutVariableS(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Func ПОДПИСЬ_SaveD(Field:S; Value:D): L;
var res:l;
 try
   Field=Get_ПОДПИСЬ_Field_Save(Field);
   if Field<>'':
     PutVariableD(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Func ПОДПИСЬ_SaveI(Field:S; Value:I): L;
var res:l;
 try
   Field=Get_ПОДПИСЬ_Field_Save(Field);
   if Field<>'':
     PutVariableI(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

--Библиотечные функции для работы с подтаблицей подписей в документе
--пример кода в бланке редакторе с подтаблицей:
--  SUBTAB ПОДПИСЬ = "Подписи";
--    ПОЛЕ      :STRING;
--    ДОЛЖНОСТЬ :STRING; --значение поля ПОЛЕ_ДОЛЖНОСТЬ
--    ФИО       :STRING; --значение поля ПОЛЕ_ФИО
--    ДАТА      :DATE;
--    ВРЕМЯ     :INTEGER;
--  ENDSUB;
--------------------------------------------------------------------
--
--var CountПОДПИСЬ:i=ПОДПИСЬ;--обязательная служебная переменная для доступа к подтаблице
---- поле подписи ГлБух
--var ГлБух:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'ГлБух');-- служебная переменная для доступа к подтаблице
--var Подпись_ДолжностьГлБух:s=if(ГлБух>0,Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБух].ДОЛЖНОСТЬ),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
--var Подпись_ДатаГлБух     :d=if(ГлБух>0,ПОДПИСЬ[ГлБух].ДАТА,1.1.100);                      -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateD
--var Подпись_ФИОГлБух      :s=if(ГлБух>0,Раб.СТР.ReadS_chr13(ПОДПИСЬ[ГлБух].ФИО),'');       -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS

---- поле подписи Кассир
--var Кассир:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'КАССИР');-- служебная переменная для доступа к подтаблице
--var Подпись_ДолжностьКассир:s=if(Кассир>0,Раб.СТР.ReadS_chr13(ПОДПИСЬ[Кассир].ДОЛЖНОСТЬ),''); -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS
--var Подпись_ДатаКассир     :d=if(Кассир>0,ПОДПИСЬ[Кассир].ДАТА,1.1.100);                      -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateD
--var Подпись_ФИОКассир      :s=if(Кассир>0,Раб.СТР.ReadS_chr13(ПОДПИСЬ[Кассир].ФИО),'');       -- поле прописывается в TPL с обязательным обработчиком Подпись_OnValidateS

---- поле подписи РУКучреж с авто-выравниванием при ручном проставлении возврата каретки
--var РУКучреж:i=searchinarray(ПОДПИСЬ[].ПОЛЕ,'РУКУЧРЕЖ');
--var РУКучреж_max:i=if(РУКучреж>0,max(Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКучреж].ДОЛЖНОСТЬ,Раб.СТР.абзац),Раб.СТР.CountSubTrimStr(ПОДПИСЬ[РУКучреж].ФИО,Раб.СТР.абзац)),0)+1; -- служебная переменная для выравнивания
--var Подпись_ДолжностьРУКучреж:s=if(РУКучреж>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКучреж].ДОЛЖНОСТЬ),РУКучреж_max),'');
--var Подпись_ДатаРУКучреж     :d=if(РУКучреж>0,ПОДПИСЬ[РУКучреж].ДАТА,1.1.100);
--var Подпись_ФИОРУКучреж      :s=if(РУКучреж>0,Раб.СТР.Fill_chr13(Раб.СТР.ReadS_chr13(ПОДПИСЬ[РУКучреж].ФИО),РУКучреж_max),'');


--Func Подпись_OnValidateS(Field:S; Iter:I; Value:S): L;
-- ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveS(Field,Раб.СТР.WriteS_chr13(Value));
--end;

--Func Подпись_OnValidateD(Field:S; Iter:I; Value:d): L;
-- ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveD(Field,Value);
--end;

--Func Подпись_OnValidateI(Field:S; Iter:I; Value:I): L;
-- ^Раб.ВСПОМ.ПОДПИСИ_СЕГОДНЯ.Подпись_SaveI(Field,Value);
--end;
--------------------------------------------------------------------


--Библиотечные функции для работы с подтаблицей РЕКВИЗИТ в документе

var РЕКВИЗИТ_ПОЛЕ:s;
var РЕКВИЗИТ_ИМЯ :s;
var РЕКВИЗИТ_ИНН :s;
var РЕКВИЗИТ_ОКПО:s;
var РЕКВИЗИТ_КПП :s;
var РЕКВИЗИТ_КБП :s;
var РЕКВИЗИТ_ДАТ :d;
var РЕКВИЗИТ_ЦЕЛ :i;
var РЕКВИЗИТ_ЧИС :n;
var РЕКВИЗИТ_СТР :s;
var РЕКВИЗИТ_ЗАП :i;
var РЕКВИЗИТ_UKEY:i;
var РЕКВИЗИТ_FieldS:s=' ИМЯ ИНН ОКПО КПП КБП СТР ';
var РЕКВИЗИТ_FieldI:s=' ЦЕЛ ЗАП UKEY';
var РЕКВИЗИТ_FieldN:s=' ЧИС ';
var РЕКВИЗИТ_FieldD:s=' ДАТ ';
Proc ClearValРЕКВИЗИТ;
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ПОЛЕ);
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ИМЯ );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ИНН );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ОКПО);
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_КПП );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_КБП );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ДАТ );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ЦЕЛ );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ЧИС );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_СТР );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_ЗАП );
  ClearVariable(Раб.вспом.подписи_сегодня.РЕКВИЗИТ_UKEY);
end;
Proc СчитатьРеквизит(wa:i;nrec:i;rec:Record;FieldToField:ls);
var selfwa:l;
 ClearValРЕКВИЗИТ;
 if wa<1 or nrec<1:
    if rec=nil:exit;fi;
    wa=OpenWorkArea("Контрагент", "", "UKey="+RecordToString(REC));
     if Records(wa)=1:nrec=1;selfwa=true;
      | true:
        CloseWorkArea(wa);
        exit;
     fi;
 fi;
 try
   GetFieldsVars(wa,nrec,'Раб.вспом.подписи_сегодня',FieldToField);
   Раб.вспом.подписи_сегодня.РЕКВИЗИТ_UKEY=RecordToInteger(GetRecordKey(wa,nrec));
 except
  if selfwa:CloseWorkArea(wa);
     selfwa=false;
  fi;
 end;
 if selfwa:CloseWorkArea(wa);fi;
end; 


var РЕКВИЗИТ:i;-- поле для совместимости
Func Get_ПОЛЕ_РЕКВИЗИТ(Field:S):s;
var ПОЛЕ_РЕКВИЗИТ:s;
    if match(Field,"РЕКВИЗИТ_ОКПО?*"):
       ПОЛЕ_РЕКВИЗИТ=up(SubStr(Field,14,255));
     | true:
       ПОЛЕ_РЕКВИЗИТ=up(SubStr(Field,13,255));
    fi;
    ^ПОЛЕ_РЕКВИЗИТ;
end;

Func Get_Ном_РЕКВИЗИТ(Field:S):i;
var Ном_РЕКВИЗИТ:i;
var ПОЛЕ_РЕКВИЗИТ:s;
    ПОЛЕ_РЕКВИЗИТ=Get_ПОЛЕ_РЕКВИЗИТ(Field);
    if ПОЛЕ_РЕКВИЗИТ='':^0;fi;
    Ном_РЕКВИЗИТ=GetVariableI(ПОЛЕ_РЕКВИЗИТ);
    if Ном_РЕКВИЗИТ<1:
       Ном_РЕКВИЗИТ=insertframe(РЕКВИЗИТ,РЕКВИЗИТ+1);
       PutVariableS('РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].ПОЛЕ',ПОЛЕ_РЕКВИЗИТ);
    fi;
    ^Ном_РЕКВИЗИТ;
end;

Func Get_РЕКВИЗИТ_Field_Save(Field:S): s;
var Ном_РЕКВИЗИТ:i;
var res:s;
 Field=up(Field);
 try
   Ном_РЕКВИЗИТ=Get_Ном_РЕКВИЗИТ(Field);
   if Ном_РЕКВИЗИТ>0:
      if match(Field,"РЕКВИЗИТ_ОКПО?*"):Field='ОКПО';
       | true:Field=SubStr(Field,10,3);
      fi;
      res='РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].'+Field;
   fi;
 except
   res='';
 end;
 ^res;
end;


Func РЕКВИЗИТ_SaveS(Field:S; Value:S): L;
var res:l;
 try
   Field=Get_РЕКВИЗИТ_Field_Save(Field);
   if Field<>'':
     PutVariableS(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Func РЕКВИЗИТ_SaveD(Field:S; Value:D): L;
var res:l;
 try
   Field=Get_РЕКВИЗИТ_Field_Save(Field);
   if Field<>'':
     PutVariableD(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Func РЕКВИЗИТ_SaveI(Field:S; Value:I): L;
var res:l;
 try
   Field=Get_РЕКВИЗИТ_Field_Save(Field);
   if Field<>'':
     PutVariableI(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Func РЕКВИЗИТ_SaveN(Field:S; Value:N): L;
var res:l;
 try
   Field=Get_РЕКВИЗИТ_Field_Save(Field);
   if Field<>'':
     PutVariableN(Field,Value);
     res=true;
   fi;
 except
   res=false;
 end;
 ^res;
end;

Proc ЗаписатьРеквизит(Ном_РЕКВИЗИТ:i;FieldToField:s);
var z,j:i;
var Field,Field0:s;
var ValueS:s;
var ValueN:n;
var ValueI:i;
var ValueD:d;
 z=WordsCount(FieldToField,'|');
 FieldToField=up(FieldToField);
 for j=1..z do
   Field=ExtractWord(j,FieldToField,'|');
   if pos(' '+Field+' ',Раб.вспом.подписи_сегодня.РЕКВИЗИТ_FieldS)>0:
      ValueS=GetVariableS('Раб.вспом.подписи_сегодня.РЕКВИЗИТ_'+Field);
      PutVariableS('РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].'+Field,ValueS);
    | pos(' '+Field+' ',Раб.вспом.подписи_сегодня.РЕКВИЗИТ_FieldI)>0:
      ValueI=GetVariableI('Раб.вспом.подписи_сегодня.РЕКВИЗИТ_'+Field);
      if Field='UKEY':Field='ЗАП';fi;
      PutVariableI('РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].'+Field,ValueI);
    | pos(' '+Field+' ',Раб.вспом.подписи_сегодня.РЕКВИЗИТ_FieldN)>0:
      ValueN=GetVariableN('Раб.вспом.подписи_сегодня.РЕКВИЗИТ_'+Field);
      PutVariableN('РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].'+Field,ValueN);
    | pos(' '+Field+' ',Раб.вспом.подписи_сегодня.РЕКВИЗИТ_FieldD)>0:
      ValueD=GetVariableD('Раб.вспом.подписи_сегодня.РЕКВИЗИТ_'+Field);
      PutVariableD('РЕКВИЗИТ['+str(Ном_РЕКВИЗИТ)+'].'+Field,ValueD);
   fi;
 od;
end; 


Конец
