-- Шаблон создан мастером бланков
-- 04.01.2004 18:28:03
--
БланкСШаблоном "Настройка печати";

var defBook:L=True;
var defLF:I=100;  --Размер полей левое
var defRF:I=100;  --правое
var defUF:I=200;  --верхнее
var defDF:I=100;  --нижнее
var defSC:N=1;    --Маштаб
var defUC:I=0;    --Верхний колонтитул
var defDC:I=0;    --Нижний колонтитул

var Book:L=[defBook]; --Книжная/альбомная
var LF:I=[defLF]; --Размер полей левое
var RF:I=[defRF]; --правое
var UF:I=[defUF]; --верхнее
var DF:I=[defDF]; --нижнее
var SC:N=[defSC]; --Маштаб
var UC:I=[defUC]; --Верхний колонтитул
var DC:I=[defDC]; --Нижний колонтитул

var Key[]:S;
var Val[]:S;

Func ExistCfg (Cfg:S):L;
 ^ExistFile(Раб.Бюджет2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg));
end;

Func CreateCfg (Path:S;Cfg:S):L;
var FS,FT,n:I;
var tmp:S;
var Flag:L;
 if Path="": Path=Раб.Бюджет2005.Контроль2Слэш(PlanVar("STD_RPO")+"\Общие\Настройки\"); fi;
 if ExistFile(Path+Cfg)=False: ^False; fi;
 FS=TextFileOpenRead(Path+Cfg);
 Try
  Try
   Flag=False;
   FT=TextFileCreate(Раб.Бюджет2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg));
   Flag=True;
   While not TextFileEndOfFile(FS) do
    tmp=TextFileReadLn(FS);
    TextFileWriteLn(FT,tmp);
   od;
  Except
   ^False;
  end;
 Finally
  TextFileClose(FS);
  if Flag=True: TextFileClose(FT); fi;
 end;
 ^True;
end;

Proc Cfg(Path:S;Cfg:S);
 if ExistCfg(Cfg)=False: CreateCfg(Path,Cfg); fi;
end;

Proc Prn (Bln:S; Path:S; Cfg:S; Device:S; Count:I);
var VerT,VerS:S;
var Flag:L;
var n:i;
 if Cfg="": Message("Не указан конфигурационный файл. Печать невозможна",mtError); Exit; fi;
 if Path="": Path=Раб.Бюджет2005.Контроль2Слэш(PlanVar("STD_RPO")+"\Общие\Настройки\"); fi;
 if ExistFile(Раб.Бюджет2005.Контроль2Слэш(Path+Cfg))=False: 
    Trace("Конфигурационный файл '"+Path+Cfg+"' не найден. Будет использована настройка по умолчанию");
    for n=1..Count do
     Print(Bln,"",Device);
    od;
    Exit;
 fi;
 if ExistFile(Раб.Бюджет2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg))=False: 
    Flag=CreateCfg(Path,Cfg); 
   else 
    Flag=True; 
 fi;
 if not Flag: 
    Trace("Ошибка создания конфигурационного файла. Будет использована настройка по умолчанию"); 
    Cfg="";
 fi;
 for n=1..Count do
  Print(Bln,Cfg,Device);
 od;
end;

Proc PreView (Bln:S; Path:S; Cfg:S; Device:S; isBook:L);
var VerT,VerS:S;
var Flag:L;
var n:i;
 if Cfg="": Message("Не указан конфигурационный файл. Печать невозможна",mtError); Exit; fi;
 if Path="": Path=Раб.Бюджет2005.Контроль2Слэш(PlanVar("STD_RPO")+"\Общие\Настройки\"); fi;
 if ExistFile(Раб.Бюджет2005.Контроль2Слэш(Path+Cfg))=False: 
    Trace("Конфигурационный файл '"+Path+Cfg+"' не найден. Будет использована настройка по умолчанию");
    Print(Bln,"",Device,isBook,0,0,True);
    Exit;
 fi;
 if ExistFile(Раб.Бюджет2005.Контроль2Слэш(PlanVar("INI")+"\"+Cfg))=False: 
    Flag=CreateCfg(Path,Cfg); 
   else 
    Flag=True; 
 fi;
 if not Flag: 
    Trace("Ошибка создания конфигурационного файла. Будет использована настройка по умолчанию"); 
    Cfg="";
 fi;
 Print(Bln,Cfg,Device,isBook,0,0,True);
end;

Proc ПоУмолчанию;
 LF=defLF; --Размер полей левое
 RF=defRF; --правое
 UF=defUF; --верхнее
 DF=defDF; --нижнее
 SC=defSC; --Маштаб
 UC=defUC; --Верхний колонтитул
 DC=defDC; --Нижний колонтитул
end;

Func GetVal(KeyVal:s):s; -- по ключу KeyVal возвращает значение Val, или пробел, если нет пары KeyVal
 var j:i;
 j=SearchInArray(Key,KeyVal);
 if j<0: ^' '; fi;
 ^Trim(Val[j]);
end;

Func ReadCfgFile_to_KeyVal (aCfg:S):s; -- Заполняет массивы Key и Val. Возвращает текст возможной ошибки
var F,nn,n:i;
var tmp,res:S;
 ClearVariable(Раб.Настр_печать.Key);
 ClearVariable(Раб.Настр_печать.Val);
 if aCfg="": ^"Не указан конфигурационный файл"; fi;
 if not ExistFile(aCfg):^"Не существует конфигурационный файл"; fi;
 F=TextFileOpenRead(aCfg);
 Try
  nn=0;
  While not TextFileEndOfFile(F) do
   nn=nn+1;
   tmp=TextFileReadLn(F);
   Key[nn]=ExtractWord(1,tmp,"=");
   Val[nn]=ExtractWord(2,tmp,"=");
  od;
  TextFileClose(F);
 Except
  res='Ошибка чтения файла';
  TextFileClose(F);
 end;
 ^res;
end;


Func ReadCfgFile (aCfg:S):s;-- Возвращает текст возможной ошибки, возврат пробела - означает, что считаны не все параметры
var F,nn,n:i;
var tmp:S;
var Flag:L;
 tmp=ReadCfgFile_to_KeyVal(aCfg);
 if tmp<>'': ^tmp; fi; -- ошибка чтения файла
 if SearchInArray(Key,"[Print]")=-1: ^"Файл '"+aCfg+"' не является настройкой печати"; fi;
 Flag=True;
 --Ориентация
 tmp=GetVal("Orientation");
 if tmp<>" ":Book=tmp="0";
  |true:Flag=False;
 fi;
 --Поля
 tmp=GetVal("PageMargins");
 if tmp<>" ":
    tmp=SubStr(tmp,2,Length(tmp)-2); --удаляем ведущие и замыкающие кавычки
    LF=Int(ExtractWord(1,tmp,","));
    RF=Int(ExtractWord(2,tmp,","));
    UF=Int(ExtractWord(3,tmp,","));
    DF=Int(ExtractWord(4,tmp,","));
  |true:Flag=False;
 fi;

 --Верхний колонтитул
 tmp=GetVal("HeaderStr");
 if tmp<>" ":UC=if(tmp='""","","""',0,52); else Flag=False; fi;

 --Нижний колонтитул
 tmp=GetVal("FooterStr");
 if tmp<>" ":DC=if(tmp='""","","""',0,52); else Flag=False; fi;

 --Маштаб
 tmp=GetVal("PrintScale");
 if tmp<>" ":SC=Int(tmp)/100; else Flag=False; fi;

 if Flag:^''; fi;
 ^' ';
end;



Func ReadCfg (aPath:S; aCfg:S):L;
var F,nn,n:i;
var tmp:S;
var Flag:L;
 ПоУмолчанию;
 if aCfg="": Message("Не указан конфигурационный файл",mtError); ^False; fi;
 Cfg(aPath,aCfg);
 if ExistCfg(aCfg):
    tmp=ReadCfgFile(Раб.Бюджет2005.Контроль2Слэш(PlanVar("INI")+"\"+aCfg));
    if tmp=' ':ПоУмолчанию; Trace("Ошибка чтения файла настройки '"+aPath+aCfg+"'"); ^False; fi;
    if tmp<>'':Trace(tmp); ^False; fi; -- показываем текст ошибки
   else
    Trace("Конфигурационный файл '"+aPath+aCfg+"' не найден. Будет использована настройка по умолчанию");
    ^False;
 fi;
 ^True;
end;


Func Sheet(XS:I; YS:I):I; --xs ys чистые раземеры листа, в "книжном" формате
var ss:i;
 ss=if(book,ys,xs);
 ^Int(Trunc((ss-uf-df-uc-dc)/sc));
end;

Конец
