рдПрдлрд╝рдЯреАрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рдФрд░ xlsx рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ (рдХреИрдЪ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ)

рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдПрдХ рд▓реЗрдЦ рд▓рд╛рддрд╛ рд╣реВрдВ:
  1. рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП% Net.FtpSession рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
  2. Xls рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЖрд╕рд╛рди рддрд░реАрдХрд╛
  3. рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрд╕


FTP рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред


рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ? рдирд╣реАрдВ, рдирд╣реАрдВ рд╕реБрдирд╛ред
рддреАрд╕рд░реЗ рджрд┐рди, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рд╣реЗ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рд╕рд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реАред рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЖрдИрдЯреА рд╡рд┐рднрд╛рдЧ рдиреЗ рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЬрд╝реЛрд░ рджрд┐рдпрд╛, рд╡рд┐рдирд┐рдордп рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
s ftp = ##class(%Net.FtpSession).%New() тАУ     FTP ftp.Timeout =    тАУ   ftp.Connect(, , , ) тАУ   FTP ftp.SetDirectory() тАУ     FTP ( ) ftp.List( ,     ) тАУ   ,  ,     ftp.Binary() тАУ     ftp.Retrieve(, .GlobalStream) тАУ     ftp.Delete() тАУ   ftp.Append(, ) -         ftp.Logout() тАУ  FTP  


рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд╛рд╕реНрдХ рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рд╣реИрдВ)ред
 ClassMethod FTPGetFiles(ftp, fileName) As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.SetDirectory("/TestDir") //   s fileName = "????????t??????vK*.xml" //         d ..ParserDir(ftp, fileName) s fileName = "????????a??????yK*.xml" d ..ParserDir(ftp, fileName) } q ftp.Logout() } ///    ,   ClassMethod ParserDir(ftp, fileName) As %Status { s file = "" sx = 1 s file(x) = "" //       d ftp.List(fileName, .stream) q:'$IsObject(stream) while 'stream.AtEnd { //       s file = stream.ReadLine(1, .sc, .eol) if ( file = $C(10) ) { //     sx = x + 1 s file(x) = "" } else { //    s file(x) = file(x) _ file } if $$$ISERR(sc) { w "ERROR" q } } //     d ftp.Binary() //     s key = $ORDER(file(""),1) while ( key '= "" ) { //   s fName = $E(file(key), 40, *) if ( $L(fName) > 0 ) { #dim GlobalStream As %GlobalBinaryStream; //         fName.    -   FTP    CP1251    d ftp.Retrieve($zcvt($zcvt(fName,"I","CP1251"),"O","CP1251"),.GlobalStream) #dim status As %String; //       if ( $F(fName,"s") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Shipment", parser) } elseif ( $F(fName,"d") > 0 ) { s status = ..Parser(GlobalStream, "Product", "Disposal" ,parser) } if ( status ) { d ftp.Delete(fName) } } s key = $order(file(key),1) } q ftp.Logout() } 


рдПрдХ рдПрдлрд╝рдЯреАрдкреА рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг
 ///    FTP  ClassMethod RunExport() As %Status { s ftp = ##class(%Net.FtpSession).%New() s ftp.Timeout = 2000 s host = "11.111.11.111" s port = 2021 s user = "myth/user" s pass = "userspass" if ftp.Connect(host, user, pass, port) { d ftp.Binary() //          s st = ##class(%SQL.Statement).%New() d st.%PrepareClassQuery("%File","FileSet") s rs = st.%Execute("/usr/cachesys201221/csp/sm/export_xml","*.xml","Size,Name") while rs.%Next() { //    ,     d ftp.Delete(rs.%GetData(6)) //     s stream = ##class(%FileBinaryStream).%New() // 1 -         s stream.Filename = rs.%GetData(1) //       -     "done" if ( ftp.Append(rs.%GetData(6),stream) = $$$OK ) { d ##class(%File).Rename(rs.%GetData(1), ##class(%File).GetDirectory(rs.%GetData(1)) _ "done/" _ rs.%GetData(6)) } k stream } } d ftp.Logout() k ftp q $$$OK } 


рдбреЗрдЯрд╛ рдХреЛ xlsx рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред


рдкрдбрд╝реЛрд╕реА рдХреЗ рджреБрдГрдЦ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕реБрдЦрджрд╛рдпрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╕реБрдмрд╣, рдХрд╛рд░реНрдпрд╛рд▓рдп рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдПрдХ рд╕рд╣рдХрд░реНрдореА рдореБрдЭреЗ рджреЗрдЦрдХрд░ рдореБрд╕реНрдХреБрд░рд╛рдпрд╛ рдФрд░, рдмрд┐рдирд╛ рдердХреЗ рд╣реБрдП, рдореЛрдЬрд╝рд┐рд▓рд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреА рд╕реВрдЪрдирд╛ рджреАред рдФрд░ рд╕рднреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рджреГрд╢реНрдп-рд╕реА рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред рдлрд╝рд╛рдпрд░реНрдлрд╝реЙрдХреНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдерд╛, рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрджрд▓рдирд╛ рдФрд░ рдбреАрдПрд▓рдПрд▓ (рдФрд░ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд▓рдЧрдЗрди) рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдбреАрдПрд▓рдПрд▓ рдФрд░ рдЬреЗрдПрд╕рдПрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛)ред рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╛рдж рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рддреАрд╕рд░реЗ рджрд┐рди, рдХреБрдХреАрдЬрд╝ рд╡рд╛рд▓рд╛ рдПрдХ рдЯреНрд░рдХ рдПрдХреНрд╕реЗрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реА рд╕рдбрд╝рдХ рдкрд░ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдЙрджрд╛рд╣рд░рдг
 #server(TestProject.MakeExcelFile($("#table_to_excel").html(), "PriceList"))# ClassMethod MakeExcelFile(Data As %String, FileName As %String) As %Status { s FileName = "/tkf/reports/" _ FileName _ "_Excel.xls" s stream = ##class(%Library.FileCharacterStream).%New() s FP = $$GetFilename^%apiCSP(FileName) if ( $L(Data) = 22 ) { d stream.CopyFrom(Data) } else { d stream.Write(Data) } d stream.SetAttribute("Content-Length",stream.Size) d stream.SetAttribute("ContentType","application/excel") d stream.SetAttribute("Charset","UTF8") d stream.SetAttribute("ContentDisposition","attachment; filename=" _ $p(FileName,"/",4)) d stream.LinkToFile(FP) d stream.SaveStream() s oid = stream.%Oid() &js<window.location="#url(%25CSP.StreamServer.cls?STREAMOID=#(..Encrypt(oid))#)#";> q $$$OK } 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрд▓ рдХреЛ рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 <style>.toText{ mso-number-format:\"\@\"; } </style> <td class=тАЭtoTextтАЭ> </td> 


рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрд╕


рд▓рдШреБрд░реВрдк

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд░ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╕реАрдУрдПрд╕ рдореЗрдВ рдЗрди рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ:

рд╕реЗрдЯ = рдПрд╕
рдбреВ = рдбреА
рд▓рд┐рдЦ = w
рдорд╛рд░ = рдХреЗ
рдЫреЛрдбрд╝рдирд╛ = рдХреНрд╖
...

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреА рд╣реИ:

рдЯрд╛рдЗрдкрд┐рдВрдЧ

COS рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рднрд╛рд╖рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП #dim рдирд┐рд░реНрдорд╛рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛

рдПрдХ рдЙрджрд╛рд╣рд░рдг:



SQL рдореЗрдВ $ CLASSNAME

рдПрдХ рджреБрд░реНрд▓рдн, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓рд╛ - рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд░реНрдЧ рдирд╛рдо (SQL рдореЗрдВ $ CLASSNAME рдХрд╛ рдПрдирд╛рд▓реЙрдЧ) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрди рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ - x__classnameред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
2 рд╡рд░реНрдЧ рдП рдФрд░ рдмреА рд╣реИрдВ рдЬреЛ рдкрддреНрд░ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ% рдирд┐рд░рдВрддрд░ред рдЪрдпрди рдореЗрдВ x__classname рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред


Cache рд╕рдВрд╕реНрдХрд░рдг - UNIX рдХреЗ рд▓рд┐рдП рдХреИрд╢ (x86-64 рдХреЗ рд▓рд┐рдП Red Hat Enterprise Linux) 2012.2.1 (рдмрд┐рд▓реНрдб 705U) рдмреБрдз 24 рдЕрдХреНрдЯреВрдмрд░ 2012 14:32:01 EDTред

Source: https://habr.com/ru/post/In177609/


All Articles