-- Шаблон создан мастером бланков
-- 21.09.2012 11:32:09
--
БланкСШаблоном "ВЕДОМОСТЬ";

ШАПКА :S;

var Buf[]: S;
A: S = "+";
D: S = "-";
РасчЖир: S = "Подготовить ведомость";
МассПечать: S;
КОДГРУППЫ[] : S;
СПИСОКГРУПП: I;
СПИСОКДЕТЕЙ: I;
ДАТА_Н:DATE;
ДАТА_К:DATE;
ПЕРИОД:STRING;
var Период_:S=Name_A(ПЕРИОД);  
ДАТА_К2:DATE;
Дней_: I;

Г1[]: I;
Г2[]: S;
Г3[]: I;
Г4[]: N;
Г5[]: N;
Г6[]: N;
Г7[]: N;
Г8[]: I;
Г9[]: N;
Г10[]:N;
Г11[]:D;
Г12[]:N;
Г13[]:N;
Г14[]:N;
Г15[]:N;
Г16[]:N;

Г1И[]: I;
Г2И[]: S;
Г3И[]: I;
Г4И[]: N;
Г5И[]: N;
Г6И[]: N;
Г7И[]: N;
Г8И[]: I;
Г9И[]: N;
Г10И[]:N;
Г11И[]:D;
Г12И[]:N;
Г13И[]:N;
Г14И[]:N;
Г15И[]:N;
Г16И[]:N;

proc ВыборГруппы(Iter: I);
        var num :Integer;
        var w1,n1        : integer;
        var i            : integer;
        var g            : integer;
        ClearVariable(Buf);
w1 = OpenWorkArea('ДЕТСАД_ГРУППА','');

        for i=1..records(w1) do
                Buf[i] = GetFieldS(w1,i,'КОД');
        od;
CloseWorkArea(w1);
num=Alternate("Выберите группу...", Buf, -1, 1, 12);
КОДГРУППЫ[Iter]  = Buf[num];
end;


proc РасчитатьВедомость;

     var i:                                     I;
     var РабочаяОбластьДети:                    I;
     var РабочаяОбластьГруппа:                  I;
     var РабочаяОбластьНачДох:                  I;
     var РабочаяОбластьНачДохПодтаблица:        I;
     var w                   :                  I;
     var КолвоСтрок:                            I;
     var КолвоСтрокНачДох:                      I;
     var ВставленнаяСтрока:                     I;
     var ДатаНачала:                            D;
     var ДатаКонца:                             D;
     var ДатаПоследнейПроводки:                 D;
     var Проводка:                              I;
     var filter:                                Record;
     var s:                                     N;
     var ss:                                    S;
     var d:                                     I;
     var m:                                     I;
     var e:                                     I;
     var li:                                    I;
     ClearVariable(списокдетей);

     if списокдетей = 0: InsertFrame(списокдетей,1); fi;

     РабочаяОбластьДети = OpenWorkArea('детсад_дети','');
     РабочаяОбластьГруппа = OpenWorkArea('детсад_группа','');
     РабочаяОбластьНачДох = OpenWorkArea('детсад_начдох','');

     SetFilter(РабочаяОбластьДети, "групп='"+кодгруппы[1]+"'");
     КолвоСтрок = Records(РабочаяОбластьДети);

     d=1;
     ss = ExtractWord(4,период,".");
     m = int(ss);
     ss = ExtractWord(2,период,".");
     e = int(ss);
     ДатаНачала=Dat(d,m,e);
     if m<>12:  ДатаКонца = dat(d,m+1,e);
     else       ДатаКонца = dat(d,1,e+1);  fi;

     for i = 1..КолвоСтрок do
       if i <> 1: ВставленнаяСтрока=InsertFrame(списокдетей,i); fi;
       SetFilter(РабочаяОбластьГруппа,"код ='"+кодгруппы[1]+"'");
       filter = GetRecordKey(РабочаяОбластьДети,i);
       Г1[i] = i;
       Г2[i] = GetFieldS(РабочаяОбластьДети,i,"фамилия") +" "+GetFieldS(РабочаяОбластьДети,i,"имя");
       Г3[i] = GetFieldI(РабочаяОбластьДети,i,"номер");
       Г4[i] = GetfieldN(РабочаяОбластьГруппа,1,"Ставка")*GetfieldN(РабочаяОбластьДети,i,"льгота")/100;
       s = Saldo("*.205.* {"+CardFileRecSign("детсад_дети","номер","дети",filter)+"}",ДатаНачала);
       if s > 0:  Г7[i] = s; fi;
       if s < 0:  Г6[i] = ABS(s); fi;
       SetFilter(РабочаяОбластьНачДох,"дата_н="+DateToString(ДатаНачала));
       КолвоСтрокНачДох = Records(РабочаяОбластьНачДох);
        for li=1..КолвоСтрокНачДох do
            РабочаяОбластьНачДохПодтаблица = openArray(РабочаяОбластьНачДох,li,'позиции','');
            SetFilter(РабочаяОбластьНачДохПодтаблица,"ребенок="+RecordToString(filter));
            if records(РабочаяОбластьНачДохПодтаблица) <> 0:
                 filter =  GetFieldR(РабочаяОбластьНачДохПодтаблица,1,"ребенок");
                 Г8[i] =   GetFieldI(РабочаяОбластьНачДохПодтаблица,1,"дней") - GetFieldI(РабочаяОбластьНачДохПодтаблица,1,"невых");
                 Г9[i] =   GetFieldN(РабочаяОбластьНачДохПодтаблица,1,"сумма");
                 Г5[i] =   GetFieldN(РабочаяОбластьНачДохПодтаблица,1,"итоговаясумма");             -- Г4[i]+Г6[i];
                 break;
            else
                 Г8[i] = 0;
                 Г9[i] = 0;
            fi;
            CloseWorkArea(РабочаяОбластьНачДохПодтаблица);
        od;
       Для Проводки Проводка = "-*.205.* {"+CardFileRecSign("детсад_дети","номер","дети",filter)+"}",ДатаНачала,ДатаКонца Цикл
       ДатаПоследнейПроводки = ПроводДата(Проводка);
       Конец;
       Г11[i] = ДатаПоследнейПроводки;
       s = Turn("-*.205.* {"+CardFileRecSign("детсад_дети","номер","дети",filter)+"}",ДатаНачала,ДатаКонца);
       Г12[i] = -s;
       s = Saldo("*.205.* {"+CardFileRecSign("детсад_дети","номер","дети",filter)+"}",ДатаКонца);
       if s > 0:  Г15[i] = ABS(s); fi;
       if s < 0:  Г14[i] = -s; fi;
       Г16[i] =   Г4[i]-s;

     od;

     closeworkarea(РабочаяОбластьДети);
     closeworkarea(РабочаяОбластьГруппа);
     closeworkarea(РабочаяОбластьНачДох);
end;



Func A_OnEnter(FieldName: String; Iter: Integer): logical;

     InsertFrame(СПИСОКГРУПП, Iter+1);
     Return false ;
end;


Func КОДГРУППЫ_OnEnter(FieldName: String; Iter: Integer): logical;
   ВыборГруппы(Iter);
  Return  false;
end;

proc ОчиститьВедомость;
        ШАПКА = "";
        clearvariable(СПИСОКГРУПП);
        clearvariable(СПИСОКДЕТЕЙ);
        if СПИСОКГРУПП = 0: InsertFrame(СПИСОКГРУПП, 1); fi;
        if СПИСОКДЕТЕЙ = 0: InsertFrame(СПИСОКДЕТЕЙ, 1); fi;
end;


Proc AfterOpen(Destroy: Logical);
    ОчиститьВедомость;
end;


Func РасчЖир_OnEnter(FieldName: String; Iter: Integer): logical;
  РасчитатьВедомость;
  Return  false;
end;


Func Период_OnEnter(FieldName: String; Iter: Integer): logical;

var tmpE:S;
var М,Г:I;
  template.hideeditor(False);
  tmpE=Период;
  tmpE=AnaElection("ПЕРИОД.*",False,False,tmpE);
  if tmpE<>'' then
     Период=tmpE;
  fi;
  --Поставить даты
  Г=Int(ExtractWord(2,tmpE,"."));
  М=Int(ExtractWord(4,tmpE,"."));
  if Г<>0 and М<>0:
     Дата_Н=Dat(1,М,Г);
     Дата_К2=Dat(1,М+2,Г);
     if М=12:
        Дата_К=Dat(1,1,Г+1);
        Дата_К2=Dat(1,2,Г+1);
       else
        Дата_К=Dat(1,М+1,Г);
     fi;
     if М=11:
      Дата_К2=Dat(1,1,Г+1);
     fi;
  fi;
  --Посчитать дни
  Дней_=Int(ExecuteFuncN("F.SAL.НОРМА_СТАНДАРТ",Дата_Н,Дата_К-1,"Д"));
  Return False  ;

end;


Конец
