БЛАНКСШАБЛОНОМ[20.04.2006] "Акт о результатах инвентаризации";
-- Редакция ЗАО "Агентство 'Русспромоценка'"
2-- Переменные
BTNNAME_MENU  :String="форма ОКУД 0504835";
var SORT_MENU:s='20';

СекцКомиссия1 :Object;
СекцКомиссия2 :Object;
СекцПояснение :Object;
Комиссия      :Integer;
колПояснение  :Integer;
btnClose      :Object;
датаОТЧ       :Date;
DD0           :Date=1.1.2000;
var Пользов   :String;
var Buf[]     :String;
ДЛЖрук        :String;
ФИОрук        :String;
КОДрук        :String;
датаРУК       :Date;
НомБум        :String;
УЧРЕЖ         :String;
ОКПО          :String;
КОД_МОЛ       :String;
ИМЯ_МОЛ       :String;

ДолПредКом    :String;
ФИОПредКом    :String;
ДолЧленКом[]  :String;
ФИОЧленКом[]  :String;

датаПРК       :Date;
номбПРК       :String;
датаНИН       :Date;
датаКИН       :Date;
чтоИНВЕН      :String;
долФИОмол     :String;

nv1           :String;
nv2           :String;
nv3           :String;
nv4           :String;
nv5           :String;
nv6           :String;

dmy1          :Date;
dmy2          :Date;
dmy3          :Date;
dmy4          :Date;
dmy5          :Date;
dmy6          :Date;

стррасхожд    :String;
Пояснение[]   :String;
aa            :String="+";
dd            :String="-";
номВР         :String;
датаВР        :Date;
NВР           :Integer;
датаИСП       :Date;

2-- Общие процедуры и функции
Proc Очистить;
 ClearVariable(Buf);
end;

Proc ОчиститьТаблицу;
end;

Func ВыборДаты(srcDate:Date) :Date;
var dd :Date;
 if srcDate>1.1.100: dd=Calendar(srcDate); else dd=Calendar(ToDay); fi;
 if not(dd<=1.1.100): ^dd; else ^srcDate; fi;
end;

Func GetDate :Date;  -- считываем в заданном поле дату
var name :String;
 name=AsString(Template.Field);
 if name="датаРУК": ^датаРУК;
 |  name="датаОТЧ": ^датаОТЧ;
 |  name="датаПРК": ^датаПРК;
 |  name="датаНИН": ^датаНИН;
 |  name="датаКИН": ^датаКИН;
 |  name="датаВР":  ^датаВР;
 |  name="датаИСП": ^датаИСП;
 |  name="dmy1":    ^dmy1;
 |  name="dmy2":    ^dmy2;
 |  name="dmy3":    ^dmy3;
 |  name="dmy4":    ^dmy4;
 |  name="dmy5":    ^dmy5;
 |  name="dmy6":    ^dmy6;
 fi;
end;

Proc SetDate(Value:Date); -- устанавливаем в заданном поле дату; Value - значение даты, которое необходимо присвоить
var name :String;
 name=AsString(Template.Field);
 if name="датаРУК": датаРУК = Value;
 |  name="датаОТЧ": датаОТЧ = Value;
 |  name="датаПРК": датаПРК = Value;
 |  name="датаНИН": датаНИН = Value;
 |  name="датаКИН": датаКИН = Value;
 |  name="датаВР":   датаВР = Value;
 |  name="датаИСП": датаИСП = Value;
 |  name="dmy1":       dmy1 = Value;
 |  name="dmy2":       dmy2 = Value;
 |  name="dmy3":       dmy3 = Value;
 |  name="dmy4":       dmy4 = Value;
 |  name="dmy5":       dmy5 = Value;
 |  name="dmy6":       dmy6 = Value;
 fi;
end;

Func Объединить(Value1:String; Value2:String; Separator:String) :String;
var Ret :String;
 if Value1<>"" and Value2<>"": Ret=Value1+Separator+Value2;
 |  Value1= "" and Value2<>"": Ret=Value2;
 |  Value1<>"" and Value2="" : Ret=Value1;
 |  True: Ret="";
 fi;
 ^Ret;
end;

Proc ВыборКомиссии;
var REC :Record;
var RO, OA, num, i  :Integer;
 REC=OpenCardFile("КОМИССИЯ", "", NIL, crdRecordOnly);
 if REC<>NIL:
   ClearVariable(ДолЧленКом);
   ClearVariable(ФИОЧленКом);
   RO=OpenWorkArea("КОМИССИЯ", "", "UKEY="+RecordToString(REC));
   Try
     if Records(RO)=1:
       ДолПредКом=GetFieldS(RO, 1, "ПРЕДСД");
       ФИОПредКом=GetFieldS(RO, 1, "ПРЕДСФ");
       OA=OpenArray(RO, 1, "ЧЛЕНКОМ","");
       num=Records(OA);
       if num>0:
         for i=1 to num do
           ДолЧленКом[i]=GetFieldS(OA, i, "ЧЛЕНД");
           ФИОЧленКом[i]=GetFieldS(OA, i, "ЧЛЕНФ");
         od;
       fi;
     fi;
   Finally
     Комиссия=LengthOfArray(ФИОЧленКом);
     CloseWorkArea(RO);
   end;
 fi;
end;

Proc НачальнаяИтерация;
var qq :Integer;
 if колПояснение<1: Try qq=InsertFrame(колПояснение, 1); Except end; fi;
end;

Proc УдалитьПустыеСтрокиПояснений;
var nn :Integer;
 nn=1;
 while nn<=колПояснение do if Пояснение[nn]="": Try DeleteFrame(колПояснение, nn); Except end; else nn=nn+1; fi; od;
 Template.Frame=1;
end;


Proc Реквизиты;
var REC :Record;
var RO :Integer;
 REC=NIL;
 RO=OpenworkArea("КОНТРАГЕНТ", "", "НАШЕ and КОРИМЯ='"+УЧРЕЖ+"'");
 Try
   if Records(RO)>0: REC=GetRecordKey(RO, 1); fi;
   REC=OpenCardFile("КОНТРАГЕНТ", "НАШЕ", REC, crdRecordOnly);
   if REC=NIL: Exit; fi;
   SetFilter(RO, "Ukey="+RecordToString(REC));
   if Records(RO)=1:
     УЧРЕЖ  = GetFieldS(RO, 1, "КОРИМЯ");
     ОКПО   = GetFieldS(RO, 1, "ОКПО");
     ФИОРУК = GetFieldS(RO, 1, "ФИОРУК");
     ДЛЖРУК = GetFieldS(RO, 1, "ДОЛЖНРУК");
   fi;
 Finally
   CloseWorkArea(RO);
 end;
end;

2-- События клеток
Func Field_onEnter(Field:String; Iter:Integer) :Logical; -- на входе в клетку
var qq :Integer;
 if Field="УЧРЕЖ" or Field="ОКПО": Реквизиты; ^False;
 |  Field="ДОЛПРЕДКОМ" or Field="ФИОПРЕДКОМ": ВыборКомиссии; ^False;
 |  Field="aa": Try qq=InsertFrame(колПояснение, Iter+1); Except end;
                ^False;
 |  Field="dd": if EnqOkCancel("Вы уверены что хотите удалить данную строчку?", mtConfirmation)=cmOk:
                   if колПояснение>1: Try DeleteFrame(колПояснение, Iter); Except end; fi;
                   НачальнаяИтерация;
                fi;
               ^False;
 fi;
 ^True;
end;

Proc Field_onExit(Field:String; Iter:Integer); -- на выходе из клетки
 if Field="УЧРЕЖ" or Field="ОКПО": if УЧРЕЖ="": ОКПО=""; ДЛЖРУК=""; ФИОРУК=""; fi;
 |  Field="ИМЯ_МОЛ": if ИМЯ_МОЛ="": КОД_МОЛ=""; fi;
 |  Field="ДолПредКом":
    if ДолПредКом="":
      ФИОПредКом="";
      ClearVariable(ДолЧленКом);
      ClearVariable(ФИОЧленКом);
      ClearVariable(Комиссия);
    fi;
 |  Field="ФИОПредКом":
    if ФИОПредКом="":
      ДолПредКом="";
      ClearVariable(ДолЧленКом);
      ClearVariable(ФИОЧленКом);
      ClearVariable(Комиссия);
    fi;
 fi;
end;

Func Дата_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String) :String;
var dd : Date;
 Template.HideEditor(False);
 dd=ВыборДаты(GetDate);
 SetDate(dd);
 ^"";
end;

Func Сотрудники_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC :Record;
var стрФИО, стрДОЛ, name, tmp, tmp2 :String;
 Template.HideEditor(False);
 if not AutoRefresh: RefreshAna; fi;
 name=asString(Template.Field);
 tmp=""; стрФИО=""; стрДОЛ="";
 Try tmp=GetVariableS(name); Except ^Cur; end;
 REC=OpenCardFile("СОТРУДНИКИ", "", SignToRecord(tmp), crdRecordOnly);
 if REC=NIL: ^Cur; fi;
 стрДОЛ=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ");
 tmp=GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ");
 tmp2=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ");
 стрФИО=if(tmp2="", GetCardFieldS("СОТРУДНИКИ", REC, "ФИОТ"), tmp2+" "+if(tmp<>"..", tmp, ""));
 if name="ДЛЖРУК": ФИОРУК=стрФИО; ДЛЖРУК=стрДОЛ;
 |  name="ФИОРУК": ФИОРУК=стрФИО; ДЛЖРУК=стрДОЛ;
 fi;
 ^"";
end;

Func МОЛ_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var REC :Record;
var стрМОЛ, стрФИО, стрФИОFull, стрПОД, стрДОЛ, tmp1, tmp2, tmp3 :String;
 Template.HideEditor(False);
 REC=NIL;
 if not AutoRefresh: RefreshAna; fi;
 стрМОЛ=AnaElection("МОЛ.*", False, False, КОД_МОЛ);
 if стрМОЛ="": ^Cur; fi;
 REC=SignToRecord(стрМОЛ);
 if REC=NIL: ^Cur; fi;
 tmp1=""; tmp2=""; tmp3=""; стрФИО=""; стрПОД=""; стрДОЛ="";
 стрПОД=GetCardFieldS("СОТРУДНИКИ", REC, "ПОДРАЗДЕЛЕНИЕ.ПОДРАЗ");
 стрДОЛ=GetCardFieldS("СОТРУДНИКИ", REC, "ДОЛЖНОСТЬ.ДОЛЖ");
 tmp1=GetCardFieldS("СОТРУДНИКИ", REC, "ИНИЦИАЛЫ");
 tmp2=GetCardFieldS("СОТРУДНИКИ", REC, "ФАМИЛИЯ");
 tmp3=Trim(GetCardFieldS("СОТРУДНИКИ", REC, "ФКОГО"))+" "+Trim(GetCardFieldS("СОТРУДНИКИ", REC, "ИОКОГО"));
 if Trim(tmp3)="": tmp3=tmp2+" "+GetCardFieldS("СОТРУДНИКИ", REC, "ИМЯСОТРУДНИКА")+" "+GetCardFieldS("СОТРУДНИКИ", REC, "ОТЧЕСТВО"); fi;
 стрФИО=if(tmp2="", GetCardFieldS("СОТРУДНИКИ", REC, "ФИОТ"), tmp2+" "+if(tmp1<>"..", tmp1, ""));
 стрФИОFull=if(Trim(tmp3)="", GetCardFieldS("СОТРУДНИКИ", REC, "ФИОТ"), tmp3);
 КОД_МОЛ   = стрМОЛ;
 ИМЯ_МОЛ   = Объединить(стрПОД, стрФИО, Chr(13));
 ДОЛФИОМОЛ = Объединить(стрДОЛ, стрФИОFull, " ");
 ^"";
end;

Func ВидИНВ_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
var nn :Integer;
 Template.HideEditor(False);
 ClearVariable(Buf);
 nn=0;
 Buf[1]="01--нефинансовых активов";
 Buf[2]="02--финансовых активов";
 Buf[3]="03--расчетов";
 nn=AlternateTree("Выберите вид инвентаризации", Buf, -1, 1, 12, "|", "", "", -1, False);
 if nn>0: чтоИНВЕН=SubStr(Buf[nn], Pos("--", Buf[nn])+2, 255); fi;
 ClearVariable(Buf);
 ^"";
end;

Func стррасхожд_onLookup(Sect:String; Row:Integer; Col:Integer; Cur:String): String;
 Template.HideEditor(False);
 стррасхожд="излишков и недостач материальных ценностей не обнаружено";
 ^"";
end;

2-- События объектов
Proc btnOnClick(Sender:String); -- объекты при нажатии
 if Sender="btnClose": Close;
 fi;
end;

2-- События шаблона
Proc Template_OnOpen(Create:Logical); -- при открытии шаблона
var tmp :String;
 РАБ.НАСТР_ПЕЧАТЬ.Cfg(PlanVar("НФА")+"\Настройки\","RPO_STD_000.cfg");
 tmp=UserName(AliasName("РПО_НФА"));
 Пользов=if(tmp<>"", "Пользователь - "+tmp, "Пользователь локальной версии");
 Очистить;
 НачальнаяИтерация;
end;

Proc Template_OnClose(Destroy:Logical); -- при закрытии шаблона
 Очистить;
end;

КОНЕЦ -- конец бланка