БЛАНКСШАБЛОНОМ "ф.0503177 Сведения об использовании информационных технологий";

-- Зона авто-идентификации отчета
Ф_ОКУД: STRING = '0503177';
Ф_ИНСТР_КОД: STRING = '191н';
Ф_РЕД_КОД: STRING = '138н';
Ф_ДЕЙСТВ_С: DATE = 01.01.2014;
Ф_ДЕЙСТВ_ПО: DATE = 1.1.100;
-- конец зоны авто-идентификации отчета

btnВыгрузка :Object;
var Фокус   :String="";
2--0 2Общие переменные0 2-0-

SГ1С011М1[] :S; SГ2С011М1[] :S; SГ3С011М1[] :S; RГ4С011М1[] :N; SГ5С011М1[] :S;
SГ1С021М2[] :S; SГ2С021М2[] :S; SГ3С021М2[] :S; RГ4С021М2[] :N; SГ5С021М2[] :S;
SГ1С031М3[] :S; SГ2С031М3[] :S; SГ3С031М3[] :S; RГ4С031М3[] :N; SГ5С031М3[] :S;
SГ1С041М4[] :S; SГ2С041М4[] :S; SГ3С041М4[] :S; RГ4С041М4[] :N; SГ5С041М4[] :S;
SГ1С071М7[] :S; SГ2С071М7[] :S; SГ3С071М7[] :S; RГ4С071М7[] :N; SГ5С071М7[] :S;
SГ1С081М8[] :S; SГ2С081М8[] :S; SГ3С081М8[] :S; RГ4С081М8[] :N; SГ5С081М8[] :S;
SГ1С091М9[] :S; SГ2С091М9[] :S; SГ3С091М9[] :S; RГ4С091М9[] :N; SГ5С091М9[] :S;

М1:I;
М2:I;
М3:I;
М4:I;
М7:I;
М8:I;
М9:I;

RГ4С010=SumOfArray(RГ4С011М1, М1);
RГ4С020=SumOfArray(RГ4С021М2, М2);
RГ4С030=SumOfArray(RГ4С031М3, М3);
RГ4С040=SumOfArray(RГ4С041М4, М4);
RГ4С050;
RГ4С060;
RГ4С070=SumOfArray(RГ4С071М7, М7);
RГ4С080=SumOfArray(RГ4С081М8, М8);
RГ4С090=SumOfArray(RГ4С091М9, М9);
RГ4С100;

RГ4С900=RГ4С010+RГ4С020+RГ4С030+RГ4С040+RГ4С050+RГ4С060+RГ4С070+RГ4С080+RГ4С090+RГ4С100;

var Показ[] :String;
var Buf[]   :String;

var ДК:Date=РАБ.ПАРАМ_ОТЧ.ДК;

УЧР_НАИМ :String;
УЧР_ИНН  :String;
УЧР_SREC :Record;

2--0 Общие процедуры и функции

Proc УбратьЛишниеСтроки;
var jj :Integer;
 jj=1;
 while jj<=М1 do
   if Trim(SГ1С011М1[jj])="" or RГ4С011М1[jj]=0.00: Try DeleteFrame(М1, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М2 do
   if Trim(SГ1С021М2[jj])="" or RГ4С021М2[jj]=0.00: Try DeleteFrame(М2, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М3 do
   if Trim(SГ1С031М3[jj])="" or RГ4С031М3[jj]=0.00: Try DeleteFrame(М3, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М4 do
   if Trim(SГ1С041М4[jj])="" or RГ4С041М4[jj]=0.00: Try DeleteFrame(М4, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М7 do
   if Trim(SГ1С071М7[jj])="" or RГ4С071М7[jj]=0.00: Try DeleteFrame(М7, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М8 do
   if Trim(SГ1С081М8[jj])="" or RГ4С081М8[jj]=0.00: Try DeleteFrame(М8, jj); Except end; else jj=jj+1; fi;
 od;
 jj=1;
 while jj<=М9 do
   if Trim(SГ1С091М9[jj])="" or RГ4С091М9[jj]=0.00: Try DeleteFrame(М9, jj); Except end; else jj=jj+1; fi;
 od;
end;

Func КлючИНН(ИНН:String) :Logical;
var П :Integer;
 П=31*Int(SubStr(ИНН,1,1))+
   29*Int(SubStr(ИНН,2,1))+
   23*Int(SubStr(ИНН,3,1))+
   19*Int(SubStr(ИНН,4,1))+
   17*Int(SubStr(ИНН,5,1))+
   13*Int(SubStr(ИНН,6,1))+
    7*Int(SubStr(ИНН,7,1))+
    5*Int(SubStr(ИНН,8,1))+
    3*Int(SubStr(ИНН,9,1));
 П=11-Int(П-11*Trunc(П/11));
 П=if(П>9:0,П);
 ^П=Int(SubStr(ИНН,10,1));
end;

Proc ЗакрытьФайлПоОшибке(numberFile:Integer; FlagCreate:Logical; RESnameFile:String);
 if FlagCreate:
   TextFileClose(numberFile);
   Message("Ошибка записи в файл '"+RESnameFile+"'!", mtError);
 else
   Message("Ошибка создания файла '"+RESnameFile+"'!", mtError);
 fi;
end;

Func ЕстьДанныеДляВыгрузки :Logical;
 if Abs(RГ4С900)>0.00: ^True; else ^False; fi;
end;

Func КОДБК_ПоФормату(КОДБК:String; numFMT:Integer; newSep:String) :String;
var Value :String;
 Value="";
 if numFMT<1 or numFMT>3: numFMT=1; fi;
 if numFMT=1: Value=ExtractWord(1, КОДБК, ".")+newSep+ExtractWord(2, КОДБК, ".")+newSep+                 "0000000"+newSep+                     "000"+newSep+"000";
 |  numFMT=2: Value=ExtractWord(1, КОДБК, ".")+newSep+ExtractWord(2, КОДБК, ".")+newSep+ExtractWord(3, КОДБК, ".")+newSep+                     "000"+newSep+"000";
 |  numFMT=3: Value=ExtractWord(1, КОДБК, ".")+newSep+ExtractWord(2, КОДБК, ".")+newSep+ExtractWord(3, КОДБК, ".")+newSep+ExtractWord(4, КОДБК, ".")+newSep+"000";
 fi;
 ^Value;
end;

Proc ДобавитьСтрокиВыгрузкиФайл(CODE:String; NFitog:String; NFiter:String; CountIter:Integer);
var RES, TMP, nam02, nam03, nam05 :String;
var ii, kk :Integer;
var SUM :Numeric;

 kk=LengthOfArray(Buf);
 if NFitog<>"":
   SUM=GetVariableN(NFitog);
   if Abs(SUM)>0.00:
     RES=CODE+"0|000|00"+CODE+"|0000000|000|000|"+if(SUM<>0.00, Str(SUM, 2), "0")+"|";
     if Trim(RES)<>"": kk=kk+1; Buf[kk]=RES; fi;
     --
     if NFiter<>"":
       TMP=SubStr(NFiter, 4, Length(NFiter)-3);
       nam02="SГ2"+TMP;
       nam03="SГ3"+TMP;
       nam05="SГ5"+TMP;
       if CountIter>0:
         for ii=1 to CountIter do
           RES="";
           Try SUM=GetVariableN(NFiter+"["+Str(ii)+"]"); Except SUM=0.00; end;
           if Abs(SUM)>0.00:
             RES=GetVariableS(nam02+"["+Str(ii)+"]")+"|"+КОДБК_ПоФормату(GetVariableS(nam03+"["+Str(ii)+"]"), 1, "|")+"|"+if(SUM<>0.00, Str(SUM, 2), "0")+"|"+GetVariableS(nam05+"["+Str(ii)+"]");
           fi;
           if Trim(RES)<>"": kk=kk+1; Buf[kk]=RES; fi;
         od;
       fi;
     fi;
   fi;
 fi;

end;

Proc Экспорт_TXT_ДФ; -- выгрузка в формат департамента финансов г.Москвы
var Путь, nameFile :String;
var FS, num, ii :Integer;
var FlagCreate :Logical;

 if Year(ДК)<2000:                      Message("Дата отчета должна быть позже 2000 года.", mtWarning);                      Template.Field="Фокус";    Exit; fi;
 if Day(ДК)<>1:                         Message("Для выгрузки в файл требуется отчет расчитанный на '1' число.", mtWarning); Template.Field="Фокус";    Exit; fi;
 if УЧР_ИНН="" or not КлючИНН(УЧР_ИНН): Message("Некорректный ИНН.^MПроверьте реквизиты", mtError);                          Template.Field="УЧР_НАИМ"; Exit; fi;
 УбратьЛишниеСтроки;
 if not ЕстьДанныеДляВыгрузки:          Message("Нет данных для выгрузки.^MПредварительно заполните форму.", mtWarning);     Template.Field="Фокус";    Exit; fi;

 if ChooseFolder(Путь, "Выберите папку для сохранения файла выгрузки...")=cmOk:

    nameFile=Путь+"177"+Format("%.2d", Mon(AddMon(ДК, -1)))+Format("%.2d", Year(AddMon(ДК, -1))-2000)+"m1.txt";
    Try
      Try if ExistFile(nameFile): DeleteFile(nameFile); fi; Except end;
      FlagCreate=False;
      FS=TextFileCreate(nameFile);
      FlagCreate=True;
      -- Записываем заголовок
      TextFileWriteLn(FS, "ИНН="+УЧР_ИНН);
      TextFileWriteLn(FS, "ДАТА="+DateToString(ДК));
      TextFileWriteLn(FS, "КОДФ=177");
      ClearVariable(Buf); -- массив для добавления строк выгрузки после отработки процедуры "ДобавитьСтрокиВыгрузкиФайл"
      --
      ДобавитьСтрокиВыгрузкиФайл("01", "RГ4С010", "RГ4С011М1", М1);
      ДобавитьСтрокиВыгрузкиФайл("02", "RГ4С020", "RГ4С021М2", М2);
      ДобавитьСтрокиВыгрузкиФайл("03", "RГ4С030", "RГ4С031М3", М3);
      ДобавитьСтрокиВыгрузкиФайл("04", "RГ4С040", "RГ4С041М4", М4);
      ДобавитьСтрокиВыгрузкиФайл("05", "RГ4С050",          "",  0);
      ДобавитьСтрокиВыгрузкиФайл("06", "RГ4С060",          "",  0);
      ДобавитьСтрокиВыгрузкиФайл("07", "RГ4С070", "RГ4С071М7", М7);
      ДобавитьСтрокиВыгрузкиФайл("08", "RГ4С080", "RГ4С081М8", М8);
      ДобавитьСтрокиВыгрузкиФайл("09", "RГ4С090", "RГ4С091М9", М9);
      ДобавитьСтрокиВыгрузкиФайл("10", "RГ4С100",          "",  0);
      --
      num=LengthOfArray(Buf);
      if num>0:
        -- Записываем данные 1 раздела
        TextFileWriteLn(FS, "ТБ=01");
        for ii=1 to num do
          if Buf[ii]<>"": TextFileWriteLn(FS, Buf[ii]); fi;
        od;
        if RГ4С900>0.00: TextFileWriteLn(FS, "900|000|0000|0000000|000|000|"+Str(RГ4С900, 2)); fi;
      fi;
      TextFileClose(FS);
      if ExistFile(nameFile): if EnqOkCancel("Открыть созданный файл выгрузки?", mtInformation)=cmOK: OpenEditor(nameFile); fi; fi;
    Except
      ЗакрытьФайлПоОшибке(FS, FlagCreate, nameFile);
      Raise;
    end;

 fi; -- ChooseFolder

end;

Func TimeToHMSstring_adv(valTime:Integer; valSep:String) :String;
var ihh, imm, icc :Integer;
var shh, smm, scc :String;
 shh=''; smm=''; scc='';
 ihh=Int(Trunc(valTime/3600));
 imm=Int(Trunc((valTime-ihh*3600)/60));
 icc=valTime-ihh*3600-imm*60;
 shh=Format("%.2d", ihh);
 smm=Format("%.2d", imm);
 scc=Format("%.2d", icc);
 ^(shh+valSep+smm+valSep+scc);
end;

Func XLS_СформироватьСтрокиОтчета(sNameFile:String; --ссылка на Excel-файл
                                    asNoErr:Logical;
                                     xlsRow:Integer;
                                   local_TS:String;
                                   local_DS:String;
                                   count_FR:Integer;
                                     fld_НП:String; --Поле "Наименование показателя"
                                     fld_КС:String; --Поле "Код строки"
                                     fld_БК:String; --Поле "Код по бюджетной классификации"
                                     fld_СР:String; --Поле "Сумма, руб"
                                     fld_ОЦ:String; --Поле "Основные цели произведенных расходов"
                                     сумРУБ:Numeric;
                                     кодСТР:String;
                                  вТомЧисле:Logical;
                                    nameRow:String) :Integer;
var objApp, objBooks, objBook, objSheet :AutoObject;
var Iter, IterCount, IterSave, ii, nextRow, maxIterCount :Integer;
var ExportWork, FirstRun :Logical;
var VAL :String;
var SUM :Numeric;
 if asNoErr:
   Hint("Формируем таблицу (код строки "+кодСТР+")...");
   maxIterCount=500;
   nextRow=xlsRow;
   FirstRun=True;
   if count_FR>0 and вТомЧисле:
     Iter=0;
     IterCount=0;
     IterSave=1;
     ExportWork=True;
     while ExportWork do
       if asNoErr:
         objApp=CreateAutoObject('Excel.Application');
         Try
           Try
             objApp.EnableEvents=False;   -- отключить события
             objApp.AutomationSecurity=3; -- отключить макросы
             objBooks=AsAutoObject(objApp.Workbooks); -- получить объект Workbooks
             Try
               objBook=AsAutoObject(objBooks.Open(sNameFile));
               Try
                 Try
                   objSheet=AsAutoObject(objBook.Worksheets["0503177"]);
                   Try
                     if FirstRun:
                       nextRow=nextRow+1;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 01, nameRow);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True,  True, False, 0, True);
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 02, кодСТР);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 03, "X");
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                       if сумРУБ<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, nextRow, 04, сумРУБ, local_DS, local_TS); fi;
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 04, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True,  True, False, 0, True);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       --
                       nextRow=nextRow+1;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 01, "в том числе:");
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False,  True, 0, True);
                       РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, nextRow, 02, nextRow, 04);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       --
                       РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow-1, 1, nextRow, 5, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                       РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow-1, 2, nextRow, 4, True,  False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                       --
                       FirstRun=False;
                     fi;
                     for ii=IterSave to count_FR do
                       ProgressPos(ii);
                       nextRow=nextRow+1;
                       --
                       Try VAL=GetVariableS(2fld_НП0+"["+Str(ii)+"]"); Except VAL="";   end;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 01, VAL);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       Try VAL=GetVariableS(2fld_КС0+"["+Str(ii)+"]"); Except VAL="";   end;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 02, VAL);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       Try VAL=GetVariableS(2fld_БК0+"["+Str(ii)+"]"); Except VAL="";   end;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 03, VAL);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       Try SUM=GetVariableN(2fld_СР0+"["+Str(ii)+"]"); Except SUM=0.00; end;
                       if SUM<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, nextRow, 04, SUM, local_DS, local_TS); fi;
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 04, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       Try VAL=GetVariableS(2fld_ОЦ0+"["+Str(ii)+"]"); Except VAL="";   end;
                       РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 05, VAL);
                       РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                       --
                       РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 1, nextRow, 5, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                       РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 2, nextRow, 4, True,  False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                       --
                       IterCount=IterCount+1;
                       if IterCount>=maxIterCount: IterSave=IterSave+IterCount; IterCount=0; Break; fi;
                     od;
                     --
                     asNoErr=True;
                   Finally
                     ClearVariable(objSheet);
                   end;
                 Except
                   asNoErr=False;
                   ExportWork=False;
                   objBook.Close(False); -- закрыть книгу без сохранения
                 end;
               Finally
                 objBook.Save;
                 objBook.Close(False); -- закрыть книгу без сохранения
                 ClearVariable(objBook); -- освободить объект книги
               end;
             Finally
               ClearVariable(objBooks); -- освободить объект книг
             end;
           Finally
             ClearVariable(objApp); -- освободить объект Excel
           end;
         Except
           asNoErr=False;
           ExportWork=False;
           ClearVariable(objSheet);
           ClearVariable(objBook);
           ClearVariable(objBooks);
           ClearVariable(objApp);
         end;
         if ii>=count_FR: ExportWork=False; fi;
       else
         ExportWork=False;
       fi;
     end; -- while
   else -- если данных нет рисуем пустую строчку
     objApp=CreateAutoObject('Excel.Application');
     Try
       Try
         objApp.EnableEvents=False;   -- отключить события
         objApp.AutomationSecurity=3; -- отключить макросы
         objBooks=AsAutoObject(objApp.Workbooks); -- получить объект Workbooks
         Try
           objBook=AsAutoObject(objBooks.Open(sNameFile));
           Try
             Try
               objSheet=AsAutoObject(objBook.Worksheets["0503177"]);
               Try
                 nextRow=nextRow+1;
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 01, nameRow);
                 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True,  True, False, 0, True);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 02, кодСТР);
                 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                 РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 03, "X");
                 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                 if сумРУБ<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(objSheet, nextRow, 04, сумРУБ, local_DS, local_TS); fi;
                 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 04, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True,  True, False, 0, True);
                 РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                 --
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 1, nextRow, 5, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                 РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 2, nextRow, 4, True,  False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 --
                 if вТомЧисле:
                   -- на всякий случай
                   nextRow=nextRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(objSheet, nextRow, 01, "в том числе:");
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   1, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, True,  0, True);
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(objSheet, nextRow, 02, nextRow, 04);
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow-1, 1, nextRow, 5, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow-1, 2, nextRow, 4, True,  False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   nextRow=nextRow+1;
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 01, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 04, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(objSheet, nextRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 1, nextRow, 5, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(objSheet, nextRow, 2, nextRow, 4, True,  False,  True, False, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                 fi;
                 --
                 asNoErr=True;
               Finally
                 ClearVariable(objSheet);
               end;
             Except
               asNoErr=False;
               ExportWork=False;
               objBook.Close(False); -- закрыть книгу без сохранения
             end;
           Finally
             objBook.Save;
             objBook.Close(False); -- закрыть книгу без сохранения
             ClearVariable(objBook); -- освободить объект книги
           end;
         Finally
           ClearVariable(objBooks); -- освободить объект книг
         end;
       Finally
         ClearVariable(objApp); -- освободить объект Excel
       end;
     Except
       asNoErr=False;
       ExportWork=False;
       ClearVariable(objSheet);
       ClearVariable(objBook);
       ClearVariable(objBooks);
       ClearVariable(objApp);
     end;
   fi; -- count_FR>0 and вТомЧисле
 fi; --asNoErr
 ^if(asNoErr, nextRow, -1);
end;

Proc Экспорт_Excel;
var xlsApp, xlsBooks, xlsBook, xlsSheets, xlsSheet, xlsRng :AutoObject;
var localTS, localDS, xlNameFile, xlNameFolder, ExcelVersion, Value :String;
var начало, kol, max_kol, offsetRow, len, ii, num :Integer;
var NoError, rusExcel :Logical;

 if not ЕстьДанныеДляВыгрузки: Message("Нет данных для выгрузки.^MПредварительно заполните форму.", mtWarning); Template.Field="Фокус"; Exit; fi;
 NoError=True;
 offsetRow=0;
 kol=0;
 if ChooseFolder(xlNameFolder, "Выберите папку для сохранения файла экспорта...")=cmOK:
   начало=Time;
   xlNameFile=xlNameFolder+"ExportExcel0503177_"+Format("%.4d", Year(ToDay))+Format("%.2d", Mon(ToDay))+Format("%.2d", Day(ToDay))+"_"+TimeToHMSstring_adv(Time, "")+".xls";
   if ExistFile(xlNameFile): DeleteFile(xlNameFile); fi;
   if ExistFile(xlNameFile+"x"): DeleteFile(xlNameFile+"x"); fi; -- для версий Офиса 2007 или старше
   if NoError:
     xlsApp=CreateAutoObject('Excel.Application');
     Try
       ExcelVersion=asString(xlsApp.Version);
       if Int(ExcelVersion)>=12 or ExcelVersion="12.0": xlNameFile=xlNameFile+"x"; fi;
       ShowProgress(0, "Подготовка...");
       Try
         xlsApp.EnableEvents=False;   -- отключить события
         xlsApp.AutomationSecurity=3; -- отключить макросы
         --
         rusExcel=РАБ.EXCEL.РусскийExcel(xlsApp);
         localDS=asString(xlsApp.International[РАБ.EXCEL.xlDecimalSeparator]);
         localTS=asString(xlsApp.International[РАБ.EXCEL.xlThousandsSeparator]);
         --
         xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
         Try
           xlsBook=AsAutoObject(xlsBooks.Add); -- добавить книгу
           Try
             Try
               xlsSheets=AsAutoObject(xlsBook.Sheets);
               Try
                 max_kol=asInteger(xlsSheets.Count);
                 if max_kol<2:
                   len=2-max_kol;
                   Try
                     for ii=1 to len do Try xlsSheet=AsAutoObject(xlsSheets.Add); Finally ClearVariable(xlsSheet); end; od;
                   Except
                     ClearVariable(xlsSheet);
                     Raise;
                   end;
                 fi;
                 kol=kol+1;
                 xlsSheet=AsAutoObject(xlsBook.Worksheets[kol]);
                 Try
                   xlsSheet.Name = "0503177";
                   ShowProgress(7, "Формируем титул...");
                   ProgressPos(1);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 01, 30.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 02, 06.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 03, 21.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 04, 12.0);
                   РАБ.EXCEL.УстановитьШиринуСтолбцаСимвол(xlsSheet, 05, 24.0);
                   ProgressPos(2);
                   offsetRow=offsetRow+1;
                   Value="на "+Format("%.2d", Day(ДК))+" "+Месяца(Mon(ДК))+" "+Format("%.4d", Year(ДК))+" г.";
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, Value);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, True, False, 0, True);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 1, offsetRow, 1, False, False, False, True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, "Код формы по ОКУД");
                   РАБ.EXCEL.ОбъединитьЯчейкиДиапазона(xlsSheet, offsetRow, 03, offsetRow, 04);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "0503177");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Courier New", 10, 0, True, False, False, 0, True);
                   ProgressPos(3);
                   offsetRow=offsetRow+2;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "Наименование"+Chr(10)+"показателя");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "Код"+Chr(10)+"строки");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, "Код"+Chr(10)+"по бюджетной"+Chr(10)+"классификации");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, "Сумма,"+Chr(10)+"руб.");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "Основные цели"+Chr(10)+"произведенных"+Chr(10)+"расходов");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   ProgressPos(4);
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "1");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "2");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, "3");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 04, "4");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 05, "5");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlCenter,  0,  РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True, False, False, 0, True);
                   РАБ.EXCEL.НадстрочноеНачертаниеДиапазона(xlsSheet, offsetRow, 1, offsetRow, 8, True);
                   ProgressPos(5);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, 01,          05,        01, 05,  True,  True,  True,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow-1, 01, offsetRow, 05,  True,  True,  True,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow,   02, offsetRow, 04, False, False, False,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   ProgressPos(6);
                   РАБ.EXCEL.PrintSetup_ЧБ_Поля10(xlsApp, xlsSheet, True, 0, 0, 0, 0, True, False, True, 100);
                   ProgressPos(7);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Finally
                 ClearVariable(xlsSheets);
               end;
             Except
               NoError=False;
               xlsBook.Close(False); -- закрыть книгу без сохранения
             end;
           Finally
             xlsBook.Close(True, xlNameFile);
             ClearVariable(xlsBook); -- освободить объект книги
           end;
         Finally
           ClearVariable(xlsBooks); -- освободить объект книг
         end;
       Finally
         ClearVariable(xlsApp); -- освободить объект Excel
         CloseProgress;
       end;
     Except
       NoError=False;
       ClearVariable(xlsRng);
       ClearVariable(xlsSheet);
       ClearVariable(xlsSheets);
       ClearVariable(xlsBook);
       ClearVariable(xlsBooks);
       ClearVariable(xlsApp);
     end;
   fi; --NoError
   if NoError:
     num=0;
     ShowProgress(11, "Формируем таблицу...");
     Try
       ProgressPos(01);
       Value="1. Проектирование прикладных систем и информационно-коммуникационной инфраструктуры, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М1, "SГ1С011М1", "SГ2С011М1", "SГ3С011М1", "RГ4С011М1", "SГ5С011М1", RГ4С010, "010",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(02);
       Value="2. Разработка (доработка) программного обеспечения, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М2, "SГ1С021М2", "SГ2С021М2", "SГ3С021М2", "RГ4С021М2", "SГ5С021М2", RГ4С020, "020",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(03);
       Value="3. Капитальные вложения в объекты информационно-коммуникационной инфраструктуры, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М3, "SГ1С031М3", "SГ2С031М3", "SГ3С031М3", "RГ4С031М3", "SГ5С031М3", RГ4С030, "030",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(04);
       Value="4.Приобретение оборудования и предустановленного программного обеспечения, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М4, "SГ1С041М4", "SГ2С041М4", "SГ3С041М4", "RГ4С041М4", "SГ5С041М4", RГ4С040, "040",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(05);
       Value="5. Приобретение неисключительных прав на программное обеспечение, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS,  0,          "",          "",          "",          "",          "", RГ4С050, "050", False, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(06);
       Value="6. Услуги по аренде оборудования, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS,  0,          "",          "",          "",          "",          "", RГ4С060, "060", False, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(07);
       Value="7. Подключение (обеспечение доступа) к внешним информационным ресурсам, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М7, "SГ1С071М7", "SГ2С071М7", "SГ3С071М7", "RГ4С071М7", "SГ5С071М7", RГ4С070, "070",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(08);
       Value="8. Эксплуатационные расходы на информационно-коммуникационные технологии, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М8, "SГ1С081М8", "SГ2С081М8", "SГ3С081М8", "RГ4С081М8", "SГ5С081М8", RГ4С080, "080",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(09);
       Value="9. Обучение сотрудников в области информационно-коммуникационных технологий, всего";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS, М9, "SГ1С091М9", "SГ2С091М9", "SГ3С091М9", "RГ4С091М9", "SГ5С091М9", RГ4С090, "090",  True, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(10);
       Value="10. Прочие расходы в области информационно-коммуникационных технологий";
       num=XLS_СформироватьСтрокиОтчета(xlNameFile, NoError, offsetRow, localTS, localDS,  0,          "",          "",          "",          "",          "", RГ4С100, "100", False, Value);
       if num>0: offsetRow=num; else NoError=False; fi;
       ProgressPos(11);
     Finally
       CloseProgress;
     end;
   fi; --NoError
   if NoError:
     num=0;
     ShowProgress(1, "Заключительный этап...");
     Try
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               Try
                 xlsSheet=AsAutoObject(xlsBook.Worksheets["0503177"]);
                 Try
                   offsetRow=offsetRow+1;
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 01, "ИТОГО");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 01, РАБ.EXCEL.xlRight,  1, РАБ.EXCEL.xlCenter, True, "Arial", 10, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 02, "900");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 02, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   РАБ.EXCEL.ЗаписатьЯчейкуТекст(xlsSheet, offsetRow, 03, "X");
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 03, РАБ.EXCEL.xlCenter, 0, РАБ.EXCEL.xlCenter, True, "Arial", 09, 0, True, False, False, 0, True);
                   if RГ4С900<>0.00: РАБ.EXCEL.ЗаписатьЯчейкуЧисло(xlsSheet, offsetRow, 04, RГ4С900, localDS, localTS); fi;
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 04, РАБ.EXCEL.xlRight,  0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True,  True, False, 0, True);
                   РАБ.EXCEL.ФорматироватьЯчейку(xlsSheet, offsetRow, 05, РАБ.EXCEL.xlLeft,   0, РАБ.EXCEL.xlCenter, True, "Arial", 08, 0, True, False, False, 0, True);
                   --
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 2, offsetRow, 4, False,  True, False,  True,  True,  True, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlThin);
                   РАБ.EXCEL.УстановитьВсеГраницыДиапазонаИвнутри(xlsSheet, offsetRow, 2, offsetRow, 4, True,  False,  True,  True, False, False, False, False, РАБ.EXCEL.xlContinuous, РАБ.EXCEL.xlMedium);
                   --
                   РАБ.EXCEL.АвтоВыравниваниеСтрок(xlsSheet, 1, offsetRow);
                   NoError=True;
                 Finally
                   ClearVariable(xlsSheet);
                 end;
               Except
                 NoError=False;
                 xlsBook.Close(False); -- закрыть книгу без сохранения
               end;
             Finally
               xlsBook.Save;
               xlsBook.Close(False); -- закрыть книгу без сохранения
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp); -- освободить объект Excel
         end;
       Except
         NoError=False;
         ClearVariable(xlsRng);
         ClearVariable(xlsSheet);
         ClearVariable(xlsSheets);
         ClearVariable(xlsBook);
         ClearVariable(xlsBooks);
         ClearVariable(xlsApp);
       end;
     Finally
      CloseProgress;
     end;
   fi; --NoError
   Hint("");
   --НачальнаяСтрочка;
   if NoError:
     len=EnqOkCancel("Экспорт завершен!^MВремя работы - "+TimeToHMSstring_adv(Time-начало, ":")+Chr(13)+"Открыть файл экспорта?", mtInformation);
     if len=cmOK:
       xlsApp=CreateAutoObject('Excel.Application');
       Try
         Try
           xlsApp.EnableEvents=False;   -- отключить события
           xlsApp.AutomationSecurity=3; -- отключить макросы
           xlsBooks=AsAutoObject(xlsApp.Workbooks); -- получить объект Workbooks
           Try
             xlsBook=AsAutoObject(xlsBooks.Open(xlNameFile));
             Try
               xlsApp.Visible=True;  -- сделать видимым Excel
             Finally
               ClearVariable(xlsBook); -- освободить объект книги
             end;
           Finally
             ClearVariable(xlsBooks); -- освободить объект книг
           end;
         Finally
           ClearVariable(xlsApp);
         end;
       Except
         ClearVariable(xlsApp);
       end;
     fi;
   fi;
 fi; -- ChooseFolder
end;

Proc Экспорт_Формы;
var num :Integer;
 ClearVariable(Buf);
 Buf[1]="Выгрузка в файл (формат ДФ г.Москвы)";
 Buf[2]="Выгрузка в Excel";
 num=Alternate("Выберите тип выгрузки...", Buf, -1, 1, 12);
 if num=1: Экспорт_TXT_ДФ;
 |  num=2: Экспорт_Excel;
 else Exit;
 fi;
end;

Proc ВзятьРеквизиты(saveREC:Record; Auto:Logical);
var RO, num :Integer;
var REC :Record;
 if Auto:
   if Trim(УЧР_НАИМ)="":
     RO=OpenWorkArea("КОНТРАГЕНТ", "", "НАШЕ");
     Try
       num=Records(RO);
       if num<1: REC=NIL;
       |  num=1: REC=GetRecordKey(RO, 1);
       |  num>1: REC=GetRecordKey(RO, 1);
                 SetFilter(RO, "НАШЕ and РПО_УМОЛЧАНИЕ");
                 if Records(RO)>0: REC=GetRecordKey(RO, 1); fi;
       fi;
       if REC=NIL and saveREC<>NIL: REC=saveREC; fi;
       if REC<>NIL:
         SetFilter(RO, "UKey="+RecordToString(REC));
         if Records(RO)=1:
            УЧР_НАИМ = GetFieldS(RO, 1, "КОРИМЯ");
            УЧР_ИНН  = GetFieldS(RO, 1, "ИНН");
            УЧР_SREC = REC;
         fi;
       fi;
     Finally
       CloseWorkArea(RO);
     end;
   fi;
 else
   REC=OpenCardFile("КОНТРАГЕНТ", "НАШЕ", saveREC, crdRecordOnly);
   if REC=NIL: Exit; fi;
   RO=OpenWorkArea("КОНТРАГЕНТ", "", "UKey="+RecordToString(REC));
   Try
     if Records(RO)=1:
        УЧР_НАИМ = GetFieldS(RO, 1, "КОРИМЯ");
        УЧР_ИНН  = GetFieldS(RO, 1, "ИНН");
        УЧР_SREC = REC;
     fi;
   Finally
     CloseWorkArea(RO);
   end;
 fi;
end;

2--Обработчики событий полей шаблона-----
Func УЧР_НАИМ_OnEnter(FieldName: String; Iter: Integer): logical;
 ВзятьРеквизиты(УЧР_SREC, False);
 ^False;
end;

Proc УЧР_НАИМ_OnExit(FieldName: String; Iter: Integer);
 if УЧР_НАИМ="": УЧР_ИНН=""; fi;
end;

Func ПарамОтч_onEnter(FieldName: String; Iter: Integer): Logical;
var Flag :Logical;
 Flag=РАБ.ПАРАМ_ОТЧ.Взять(FieldName,0);
 УЧР_ИНН=УЧР_ИНН; --Вызываем обновление переменных бланка!!!!
 ^False;
end;

Proc Очистить;
  while М1>0 do DeleteFrame(М1,М1); od;
  while М2>0 do DeleteFrame(М2,М2); od;
  while М3>0 do DeleteFrame(М3,М3); od;
  while М4>0 do DeleteFrame(М4,М4); od;
  while М7>0 do DeleteFrame(М7,М7); od;
  while М8>0 do DeleteFrame(М8,М8); od;
  while М9>0 do DeleteFrame(М9,М9); od;
  --
  ClearVariable(RГ4С050);
  ClearVariable(RГ4С060);
  ClearVariable(RГ4С100);
end;

Proc A_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Name:S;
var Iter:I;
 Name=AsString(Template.Name);
 Iter=AsInteger(Template.Frame);
 if Name="С1" : InsertFrame(М1,Iter+1);
   |Name="С2" : InsertFrame(М2,Iter+1);
   |Name="С3" : InsertFrame(М3,Iter+1);
   |Name="С4" : InsertFrame(М4,Iter+1);
   |Name="С7" : InsertFrame(М7,Iter+1);
   |Name="С8" : InsertFrame(М8,Iter+1);
   |Name="С9" : InsertFrame(М9,Iter+1);
 fi;
end;

Proc D_OnClick(Row: Integer; Col: Integer; Double: Logical);
var Name:S;
var Iter:I;
 Name=AsString(Template.Name);
 Iter=AsInteger(Template.Frame);
 if Name="С1": DeleteFrame(М1,Iter);
   |Name="С2": DeleteFrame(М2,Iter);
   |Name="С3": DeleteFrame(М3,Iter);
   |Name="С4": DeleteFrame(М4,Iter);
   |Name="С7": DeleteFrame(М7,Iter);
   |Name="С8": DeleteFrame(М8,Iter);
   |Name="С9": DeleteFrame(М9,Iter);
 fi;
end;

Func ВыборПок_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
  var Номер,Iter :Integer;
  ClearVariable(Показ);
  Template.HideEditor(False);
  Iter=AsInteger(Template.Frame);
  if Sect='С1':
       Показ[1]='011|Разработка технической документации';
       Показ[2]='012|Разработка нормативных правовых актов';
       Показ[3]='013|Разработка прочих документов';
       Номер=Alternate('Приобритение вычислительной техники',Показ,-1,1,12);
       if Номер>0:
         SГ1С011М1[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С011М1[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С2':
       Показ[1]='021|Разработка программного обеспечения (приобретение исключительных прав)';
       Показ[2]='022|Доработка специализированного программного обеспечения прикладных систем';
       Номер=Alternate('Приобритение неисключительных (лицензионных) прав на программное обеспечение и базы данных',Показ,-1,1,12);
       if Номер>0:
         SГ1С021М2[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С021М2[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С3':
       Показ[1]='031|Строительство специализированных зданий (помещений) для размещения технических средств и персонала';
       Показ[2]='032|Иные капитальные вложения';
       Номер=Alternate('Создание программного обеспечения и баз данных, а также приобретение исключительных прав на них',Показ,-1,1,12);
       if Номер>0:
         SГ1С031М3[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С031М3[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С4':
       Показ[1]='041|Приобритение автоматизированных рабочих мест, траспортно-коммуникационного оборудования, серверного, периферийного и др. оборудования';
       Показ[2]='042|Услуги по доставке и складированию оборудования, не включая расходы по закупке запасных инструментов и принадлежностей (комплектующих)';
       Показ[3]='043|Монтажные и пуско-наладочные работы поставляемых технических средств, всего';
       Показ[4]='044|Осуществление комплекса работ по специальным проверкам и исследованиям';
       Номер=Alternate('Осуществление иных мероприятий в сфере информационно-коммуникационных технологий',Показ,-1,1,12);
       if Номер>0:
         SГ1С041М4[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С041М4[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С7':
       Показ[1]='071|Доступ к телефонной сети связи общего пользования предоставление доступа к услугам междугородно и международной связи';
       Показ[2]='072|Приобретение и обновление справочно-информационных баз данных (покупка контента)';
       Показ[3]='073|Достук к сети Интернет';
       Номер=Alternate('Осуществление иных мероприятий в сфере информационно-коммуникационных технологий',Показ,-1,1,12);
       if Номер>0:
         SГ1С071М7[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С071М7[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С8':
       Показ[1]='081|Обеспечение функционированя и поддержка работоспособности прикладного и системного программного обеспечения';
       Показ[2]='082|Техническое обслуживание аппаратного обеспечения включающее контроль технического состояния';
       Номер=Alternate('Осуществление иных мероприятий в сфере информационно-коммуникационных технологий',Показ,-1,1,12);
       if Номер>0:
         SГ1С081М8[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С081М8[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
    |Sect='С9':
       Показ[1]='091|Разработка курсов для обучения';
       Показ[2]='092|Обучение пользователей создаваемых прикладных систем (ПО)';
       Показ[3]='093|Прочее обучение в области информационно-коммуникационных технологий';
       Номер=Alternate('Осуществление иных мероприятий в сфере информационно-коммуникационных технологий',Показ,-1,1,12);
       if Номер>0:
         SГ1С091М9[Iter]=Lo(ExtractWord(2,Показ[Номер],'|'));
         SГ2С091М9[Iter]=ExtractWord(1,Показ[Номер],'|');
       fi;
  fi;
  ^Cur;
end;

Func КР_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
 var Признак,ПризнакНуль :String;
 var Номер,Iter :Integer;

 Template.HideEditor(False);
 Iter=AsInteger(Template.Frame);

 ClearVariable(Buf);
 for sign Признак = "ФКР.*" Do
     ПризнакНуль=Substr(Признак,5,length(Признак));
     ПризнакНуль=Раб.Бюджет2005.ВзятьКодКБК(ПризнакНуль,'','ЦС',true)+'.000.000';
     AddInArray(Buf,false,false,ПризнакНуль);
 od;
 Номер=Alternate('Код по БК',Buf,20,-1,12);
 if Sect='С1': SГ3С011М1[Iter]=Buf[Номер];
   |Sect='С2': SГ3С021М2[Iter]=Buf[Номер];
   |Sect='С3': SГ3С031М3[Iter]=Buf[Номер];
   |Sect='С4': SГ3С041М4[Iter]=Buf[Номер];
   |Sect='С7': SГ3С071М7[Iter]=Buf[Номер];
   |Sect='С8': SГ3С081М8[Iter]=Buf[Номер];
   |Sect='С9': SГ3С091М9[Iter]=Buf[Номер];
 fi;
 ^Cur;
end;

2--Обработчики объектов шаблона-----

Proc btnВыгрузка_OnClick(Sender: String);
var num :Integer;
 ClearVariable(Buf);
 Buf[1]="Выгрузка в файл (формат ДФ г.Москвы)";
 Buf[2]="Выгрузка в Excel";
 num=Alternate("Выберите тип выгрузки...", Buf, -1, 1, 12);
 if num=1: Экспорт_TXT_ДФ;
 |  num=2: Экспорт_Excel;
 else Exit;
 fi;
end;

Proc btnПечать_OnClick(Sender: String);
 Раб.Настр_Печать.Prn("","","ТББ.ОТЧЕТЫ.БАЛАНС.128Н.0503177.000.cfg","",1);
end;

Proc btnОчистить_OnClick(Sender: String);
 if EnqOkCancel("Форма будет очищена. Продолжить ?",mtWarning)=cmOk: Очистить; fi;
end;

Proc btnЗакрыть_OnClick(Sender: String);
  Close;
end;

Proc OnOpen(Create: Logical);
 Раб.Настр_Печать.Cfg("","ТББ.ОТЧЕТЫ.БАЛАНС.128Н.0503177.000.cfg");
end;

Func Коммент_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var nameField :String;
var IterField, num, jj :Integer;
 Template.HideEditor(False);
 nameField=asString(Template.Field);
 IterField=asInteger(Template.Frame);
 ClearVariable(Buf);
 Buf[1]="Обеспечение текущей деятельности учреждения";
 Buf[2]="Техническая поддержка сайта";
 jj=SearchInArray(Buf, GetVariableS(nameField), False, 1);
 num=Alternate("Комментарий...", Buf, -1, if(jj>0, jj, 1), 12);
 if num>0: Try PutVariableS(nameField+"["+Str(IterField)+"]", Buf[num]); Except end; fi;
 ^"";
end;


КОНЕЦ
