-- Шаблон создан мастером бланков
-- 21.08.2012 16:59:31
--
БланкСШаблоном "Настройка выгрузок с использованием XML";
 var FmtN:I=[1];
 var FmtCFG[]:S;
 var FmtCFG_:S;
 var FmtXSLT[]:S;
 var FmtXSLT_:S;
 var FmtName[]:S;
 var Doc_:S;

  Func ВзятьПуть(Cfg:S;Par:S):S;
  var cfgO:AutoObject;
  var prefix,Res:S;
     Res="";
     if Cfg="":^""; fi;
     try
       cfgO=РАБ.XML.LoadXml2OLE(Cfg);
       prefix=РАБ.XML.ПростойXPath(cfgO,"/",Par+"/@root","");
       if prefix="":
          prefix=Раб.БЮДЖЕТ2005.PathPart(Cfg,"path");
         else
          prefix=PlanVar(prefix)+"\Форматы";
       fi;
       Res=prefix+"\"+РАБ.XML.ПростойXPath(cfgO,"/",Par,"");
     finally
       ClearVariable(cfgO);
     end;
     ^Res;
  end;

  Func ВзятьXSL(n:I):S;
  var Res:S;
    Res=ВзятьПуть(FmtCFG[n],"/configuration/format");
    if Res="":
       --Заглушка для старого варианта
       Res=FmtXSLT[n];
    fi;
    ^Res;
  end;

  Func ВзятьXSL_V(n:I):S;
  var Res:S;
    if n=0:^""; fi;
    if FmtCFG[n]="":
       --Заглушка для старого варианта
       Res = Раб.Бюджет2005.PathPart(ВзятьXSL(n),"path")+"\"+Раб.Бюджет2005.PathPart(ВзятьXSL(n),"filename")+"_val.xsl";
      else
       Res = ВзятьПуть(FmtCFG[n],"/configuration/validate");
    fi;
    ^Res;
  end;

  Proc Fmt_Инит_(Path:S);
  var tmp,tmp1:S;
  var F,F1,n,nn,n1:I;
  var cfgO:AutoObject;
   --Новый вариант (с конфигами)--
   Раб.Бюджет2005.DirList(Path,"*cfg.xml",1);
   nn=LengthOfArray(Раб.Бюджет2005.Dir);
   n1=1;
   for n=1..nn do
     try
       cfgO=РАБ.XML.LoadXml2OLE(Раб.Бюджет2005.Dir[n]);
       tmp=РАБ.XML.ПростойXPath(cfgO,"/","/configuration/@name","");
       tmp1=ВзятьПуть(Раб.Бюджет2005.Dir[n],"/configuration/format");--РАБ.XML.ПростойXPath(cfgO,"/configuration/format",".","");
       if tmp<>"" and tmp1<>"": --Защищаемся от неправильно написанных форматов
          n1=InsertInArraySort(FmtCFG,Раб.Бюджет2005.Dir[n]);
          InsertInArray(FmtName,n1,tmp);
          InsertInArray(FmtXSLT,n1,tmp1);
       fi;
       if FmtCFG[n1]=FmtCFG_ or FmtXSLT[n1]=FmtXSLT_:
          FmtN=n1;
       fi;
     finally
       ClearVariable(cfgO);
     end;
   od;
   --Старый вариант--
   Раб.Бюджет2005.DirList(Path,"*.xsl",1);
   nn=LengthOfArray(Раб.Бюджет2005.Dir);
   n1=1;
   for n=1..nn do
     F1=TextFileOpenRead(Раб.Бюджет2005.Dir[n],False);
     try
       tmp1=TextFileReadLn(F1);
       tmp1=TextFileReadLn(F1);
       if Substr(tmp1,1,4)="<!--" and SearchInArray(FmtXSLT,Раб.Бюджет2005.Dir[n])=-1:
          n1=InsertInArraySort(FmtXSLT,Раб.Бюджет2005.Dir[n]);
          InsertInArray(FmtName,n1,Substr(tmp1,5,Length(tmp1)-7));
          InsertInArray(FmtCFG,n1,"");
          if FmtXSLT[n1]=FmtXSLT_:
             FmtN=n1;
          fi;
          n1=n1+1;
       fi;
     finally
       TextFileClose(F1);
     end;
   od;
  end;

  Func Fmt_Инит(Doc:S;Cfg:S;Xsl:S):I;
    --if Doc_=Doc: ^-1; fi;
    ClearVariable(Раб.ВыгрузкиXML.FmtCfg);
    ClearVariable(Раб.ВыгрузкиXML.FmtXSLT);
    ClearVariable(Раб.ВыгрузкиXML.FmtName);
    FmtCFG_=Cfg;
    FmtXSLT_=Xsl;
    Doc_=Doc;
    Fmt_Инит_(PlanVar("Std_rpo")+"\Общие\Форматы\"+Doc+"\");
    if ExistsFolder(PlanVar("Бух")+"\Форматы\"+Doc+"\"):
       Fmt_Инит_(PlanVar("Бух")+"\Форматы\"+Doc+"\");
    fi;
    ^FmtN;
  end;

  Func ЧислоОшибок(ChkRes:AutoObject;Must:S):I;
    ^Int(Раб.XML.ПростойXPath(ChkRes,"/errors","count(error[@must="+Must+"])",""));
  end;

  Func ТекстОшибок(ChkRes:AutoObject;Must:S):S;
    ^Раб.XML.ПростойXPath(ChkRes,"/errors/error[@must="+Must+"]",".",chr(13));
  end;

  Func ПроверитьXML(n:I;src:AutoObject):AutoObject;
  var subres,subres0,res,cfgOle:AutoObject;
  var i,ii:I;
  var xsl_v:S;
    try
    --  subres=src;
      if FmtCFG[n]="":
         subres=Раб.XML.XSLT_Ole2Ole(src,PlanVar("Std_rpo")+"\Общие\Форматы\normalize.xsl");
        else
         cfgOle=Раб.XML.LOADXML2OLE(FmtCFG[n]);
         ii=Int(Раб.XML.ПростойXPath(cfgOle,"/configuration","count(preprocess[@preval=1])",""));
         --subres=src;
         subres=Раб.XML.XSLT_Ole2Ole(src,ВзятьПуть(FmtCFG[n],"/configuration/preprocess[@preval=1][1]"));
         for i=2..ii do
           subres0=subres;
           subres=Раб.XML.XSLT_Ole2Ole(subres0,ВзятьПуть(FmtCFG[n],"/configuration/preprocess[@preval=1]["+Str(i)+"]"));
           ClearVariable(subres0);
         od;
      fi;
      xsl_v = ВзятьXSL_V(n);
      if xsl_v = "":
         res = cfgOle;
        else
         res=РАБ.XML.XSLT_Ole2Ole(subres,xsl_v);
      fi;
    finally
      ClearVariable(cfgOle);
      ClearVariable(subres);
    end;
    ^res;
  end;


  Proc КонвертироватьXML(n:I;src:AutoObject;tgt:String);
  var subres,subres0,cfgOle:AutoObject;
  var i,ii:I;
    if n=0: src.Save(tgt); Exit; fi;
    try
      if FmtCFG[n]="":
         subres=Раб.XML.XSLT_Ole2Ole(src,PlanVar("Std_rpo")+"\Общие\Форматы\normalize.xsl");
        else
         cfgOle=Раб.XML.LOADXML2OLE(FmtCFG[n]);
         ii=Int(Раб.XML.ПростойXPath(cfgOle,"/configuration","count(preprocess)",""));
         --subres=src;
         subres=Раб.XML.XSLT_Ole2Ole(src,ВзятьПуть(FmtCFG[n],"/configuration/preprocess[1]"));
         for i=2..ii do
           subres0=subres;
           subres=Раб.XML.XSLT_Ole2Ole(subres0,ВзятьПуть(FmtCFG[n],"/configuration/preprocess["+Str(i)+"]"));
           ClearVariable(subres0);
         od;
      fi;
      РАБ.XML.XSLT_Ole2F(subres,ВзятьXSL(n),tgt);
    finally
      ClearVariable(subres);
      ClearVariable(cfgOle);
    end;
  end;
Конец
