-- Шаблон создан мастером бланков
-- 15.02.2008 9:51:07
--
БланкСШаблоном "Сведения о сметных назначениях", Редактор РПО_СМЕТА_ДОХОД_РАСХОД;
var ColBase:I=3;
var БК_Д[]:S=ПОЗИЦИИ_Д[$].БК+'.'+ПОЗИЦИИ_Д[$].КОСГУ;
var БК_Р[]:S=ПОЗИЦИИ_Р[$].БК+'.'+ПОЗИЦИИ_Р[$].КОСГУ;
var ГОД_СТР:S='по приносящей доход деятельности на '+ГОД_СМЕТЫ+' г.';
var ДАТА_П:Д=Дата_Свед;--if(IsChanging,ДАТА_ИЗМ,ДАТА_СМЕТЫ);
--var n[]:I=$;
--var Квартал:L;
--var ПБС_:string=ПБС.КорИмя;
fНалог:L;

var Упр:I;
var fНалРасх:L;
var Buf[]:S;
var ПунктГР[]:S;
var КБК[]:S;
var Дох[]:N;
var Расх[]:N;
var Деф[]:N;
var Итого_Д:N;
var Итого_Р:N;
var Итого_ДФ:N;

var Киф1[]:  S;
var Кни1[]:  S;
var Дох0[]:  L;
var Расх0[]: L;
var Деф0[]:  L;

fУтвДок:L;
sУтвДок:Section;

T1:Section;
T0:Section;

P0:Section;
P1:Section;
P2:Section;
P3:Section;

var XS:I=2100; --Размер листа чистый
var YS:I=2970; --Размер листа чистый
var y0:I;
var hlast:I;
var hsub:i;
var Pages:I=[1];

Func ДобавитьТитулВ(Obj: Object; r:i):I;
var c:i;
 if r>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 Pages=Pages+1;
 Obj.Row(r,RowNewPage,True);
 y0=AsInteger(Obj.Row(r,RowTop,""));  --начальная координата текущего листа (задаем каждый раз когда начинаем новую страницу)
 ^r;
end;

Func ДобавитьШапку(Obj: Object; r:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 c=1;  Obj.Cell(r,c,CellBorder,"0,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"1",True);
 c=2;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"2",True);
 c=3;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"3",True);
 c=4;  Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"4",True);
 c=5; Obj.Cell(r,c,CellBorder,"1,1,1,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"5",True);
 c=6; Obj.Cell(r,c,CellBorder,"1,1,0,2"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"6",True);
       Obj.CellLinks(c,r,7,r);
 ^r;
end;

Func ДобавитьСтроку (Obj: Object; r:i; n:i):I;
var c:i;
 if r+1>AsInteger(Obj.RowsCount): Obj.RowsCount=AsInteger(Obj.RowsCount)+30; fi;
 c=1;  Obj.Cell(r,c,CellBorder,"2,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,ПунктГР[n],True);
--       Obj.CellLinks(c,r,2,r);
 c=2;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(КБК[n],'.',''),True);
 c=3;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,'год',True);
 c=4;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(Дох[n],2)=0,"0",Format("%.2F",Дох[n])),True);
 c=5;  Obj.Cell(r,c,CellBorder,"1,1,1,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(Расх[n],2)=0,"0",Format("%.2F",Расх[n])),True);
 c=6;  Obj.Cell(r,c,CellBorder,"1,1,2,1"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,if(Round(Деф[n],2)=0,"0",Format("%.2F",Деф[n])),True);
       Obj.CellLinks(c,r,7,r);
 ^r;
end;

Func ДобавитьТитулН (Obj: Object; r:i; h:i; Flag1:L; Flag2:L):I;
var c:i;
 Obj.RowsCount=r; --уменьшаем размерность таблицы для сброса обеъеденных клеток, иначе может быть ошибка при переобъеденеии
 Obj.RowsCount=r+30;
 if Flag1:
    c=1;  Obj.Cell(r,c,CellBorder,"0,2,0,0"); Obj.Cell(r,c,CellAlignment,0); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"",True);
          Obj.CellLinks(c,r,7,r);
 fi;
 if Flag2:
          r=r+1;
    c=5;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Номер страницы",True);
          Obj.CellLinks(c,r,6,r);
    c=7; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,Str(Pages),True);
          r=r+1;
    c=5;  Obj.Cell(r,c,CellBorder,"0,0,0,0"); Obj.Cell(r,c,CellAlignment,1); Obj.Cell(r,c,CellFieldType,cftStaticText); Obj.Cell(r,c,CellContents,"Всего страниц",True);
          Obj.CellLinks(c,r,6,r);
    c=7; Obj.Cell(r,c,CellBorder,"0,0,0,1"); Obj.Cell(r,c,CellAlignment,2); Obj.Cell(r,c,CellFieldType,cftCommonField); Obj.Cell(r,c,CellContents,"Pages",True); Obj.Cell(r,c,CellReadOnly,True);
 fi;
 ^r;
end;

Func ВысотаОбласти (S1: S; r1:I; S2: S; r2:i): I;
var Obj1,Obj2:Object;
var y1,y2:i;
 if not FindObject(S1,Obj1): Message("Секция '"+s1+"' не найдена",mtError); ^0; fi;
 if not FindObject(S2,Obj2): Message("Секция '"+s2+"' не найдена",mtError); ^0; fi;
 y1=AsInteger(Obj1.Row(r1,RowTop,""));
 y2=AsInteger(Obj2.Row(r2,RowTop,""));
 ^y2-y1;
end;

Proc РазметкаЛиста;
var Obj:Object;
var r,r0,y,yy,h,h0,s,hr,n,nn,hlast,hsub:i;
 РАБ.НАСТР_ПЕЧАТЬ.ReadCfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
 P3.Row(1,RowHeight,10);


 Pages=1;
-- Раб.Настр_Печать.ReadCfg("",SelfCfg);
 yy=Раб.Настр_Печать.Sheet(XS,YS); --размер рабочей области
 nn=LengthofArray(Buf);
 hlast=ВысотаОбласти ("P0",1,"P3",4);
 hsub=ВысотаОбласти ("P3",1,"P3",4)+47;--ВысотаОбласти ("S11",1,"S12",2)+ВысотаОбласти ("SC2",1,"SC2",4);
 if FindObject("T1",Obj):
    Obj.RowsCount=3;
       r=3;
       r0=0;
       y0=AsInteger(T0.Row(1,RowTop,""));  --начальная координата текущего листа
       h=hsub;
       for n=1..nn do
        hr=r+1;
        r=ДобавитьСтроку(Obj,r+1,n);
        y=AsInteger(Obj.Row(r+1,RowTop,""));
        if y-y0>yy-h:
           y=AsInteger(Obj.Row(hr,RowTop,""));
           r=ДобавитьТитулН(Obj,hr,yy-h-(y-y0),True,True);
           r0=r;
           r=ДобавитьТитулВ(Obj,r+1);
           r=ДобавитьШапку(Obj,r+1);
           r=ДобавитьСтроку(Obj,r+1,n);
        fi;
       od;
       r=ДобавитьТитулН(Obj,r+1,0,True,False);
       h=hlast;
       y=AsInteger(Obj.Row(r+2,RowTop,""));
       if y-y0>yy-h: --проверяем влезла ли таблица и штам если нет то переносим последнию строчку
          h=hsub; --сбрасываем размер на промежуточный
          y=AsInteger(Obj.Row(hr,RowTop,""));
          r=ДобавитьТитулН(Obj,hr,yy-h-(y-y0),True,True);
          r0=r;
          r=ДобавитьТитулВ(Obj,r+1);
          r=ДобавитьШапку(Obj,r+1);
          r=ДобавитьСтроку(Obj,r+1,nn);
          r=ДобавитьТитулН(Obj,r+1,0,True,False);
       fi;
       r=r-1;
       Obj.RowsCount=r;
 fi;
if r0=0: y0=AsInteger(T0.Row(1,RowTop,"")); else y0=AsInteger(T1.Row(r0,RowTop,"")); fi;
  if FindObject("P3",Obj):
        if Pages=1: h0=0+if(fУтвДок,0,ВысотаОбласти("sУтвДок",1,"sУтвДок",3));--ВысотаОбласти("S0",1,if(fУтвДок,"sУтвДок","S1"),1)+10+47+ВысотаОбласти("S3",3,"S3",4)+ВысотаОбласти("S3",10,"S3",11); --Внимание!+ОчиститьР1+Аналитический признак лицевого счета+Аналитический признак БО
          |True: h0=0;
        fi;
        y=AsInteger(Obj.Row(4,RowTop,""));
        h=yy-(y-y0)+h0;
        if h<10: Message("Внимание ! Страница выходит за границы листа^MОбратитесь к разработчику или уменьшите количество строк раздела "+if(s=1,"1. Реквизиты чека","2. Расшифровка заявки на получение наличных денег"),mtWarning); fi;
     h=Max(h,10);
     Obj.Row(1,RowHeight,h);
  fi;

end;
--Конец оформлений

var accept:S;

Proc ИниТПров;
var i:i;
 accept='';
 for i=32..123 do
  accept=accept+chr(i);
 od;
 accept=accept+chr(125);
 accept=accept+chr(126);
 accept=accept+chr(185);
 accept=accept+chr(184);
 accept=accept+chr(168);
 for i=192..255 do
  accept=accept+chr(i); 
 od;
end;

Func ПроверкаНаСтандарт (Адрес:S; aИмя:S; aЗнач:S; aОбязат:I; aДлина:I):L; --aИмя имя поля, aЗнач значение поля, aОбязат =1 обзательное, =0 предупреждение, =-1 необазтельное, aДлина >0 равно, <0 меньше или равно, 0 не имеет значения
var l,ll:I;
var t:S;
 aЗнач=Trim(aЗнач);
 t=AsString(Template.Field);
 Template.Field=Адрес;
 if aЗнач="" and not aОбязат=-1 then
     if aОбязат=1:
        Message("Заполните поле '"+aИмя+"'", mtError);
        ^False;
       |aОбязат=0:
        if EnqOkCancel("Поле '"+aИмя+"' не заполненно"+chr(13)+'Продолжить?', mtWarning)=cmCancel then
         ^False;
        else
         Template.Field=t;
         ^True;
        fi;

     fi;
    ^True;
 fi;
 ll=Length(aЗнач);
 for l=1..ll do
  if not(Pos(SubStr(aЗнач,l,1),accept)>0):
       Message("Поле '"+aИмя+"' содержит недопустимый символ ( "+SubStr(aЗнач,l,1)+" ) на позиции "+Str(l), mtError); 
       ^False;
  fi;
 od;
 if not aДлина=0 and not aЗнач="":
    if Length(aЗнач)>Abs(aДлина) then Message("Значение поля '"+aИмя+"' превышает максимальную длину "+Str(Abs(aДлина)),mtError); ^False;
      |aДлина>0 and Length(aЗнач)<aДлина then Message("Значение поля '"+aИмя+"' меньше обязательной длины "+Str(aДлина),mtError); ^False;
    fi;
 fi;
Template.Field=t;
^True;
end;

Func Обязаловка(Strong:L):L;
var OWA,i:Integer;
--  if НОМЕР_СМЕТЫ='' then Message('Введите номер сметы', mtError); Template.Field='НОМЕР_СМЕТЫ'; ^False;  fi;
--  if ДАТА_СМЕТЫ=1.1.100 then Message('Введите дату сметы', mtError); Template.Field='ДАТА_СМЕТЫ'; ^False;  fi;
--  if (НОМЕР_ИЗМ='') and IsChanging then Message('Введите номер изменения к смете', mtError); Template.Field='НОМЕР_ИЗМ'; ^False;              fi;
--  if (ДАТА_ИЗМ=1.1.100) and IsChanging then Message('Введите дату изменения к смете', mtError);  Template.Field='ДАТА_ИЗМ'; ^False;  fi;
--  if ГОД_СМЕТЫ<>'' and (Length(ГОД_СМЕТЫ)<>4 or Int(ГОД_СМЕТЫ)=0) then Message('Введите год в 4х значном формате', mtError); Template.Field='ГОД_СМЕТЫ'; ^False; fi;
--  if (Д<>1.1.100) and ГОД(Д)<>INT(ГОД_СМЕТЫ) then  Message('Дата операции должна быть в годе сметы', mtError); Template.Field='Д'; ^False; fi;
--  if not Strong then ^True; fi;
  ИниТПров;
  if ПБС=nil then
     Message('Выберете получателя бюджетных средств', mtError);
     Template.Field='ПБС.КорИмя'; ^False;
  fi;
  if not ПроверкаНаСтандарт ('ПБС.КорИмя','КБП получателя бюджетных средств',ПБС.РПО_КБП,1,5) then                       ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС.КорИмя','ИНН получателя бюджетных средств',ПБС.ИНН,-1,-12) then                        ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС.КорИмя','КПП получателя бюджетных средств',ПБС.КПП,-1,-9) then                         ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС.КорИмя','ФИО руководителя получателя бюджетных средств',ПБС.ФИОРУК,-1,-50) then        ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС.КорИмя','ФИО главного бухгалтера получателя бюджетных средств',ПБС.ФИОБУХ,-1,-50) then ^False; fi;

  if ПБС_СЧЕТ=nil then
     Message('Выберете счет получателя бюджетных средств', mtError);
     Template.Field='ПБС_СЧЕТ.РПО_ЛСЧЕТ'; ^False;
  fi;
  if not ПроверкаНаСтандарт ('ПБС_СЧЕТ.РПО_ЛСЧЕТ','Номер лицевого счета получателя бюджетных средств',ПБС_СЧЕТ.РПО_ЛСЧЕТ,1,11) then ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС_СЧЕТ.РПО_ЛСЧЕТ','Наименование ОФК получателя бюджетных средств',ПБС_СЧЕТ.РПО_ОФК_ИМЯ,1,-250) then ^False; fi;
  if not ПроверкаНаСтандарт ('ПБС_СЧЕТ.РПО_ЛСЧЕТ','Код ОФК получателя бюджетных средств',ПБС_СЧЕТ.РПО_ОФК_КОД,1,4)             then ^False; fi;
  if РБС=nil and ГЛ_РБС_КОД='' then Message('Выберите распорядителя или главного распорядителя бюджетных средств', mtError);
      Template.Field='РБС.КорИмя'; ^False;
    |РБС.РПО_КБП='' and ГЛ_РБС_КОД='' then Message('Заполните код распорядителя или главного распорядителя бюджетных средств', mtError);
       Template.Field='РБС.КорИмя'; ^False;
  fi;
  if not ПроверкаНаСтандарт ('ГЛ_РБС_КОД','Код главного распорядителя бюджетных средств',ГЛ_РБС_КОД,1,3) then ^False; fi;
 ^True;
end;


Func ВзятьПГР(Аналит:S):S;
var n,nn:I;
var Res:S;
Res='000';
nn=WordsCount(Аналит,' ');
for n=1..nn do
  if ExtractWord(1,ExtractWord(n,Аналит,' '),'.')='ПГР':
     Res=ExtractWord(2,ExtractWord(n,Аналит,' '),'.');
  fi;
od;
if Res='000' then ^''; else ^Res; fi;
end;

var ГОД_Д[]:N=ДОХОД[$].СУММГОД_ДОИЗМ+ДОХОД[$].СУММГОД_ИЗМ;
var ГОД_Р[]:N=РАСХОД[$].СУММГОД_ДОИЗМ+РАСХОД[$].СУММГОД_ИЗМ;

proc Свертка;
var i,OWA,OA,RecNo:I;
var t:N;
var varn,kod:S;
EditorApply;
OWA=OpenWorkArea("РПО_СМЕТА_ДОХОД_РАСХОД","НОМЕР_СМЕТЫ");
try
 RecNo=GetRecordNumber(OWA,Current);
 OA=OpenArray(OWA,RecNo,"ПОЗИЦИИ_Д","НАЛОГ; ПГР; БК; КОСГУ; КИФ");
  try
  DeleteAllRecords(OA);
  for i= 1 to ДОХОД do
    BeginChanging(OA);
    try
      RecNo=Search(OA,1,((Pos("НАЛОГ",ДОХОД[i].ПРИЗНАК)>0) and fНалог),if(ДОХОД[i].ПГР='',ВзятьПГР(ДОХОД[i].ПРИЗНАК),ДОХОД[i].ПГР),ДОХОД[i].БК,ДОХОД[i].КОСГУ,ДОХОД[i].КИФ);
      if RecNo=0 then
         RecNo=InsertRecord(OA);
         RecNo=PutFieldL(OA,RecNo,"НАЛОГ",(Pos("НАЛОГ",ДОХОД[i].ПРИЗНАК)>0) and fНалог);
         RecNo=PutFieldS(OA,RecNo,"ПГР",if(ДОХОД[i].ПГР='',ВзятьПГР(ДОХОД[i].ПРИЗНАК),ДОХОД[i].ПГР));
         RecNo=PutFieldS(OA,RecNo,"БК",ДОХОД[i].БК);
         RecNo=PutFieldS(OA,RecNo,"КОСГУ",ДОХОД[i].КОСГУ);
         RecNo=PutFieldS(OA,RecNo,"КИФ",ДОХОД[i].КИФ);
         RecNo=PutFieldS(OA,RecNo,"ИСТ1",ДОХОД[i].ИСТ1);
         RecNo=PutFieldS(OA,RecNo,"ИСТ2",ДОХОД[i].ИСТ2);
         RecNo=PutFieldS(OA,RecNo,"ИСТ3",ДОХОД[i].ИСТ3);
         RecNo=PutFieldS(OA,RecNo,"ИСТ4",ДОХОД[i].ИСТ4);
         RecNo=PutFieldS(OA,RecNo,"ИСТ5",ДОХОД[i].ИСТ5);
         RecNo=PutFieldS(OA,RecNo,"ИСТ6",ДОХОД[i].ИСТ6);
         RecNo=PutFieldS(OA,RecNo,"ИСТ7",ДОХОД[i].ИСТ7);
         RecNo=PutFieldS(OA,RecNo,"ИСТ8",ДОХОД[i].ИСТ8);
      fi;

      if GetFieldS(OA,RecNo,"ИСТ1")<>ДОХОД[i].ИСТ1 then
         varn=Раб.Бюджет2005.ТипКБКСчета(GetFieldS(OA,RecNo,'БК'));
         kod=GetFieldS(OA,RecNo,'БК')+GetFieldS(OA,RecNo,'КОСГУ');
         kod=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов (kod,'.','');
         kod='000'+Substr(kod,4,17);
         varn=varn+'2006';

         РАБ.Бюджет.Начать_НаимКБК;
         kod=РАБ.Бюджет.Взять_НаимКБК(varn,kod);
         РАБ.Бюджет.ЗАКОНЧИТЬ_НАИМКБК;

         RecNo=PutFieldS(OA,RecNo,"ИСТ1",kod);
      fi;

      t=GetFieldN(OA,RecNo,"СУММГОД")+ГОД_Д[i];  RecNo=PutFieldN(OA,RecNo,"СУММГОД",t);
      t=GetFieldN(OA,RecNo,"СУММГОД_ИЗМ")+ДОХОД[i].СУММГОД_ИЗМ;  RecNo=PutFieldN(OA,RecNo,"СУММГОД_ИЗМ",t);
     finally
     EndChanging(OA);
     end;
    od;
 finally
 CloseWorkArea(OA);
 end;
 RecNo=GetRecordNumber(OWA,Current);
 OA=OpenArray(OWA,RecNo,"ПОЗИЦИИ_Р","ПГР; БК; КОСГУ; КНИ");
  try
  DeleteAllRecords(OA);
  for i= 1 to Расход do
    BeginChanging(OA);
    try
      RecNo=Search(OA,1,if(Расход[i].ПГР='',ВзятьПГР(Расход[i].ПРИЗНАК),Расход[i].ПГР),Расход[i].БК,Расход[i].КОСГУ,Расход[i].КНИ);
      if RecNo=0 then
         RecNo=InsertRecord(OA);
         RecNo=PutFieldS(OA,RecNo,"ПГР",if(Расход[i].ПГР='',ВзятьПГР(Расход[i].ПРИЗНАК),Расход[i].ПГР));
         RecNo=PutFieldS(OA,RecNo,"БК",Расход[i].БК);
         RecNo=PutFieldS(OA,RecNo,"КОСГУ",Расход[i].КОСГУ);
         RecNo=PutFieldS(OA,RecNo,"КНИ",Расход[i].КНИ);
         RecNo=PutFieldS(OA,RecNo,"НАПР1",Расход[i].НАПР1);
         RecNo=PutFieldS(OA,RecNo,"НАПР2",Расход[i].НАПР2);
         RecNo=PutFieldS(OA,RecNo,"НАПР3",Расход[i].НАПР3);
         RecNo=PutFieldS(OA,RecNo,"НАПР4",Расход[i].НАПР4);
         RecNo=PutFieldS(OA,RecNo,"НАПР5",Расход[i].НАПР5);
         RecNo=PutFieldS(OA,RecNo,"НАПР6",Расход[i].НАПР6);
         RecNo=PutFieldS(OA,RecNo,"НАПР7",Расход[i].НАПР7);
         RecNo=PutFieldS(OA,RecNo,"НАПР8",Расход[i].НАПР8);
      fi;
      if GetFieldS(OA,RecNo,"НАПР1")<>РАСХОД[i].НАПР1 then
         varn=Раб.Бюджет2005.ТипКБКСчета(GetFieldS(OA,RecNo,'БК'));
         if varn='ФКР' then kod=GetFieldS(OA,RecNo,'КОСГУ');
                        varn='ЭКР';
         else
          kod=GetFieldS(OA,RecNo,'БК')+GetFieldS(OA,RecNo,'КОСГУ');
          kod=Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов (kod,'.','');
          kod='000'+Substr(kod,4,17);
        fi;
        varn=varn+'2006';
        РАБ.Бюджет.Начать_НаимКБК;
        kod=РАБ.Бюджет.Взять_НаимКБК(varn,kod);
        РАБ.Бюджет.ЗАКОНЧИТЬ_НАИМКБК;
        RecNo=PutFieldS(OA,RecNo,"НАПР1",kod);
      fi;
      t=GetFieldN(OA,RecNo,"СУММГОД")+ГОД_Р[i];  RecNo=PutFieldN(OA,RecNo,"СУММГОД",t);
      t=GetFieldN(OA,RecNo,"СУММГОД_ИЗМ")+Расход[i].СУММГОД_ИЗМ;  RecNo=PutFieldN(OA,RecNo,"СУММГОД_ИЗМ",t);
     finally
     EndChanging(OA);
     end;
    od;
 finally
 CloseWorkArea(OA);
 end;
finally
CloseWorkArea(OWA);
end;
end;



Proc Расчет;
var i,k:I;
var s:S;
Свертка;
ClearVariable(Buf);
ClearVariable(ПунктГР);
ClearVariable(КБК);
ClearVariable(Киф1);
ClearVariable(Кни1);
ClearVariable(Дох);
ClearVariable(Расх);
ClearVariable(Деф);
ClearVariable(Дох0);
ClearVariable(Расх0);
ClearVariable(Деф0);
ClearVariable(Итого_Д);
ClearVariable(Итого_Р);
ClearVariable(Итого_ДФ);

for i=1 to ПОЗИЦИИ_Д do
  InsertFrame(Упр,Упр+1);
  if РАБ.БЮДЖЕТ2005.ТипКБКСчета(БК_Д[i])='КИФД' then s='3'; else s='1'; fi;
  k=InsertInArraySort(Buf,s+ПОЗИЦИИ_Д[i].ПГР+БК_Д[i]+if(ПОЗИЦИИ_Д[i].НАЛОГ,'_2','_1'));
  InsertInArray(ПунктГР,k,ПОЗИЦИИ_Д[i].ПГР);
  InsertInArray(КБК,k,Раб.Формат.ReplaceSubStr(БК_Д[i],".",""));
  InsertInArray(Киф1,k,ПОЗИЦИИ_Д[i].Киф);
  InsertInArray(Кни1,k,'');

  if РАБ.БЮДЖЕТ2005.ТипКБКСчета(БК_Д[i])='КИФД' then
     InsertInArray(Деф,k,ПОЗИЦИИ_Д[i].СУММГОД);
     InsertInArray(Дох,k,0);
     InsertInArray(Расх,k,0);
     InsertInArray(Деф0,k,ПОЗИЦИИ_Д[i].СУММГОД=0);
     InsertInArray(Дох0,k,False);
     InsertInArray(Расх0,k,False);
     Итого_ДФ=Итого_ДФ+ПОЗИЦИИ_Д[i].СУММГОД;
    else
     if fНалРасх and ПОЗИЦИИ_Д[i].НАЛОГ then
        InsertInArray(Дох,k,0);
        InsertInArray(Деф,k,0);
        InsertInArray(Расх,k,-ПОЗИЦИИ_Д[i].СУММГОД);
        InsertInArray(Дох0,k,False);
        InsertInArray(Деф0,k,False);
        InsertInArray(Расх0,k,ПОЗИЦИИ_Д[i].СУММГОД=0);
        Итого_Р=Итого_Р-ПОЗИЦИИ_Д[i].СУММГОД;
       else
        InsertInArray(Дох,k,ПОЗИЦИИ_Д[i].СУММГОД);
        InsertInArray(Деф,k,0);
        InsertInArray(Расх,k,0);
        InsertInArray(Дох0,k,ПОЗИЦИИ_Д[i].СУММГОД=0);
        InsertInArray(Деф0,k,False);
        InsertInArray(Расх0,k,False);
        Итого_Д=Итого_Д+ПОЗИЦИИ_Д[i].СУММГОД;

    fi;
  fi;
od;
for i=1 to ПОЗИЦИИ_Р do
  InsertFrame(Упр,Упр+1);
  if РАБ.БЮДЖЕТ2005.ТипКБКСчета(БК_Д[i])='КИФД' then s='3'; else s='2'; fi;
  k=InsertInArraySort(Buf,s+ПОЗИЦИИ_Р[i].ПГР+БК_Р[i]+'_1');
  InsertInArray(ПунктГР,k,ПОЗИЦИИ_Р[i].ПГР);
  InsertInArray(КБК,k,Раб.Формат.ReplaceSubStr(БК_Р[i],".",""));
  InsertInArray(Киф1,k,'');
  InsertInArray(Кни1,k,ПОЗИЦИИ_Р[i].Кни);

  if РАБ.БЮДЖЕТ2005.ТипКБКСчета(БК_Р[i])='КИФД' then
     InsertInArray(Деф,k,ПОЗИЦИИ_Р[i].СУММГОД);
     InsertInArray(Дох,k,0);
     InsertInArray(Расх,k,0);
     InsertInArray(Деф0,k,ПОЗИЦИИ_Р[i].СУММГОД=0);
     InsertInArray(Дох0,k,False);
     InsertInArray(Расх0,k,False);

     Итого_ДФ=Итого_ДФ+ПОЗИЦИИ_Р[i].СУММГОД;
    else
     InsertInArray(Расх,k,ПОЗИЦИИ_Р[i].СУММГОД);
     InsertInArray(Дох,k,0);
     InsertInArray(Деф,k,0);
     InsertInArray(Расх0,k,ПОЗИЦИИ_Р[i].СУММГОД=0);
     InsertInArray(Дох0,k,False);
     InsertInArray(Деф0,k,False);

     Итого_Р=Итого_Р+ПОЗИЦИИ_Р[i].СУММГОД;
  fi;
od;
end;

--
Proc Выгрузка(AsChanging:L) ;
var FileName:S;
var F:I;
var i,j,N,OWA:I;
var D:Date;
var fm:S;
--D=if(AsChanging,ДАТА_ИЗМ,ДАТА_СМЕТЫ); --Или сегодня?
--N=if(AsChanging,Int(НОМЕР_ИЗМ),Int(НОМЕР_СМЕТЫ));
D=Today;
OWA=OpenWorkArea('РПО_СМЕТА_ДОХОД_РАСХОД','НОМЕРВЫГР','ДАТАВЫГР='+DateToString(D));
try
 if Records(OWA)=0 then N=1;
  else N=GetFieldI(OWA,1,'НОМЕРВЫГР');
  for i= 1 to Records(OWA) do
    if GetFieldI(OWA,i,'НОМЕРВЫГР')>N then N=GetFieldI(OWA,i,'НОМЕРВЫГР');  fi;
  od; 
  N=N+1;
  fi;
finally
CloseWorkArea(OWA);
end;
ClearVariable(Buf);
Buf[1]="TXSM100701";
Buf[2]="TXSM090101";
Buf[3]="FK2008.01";
j=Alternate("Выберите формат выгрузки",Buf,-1,1,12);
if j=0 then exit; fi;
if j=1 then fm='1007';
  |j=2 then fm='0901';
  |True: fm='0801'; fi;
if Номер_Свед="" and (fm="0901" or fm="1007") then Message("Заполните номер сведений",mtError); Exit; fi;
if Дата_Свед=1.1.100 and (fm="0901" or fm="1007") then Message("Заполните дату сведений",mtError); Exit; fi;
if fm="1007":
  Инитпров;
  if not ПроверкаНаСтандарт ('Испол_Должн','Должность ответственного исполнителя',Испол_Должн,1,-100) then         Exit; fi;
  if not ПроверкаНаСтандарт ('Испол_ФИО','ФИО ответственного исполнителя',Испол_ФИО,1,-50) then Exit; fi;
  if ДАТАПод=1.1.100 then  Message('Заполните дату подписи сведений исполнителем', mtError); Template.Field='ДАТАПод'; Exit; fi;
fi;
if Aschanging and (not IsChanging) then Message("Выгрузка в режиме изменений для сметы невозможна"); Exit; fi;
FileName=SubStr(ПБС.РПО_КБП,1,5)+  if(Day(D)<10, Str(Day(D)), Chr(55+Day(D) ))+Раб.Бюджет2005.Format36(N)+'.SM'+if(Mon(D)<10,Str(Mon(D)),Chr(55+Mon(D)));--XXXXXDNN.TTM
if ChooseFile(FileName,"")=cmOk then
   F=TextFileCreate(FileName);
   TextFileWriteLn(F,"FK|"+if((fm="0901" or fm="1007"),if(fm="0901","TXSM090101","TXSM100701"),"2008.01")+"|Турбо Бухгалтер 6.9 Бюджет-148н|"+SubStr(Str(Версия.Сборка0)+if(Версия.Сборка1<>0,"."+Str(Версия.Сборка1),"")+Версия.Сборка2,1,10)+"||");
   TextFileAppendLn(F,"FROM");         TextFileAppendLn(F,"|");
     if (fm="0901" or fm="1007") then            TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_КОДБЮДЖ,1,1));   TextFileAppendLn(F,"|"); fi;
     TextFileAppendLn(F,SubStr(ПБС.РПО_КБП,1,5));   TextFileAppendLn(F,"|");
     TextFileAppendLn(F,UP(ПБС.ПОЛНИМЯ)); TextFileAppendLn(F,UP(ПБС.РПО_ПОЛНИМЯ2)); TextFileAppendLn(F,"|");
   TextFileWriteLn(F,'');

   TextFileAppendLn(F,"TO");     TextFileAppendLn(F,"|");
     TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_ОФК_КОД,1,4));       TextFileAppendLn(F,"|");
     TextFileAppendLn(F,Substr(ПБС_СЧЕТ.РПО_ОФК_ИМЯ,1,if((fm="0901" or fm="1007"),255,250))); if (fm="0901" or fm="1007"): TextFileAppendLn(F,ПБС_СЧЕТ.РПО_ОФК_ИМЯ2); fi;  TextFileAppendLn(F,"|");
   TextFileWriteLn(F,'');

   TextFileAppendLn(F,"SM");     TextFileAppendLn(F,"|");
     if fm='0801' then
        TextFileAppendLn(F,if(AsChanging,"1","0"));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(НОМЕР_СМЕТЫ,1,13));    TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(НОМЕР_ИЗМ,1,13));   TextFileAppendLn(F,"|");
       else
        TextFileAppendLn(F,"|");--GUID
     fi;
     TextFileAppendLn(F,SubStr(ГОД_СМЕТЫ,1,4)); TextFileAppendLn(F,"|");
     if (fm="0901" or fm="1007") then
        TextFileAppendLn(F,SubStr(НОМЕР_СВЕД,1,13));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,DateToString(Дата_Свед)); TextFileAppendLn(F,"|"); --Дата сведений о смете
        TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_НАИМБЮДЖ,1,255));   TextFileAppendLn(F,"|"); --Наименование бюджета
        TextFileAppendLn(F,ПБС_СЧЕТ.РПО_ФО_НАИМ1); TextFileAppendLn(F,ПБС_СЧЕТ.РПО_ФО_НАИМ2);  TextFileAppendLn(F,"|"); --Наименнование финансового органа
        TextFileAppendLn(F,SubStr(ГЛ_РБС_КОД,1,3));   TextFileAppendLn(F,"|"); --Глава по БК
        TextFileAppendLn(F,SubStr(ГЛ_РБС,1,255));   TextFileAppendLn(F,"|"); --Наименование ГРБС
        TextFileAppendLn(F,SubStr(ПБС.РПО_КБП,1,5));   TextFileAppendLn(F,"|");  --Код ПБС
        TextFileAppendLn(F,UP(ПБС.ПОЛНИМЯ)); TextFileAppendLn(F,UP(ПБС.РПО_ПОЛНИМЯ2)); TextFileAppendLn(F,"|"); --Наименование ПБС
        TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_ЛСЧЕТ,1,11));   TextFileAppendLn(F,"|"); --Лицевой счет ПБС
        TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_ОФК_КОД,1,4));        TextFileAppendLn(F,"|"); --Код ОФК
        TextFileAppendLn(F,Substr(ПБС_СЧЕТ.РПО_ОФК_ИМЯ,1,if((fm="0901" or fm="1007"),255,250))); if (fm="0901" or fm="1007"): TextFileAppendLn(F,ПБС_СЧЕТ.РПО_ОФК_ИМЯ2); fi;    TextFileAppendLn(F,"|");          --Наименование ОФК
        TextFileAppendLn(F,Str(ОСТАТОК,2));   TextFileAppendLn(F,"|");
       else
        if not AsChanging then TextFileAppendLn(F,DateToString(ДАТА_СМЕТЫ)); fi;  TextFileAppendLn(F,"|");
        if AsChanging then TextFileAppendLn(F,DateToString(ДАТА_ИЗМ)); fi;         TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РСЧЕТ,1,20));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(ПБС_СЧЕТ.РПО_ЛСЧЕТ,1,11));   TextFileAppendLn(F,"|");
        if (РБС=nil) or (РБС.РПО_КБП='') then TextFileAppendLn(F,SubStr(ГЛ_РБС_КОД,1,3)); TextFileAppendLn(F,"|"); TextFileAppendLn(F,"|");
        else      TextFileAppendLn(F,"|"); TextFileAppendLn(F,SubStr(РБС.РПО_КБП,1,5)); TextFileAppendLn(F,"|"); fi;
        if (РБС=nil) or (РБС.РПО_КБП='') then TextFileAppendLn(F,SubStr(ГЛ_РБС,1,250)); TextFileAppendLn(F,"|"); TextFileAppendLn(F,"|");
        else      TextFileAppendLn(F,"|"); TextFileAppendLn(F,SubStr(UP(ПБС.ПОЛНИМЯ),1,250)); TextFileAppendLn(F,"|"); fi;
        TextFileAppendLn(F,SubStr(ПБС.ИНН,1,12));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(ПБС.КПП,1,9));         TextFileAppendLn(F,"|");
        TextFileAppendLn(F,ПБС.ЮРАДРЕС);   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(ПБС.ФИОРУК,1,50));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(ПБС.ФИОБУХ,1,50));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(ОСТАТОК*100));      TextFileAppendLn(F,"|");
     fi;

     if (fm="0901" or fm="1007") then
        Расчет;
        TextFileAppendLn(F,Str(Итого_Д,2));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(Итого_Р,2));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(Итого_ДФ,2));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(Испол_Должн,1,100));     TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(Испол_ФИО,1,50));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,SubStr(Испол_Тел,1,50));   TextFileAppendLn(F,"|");
        if ДатаПод<>1.1.100 then TextFileAppendLn(F,DateToString(ДатаПод)); fi;   TextFileAppendLn(F,"|");
       else
        if not Квартал then
         if not AsChanging: TextFileAppendLn(F,Str(ВСЕГО_ДОХОД*100));   TextFileAppendLn(F,"|");
           else TextFileAppendLn(F,"|"); TextFileAppendLn(F,Str(ВСЕГО_ДОХОД_ИЗМ*100));
         fi; TextFileAppendLn(F,"|");
          TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
          TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
        else
          MESSAGE("КВАРТАЛЬНЫХ СМЕТ БОЛЬШЕ НЕТ", mtError);
        fi;
        if not Квартал then
         if not AsChanging: TextFileAppendLn(F,Str(ВСЕГО_РАСХОД*100));   TextFileAppendLn(F,"|");
           else TextFileAppendLn(F,"|"); TextFileAppendLn(F,Str(ВСЕГО_РАСХОД_ИЗМ*100));
         fi; TextFileAppendLn(F,"|");
          TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
          TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
        else
          MESSAGE("КВАРТАЛЬНЫХ СМЕТ БОЛЬШЕ НЕТ", mtError);
        fi;
     fi;
   TextFileWriteLn(F,'');
   if (fm="0901" or fm="1007") then
      j=1;
      for i=1 to LengthofArray(Дох) do
       if Дох[i]<>0 or Дох0[i] then
        TextFileAppendLn(F,"SMSTD");           TextFileAppendLn(F,"|");
        TextFileAppendLn(F,ПунктГР[i]);   TextFileAppendLn(F,"|");
        if fm="0901" then TextFileAppendLn(F,Киф1[i]);       TextFileAppendLn(F,"|"); TextFileAppendLn(F,"|"); fi;
        TextFileAppendLn(F,"20");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(КБК[i],'.',''));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"2");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"1");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(Дох[i],2));   TextFileWriteLn(F,"|");
        j=j+1;
       fi;
      od;
      j=1;
      for i=1 to LengthofArray(Расх) do
       if Расх[i]<>0 or Расх0[i] then
        TextFileAppendLn(F,"SMSTR");           TextFileAppendLn(F,"|");
        TextFileAppendLn(F,ПунктГР[i]);   TextFileAppendLn(F,"|");
        if fm="0901" then TextFileAppendLn(F,Кни1[i]);       TextFileAppendLn(F,"|");     TextFileAppendLn(F,"|"); fi;
        TextFileAppendLn(F,"10");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(КБК[i],'.',''));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"2");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"1");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(Расх[i],2));        TextFileWriteLn(F,"|");
        j=j+1;
       fi;
      od;
      j=1;
      for i=1 to LengthofArray(Деф) do
       if Деф[i]<>0 or Деф0[i] then
        TextFileAppendLn(F,"SMSTI");           TextFileAppendLn(F,"|");
        TextFileAppendLn(F,ПунктГР[i]);   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Киф1[i]);           TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Кни1[i]);           TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"|");
        TextFileAppendLn(F,if(Раб.Бюджет2005.ВзятьТипКИФД(КБК[i])="КИВФ","31","32"));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Раб.Бюджет2005.ЗаменитьРазделительВНабореСлов(КБК[i],'.',''));   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"2");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,"1");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Str(Деф[i],2));   TextFileWriteLn(F,"|");
        j=j+1;
       fi;
      od;
     else
      for i=1 to ПОЗИЦИИ_Д do
        TextFileAppendLn(F,"SMSTD");   TextFileAppendLn(F,"|");
        TextFileAppendLn(F,ПОЗИЦИИ_Д[i].ИСТ1+ПОЗИЦИИ_Д[i].ИСТ2+ПОЗИЦИИ_Д[i].ИСТ3+ПОЗИЦИИ_Д[i].ИСТ4+ПОЗИЦИИ_Д[i].ИСТ5+ПОЗИЦИИ_Д[i].ИСТ6+ПОЗИЦИИ_Д[i].ИСТ7+ПОЗИЦИИ_Д[i].ИСТ8);       TextFileAppendLn(F,"|");
        if РАБ.БЮДЖЕТ2005.ТипКБКСчета(ПОЗИЦИИ_Д[i].БК)='КД' then
              TextFileAppendLn(F,Substr(РАБ.БЮДЖЕТ2005.ЗаменитьРазделительВНабореСлов(ПОЗИЦИИ_Д[i].БК+ПОЗИЦИИ_Д[i].КОСГУ,'.',''),1,20));         TextFileAppendLn(F,"|");          TextFileAppendLn(F,"|");
          |(РАБ.БЮДЖЕТ2005.ТипКБКСчета(ПОЗИЦИИ_Д[i].БК)='КИФД') and (РАБ.БЮДЖЕТ2005.ВзятьТипКИФД(ПОЗИЦИИ_Д[i].БК)='КИВФ') then
              TextFileAppendLn(F,"|");   TextFileAppendLn(F,"|"); TextFileAppendLn(F,Substr(РАБ.БЮДЖЕТ2005.ЗаменитьРазделительВНабореСлов(ПОЗИЦИИ_Д[i].БК+ПОЗИЦИИ_Д[i].КОСГУ,'.',''),1,20));
          |True : TextFileAppendLn(F,"|");   TextFileAppendLn(F,Substr(РАБ.БЮДЖЕТ2005.ЗаменитьРазделительВНабореСлов(ПОЗИЦИИ_Д[i].БК+ПОЗИЦИИ_Д[i].КОСГУ,'.',''),1,20)); TextFileAppendLn(F,"|");
          fi; TextFileAppendLn(F,"|");
        TextFileAppendLn(F,Substr(ПОЗИЦИИ_Д[i].КИФ,1,20));   TextFileAppendLn(F,"|");
        if not Квартал then
           if not AsChanging: TextFileAppendLn(F,Str(ПОЗИЦИИ_Д[i].СУММГОД*100));   TextFileAppendLn(F,"|");
             else TextFileAppendLn(F,"|"); TextFileAppendLn(F,Str(ПОЗИЦИИ_Д[i].СУММГОД_ИЗМ*100));
             fi; TextFileAppendLn(F,"|");
             TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
             TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
          else
            MESSAGE("КВАРТАЛЬНЫХ СМЕТ БОЛЬШЕ НЕТ", mtError);
          fi;
        TextFileWriteLn(F,'');
        od;
        for i=1 to ПОЗИЦИИ_Р do
        TextFileAppendLn(F,"SMSTR");           TextFileAppendLn(F,"|");
          TextFileAppendLn(F,ПОЗИЦИИ_Р[i].НАПР1+ПОЗИЦИИ_Р[i].НАПР2+ПОЗИЦИИ_Р[i].НАПР3+ПОЗИЦИИ_Р[i].НАПР4+ПОЗИЦИИ_Р[i].НАПР5+ПОЗИЦИИ_Р[i].НАПР6+ПОЗИЦИИ_Р[i].НАПР7+ПОЗИЦИИ_Р[i].НАПР8);   TextFileAppendLn(F,"|");
          if РАБ.БЮДЖЕТ2005.ТипКБКСчета(ПОЗИЦИИ_Р[i].БК)='ФКР' then
                TextFileAppendLn(F,Substr(ExtractWord(1,ПОЗИЦИИ_Р[i].БК,'.'),1,3));  TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(ExtractWord(2,ПОЗИЦИИ_Р[i].БК,'.'),1,4));  TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(ExtractWord(3,ПОЗИЦИИ_Р[i].БК,'.'),1,7));  TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(ExtractWord(4,ПОЗИЦИИ_Р[i].БК,'.'),1,3));  TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(ПОЗИЦИИ_Р[i].КОСГУ,1,3));  TextFileAppendLn(F,"|"); TextFileAppendLn(F,"|");
            |(РАБ.БЮДЖЕТ2005.ТипКБКСчета(ПОЗИЦИИ_Р[i].БК)='КИФД') and (РАБ.БЮДЖЕТ2005.ВзятьТипКИФД(ПОЗИЦИИ_Р[i].БК)='КИВФ') then
                TextFileAppendLn(F,"|");   TextFileAppendLn(F,"|");  TextFileAppendLn(F,"|");   TextFileAppendLn(F,"|");  TextFileAppendLn(F,"|");       TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(РАБ.БЮДЖЕТ2005.ЗаменитьРазделительВНабореСлов(ПОЗИЦИИ_Р[i].БК+ПОЗИЦИИ_Р[i].КОСГУ,'.',''),1,20));
            |True : TextFileAppendLn(F,"|");         TextFileAppendLn(F,"|");   TextFileAppendLn(F,"|");  TextFileAppendLn(F,"|");       TextFileAppendLn(F,"|");
                TextFileAppendLn(F,Substr(РАБ.БЮДЖЕТ2005.ЗаменитьРазделительВНабореСлов(ПОЗИЦИИ_Р[i].БК+ПОЗИЦИИ_Р[i].КОСГУ,'.',''),1,20)); TextFileAppendLn(F,"|");
            fi; TextFileAppendLn(F,"|");
          TextFileAppendLn(F,Substr(ПОЗИЦИИ_Р[i].КНИ,1,20));     TextFileAppendLn(F,"|");

          if not Квартал then
            if not AsChanging: TextFileAppendLn(F,Str(ПОЗИЦИИ_Р[i].СУММГОД*100));   TextFileAppendLn(F,"|");
              else TextFileAppendLn(F,"|"); TextFileAppendLn(F,Str(ПОЗИЦИИ_Р[i].СУММГОД_ИЗМ*100));
              fi; TextFileAppendLn(F,"|");
              TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
              TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");TextFileAppendLn(F,"|");
            else
              MESSAGE("КВАРТАЛЬНЫХ СМЕТ БОЛЬШЕ НЕТ", mtError);
            fi;
        TextFileWriteLn(F,'');
        od;
     fi;
     TextFileClose(F);
     Message('Выгрузка завершена');
     if (EnqOkCancel("Открыть файл для просмотра?")=cmOk): ExecuteProgram("NotePad "+FileName); fi;
     ДатаВыгр=D;
     НомерВыгр=N;
     EditorApply;
   fi;
end;


--
Func ПБС_OnEnter(FieldName: String; Iter: Integer): logical;
var rec: Record;
  Rec=OpenCardFile("КОНТРАГЕНТ","НАШЕ",ПБС,crdRecordOnly);
  if not Rec=nil: ПБС=Rec; fi;
  РазметкаЛиста;
  Return False ;
end;

Proc ГЛ_РБС_КОД_OnExit(FieldName: String; Iter: Integer);
var OWA,n:I;
var tmp:S;
  if ГЛ_РБС_КОД="" then exit; fi;
  OWA=OpenWorkArea("РПО_БЮДЖ_КЛАСС","CODE","(NAME_VOC='ППП2006') and (CODE='"+ГЛ_РБС_КОД+"')");
  try
   if Records(OWA)>0 then tmp=GetFieldS(OWA,1,"TXT"); fi;
   if ГЛ_РБС<>tmp then ГЛ_РБС=tmp; fi;
  finally
  CloseWorkArea(OWA);
  end;
  РазметкаЛиста;
end;

Func БАНКРПО_ЛСЧЕТ_OnEnter(FieldName: String; Iter: Integer): logical;
var rec: Record;
  if ПБС=nil then Message('Введите получателя, чтобы выбрать счет',mtError);  ^False; fi;
  Rec=OpenCardFile("БАНК_СЧЕТА","Контрагент="+RecordToString(ПБС),ПБС_СЧЕТ);
  if (Rec<>nil) and (Rec<>ПБС_СЧЕТ) then  
    ПБС_СЧЕТ=Rec; 
  fi;
  РазметкаЛиста;
  Return False;
end;

Proc Linked_OnExit(FieldName: String; Iter: Integer);
  PutVariableR(ExtractWord(1,FieldName,'.'),nil);
  РазметкаЛиста;
end;

Proc ГЛ_РБС_OnExit(FieldName: String; Iter: Integer);
  РазметкаЛиста;
end;

-- обработчики бланка

Proc AfterOpen;
 РАБ.НАСТР_ПЕЧАТЬ.Cfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
-- РАБ.НАСТР_ПЕЧАТЬ.ReadCfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
 sУтвДок.Visible=fУтвДок;
 Расчет;
 РазметкаЛиста;
-- fУтвДок=AsLogical(sУтвДок.Visible);
end;


Proc Button4_OnClick(Sender: String);
var ask:I;
if (CurrentState = 0) then Close;
  else
  ask=EnqYesNoCancel("Данные изменены, сохранить?");
  if ask=cmYes: EditorApply; Close;
    |ask=cmNo:  EditorCancel; Close;
    |ask=cmCancel: Exit;
    fi;
  fi;
end;

Proc Print_OnClick(Sender: String);
 РАБ.НАСТР_ПЕЧАТЬ.Prn("","","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg","",1);
end;


Proc Redraw_OnClick(Sender: String);
-- РАБ.НАСТР_ПЕЧАТЬ.ReadCfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
-- P3.Row(1,RowHeight,10);
 РазметкаЛиста;
end;


Proc cbУтв_OnChange(Sender: String);
sУтвДок.Visible=fУтвДок;
--РАБ.НАСТР_ПЕЧАТЬ.ReadCfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
--P3.Row(1,RowHeight,10);
РазметкаЛиста;

end;


Proc CheckBox1_OnChange(Sender: String);
Расчет;
--РАБ.НАСТР_ПЕЧАТЬ.ReadCfg("","ТББ.ДОКУМЕНТЫ.ЛБО.СМЕТА_ДОХОД_РАСХОД_ПЕЧАТЬ.001.cfg"); -- настройка печати
--P3.Row(1,RowHeight,10);
РазметкаЛиста;
end;

Proc Button3_OnClick(Sender: String);

end;


Конец
