-- Шаблон создан мастером бланков
-- 18.03.2011 18:42:59
--
БланкСШаблоном "Конвертация составных полей в единые";
var Упр:I;
var Карт[]:S;
var Поля[]:S;
var Поля_[]:S=Поля[$];
var Разд[]:S;
var Куда[]:S;

var Buf[]: S;
var Buf1[]: S;
var Buf2[]: S;
var A: S = "+";
var D: S = "-";
fn:S;

func Обработка(Iter:I):L;
var OWA,OA,OA1,nn,n,nA,nnA,i:i;
var Subt,Res,One:S;
  if pos("@",Куда[Iter])>0 then Subt=ExtractWord(1,Куда[Iter],"@"); else Subt=""; fi;
  OWA=OpenWorkArea(Карт[Iter],"");
  try
   nn=Records(OWA);
   BeginChanging(OWA);
   try
   for n=1..nn do
     if Subt="" then
        Res="";
        for i=1 to WordsCount(Поля[Iter]," ") do
            if Pos("@",ExtractWord(i,Поля[Iter]," "))>0 then
               OA1=OpenArray(OWA,n,ExtractWord(1,ExtractWord(i,Поля[Iter]," "),"@"),"");
               try
                 if records(OA1)>0 then
                    One=GetFieldS(OA1,1,ExtractWord(2,ExtractWord(i,Поля[Iter]," "),"@"));
                 fi;
               finally
                 CloseWorkArea(OA1);
               end;
              else
               One=GetFieldS(OWA,n,ExtractWord(i,Поля[Iter]," "));
            fi;
            Res=Раб.Бюджет2005.Объединить(Res,One,Разд[Iter]);
        od;
        i=PutFieldS(OWA,n,Куда[Iter],Res);
       else
        OA=OpenArray(OWA,n,Subt,"");
        try
          nnA=Records(OA);
          for nA=1 to nnA do
              Res="";
              for i=1 to WordsCount(Поля[Iter]," ") do
                  if Pos("@",ExtractWord(i,Поля[Iter]," "))>0 then
                     if ExtractWord(1,ExtractWord(i,Поля[Iter]," "),"@")=Subt then
                        One=GetFieldS(OA,nA,ExtractWord(2,ExtractWord(i,Поля[Iter]," "),"@"));
                       else
                        OA1=OpenArray(OWA,n,ExtractWord(1,ExtractWord(i,Поля[Iter]," "),"@"),"");
                        try
                          if records(OA1)>0 then
                             One=GetFieldS(OA1,1,ExtractWord(2,ExtractWord(i,Поля[Iter]," "),"@"));
                          fi;
                        finally
                          CloseWorkArea(OA1);
                        end;
                     fi;--  if ExtractWord(1,ExtractWord(i,Поля[Iter]," "),"@")=Subt then
                    else
                     One=GetFieldS(OWA,n,ExtractWord(i,Поля[Iter]," "));
                  fi;
                  Res=Раб.Бюджет2005.Объединить(Res,One,Разд[Iter]);
              od;
              i=PutFieldS(OA,nnA,ExtractWord(2,Куда[Iter],"@"),Res);
          od;
        finally
          CloseWorkArea(OA);
        end;


     fi;
   od;
   EndChanging(OWA);
   except
     CancelChanging(OWA);
   end;
  finally
    CloseWorkArea(OWA);
  end;
  ^True;
end;

Func ВыбратьКартПоле(vКарт:S):S;
var n,nn,z,zz:i;
var tmp:S;
 ClearVariable(Buf);
 ClearVariable(Buf1);
 ClearVariable(Buf2);
 if not vКарт="TABLE_OPER":
    nn=GetCardFileFields(vКарт,Buf,mtlSUBTAB);
    for n=1..nn do
     zz=GetCardFileFields(vКарт+"@"+Buf[n],Buf1,mtlSTRING);
     InsertInArray(Buf2,1,Buf[n]+"@"+" --"+GetCardFileFieldComment(vКарт,Buf[n]));
     for z=1..zz do
      InsertInArray(Buf2,1,Buf[n]+"@"+Buf1[z]+" --"+GetCardFileFieldComment(vКарт+"@"+Buf[n],Buf1[z]));
     od;
    od;
    SortArray(Buf2);
    nn=GetCardFileFields(vКарт,Buf,mtlSTRING);
    for n=1..nn do
     Buf[n]=Buf[n]+" --"+GetCardFileFieldComment(vКарт,Buf[n]);
    od;
    CopyArray(Buf2,Buf,1,nn+1);
    z=0;
   else
    Buf[1]="DEBET --Счет дебета";
    Buf[2]="CREDIT --Счет кредита";
 fi;
 n=AlternateTree("Список полей",Buf,-1,z,0,"@","Картотека","Наименование",-1,False);
 if n=0: ^""; fi;
 tmp=SubStr(Buf[n],1,Pos(" --",Buf[n])-1);
 ^tmp;
end;

Func ВыбратьКарт(vRef:S): S;
var n, nn: i;
var tmp: S;
  ClearVariable(Buf);
  nn = GetCardFileNames("*", Buf, False, True, vRef);
  if nn = 0
  :
     Message("Список картотек пуст");
     Return "";
  fi;
  n = Alternate("Список картотек", Buf, -1, n, 12);
  if n = 0
  :
     Return "";
  fi;
  Return Buf[n];
end;

Func Карт_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp, Карт_: S;
  tmp = ВыбратьКарт("");
  if tmp = ""
  :
     Return False;
  fi;
  Карт[Iter] = SubStr(tmp, 1, Pos(" --", tmp) - 1);
  Поля[Iter] = "";
  Куда[Iter] = "";
  Return False ;
end;


Func Куда_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp: S;
  if Карт[Iter] = ""
  :
     Message("Укажите картотеку", mtError);
     Template.Field = "Карт";
     Return False;
  fi;
  tmp = ВыбратьКартПоле(Карт[Iter]);
  if tmp = ""
  :
     Return False;
  fi;
  Куда[Iter] = tmp;
  Return False ;
end;


Func Поля_OnEnter(FieldName: String; Iter: Integer): logical;
var tmp: S;
  if Карт[Iter] = ""
  :
     Message("Укажите картотеку", mtError);
     Template.Field = "Карт";
     Return False;
  fi;
  tmp = ВыбратьКартПоле(Карт[Iter]);
  if tmp = ""
  :
     Return False;
  fi;
  Поля[Iter]=Раб.Бюджет2005.ДобавитьСловоВНаборСЗаменой(Поля[Iter]," ",tmp,tmp,"");
  Return False ;
end;

Proc Поля_OnExit(FieldName: String; Iter: Integer);
 Поля[Iter]=Раб.Бюджет2005.УдалитьСловоИзНабора_Диалог2( Поля[Iter]," ","");
end;



Proc Button1_OnClick(Sender: String);
var i:I;
var l:l;
for i=1..Упр do
 l=Обработка(i);
od;
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) ;
  Return False ;
end;


Proc Button2_OnClick(Sender: String);
 if EnqOkCancel("Текущая настройка будет утеряна, продолжить операцию чтения настроек ?",mtWarning)=cmCancel: Message("Операция чтения настроек отменена"); Exit; fi;
 if fn="": fn=PlanVar("STD_RPO")+"\Слияние полей\"; fi;
 if ChooseFile(Fn,"Выбор файла настроек","Файлы настроек(*.dbt)|*.dbt")=cmCancel: Message("Операция чтения настроек отменена"); Exit; fi;
 if ReadVarFromDbt(Fn): Message("Найстроки успешно прочитаны"); else Message("Ошибка чтения настроек",mtError); fi;

end;


Конец
