
const
CRLF = #13#10;  //    

xmlstr1:string= //   XML
//      
//   [variable]    
//   . variable
// , [kodNI]     = '3340'    
'<?xml version="1.0" encoding="windows-1251"?>'+CRLF+
'< xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+
' ="KO_ZVLREGKKT_[kodNI]_[kodNI]_[INN][KPP]_[Year][Month][Day]_[GUID]"'+
// ="KO_ZVLREGKKT_3340_3340_3329013295332901001_20131003_"
' ="  4.31"'+
' ="5.01">'+
'< ="1110021"'+
' ="[Day].[Month].[Year]"'+
// ="03.10.2013"
' ="[kodNI]">'+          //  
// ="3340">
'<'+
' ="[OKV]"'+             //
// ="75.23.52"
' ="[ZA_PR]"'+        //   =1,=2,=3
// ="2"
' ="[TEL]">'+              //  
// ="01234567890123456789">
'<'+
' ="[NAZW]"'+          //  
// =" &quot;-&quot;"
' ="[INN]"'+             //  
// ="3329013295"
' ="[KPP]"/>'+             //  
// ="332901001"/>
'</>'+
'<'+
' ="[DZ]">'+            // =1, =2
// ="1">
'<'+
' ="[DZF]"'+           //  
// =""
' ="[DZI]"'+                //  
// =""
' ="[DZO]"/>'+
// =""/>
'<'+
' ="[DOKZ]"/>'+        //   CL !
// =""/>
'</>'+
'<'+
' ="[VID_DOK]"'+        // 1-,2-,3-
// ="2"
' ="[PR_1]"'+       //   
// ="2"
' ="[PR_2]"'+        //  
// ="2"
' ="[PR_3]"'+      //  
// ="1"
' ="[PR_4]"'+        //  
// ="2"
' ="[PR_8]">'+        //  
// ="2">
'<'+
' ="[TIP]"'+          //   CL!
// ="-02K"
' ="[NA]"'+           // .  
// ="0123456789"
' ="[DATI_Year]"'+    //    (  - 4 )
// ="2000"
' ="[VER]"'+           //  ( 2  )
// ="01"
' ="[ID1]/[ID2]"'+   //  ()    () 
// ="00000/3333123"
' ="[NP]"'+         //   
// ="666666666666"
' _="[ZN_EKLZ]"'+    // .  
// _="4210003510581"
' _="[RN_EKLZ]"'+     // .  
// _="1234567890"
' ="[PT]"'+         //      =1, =2
// ="2"

'  1'+ //,   = "2"

' ="[PT_REG]"'+     //   ()   
// ="77777"
' ="[PT_NA]"'+     //    ()
// ="88888"
' ="[PT_PNI]"'+      //        
// ="999"

'  1'+


' ="[numdog]"'+      //     (  )
// ="1111"
' ="[DNCTO_Day].[DNCTO_Month].[DNCTO_Year]"'+//      (  )
// ="11.11.2011"
' ="[DOCTO_Day].[DOCTO_Month].[DOCTO_Year]"'+//      (  )
// ="31.12.2012"
' ="[MPU]"'+        //   
// ="0000100"
' ="[MPI]"'+       // .  
// ="0001122"
' _="[SWK2_NUM]"'+ //   
// _="93323212323"
' _="[SWK2_Year]"'+  //   
// _="2010"
' _="[SWK1_NUM]"'+  //   
// _="323323232"
' _="[SWK1_Year]">'+//   
// _="3010">
'<>'+
'<'+
' ="[CTO_NAZW]"'+          //  
// =" &quot;-&quot;"
' ="[CTO_INN]"/>'+           //  
// ="3329013295"/>
'</>'+
'<'+
' ="[MU]">'+              //   
// ="">
'<'+
' ="[PIND]"'+               //   
// ="600003"
' ="[REG]"'+             //   
// ="33"
' ="[GOROD]"'+             //  
//  = " "
' ="[NASP]"'+         //   
//  = " "
' ="[RAION]"'+               //  
// =" -"
' ="[UL]"'+                //  
//  = " "
' ="[ND]"'+                    //  
// ="777"
' ="[NK]"'+                 //  
// ="4444"
' ="[NPP]"/>'+               //   
// ="123"/>


'<'+
' ="[NUMAD]"'+         //   
// ="012345"
' ="[DATAAD_Day].[DATAAD_Month].[DATAAD_Year]">'+ //  
// ="24.01.2013">
'<'+
' ="[NAD]"'+              //  
// =" &quot;-&quot;"
' ="[NADINN]"/>'+            //  
// ="3329013295"/>
'</>'+

'  2'+ //,   = "2"

'<'+
// ,
//   ( )  ()
//       
//     (     )
' _="[NAD_PT];"'+
// _=" &quot;-&quot;"
// ,    ( )
//  ()     
//      (   
// )
' _="[NADINN_PT]"'+
// _="3329013295"
//     ( )
//  ()      
// (     )
' ="[NUMAD_PT]"'+
// ="777"
//   ( )  ()
//         
// (     )
' ="[DATAAD_PT_DAY].[DATAAD_PT_MONTH].[DATAAD_PT_YEAR]"/>'+
// ="11.11.2011"/>

'  2'+


'</>'+
'</>'+
'</>'+
'</>'+
'</>';

//    XML

function TForm1.ShowMsg(s1,s2:PAnsiChar;flags:integer): integer;
begin
  ShowMsg:=MessageBox(Application.Handle,s1,s2,flags);
end;

//     XML
//     input_str  mask,   
//     mask   rpl (   
// ,  "   &quot; ,    = true.
//   mask    rpl    c  > ' ',    = false
function TForm1.StrRpl(var input_str:string; mask, rpl:string):boolean;
begin
  rpl:=Trim(rpl);
  if rpl='' then
    begin
      Result:=false;
      exit;
    end;
  rpl:=StringReplace(rpl,'"','&quot;',[rfReplaceAll]);
  if Pos(mask,input_str)>0 then
    begin
      input_str:=StringReplace(input_str,mask,rpl,[rfReplaceAll]);
      Result:=true;
    end
      else
    begin
      ShowMsg(PChar('    xml.    '+mask),
        '',MB_OK);
      Result:=false;
    end;
end;



//  XML
//      
//   [variable]    
//   . variable
// , [kodNI]     = '3340'    

procedure TForm1.MakeDocClick(Sender: TObject);
label l0,l1;
var i,j:byte;
    a,b,c:integer;
    str,str1,date_KND,xmlstr,guidstr:string;
    pr:boolean;
    guid: TGuid;
    f:TextFile;
    FileDir:String;
begin

  xmlstr:=xmlstr1;  //  xml 
                    //     xmlstr1  .  xmlstr

  CreateGuid(Guid);
  guidstr:=GuidToString(Guid);
  guidstr:=StringReplace(guidstr,'{','',[rfReplaceAll]);
  guidstr:=StringReplace(guidstr,'}','',[rfReplaceAll]);

  StrRpl(xmlstr,'[GUID]',guidstr);


{}
  StrRpl(xmlstr,'[INN]',INN.Text);

{}
  StrRpl(xmlstr,'[KPP]',KPPKKT.Text);

{ }
  StrRpl(xmlstr,'[kodNI]',KODNIKKT.Text);


{    }
    str:=inttostr(VID_DOK.ItemIndex + 1);
    StrRpl(xmlstr,'[VID_DOK]',str);

{  }
     if PR_1.Checked then str:='1' else str:='2';
     StrRpl(xmlstr,'[PR_1]',str);

{ }
     if PR_2.Checked then str:='1' else str:='2';
     StrRpl(xmlstr,'[PR_2]',str);

{ }
     if PR_3.Checked then str:='1' else str:='2';
     StrRpl(xmlstr,'[PR_3]',str);

{ }
     if PR_4.Checked then str:='1' else str:='2';
     StrRpl(xmlstr,'[PR_4]',str);

{ }
     if PR_8.Checked then str:='1' else str:='2';
     StrRpl(xmlstr,'[PR_8]',str);

{ }
     StrRpl(xmlstr,'[NAZW]',NAZW.Text);

{ }
    if DZ.ItemIndex<>-1 then
      str:=inttostr(DZ.ItemIndex +1)
        else str:='';
    StrRpl(xmlstr,'[DZ]',str);

{ }
{}
    StrRpl(xmlstr,'[DZF]',DZF.Text);
{}
    StrRpl(xmlstr,'[DZI]',DZI.Text);
{}
    StrRpl(xmlstr,'[DZO]',DZO.Text);

{ }
    str:=AnsiUpperCase(DOKZ.Text);
    StrRpl(xmlstr,'[DOKZ]',str);

{}
// date_KND -    '01.04.1899'
    StrRpl(xmlstr,'[Day]',date_KND[1]+date_KND[2]);
    StrRpl(xmlstr,'[Month]',date_KND[4]+date_KND[5]);
    StrRpl(xmlstr,'[Year]',date_KND[7]+date_KND[8]+date_KND[9]+date_KND[10]);

{}
     str:=OKV.Text;
     if Trim(str)<>'' then
      begin
        str1:=str[1]+str[2]+'.'+str[3]+str[4]+'.'+str[5]+str[6];
        StrRpl(xmlstr,'[OKV]',str1);
      end;
{  }
    if ZA_PR.ItemIndex <> -1 then str:=inttostr(ZA_PR.ItemIndex+1)
        else
      str:='';
    StrRpl(xmlstr,'[ZA_PR]',str);
{ }
     str:=TEL_NUM.Text;
     StrRpl(xmlstr,'[TEL]',str);
{ }
     str:=TIP.Text;
     StrRpl(xmlstr,'[TIP]',AnsiUpperCase(str));
{  }
     str:=NA.Text;
     StrRpl(xmlstr,'[NA]',str);
{  }
 if DATI.Text <> '' then
  begin
    str:=DATI.Text;
    StrRpl(xmlstr,'[DATI_Year]',str[7]+str[8]+str[9]+str[10]);
  end;
{ }
 if VER.Text <> '' then
  begin
    str:=VER.Text;
    StrRpl(xmlstr,'[VER]',str[1]+str[2]);
  end;
{ }
     str:=IDZ.Text;
     str:=trim(str);
     str1:=Copy(str,1,2);         //   

     StrRpl(xmlstr,'[ID1]',str1);
     Delete(str,1,2);             //   

     StrRpl(xmlstr,'[ID2]',str);

{ }
     str:=NP.Text;
     StrRpl(xmlstr,'[NP]',str);

{  }
     str:=ZN_EKLZ.Text;
     StrRpl(xmlstr,'[ZN_EKLZ]',str);

{  }
     if VID_DOK.ItemIndex<>1 then str:=RN_EKLZ.Text
      else str:='          ';
     StrRpl(xmlstr,'[RN_EKLZ]',str);

{     }

    if PT.Checked then str:='1' else str:='2';
    StrRpl(xmlstr,'[PT]',str);

{  }
     str:=MPU.Text;
     StrRpl(xmlstr,'[MPU]',str);

{  }
     str:=MPI.Text;
     StrRpl(xmlstr,'[MPI]',str);

{ }
     str:=GR.Text;
     StrRpl(xmlstr,'[SWK2_NUM]',str);

{  }
    if GRG.Text <> '' then
     begin
       str:=GRG.Text;
       StrRpl(xmlstr,'[SWK2_Year]',str[1]+str[2]+str[3]+str[4]);
     end;
{ }
     str:=SO.Text;
     StrRpl(xmlstr,'[SWK1_NUM]',str);
{  }
    if SOG.Text <> '' then
     begin
       str:=SOG.Text;
       StrRpl(xmlstr,'[SWK1_Year]',str[1]+str[2]+str[3]+str[4]);
     end;

{ }
    StrRpl(xmlstr,'[CTO_NAZW]',
           Form3.NastrTable.Strings.Values['  ']);

{ }
    StrRpl(xmlstr,'[CTO_INN]',
           Form3.NastrTable.Strings.Values[' ']);
{   }
     str:=getnumdogText;
    StrRpl(xmlstr,'[numdog]',str);
{     }
  if DNCTO.Text <> '' then
    begin
      str:=DNCTO.Text;
      StrRpl(xmlstr,'[DNCTO_Day]',str[1]+str[2]);
      StrRpl(xmlstr,'[DNCTO_Month]',str[4]+str[5]);
      StrRpl(xmlstr,'[DNCTO_Year]',str[7]+str[8]+str[9]+str[10]);
    end;
{     }
if DOCTO.Text <> '' then
  begin
    str:=DOCTO.Text;
    StrRpl(xmlstr,'[DOCTO_Day]',str[1]+str[2]);
    StrRpl(xmlstr,'[DOCTO_Month]',str[4]+str[5]);
    StrRpl(xmlstr,'[DOCTO_Year]',str[7]+str[8]+str[9]+str[10]);
  end;

{ }
    str:=PIND.Text;
    StrRpl(xmlstr,'[PIND]',str);
//  
    str:=REG.Text;
    StrRpl(xmlstr,'[REG]',str);
// 
    str:=RAION.Text;
    StrRpl(xmlstr,'[RAION]',str);
// 
    str:=GOROD.Text;
    StrRpl(xmlstr,'[GOROD]',str);
// . 
    str:=NASP.Text;
    StrRpl(xmlstr,'[NASP]',str);
// 
    str:=UL.Text;
    StrRpl(xmlstr,'[UL]',str);
//  
    str:=ND.Text;
    StrRpl(xmlstr,'[ND]',str);
//  
    str:=NK.Text;
    StrRpl(xmlstr,'[NK]',str);
//  
    str:=NPP.Text;
    StrRpl(xmlstr,'[NPP]',str);
//  
    str:=MU.Text;
    StrRpl(xmlstr,'[MU]',str);

//  
     str:=NAD.Text;
     StrRpl(xmlstr,'[NAD]',str);

//  
     str:=NADINN.Text;
     StrRpl(xmlstr,'[NADINN]',str);

//   
     str:=NUMAD.Text;
     StrRpl(xmlstr,'[NUMAD]',str);

//   
if DATAAD.Text <> '' then
  begin
      str:=DATAAD.Text;
      StrRpl(xmlstr,'[DATAAD_Day]',str[1]+str[2]);
      StrRpl(xmlstr,'[DATAAD_Month]',str[4]+str[5]);
      StrRpl(xmlstr,'[DATAAD_Year]',str[7]+str[8]+str[9]+str[10]);
  end;

//   ,     .
//  .

//    xml
    begin
//      ,   ,   
      if not PT.Checked then    //    
        begin
          delete(xmlstr,Pos('  1',xmlstr),
          Pos('  1',xmlstr)+length('  1')-
          Pos('  1',xmlstr));
          delete(xmlstr,Pos('  2',xmlstr),
          Pos('  2',xmlstr)+length('  2')-
          Pos('  2',xmlstr));
        end else
//    ,      
        begin
          delete(xmlstr,Pos('  1',xmlstr),
          length('  1'));
          delete(xmlstr,Pos('  1',xmlstr),
          length('  1'));
          delete(xmlstr,Pos('  2',xmlstr),
          length('  2'));
          delete(xmlstr,Pos('  2',xmlstr),
          length('  2'));
        end;

//      xmlstr
//' ="[DATAAD_PT_DAY].[DATAAD_PT_MONTH].[DATAAD_PT_YEAR]"/>'+
      str:='';
      while Pos('"[',xmlstr) > 0 do
        begin
          a:=Pos('"[',xmlstr);
          pr:=false;

          for b:=a downto 1 do  //     
            if xmlstr[b]=' ' then
              begin
                pr:=true;
                break;
               end;

          if not pr then
            begin
              ShowMsg('       xmlstr',' XML ',MB_OK);
              Screen.Cursor:=crArrow;
              exit;
            end;

          c:=Pos(']"',xmlstr)+2;
          if c = 2 then
            begin
              ShowMsg('       xmlstr',' XML ',MB_OK);
              Screen.Cursor:=crArrow;
              exit;
            end;

          try
            str:=str+copy(xmlstr,b,c-b)+' ';
            delete(xmlstr,
                    b,
                    c-b); //   
          except
            ShowMsg('       xmlstr',' XML ',MB_OK);
            Screen.Cursor:=crArrow;
            exit;
          end;

        end;  //while
        if str <> '' then
          begin
            ShowMsg(PChar('    : '+str),
            ' XML ',MB_OK);
            Screen.Cursor:=crArrow;
//            exit;
          end;

//       :
// KO_ZVLREGKKT_____N, -  
// KO_ZVLREGKKT_____N, -   ,    -  12 
// N -   . ( -  1  36 .       ).

        FileDir:=Form3.NastrTable.Strings.Values['     XML '];
        if not DirectoryExists(FileDir) then
          if not DirectoryExists(GetCurrentDir+'\'+FileDir) then
            if not CreateDir(GetCurrentDir+'\'+FileDir) then
          begin
            ShowMsg(PChar('    '+GetCurrentDir+'\'+FileDir),
            ' XML ',MB_OK);
            Screen.Cursor:=crArrow;
            exit;
          end;

        FileDir:=FileDir+        // \XML
                'KO_ZVLREGKKT_'+
                KODNIKKT.Text+
                '_'+
                KODNIKKT.Text+
                '_'+
                INN.Text+
                KPPKKT.Text+
                '_'+
                date_KND[7]+date_KND[8]+date_KND[9]+date_KND[10]+     //'[Year]'
                date_KND[4]+date_KND[5]+                              //'[Month]'
                date_KND[1]+date_KND[2]+                              //'[Day]'
                '_'+
                guidstr+
                '.xml';
        try
          AssignFile(f,FileDir);
          Rewrite(f);
          Writeln(f,xmlstr);
          CloseFile(f);
        except
          begin
            ShowMsg(PChar('    '+ FileDir),
            ' XML ',MB_OK);
            exit;
          end;
        end;

    end;//  if Form3.NastrTable.Strings.Values['    XML ']='1' then

