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

Упр:I;

ПутьЗагруз:S;

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

var A:S="+";
var D:S="-";
var пп[]:i=$;
Статус[]:L;
var Статус_[]:S=if(Статус[$],"V","X");
Карт[]:S;
НаимКарт[]:S;
РежимУдал[]:I;
var РежимУдал_[]:S=if(РежимУдал[$]=1,"Удалять",if(РежимУдал[$]=2,"Оставлять","Запрашивать"));
Выпол[]:I;
var Выпол_[]:S=if(Выпол[$]=1:"Загружена"|Выпол[$]=2:"Загрузка отменена"|Выпол[$]=-1:"Ошибка загрузки"|True:"Ожидание");

var Buf[]:S;

var Run:L;
--
--Процедуры и функции -------------
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 Проверить:L;
var OWA,Iter:I;
 Try
  ShowProgress(Упр,"Проверка...");
  Try
   for Iter=1..Упр do
    ProgressPos(Iter);
    if not(ExistsCardFile(Карт[Iter])):Статус[Iter]=false;fi;
--    if Статус[Iter]:	  ExistsCardFile
--	 OWA=OpenWorkArea(Карт[Iter],"","1=0");
--	 Try
--	 Finally
--	  CloseWorkArea(OWA);
--	 end;
--    fi;
   od;
  Except
   Template.Field="Карт";
   Template.Frame=Iter;
   Raise;
   ^False;
  end;
 Finally
  CloseProgress;
 end;
 ^True;
end;

Func ПрочитатьСписокКарт(vName:S):L;
var F,n:I;
var tmp:S;
 if not ExistFile(vName): Message("Указанная папка не содержит список загружаемых картотек",mtError); Template.Field="ПутьЗагруз"; ^False; fi;
 ClearVariable(Buf);
 n=0;
 F=TextFileOpenRead(vName);
 Try
  While not TextFileEndOfFile(F) do
   tmp=TextFileReadLn(F);
   if not tmp="":
      n=n+1;
      Buf[n]=tmp;
   fi;
  od;
 Finally
  TextFileClose(F);
 end;
 ^True;
end;

Func ПолучитьРежимУдал(Iter:I):L;
var OWA,nr:i;
var n:i;
 if РежимУдал[Iter]=1: ^True;
   |РежимУдал[Iter]=2: ^False;
 fi;
 OWA=OpenWorkArea(Карт[Iter],"","");
 Try
  nr=Records(OWA);
 Finally
  CloseWorkArea(OWA);
 end;
 if not nr=0:
    n=EnqYesNoCancel('Картотека "'+Карт[Iter]+'" непустая.^MУдалить старые записи?',mtWarning);
    if n=cmYes: ^True;
      |n=cmNo: ^False;
      |n=cmCancel: Статус[Iter]=False; ^True;
    fi;
 fi;
 ^True;
end;

Proc Выполнить (vПутьЗагруз:S);
 Run=True;
 ПутьЗагруз=vПутьЗагруз;
 OpenBlank("СЛУЖЕБНЫЕ.ЗАГРУЗКА_КАРТ");
end;
--Процедуры и функции -------------			      
--
--
--Обработчики событий полей шаблона-----
Func ПутьЗагруз_OnEnter(FieldName: String; Iter: Integer): logical;
 Iter=ChooseFolder(ПутьЗагруз,"Укажите папку для загрузки");
 Return False;
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 Текст2_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Запрашивать подтверждение";
 Buf[2]="Удалять";
 Buf[3]="Оставлять";
 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;
 if ПутьЗагруз="": Message("Укажите папку для загрузки",mtError); Template.Field="ПутьЗагруз"; ^False; fi;
 if not ChooseFile(tmp,"Структура картотек","Структура картотек(*.cdf)|*.cdf")=cmOk: ^False; fi;
 tmp=ExtractWord(WordsCount(tmp,"\"),tmp,"\");
 tmp=SubStr(tmp,1,Length(tmp)-4);
 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])+3,255);
 РежимУдал[Iter]=0;
 Выпол[Iter]=0;
 Return False;
end;

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

Func РежимУдал_OnEnter(FieldName: String; Iter: Integer): logical;
var n:i;
 ClearVariable(Buf);
 Buf[1]="Запрашивать подтверждение";
 Buf[2]="Удалять";
 Buf[3]="Оставлять";
 n=Alternate("Удаление старых записей",Buf,-1,1,12);
 if n=0: ^False; fi;
 РежимУдал[Iter]=n-1;
 Return False;
end;
--Обработчики событий полей шаблона-----
--
--Обработчики событий объектов шаблона-----
Proc btnЗагрСписокКарт_OnClick(Sender: String);
var n,nn:i;
 if ПутьЗагруз="": Message("Укажите папку для загрузки",mtError); Template.Field="ПутьЗагруз"; Exit; fi;
 if not Run:
    if EnqOkCancel("Текущий список будет очищен, продолжить ?")=cmCancel: Exit; fi;
 fi;
 Очистить;
 if not ПрочитатьСписокКарт(ПутьЗагруз+"\_Список картотек.txt"): Exit; fi;
 nn=LengthOfArray(Buf);
 if nn=0: Message("Список картотек пуст");  Exit; fi;
 for n=1..nn do
  InsertFrame(Упр,Упр+1);
  Статус[Упр]=True;
  Карт[Упр]=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
  НаимКарт[Упр]=SubStr(Buf[n],Pos(" --",Buf[n])+3,255);
  РежимУдал[Упр]=0;
  Выпол[Упр]=0;
 od;
end;

Proc btnЗагрузка_OnClick(Sender: String);
var Iter:I;
var FlagDel:L;
 if ПутьЗагруз="": Message("Укажите папку для загрузки",mtError); Template.Field="ПутьЗагруз"; Exit; fi;
 УдалитьПустыеСтроки;
 if Карт[1]="": Message("Выберите картотеку",mtError); Template.Field="Карт"; Template.Frame=1; Exit; fi;
 if not Проверить: Exit; fi;
 for Iter=1..Упр do Выпол[Iter]=0; od;
 ShowProgress(Упр,"Загрузка картотек...");
 Try
  for Iter=1..Упр do
   ProgressPos(Iter);
   if Статус[Iter]:
      FlagDel=ПолучитьРежимУдал(Iter);
      if Статус[Iter]:
	 ImportCard(ieCRD, --Формат
		    Карт[Iter], --Картотека обязательное имя картотеки, в которую импортируется заданный файл
		    ПутьЗагруз+"\"+Карт[Iter], --Файл полное или короткое имя файла со структурой заданной картотеки
		    False, --ВидимПоля загружать только видимые поля (Истина) или все поля (Ложь)
		    True, --Режим загружать поля CreateTime, UpdateTime, CreatedUser, ModifiedUser
		    False, --DOS загружать текст в кодировке DOS (Истина) или в кодировке Windows (Ложь);
		    True, --Подтв запрашивать подтверждения (Истина) или нет (Ложь).
		    ovrNone, --Действ целочисленная константа для разрешения конфликтных ситуаций в импорте
		    FlagDel, --Удал удалять содержимое картотеки (Истина) или нет (Ложь);
		    True, --ПоказДиалог показывать диалог соответствия полей (Истина) даже
		    False --Настройки логический параметр, определяющий, использовать ли настройки браузера картотеки при загрузке
		   );
	 Выпол[Iter]=1;
	else
	 Message("Загрузка отменена",mtWarning);
	 Статус[Iter]=True;
	 Выпол[Iter]=2;
      fi;
   fi;
  od;
 Finally
  CloseProgress;
 end;
 Message("Загрузка завершена");
end;

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



Конец
