БЛАНКСШАБЛОНОМ "Бухгалтерская справка";

2-- Переменные

S1  : Section;
S2  : Section;
S3  : Section;
S4  : Section;
S5  : Section;
btnПечать: Object;

var Позиции: Integer;
var Содерж[]: String;
var НомДок[]: String;
Var ДатаДок[]: Date;
Var СчДеб[]: String;
Var СчКре[]: String;
Var Сумма[]: Numeric;

var ДатаСпр: Date;
Var ДатаИсп: Date;
Var Рекв: Record;
Var ФИОРук: String;
Var ФИОБух: String;
Var КорИмя: String;
Var ПризнПодр: String;
Var НаимПодр: String;
Var ФИОИсп: String;
Var ДолжнИсп: String;
Var Номер: Integer;
Var ОКПО: String;

var НоваяЗапись: L = (CurrentState = crdusInserted);

var ИтогСумма: N = SumOfArray(Сумма, Позиции);

var BufField[]: S;
var BufColorBg[]: I;
var BufColorFo[]: I;

var SelfCrd: S = "РПО_БУХСПРАВКА";

var First: L;

var coBtnFace_: I;

fВспомПечать: L;
--
--Процедуры и функции -------------

Proc НеПустаяТаблица;
var Iter: I;
  if Позиции < 1
  :
     Iter = InsertFrame(Позиции, 1);
  fi;
end;

Proc УдалитьПустыеСтроки;
var Iter: I;
  Iter = 1;
  While Iter <= Позиции
  do
    if Содерж[Iter] = "" and
       НомДок[Iter] = "" and
       ДатаДок[Iter] = 1.1.100 and
       счДеб[Iter] = "" and
       СчКре[Iter] = "" and
       Сумма[Iter] = 0
    :
       DeleteFrame(Позиции, Iter);
    else
       Iter = Iter + 1;
    fi;
  od;
  НеПустаяТаблица;
end;

Func ПроверитьСправку: L;
var Iter: I;
  if ДатаСпр = 1.1.100
  :
     Message("Введите дату справки", mtError);
     Template.Field = "ДатаСпр";
     Return False;
  fi;
  УдалитьПустыеСтроки;
  РАБ.БЮДЖЕТ.ПроверитьПризнакиНачать;
  for Iter = 1 to Позиции
  do
    if СчДеб[Iter] = ""
    :
       Message('Введите счет дебета', mtError);
       Template.Field = "СчДеб";
       Template.Frame = Iter;
       Return False;
    fi;
    if СчКре[Iter] = ""
    :
       Message('Введите счет кредита', mtError);
       Template.Field = "СчКре";
       Template.Frame = Iter;
       Return False;
    fi;
    if not Correspond(СчДеб[Iter], СчКре[Iter])
    :
       Message('Счета ' + СчДеб[Iter] + '/' + СчКре[Iter] + ' не могут корреспондировать', mtError);
       Template.Field = "СчДеб";
       Template.Frame = Iter;
       Return False;
    fi;
    if Сумма[Iter] = 0
    :
       Message('Поле суммы не заполнено!', mtError);
       Template.Field = "Сумма";
       Template.Frame = Iter;
       Return False;
    fi;
  od;
  Return True;
end;
--Процедуры и функции -------------           
--
--
--Обработчики событий полей шаблона-----
Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp: d;
var Field: S;
var Iter: I;
  Template.HideEditor(False);
  tmp = Calendar;
  if tmp = 1.1.100
  :
     Return Cur;
  fi;
  Field = AsString(Template.Field);
  Iter = AsInteger(Template.Frame);
  if Field = "ДатаСпр":
     ДатаСпр = tmp;
  |  Field = "ДатаДок":
     ДатаДок[Iter] = tmp;
  |  Field = "ДатаИсп":
     ДатаИсп = tmp;
  fi;
  Return Cur;
end;

Func Рекв_OnEnter(FieldName: String; Iter: Integer): logical;
  Рекв = OpenCardFile("Контрагент", "Наше", nil, crdRecordOnly);
  if Рекв = nil
  :
     Return False;
  fi;
  ФИОРук = GetCardFieldS("Контрагент", Рекв, "ФИОРук");
  ФИОБух = GetCardFieldS("Контрагент", Рекв, "ФИОБух");
  КорИмя = GetCardFieldS("Контрагент", Рекв, "КорИмя");
  ОКПО = GetCardFieldS("Контрагент", Рекв, "ОКПО");
end;

Func НаимПодр_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp: S;
  tmp = AnaElection("П.*");
  if tmp = ""
  :
     Return False;
  fi;
  ПризнПодр = tmp;
  НаимПодр = Name_A(tmp);
  if НаимПодр = "" or НаимПодр = " "
  :
     НаимПодр = tmp;
  fi;
  Return False;
end;

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

Func S2OnDelete(SectName: String; Iter: Integer): Logical;
  Return True;
end;

Proc btnПечать_OnClick(Sender: S);
var Obj: Object;
var s, c: I;
  Try
    S1.Column(10, colVisible, false);
    for s = 2 to 4
    do
      if FindObject("S" + Str(s), Obj):
         for c = 10 to 11
         do
           Obj.Column(c, colVisible, false);
         od;
      fi;
    od;
    if fВспомПечать
    :
       РАБ.НАСТР_ПЕЧАТЬ.Prn("", "", "RPO_0504833_001.cfg", "", 1);
    else
       РАБ.НАСТР_ПЕЧАТЬ.Prn("", "", "RPO_0504833_000.cfg", "", 1);
    fi;
  Finally
    S1.Column(10, colVisible, true);
    for s = 2 to 4
    do
      if FindObject("S" + Str(s), Obj)
      :
         for c = 9 to 11
         do
           Obj.Column(c, colVisible, True);
         od;
      fi;
    od;
  end;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc OnOpen(Create: Logical);
  Раб.Настр_Печать.Cfg("", "Rpo_0504833_000.cfg");
  Раб.Настр_Печать.Cfg("", "Rpo_0504833_001.cfg");
  First = True;
end;

Proc AfterOpen(Destroy: Logical);
  First = False;
End;

Proc onRead;
  if НоваяЗапись
  :
     ДатаСпр=ToDay;
     Номер = РАБ.ОБЛ.СледСУчетомГода(SelfCrd, "Номер", "ДатаСпр");
     if Рекв = nil
     :
        Рекв = РАБ.БЮДЖЕТ2005.НашРекв;
        if not Рекв = nil
        :
           ФИОрук = GetCardFieldS("Контрагент", Рекв, "ФИОРук");
           ФИОБух = GetCardFieldS("Контрагент", Рекв, "ФИОБух");
        fi;
     fi;
  fi;
  НеПустаяТаблица;
end;

Proc btnРассчет_OnClick(Sender: String);
Var nSaldo1: N;
Var i, j: I;
Var sAccount, sAccount2, sAccount403, sTmp: S;
  i = Позиции;
  ClearVariable(Содерж);
  ClearVariable(НомДок);
  ClearVariable(ДатаДок);
  ClearVariable(СчДеб);
  ClearVariable(СчКре);
  ClearVariable(Сумма);
  for j = 1 to i
  do
    DeleteFrame(Позиции, 1);
  od;
  j = 0;
  i = 0;
  for account sAccount = "(*.104.08.*)|(*.104.09.*)", Sort
  do
    nSaldo1 = - Saldo(sAccount, 1.01.2009);
    if nSaldo1 <> 0
    :
       sTmp = Раб.Бюджет2005.ВзятьКодСчета(sAccount, "", "ИСТ", True);
       sAccount403 = sTmp + ".401.03.000";
       if match(sAccount, "*.104.08.*")
       :
          sAccount2 = sTmp + ".104.07.410";
       else
          sAccount2 = sTmp + ".104.08.410";
       fi;
       i = Позиции + 1;
       InsertFrame(Позиции, Позиции + 1);
       Содерж[i] = "------------------------------//------------------------------";
       if i = 1
       :
          Содерж[i] = "Письмо Министерства финансов Российской Федерации от 10.04.2009г., п. 1.2";
       fi;
       НомДок[i] = "02-06-07/1505";
       ДатаДок[i] = 1.01.2009;
       СчДеб[i] = sAccount2;
       СчКре[i] = sAccount403;
       Сумма[i] = nSaldo1;
       i = Позиции + 1;
       InsertFrame(Позиции, Позиции + 1);
       Содерж[i] = "------------------------------//------------------------------";
       НомДок[i] = "02-06-07/1505";
       ДатаДок[i] = 1.01.2009;
       СчДеб[i] = sAccount403;
       СчКре[i] = sAccount;
       Сумма[i] = nSaldo1;
    fi;
  od;
end;

КОНЕЦ