-- Шаблон создан мастером бланков
-- 07.04.2014 13:08:25
--
БланкСШаблоном "Чистка остатков";


НаимЖур         :String;
var Buf[]       :String;


Func ВзятьКлючРаздела(vРаздел:S):Record;-- возвращает UKEY раздела
var OWA:i;
 OWA=OpenWorkArea('Table_Razd','','РАЗДЕЛ="'+vРаздел+'"');
 Try
  if Records(OWA)=0: ^nil; fi;
  ^GetRecordKey(OWA,1);
 Finally
  CloseWorkArea(OWA);
 end;
end;



-- Отключение пар закрывающихся проводок
Proc ОтклПарЗаклПров (Раздел :Record);
  var РО, n, i, p, pp :Integer;
  var summ1, summ2 :Numeric;
  var deb1, cred1, deb2, cred2, acc1, acc2, ksgu1, ksgu2 :String;
  var DEBNUL1, DEBNUL2, off1, off2 :Logical;

  РО = OpenWorkArea('Table_OPER', 'Сумма', 'Раздел='+RecordToString(Раздел));
  try
    p = 1; n = Records(РО);
    while p < n do
      off1 = GetFieldL(РО, p, 'X');
      if not off1 then
        summ1 = GetFieldN(РО, p, 'Сумма');
        deb1 = GetFieldS(РО, p, 'DEBET');
        cred1 = GetFieldS(РО, p, 'CREDIT');
        DEBNUL1 = (deb1 = '00');
        acc1 = if(DEBNUL1, cred1, deb1);

        pp = p;
        while pp < n do
          pp = pp + 1;
          off2 = GetFieldL(РО, pp, 'X');
          if not off2 then
            summ2 = GetFieldN(РО, pp, 'Сумма');
            if summ1 = summ2 then
              deb2 = GetFieldS(РО, pp, 'DEBET');
              cred2 = GetFieldS(РО, pp, 'CREDIT');
              DEBNUL2 = (deb2 = '00');
              acc2 = if(DEBNUL2, cred2, deb2);

              if DEBNUL1 <> DEBNUL2 then

                if (Раб.Бюджет2005.ВзятьКодСчета(acc1, '', 'АН', true) = Раб.Бюджет2005.ВзятьКодСчета(acc2, '', 'АН', true)) then

                  ksgu1 = Раб.Бюджет2005.ВзятьКодСчета(acc1, '', 'КОСГУ', false);
                  ksgu2 = Раб.Бюджет2005.ВзятьКодСчета(acc2, '', 'КОСГУ', false);

                  if
                     (ksgu1 = '510' and ksgu2 = '610') or
                     (ksgu2 = '510' and ksgu1 = '610') or

                     (ksgu1 = '520' and ksgu2 = '620') or
                     (ksgu2 = '520' and ksgu1 = '620') or

                     (ksgu1 = '530' and ksgu2 = '630') or
                     (ksgu2 = '530' and ksgu1 = '630') or

                     (ksgu1 = '560' and ksgu2 = '660') or
                     (ksgu2 = '560' and ksgu1 = '660') or

                     (ksgu1 = '540' and ksgu2 = '640') or
                     (ksgu2 = '540' and ksgu1 = '640')

                  then
                    BeginChanging(РО);
                    try
                       p = PutFieldL(РО,  p, 'X', true);
                      pp = PutFieldL(РО, pp, 'X', true);
                    except
                      CancelChanging(РО);
                    end;
                    EndChanging(РО);


                    --p = pp;
                    break;
                  end;
                end;

              end;

            else
              --p = pp;
              break;
            end;
          end;
        end;
      end;
      p = p + 1;
    end;

  finally
    CloseWorkArea(РО);
  end;

end;




Func НаимЖур_OnEnter(FieldName: String; Iter: Integer): logical;
  var j,jj,n :i;
  var tmp :s;
  ClearVariable(Buf);
  jj=JournalsCount;
  n=0;
  for j=0..jj do
   tmp=JournalName(j);
   if JournalType(tmp)="РАЗД":
      n=n+1;
      Buf[n]=tmp;
   fi;
  od;
  if n=0: Message("В данном плане бухгалтерии не описан ни один табличный журнал");  ^False; fi;
  n=Alternate("Список табличных журналов",Buf,-1,1);
  if n=0: return false; fi;
  НаимЖур=Buf[n];
  return false;
end;



Proc кнОчистка_OnClick(Sender: String);
  ОтклПарЗаклПров(ВзятьКлючРаздела(НаимЖур));
end;


Конец
