-- Шаблон создан мастером бланков
-- 02.05.2006 10:30:32
--
БланкСШаблоном "Выгрузка картотек";

Упр:I;

ПутьВыгруз:S;

ДН:D=[1.1.2006];
ДК:D;
НаимПериод:S=["Произвольный"];

var Текст1:S="...";

var A:S="+";
var D:S="-";
var пп[]:i=$;
Статус[]:L;
var Статус_[]:S=if(Статус[$],"V","X");
Карт[]:S;
НаимКарт[]:S;
ФильтрДата[]:S;
Фильтр[]:S;
var Обр[]:I;
var Обр_[]:S=if(Обр[$]=1:"Договора"|True:"Нет");

var Buf[]:S;
var Buf1[]:S;
var Buf2[]:S;

var Run:L;

hКарт:S;
hField:S;
--
--Процедуры и функции -------------
Proc Очистить;
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.Упр);
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.Статус);
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.Карт);
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.НаимКарт);
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.ФильтрДата);
 ClearVariable(СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ.Фильтр);
end;

Proc УдалитьПустыеСтроки;
var Iter:I;
 Iter=1;
 While Iter<=Упр do
  if Карт[Iter]="": DeleteFrame(Упр,Iter); else Iter=Iter+1; fi;
 od;
end;

Func ПолучитьФильтрДата(vКарт:S):S;
var Field:S;
 if vКарт="СЧЕТФАКТ": Field="Дата";
   |vКарт="ПРИХОРД": Field="Д";
   |vКарт="РАСХОРД": Field="Д";
   |vКарт="РПО_ВЕДПОДОТЧЕТ": Field="ДатаДок";
   |vКарт="РПО_ОТЧКАС": Field="Дата";
   |vКарт="РПО_ДЕНДОК_ПРИХОД": Field="Дата";
   |vКарт="РПО_ДЕНДОК_РАСХОД": Field="Дата";
--   |vКарт="РПО_ДОГОВОР": Field="ДатаРег";
--   |vКарт="РПО_ДОГОВОР_ПОЗИЦИИ": Field="ДатаРег";
   |vКарт="РПО_БО": Field="ДатаОпер";
   |vКарт="РПО_ИЗВЕЩЕНИЯ_ВХ": Field="ДВозврат2";
   |vКарт="РПО_ИЗВЕЩЕНИЯ_ИСХ": Field="ДатаИзв";
   |vКарт="РПО_БУХСПРАВКА": Field="ДатаСпр";
   |vКарт="ПОРУЧ": Field="Дата";
   |vКарт="РПО_РАСХОД_РАСПИСН": Field="ДатаВД";
   |vКарт="РПО_РАСХОД_РАСПИСН_ВХ": Field="ДатаОпер";
   |vКарт="КНИГАПРОД": Field="Дата";
   |vКарт="КНИГАПОКУП": Field="Дата";
   |vКарт="РЕЕСТР_ИСХ_СФ": Field="ДатаС";
   --|vКарт="СТОРНО_СФ": Field=""; --???
   |vКарт="СЧЕТФАКТПОСТ": Field="Дата";
   |vКарт="ДОВЕРЕННОСТИ": Field="Дата";
   |vКарт="НАКЛАДНАЯ": Field="Дата";
   |vКарт="СЧЕТ": Field="Дата";
   |vКарт="РПО_АВАНС_ОТЧЕТ": Field="ДатаДок";
   |vКарт="РПО_ЗАЯВЛ_ЧЕК_КН": Field="ДатаДок";
   |vКарт="РПО_ЗАЯВКА_НАЛИЧ": Field="ДатаДок";
   |vКарт="РПО_ЗАКЛПР": Field="ДатаОпер";
   |vКарт="РПО_ПОДОТЧ_ЛИМИТ": Field="ДатОпер";
   |vКарт="РПО_ПОДОТЧ_ВЫДАН_АВАНС": Field="ДатОпер";
   |vКарт="РПО_ПОДОТЧ_ПОГАШЕН_АВАНС": Field="ДатОпер";
   |vКарт="РПО_ПОДОТЧ_ПРЯМОЙ_РАСХОД": Field="ДатОпер";
   |vКарт="ВЗНОСНАЛ": Field="ДатОпер";
   |vКарт="РПО_ЗАБ_17_18": Field="ДН";
   |vКарт="РПО_ЗАБ_17_18_": Field="Дата";
   |vКарт="РПО_НАЧ_АМОРТ": Field="ДатОпер";
   |vКарт="РПО_НАЧ_АМОРТ_TR": Field="ДатОпер";
   |vКарт="РПО_ОПЕРАЦИИДНФА": Field="ДатОпер";
   |vКарт="РПО_ОСТ_НФА": Field="ДатОпер";
   |vКарт="РПО_ТРЕБОВ_НАКЛАДНАЯ": Field="Дата_Нак";
   |vКарт="РПО_АКТЫ_УНФА": Field="ДатаАкта";
   |vКарт="РПО_ВНУТР_ПЕРЕМЕЩ_ОС": Field="Дата_Нак";
   |vКарт="РПО_НАКЛАДНАЯ": Field="Дата";
   --Новое 2009
   |vКарт="ПРИХПЛПОРУЧЕНИЯ": Field="РПО_ДатаОпер";
   |vКарт="РПО_ВНУТР_ПЕРЕМ_МОЛ": Field="ДатаОпер";
   |vКарт="РПО_ЗАКРЫТИЕ106": Field="ДатаОпер";
   |vКарт="РПО_ЗАЯВКА_ВОЗВРАТ": Field="ДатаДок";
   |vКарт="РПО_ЗАЯВКА_КР": Field="ДатаДок";
   |vКарт="РПО_ЗАЯВКА_НАЛ": Field="ДатаДок";
   |vКарт="РПО_ИЗМ_БО": Field="ДатаДок";
   |vКарт="РПО_РР_ВХ": Field="ДатаОпер";
   |vКарт="РПО_РР_ИСХ": Field="ДатаВД";
   |vКарт="РПО_СВЕД_БО": Field="ДатаДок";
   |vКарт="РПО_СМЕТА_ДОХОД_РАСХОД": Field="Д";
   |vКарт="РПО_УВЕДОМ_УТОЧ_ПЛАТ": Field="ДатаДок";
   |vКарт="РПО_ЗАПРОС_АННУЛ": Field="ДатаДок";
   |vКарт="РПО_ЗАЯВЛ_ЧЕК": Field="ДатаДок";
   |vКарт="РЕЕСТР_ВХ_СФ": Field="ДатаС";
   |vКарт="СТОРНО_СФ": Field="ДатаВ";
   |vКарт="СДЕЛКА": Field="Дата";
   |vКарт="ТНАКЛАДНАЯ": Field="Дата";
   |vКарт="ИНВВЕДОМОСТЬ_0504087": Field="ДАТНАЧИНВ";
   |vКарт="РПО_НАКЛАДНАЯ_М15": Field="ДАТА_НАК";
   |vКарт="СТОРНО_СФПОСТ": Field="ДАТАВ";
   |vКарт="РПО_НФА_СПРАВКА_ПРОВОДКИ": Field="ДатаОпер";
   |vКарт="ТТН": Field="Дата";
   --Новое 2010
   |vКарт="РПО_ДО": Field="ДатаРег";
   |vКарт="РПО_СПИ": Field="ДатаОпер";
   |vКарт="РПО_ПОДПИСИ_СЕГОДНЯ": Field="Дата_Сегодня";
   |vКарт="РПО_ДО_ЗАЧЕТ_АВАНСА": Field="ДатаРег";
   |vКарт="РПО_РЕЕСТР_ДЕПОНЕНТ": Field="Дата";
   |vКарт="РПО_НАЧДОХ": Field="ДатаОпер";
   |vКарт="РПО_ЗАЧЕТНДС": Field="ДатаОпер";
   |vКарт="РПО_НФА_СПРАВКА": Field="ДатаОпер";
   --По состоянию на 01.01.2013
   |vКарт="РПО_АКТПРМАТ":   Field="ДАТААКТА";
   |vКарт="РПО_ПРИХ_ОРДЕР": Field="ДАТА_НАК";
   |vКарт="РПО_НАКЛ_НАРЯД": Field="ДАТ_ДОК";
   |vКарт="РПО_ДО_ЗП":      Field="ДАТАРЕГ";
   --картотеки от Брянска
   |vКарт="CPS_ДОСПИС":      Field="ДАТСОСТ";
   |vКарт="CPS_ИЗНОС":       Field="ДАТСОСТ";
   |vКарт="CPS_ИЗНОС_TR":    Field="ДАТОПЕР";
   |vКарт="CPS_ВЕД":         Field="ДАТА_ВЕД";
   |vКарт="CPS_ВЕД_TR":      Field="ДАТА_ВЕД";
   |vКарт="CPS_ПРОДЛСРОК":   Field="ДАТАСОСТ";
   |vКарт="CPS_ИСТЕКСРОК":   Field="ДАТСОСТ";
   |vКарт="CPS_ЗАМЕНА":      Field="ДАТАДОК";
   |vКарт="CPS_КОМПЕНС":     Field="ДАТАДОК";
   |vКарт="CPS_АКТ":         Field="ДАТААКТА";
   |vКарт="CPS_ВЕЩАТТЕСТАТ": Field="ДАТАДОК";
   |vКарт="CPS_ОТЧИСТЕК":    Field="ДАТДОК";
   --добавление для 2015 года
   |vКарт="ТББ_АМТКОРР_З":      Field="ДАТПРД";
   |vКарт="ТББ_АМТКОРР_Т":      Field="R_ДАТА";
   |vКарт="РПО_ВЕДОМОСТЬ_МАТ":  Field="ДЗА";
   |True: ^"";
 fi;
 if not ДН=1.1.100 and ДК=1.1.100:    ^Field+">="+DateToString(ДН);
   |not ДН=1.1.100 and not ДК=1.1.100:^Field+">="+DateToString(ДН)+" and "+Field+"<"+DateToString(ДК);
   |ДН=1.1.100 and not ДК=1.1.100:    ^Field+"<"+DateToString(ДК);
   |True: ^"";
 fi;
end;

Proc ОбновитьФильтрДата;
var Iter:I;
 for Iter=1..Упр do
  ФильтрДата[Iter]=ПолучитьФильтрДата(Карт[Iter]);
 od;
end;

Func ЭкспортКартотекиПоФильтру(vКарт :String; vФильтр :String; vCRD_Файл :String) :Logical;
var file :String;
var num :Integer;
 if (vКарт='' or not ExistsCardFile(vКарт)) and vCRD_Файл='': return false; fi;
 file=PlanVar('CACHE')+'\'+GetGUID+'.bro';
 num=TextFileCreate(file,false);
 try
   TextFileWriteLn(num,'[Header]',false);
   TextFileWriteLn(num,'_EnabledFltr=1',false);
   TextFileWriteLn(num,'_Fltr='+vФильтр,false);
   TextFileWriteLn(num,'TableName='+vКарт,false);
 finally
   TextFileClose(num);
 end;
 ExportCard( ieCRD,    --  Формат CRD
             file,     --  Картотека (браузер)
             vCRD_Файл,--  Файл (путь)
             true,     --  Учитывать фильтр браузера
             false,    --  Выгружать только видимые поля
             false,    --  Выгружать разыменованные поля
             true,     --  Выгружать c UKEY
             false,    --  Указать столбец для EXCEL
             True,     --  Выгружать служебные поля
             false,    --  Выгружать в DOS-кодировке
             false);   --  Выгружать таблицы по ссылкам
 if ExistFile(file): DeleteFile(file); fi;
 return true;
end;

Func Проверить:L;
var OWA,Iter:i;
var F:S;
 ShowProgress(Упр,"Проверка....");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   if Статус[Iter]:
      F=Раб.Бюджет2005.Объединить(ФильтрДата[Iter],Фильтр[Iter]," ");
      Try
       OWA=OpenWorkArea(Карт[Iter],"",F);
       Try
       Finally
        CloseWorkArea(OWA);
       end;
      Except
       Template.Field="Фильтр";
       Template.Frame=Iter;
       Raise;
      end;
   fi;
  od;
 Finally
  CloseProgress;
 end;
 Return True;
end;

Func ТипКартПоле(vКарт:S; vПоле:S):S;
var Ret:S;
var Тип:I;
  Тип=GetCardFileFieldType(vКарт,vПоле);
  if Тип=mtlREAL: Ret="REAL";
    |Тип=mtlINTEGER: Ret="INTEGER";
    |Тип=mtlBOOLEAN: Ret="BOOLEAN";
    |Тип=mtlSTRING: Ret="STRING";
    |Тип=mtlDATE: Ret="DATE";
    |Тип=mtlSUBTAB: Ret="SUBTAB";
    |Тип=mtlREF: Ret=GetCardFileByRefField(vКарт,vПоле);
    |Тип=mtlTimed: Ret="TIMED";
    |True: Ret="";
  fi;
  ^Ret;
end;


Func ВыбратьКартПоле(vКарт:S):S;
var n,nn,z,zz:i;
var tmp,tmp2:S;
 ClearVariable(Buf);
 ClearVariable(Buf1);
 ClearVariable(Buf2);
 nn=GetCardFileFields(vКарт,Buf,mtlSUBTAB);
 for n=1..nn do
  InsertInArray(Buf2,1,Buf[n]+"@"+" --"+GetCardFileFieldComment(vКарт,Buf[n]));
  zz=GetCardFileFields(vКарт+"@"+Buf[n],Buf1,mtlAll);
  for z=1..zz do
   InsertInArray(Buf2,1,Buf[n]+"@"+Buf1[z]+"  :"+ТипКартПоле(vКарт+"@"+Buf[n],Buf1[z])+" --"+GetCardFileFieldComment(vКарт+"@"+Buf[n],Buf1[z]));
  od;
 od;
 SortArray(Buf2);
 nn=GetCardFileFields(vКарт,Buf,mtlAll);
 n=1;
 While not Buf[n]="" do
  if GetCardFileFieldType(vКарт,Buf[n])=mtlSUBTAB:
     DeleteFromArray(Buf,n);
    else
     Buf[n]=Buf[n]+"  :"+ТипКартПоле(vКарт,Buf[n])+" --"+GetCardFileFieldComment(vКарт,Buf[n]);
     n=n+1;
  fi;
 od;
 nn=LengthOfArray(Buf);
 CopyArray(Buf2,Buf,1,nn+1);
 z=0;
 tmp=ExtractWord(2,hField,":");
 if ExtractWord(1,hField,":")=vКарт and not tmp="":
    zz=LengthOfArray(Buf);
    for z=1..zz do
     tmp2=SubStr(Buf[z],1,Pos(" --",Buf[z])-1);
     tmp2=SubStr(tmp2,1,Pos("  :",tmp2)-1);
     if tmp=tmp2: Break; fi;
    od;
    if z>zz: z=0; fi;
 fi;
 n=AlternateTree("Список полей картотеки "+vКарт,Buf,-1,z,0,"@","Картотека","Наименование",-1,False);
 if n=0: ^""; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 tmp=SubStr(tmp,1,Pos("  :",tmp)-1);
 hField=vКарт+":"+tmp;
 ^tmp;
end;

Proc Выполнить (vДН:D; vДК:D; vНаимПериод:S; vПутьВыгруз:S);
 Run=True;
 ДН=vДН;
 ДК=vДК;
 НаимПериод=vНаимПериод;
 ПутьВыгруз=vПутьВыгруз;
 OpenBlank("СЛУЖЕБНЫЕ.ВЫГРУЗКА_КАРТ");
end;
--Процедуры и функции -------------                           
--
--
--Обработчики событий полей шаблона-----
Func ПутьВыгруз_OnEnter(FieldName: String; Iter: Integer): logical;
 Iter=ChooseFolder(ПутьВыгруз,"Укажите папку для выгрузки");
 Return False;
end;

Func НаимПериод_OnEnter(FieldName: String; Iter: Integer): logical;
var n:I;
 ClearVariable(Buf);
 Buf[1]="Вчера";
 Buf[2]="Текущая неделя";
 Buf[3]="Текущий месяц";
 Buf[4]="Прошлый месяц";
 Buf[5]="Текущий квартал";
 Buf[6]="Текущий год";
 Buf[7]="Прошлый год";
 Buf[8]="Произвольный";
 n=Alternate("Период",Buf,-1,1,12);
 if n=0: ^False; fi;
 if n=1: ДН=ToDay-1; 
         ДК=ToDay;
   |n=2: ДН=ToDay-(DayOfWeek(ToDay)-1);
         ДК=ToDay+(8-DayOfWeek(ToDay));
   |n=3: ДН=Dat(1,Mon(ToDay),Year(ToDay)); 
         ДК=if(Mon(ToDay)=12,Dat(1,1,Year(ToDay)+1),Dat(1,Mon(ToDay)+1,Year(ToDay)));
   |n=4: ДН=if(Mon(ToDay)=1,Dat(1,12,Year(ToDay)-1),Dat(1,Mon(ToDay)-1,Year(ToDay))); 
         ДК=Dat(1,Mon(ToDay),Year(ToDay));
   |n=5: if Mon(ToDay)>=1  and Mon(ToDay)<=3 : ДН=Dat(1,1, Year(ToDay)); ДК=Dat(1,4, Year(ToDay));
           |Mon(ToDay)>=4  and Mon(ToDay)<=6 : ДН=Dat(1,4, Year(ToDay)); ДК=Dat(1,7, Year(ToDay));
           |Mon(ToDay)>=7  and Mon(ToDay)<=9 : ДН=Dat(1,7, Year(ToDay)); ДК=Dat(1,10,Year(ToDay));
           |Mon(ToDay)>=10 and Mon(ToDay)<=12: ДН=Dat(1,10,Year(ToDay)); ДК=Dat(1,1, Year(ToDay)+1);
         fi;
   |n=6: ДН=Dat(1,1,Year(ToDay));
         ДК=Dat(1,1,Year(ToDay)+1);
   |n=7: ДН=Dat(1,1,Year(ToDay)-1);
         ДК=Dat(1,1,Year(ToDay));
 fi;
 НаимПериод=Buf[n];
 ОбновитьФильтрДата;
 Return False;
end;

Func Дата_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var tmp:d;
var Field:S;
 Template.HideEditor(False);
 Field=AsString(Template.Field);
 tmp=Calendar;
 if tmp=1.1.100: ^Cur; fi;
 PutVariableD(Field,tmp);
 ОбновитьФильтрДата;
 Return Cur;
end;

Proc Дата_OnExit(FieldName: String; Iter: Integer);
 ОбновитьФильтрДата;
end;

Func Текст1_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Установка выгрузки на весь список";
 Buf[2]="Снять выгрузку для всего списка";
 n=Alternate("Выбор режима",Buf,-1,1,12);
 if n=0: ^False; fi;
 УдалитьПустыеСтроки;
 for Iter=1..Упр do
  Статус[Iter]=(n=1);
 od;
 Return False;
end;

Func A_OnEnter(FieldName: String; Iter: Integer): logical;
 InsertFrame(Упр,Iter+1);
 Return False;
end;

Func D_OnEnter(FieldName: String; Iter: Integer): logical;
 DeleteFrame(Упр,Iter);
 if Упр<1: InsertFrame(Упр,1); fi;
 Return False;
end;

Func Статус_OnEnter(FieldName: String; Iter: Integer): logical;
 Статус[Iter]=not Статус[Iter];
 Return False;
end;

Func Карт_OnEnter(FieldName: String; Iter: Integer): logical;
var n,z:i;
var tmp:S;
 n=GetCardFileNames("*",Buf,False,True,"");
 if n=0: Message("Список картотек пуст"); ^False; fi;
 if Карт[Iter]="": tmp=hКарт; else tmp=Карт[Iter]; fi;
 for z=1..n do
  if tmp=SubStr(Buf[z],1,Pos(" --",Buf[z])-1): Break; fi;
 od;
 if z>n: z=1; fi;
 n=Alternate("Список картотек",Buf,-1,z,12);
 if n=0: ^False; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 z=SearchInArray(Карт,tmp);
 if not z=-1 and not Iter=z: Message("Повторный ввод картотеки "+tmp,mtWarning); ^False; fi;
 Статус[Iter]=True;
 Карт[Iter]=tmp;
 НаимКарт[Iter]=SubStr(Buf[n],Pos(" -- ",Buf[n])+4,255);
 ФильтрДата[Iter]=ПолучитьФильтрДата(Карт[Iter]);
 hКарт=Карт[Iter];
 Return False;
end;

Proc Карт_OnExit(FieldName: String; Iter: Integer);
 НаимКарт[Iter]="";
 ФильтрДата[Iter]="";
end;

Func ФильтрДата_OnEnter(FieldName: String; Iter: Integer): logical;
 Return False;
end;

Proc ФильтрДата_OnExit(FieldName: String; Iter: Integer);
end;

Func Фильтр_OnEnter(FieldName: String; Iter: Integer): logical;
 if Карт[Iter]="": Message("Выберите картотеку",mtError); Template.Field="Карт"; Template.Frame=Iter; ^False; fi;
 Return True;
end;

Func Фильтр_OnVerify(FieldName: String; Iter: Integer; Value: String): Logical;
var OWA:i;
var F:S;
 F=Раб.Бюджет2005.Объединить(ФильтрДата[Iter],Value," ");
 OWA=OpenWorkArea(Карт[Iter],"",F);
 Try
 Finally
  CloseWorkArea(OWA);
 end;
 Return True;
end;

Func Фильтр_OnLookup(Sect: String; Row: Integer; Col: Integer; Cur: String): String;
var Iter,p:I;
var tmp:S;
 Iter=AsInteger(Template.Frame);
 if Карт[Iter]="": Message("Выберите картотеку",mtError); Template.HideEditor(False); Template.Field="Карт"; ^Cur; fi;
 tmp=ВыбратьКартПоле(Карт[Iter]);
 if tmp="": Template.HideEditor(False); ^Cur; fi;
 Cur=Cur+tmp;
 Return Cur;
end;

Func Обр_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Обработчик подсистемы учета договоров";
 n=Alternate("Выберите обработчик",Buf,-1,1,12);
 if not n=0:
    Обр[Iter]=n;
 fi;
 Return False;
end;


Proc Обр_OnExit(FieldName: String; Iter: Integer);
 Обр[Iter]=0;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnЗагрСписокКарт_OnClick(Sender: String);
var n,nn:i;
 if not Run:
    if EnqOkCancel("Текущий список будет очищен, продолжить ?")=cmCancel: Exit; fi;
 fi;
 Очистить;
 nn=GetCardFileNames("*",Buf,False,True,"");
 for n=1..nn do
  InsertFrame(Упр,Упр+1);
  Карт[Упр]=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
  НаимКарт[Упр]=SubStr(Buf[n],Pos(" -- ",Buf[n])+4,255);
  ФильтрДата[Упр]=ПолучитьФильтрДата(Карт[Упр]);
  Статус[Упр]=not Карт[Упр]="РПО_БЮДЖ_КЛАСС" and not Карт[Упр]="РПО_BNKSEEK" and not Карт[Упр]="РПО_KORREK" and not Карт[Упр]="CPS_СПИСОК" and not Карт[Упр]="CPS_АРМКАРТ";
 od;
end;

Proc btnВыгрузка_OnClick(Sender: String);
var Iter,F:I;
 if ПутьВыгруз="": Message("Укажите папку для выгрузки",mtError); Template.Field="ПутьВыгруз"; Exit; fi;
 УдалитьПустыеСтроки;
 if Карт[1]="": Message("Выберите картотеку",mtError); Template.Field="Карт"; Template.Frame=1; Exit; fi;
 if not Проверить: Exit; fi;
 if ExistFile(ПутьВыгруз+"_Список картотек.txt"):
    if EnqOkCancel("В папке "+ПутьВыгруз+" уже находятся выгруженные картотеки. Перезаписать ?")=cmCancel: Exit; fi;
 fi;
 ShowProgress(Упр,"Выгрузка картотек...");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   if Статус[Iter]:
      ЭкспортКартотекиПоФильтру(Карт[Iter],Раб.Бюджет2005.Объединить(ФильтрДата[Iter],Фильтр[Iter]," "),ПутьВыгруз+Карт[Iter]);
   fi;
  od;
 Finally
  CloseProgress;
 end;
 --
 F=TextFileCreate(ПутьВыгруз+"_Список картотек.txt");
 Try
  for Iter=1..Упр do
   if Статус[Iter]:
      TextFileAppendLn(F,Карт[Iter]);
      TextFileAppendLn(F," --");
      TextFileWriteLn(F,НаимКарт[Iter]);
   fi;
  od;
 Finally
  TextFileClose(F);
 end;
 Message("Выгрузка завершена");
end;

Proc btnОбрДоговор_OnClick(Sender: String);
var Link:s;
var bln,FF:S;
var Iter:I;
 if Раб.Бюджет2005.Сетевая:
    if EnqOkCancel("Внимание! Перед операцией НАСТОЯТЕЛЬНО рекомендуется отключить ведение логов на сервере (логирование сильно замедляет процедуру)^MПродолжить ?",mtWarning)=cmCancel: Exit; fi;
 fi;
 Link=GetGUID;
 --линкуем договора
 FF="(ДатаРег>="+DateToString(ДН)+if(ДК=1.1.100,""," and ДатаРег<"+DateToString(ДК))+") or (ДатаК>="+DateToString(ДН)+" and not (Аннулирован or Исполнен))";
 bln="Раб.Вспом.Договор_Связать_Табл";
 if not ExecuteFuncL(bln+".Вызвать",Link,FF,False,False,""): Exit; fi;
 --линкуем ДО текущего года
 bln="Документы.ДоговорПост.ДО_Отчет";
 PutVariableL(bln+".fИсклЗКР",True);
 PutVariableL(bln+".fНеОпл",False);
 PutVariableI(bln+".Порядок",1);
 PutVariableL(bln+".fВыгрузLink",False);
 PutVariableS(bln+".Link",Link);
 PutVariableD(bln+".ДН",ДН);
 PutVariableD(bln+".ДК",if(ДК=1.1.100,Dat(31,12,Year(ДН)),ДК));
 PutVariableD(bln+".ДК2",1.1.100);
 PutVariableI(bln+".Статус",1);
 PutVariableI(bln+".Тип",0);
 PutVariableR(bln+".Контр",nil);
 PutVariableR(bln+".Договор",nil);
 PutVariableS(bln+".УслОбщПризн1","");
 PutVariableS(bln+".УслОбщПризн2","");
 PutVariableS(bln+".УслПризн","");
 PutVariableS(bln+".УслКБК","");
 PutVariableS(bln+".УслВД","");
 PutVariableL(bln+".Run",True);
 if IsBlankOpen(bln): Close(bln); fi;
 OpenBlank(bln,True);
 ExecuteProc(bln+".btnСвязатьГЭК_onClick","");
 ExecuteProc(bln+".btnСвязатьДог_onClick","");
 --линкуем остатки ДО прошлого года
 PutVariableL(bln+".fНеОпл",True);
 PutVariableD(bln+".ДН",1.1.100);
 PutVariableD(bln+".ДК",ДН-1);
 PutVariableS(bln+".fName",ПутьВыгруз);
 PutVariableL(bln+".Run",True);
 if IsBlankOpen(bln): Close(bln); fi;
 OpenBlank(bln,True);
 ExecuteProc(bln+".btnСвязатьГЭК_onClick","");
 ExecuteProc(bln+".btnСвязатьДог_onClick","");
 ExecuteProc(bln+".btn00_onClick","");
 --
 for Iter=1..Упр do
  if Карт[Iter]="РПО_ДОГОВОР": ФильтрДата[Iter]=""; Фильтр[Iter]="Link='"+Link+"'";
    |Карт[Iter]="РПО_ДОГОВОР_ПРИЗНАК": ФильтрДата[Iter]=""; Фильтр[Iter]="Link='"+Link+"'";
    |Карт[Iter]="РПО_ДОГОВОР_ПОЗИЦИИ": ФильтрДата[Iter]=""; Фильтр[Iter]="Link='"+Link+"'";
    |Карт[Iter]="РПО_ДОГОВОР_ПОЗИЦИИ_ТМЦ": ФильтрДата[Iter]=""; Фильтр[Iter]="Link='"+Link+"'";
    |Карт[Iter]="РПО_ДО": ФильтрДата[Iter]="";  Фильтр[Iter]="ДатаРег>="+DateToString(ДН)+if(ДК=1.1.100,""," and ДатаРег<"+DateToString(ДК));
    |Карт[Iter]="РПО_СВЕД_БО": ФильтрДата[Iter]=""; Фильтр[Iter]="(ДатаДок>="+DateToString(ДН)+if(ДК=1.1.100,""," and ДатаРег<"+DateToString(ДК))+") or Link='"+Link+"'";
    |Карт[Iter]="РПО_ГЭК": ФильтрДата[Iter]=""; Фильтр[Iter]="Link='"+Link+"'";
  fi;
 od;
 Message("Обработка закончена, можно выгружать");
end;

Func ЗаменитьСимволСтроки_ПоПозиции(valStr:String; repChar:String; repPos:Integer) :String;
var tmpFirst, tmpLast, out :String;
var len :Integer;
 tmpFirst=""; tmpLast=""; out="";
 len=Length(valStr);
 if repPos<1: repPos=1; fi;
 if repPos>len or repChar="" or valStr="": ^valStr; fi;
 repChar=SubStr(repChar, 1, 1);
 if repPos>1: tmpFirst=SubStr(valStr, 1, repPos-1); else tmpFirst=""; fi;
 if repPos<len: tmpLast=SubStr(valStr, repPos+1, len-repPos); else tmpLast=""; fi;
 out=tmpFirst+repChar+tmpLast;
 ^out;
end;

Func ЗаменитьРазделитель_Символ(Value:String; SepChar:String) :String;
var nn :Integer;
 if Length(SepChar)=1:
   nn=Pos(SepChar, Value);
   while nn>0 do Value=ЗаменитьСимволСтроки_ПоПозиции(Value, "_", nn); nn=Pos(SepChar, Value); od;
 fi;
 ^Value;
end;

Proc btnCheckCard_OnClick(Sender: String);
var RO, len, ii, OA, num ,jj, xx, pp, zz, aa :Integer;
var CRDname, SUBname, FLDname, WrkFld, WrdOld, WrdNew :String;
var FlagCreate :Logical;
 ShowProgress(0, "Подготовка...");
 Try
   ClearVariable(Buf);
   ClearVariable(Buf1);
   ClearVariable(Buf2);
   aa=0;
   Buf[1]= "РПО_ИЗВЕЩЕНИЯ_ВХ#ПОЗИЦИИ#Содерж|Содерж2|Содерж3|Содерж4";
   Buf[2]="РПО_ИЗВЕЩЕНИЯ_ИСХ#ПОЗИЦИИ#Содерж|Содерж2|Содерж3|Содерж4";
   for xx=1 to LengthOfArray(Buf) do
     CRDname=Up(Trim(ExtractWord(1, Buf[xx], "#")));
     SUBname=Up(Trim(ExtractWord(2, Buf[xx], "#")));
     FLDname=Up(Trim(ExtractWord(3, Buf[xx], "#")));
     if ExistsCardFile(CRDname):
       RO=OpenWorkArea(CRDname, "", "");
       Try
         len=Records(RO);
         if len>0:
           BeginChanging(RO);
           Try
             ShowProgress(len, "Анализ картотеки "+CRDname+"...");
             for ii=1 to len do
               ProgressPos(ii);
               if SUBname<>"" and FLDname<>"":
                 ClearVariable(Buf1);
                 if GetCardFileFields(CRDname, Buf1, mtlSUBTAB)>0:
                   if SearchInArray(Buf1, SUBname, False, 1)>0:
                     OA=OpenArray(RO, ii, SUBname, "", "");
                     num=Records(OA);
                     ClearVariable(Buf1);
                     if num>0 and GetCardFileFields(CRDname+"@"+SUBname, Buf1, mtlSTRING)>0:
                       SortArray(Buf1);
                       for jj=1 to num do
                         for pp=1 to WordsCount(FLDname, "|") do
                           WrkFld=ExtractWord(pp, FLDname, "|");
                           if SearchInArray(Buf1, WrkFld, True, 1)>0:
                             WrdOld=Trim(GetFieldS(OA, jj, WrkFld));
                             WrdNew=ЗаменитьРазделитель_Символ(WrdOld, Chr(13));
                             if WrdOld<>WrdNew:
                               zz=PutFieldS(OA, jj, WrkFld, WrdNew);
                               aa=aa+1;
                               Buf2[aa]="Произведена замена 'Enter'ов в картотеке '"+CRDname+"', Ukey записи "+RecordToString(GetRecordKey(RO, ii))+" в поле '"+SUBname+"@"+WrkFld+"'";
                             fi;
                           fi;
                         od;
                       od;
                     fi;
                     CloseWorkArea(OA);
                   fi;
                 fi;
               |  SUBname ="" and FLDname<>"":
                 ClearVariable(Buf1);
                 if GetCardFileFields(CRDname, Buf1, mtlSTRING)>0:
                   SortArray(Buf1);
                   for pp=1 to WordsCount(FLDname, "|") do
                     WrkFld=ExtractWord(pp, FLDname, "|");
                     if SearchInArray(Buf1, WrkFld, True, 1)>0:
                       WrdOld=Trim(GetFieldS(RO, ii, WrkFld));
                       WrdNew=ЗаменитьРазделитель_Символ(WrdOld, Chr(13));
                       if WrdOld<>WrdNew:
                         zz=PutFieldS(RO, ii, WrkFld, WrdNew);
                         aa=aa+1;
                         Buf2[aa]="Произведена замена 'Enter'ов в картотеке '"+CRDname+"', Ukey записи "+RecordToString(GetRecordKey(RO, ii))+" в поле '"+WrkFld+"'";
                       fi;
                     fi;
                   od;
                 fi;
               fi;
             od;
             EndChanging(RO);
           Except
             Cancelchanging(RO);
           end;
         fi;
       Finally
         CloseWorkArea(RO);
       end;
     fi;
   od;
   len=LengthOfArray(Buf2);
   if len>0:
     WrkFld=PlanVar('CACHE')+"\"+GetGUID;
     Try
       Try
         Try if ExistFile(WrkFld): DeleteFile(WrkFld); fi; Except end;
         FlagCreate=False;
         num=TextFileCreate(WrkFld);
         FlagCreate=True;
         for ii=1 to len do TextFileWriteLn(num, Buf2[ii]); od;
       Except
         if FlagCreate:
           TextFileClose(num);
           Message("Ошибка записи в файл '"+WrkFld+"'!", mtError);
         else
           Message("Ошибка создания файла '"+WrkFld+"'!", mtError);
         fi;
         Raise;
       end;
     Finally
       TextFileClose(num);
     end;
     OpenEditor(WrkFld);
   fi;
 Finally
   CloseProgress;
 end;

end;

Proc btnОчистить_OnClick(Sender: String);
 Очистить;
end;
--Обработчики событий объектов шаблона-----
--
--
--Обработчики событий шаблона -----
Proc AfterOpen(Destroy: Logical);
 if Run:
    btnЗагрСписокКарт_OnClick("");
    Run=False;
 fi;
end;
--Обработчики событий шаблона -----
--

Конец
