9 Ağustos 2011 Salı

Logo Aktarım - 2

Sıra geldi biraz kod yazmaya :)

Eğer Dynamics Ax gibi bir ERP yazılımına sahip değilseniz ya tecrübenizle yada iyi dökümanlarla aktarım yapmanız kolaylaşacaktır.Logo için dökümanı http://www.logotiger2.net/aktarimlar.pdf adresinde mevcut.BU döküman ne işimize yarayacak derseniz..
Bir önceki yazıda Logodan dışarı veri aktarmadan bahsetmiştik.Aktarımdan sonra oluşan xmle benzer xmller ile içeri vri aktarımı yapmak mümkün.Örneği biri sizden toplu virman fişi aktarımı istedi.Sizde örnek xml'i dışarı aktardınız.Buraya kadar problem yok fakat aşağıdaki gibi bir xmlde hangi alanın neye karşılık geldiğini bulmak zor olabilir.
Örnek virman fişi kodu şu şekilde:
<?xml version="1.0" encoding="ISO-8859-9" ?>
- <BANK_VOUCHERS>
- <BANK_VOUCHER DBOP="INS">
<DATE>06.06.2011</DATE>
<NUMBER>001545</NUMBER>
<AUXIL_CODE>KEREM</AUXIL_CODE>
<DEPARMENT>1</DEPARMENT>
<TYPE>2</TYPE>
<TOTAL_DEBIT>35000</TOTAL_DEBIT>
<TOTAL_CREDIT>35000</TOTAL_CREDIT>
<NOTES1>BANKA VİRMAN</NOTES1>
<CREATED_BY>47</CREATED_BY>
<DATE_CREATED>16.06.2011</DATE_CREATED>
<HOUR_CREATED>9</HOUR_CREATED>
<MIN_CREATED>32</MIN_CREATED>
<SEC_CREATED>24</SEC_CREATED>
<CURRSEL_TOTALS>1</CURRSEL_TOTALS>
<DATA_REFERENCE>136466</DATA_REFERENCE>
<RC_TOTAL_DEBIT>22189.82</RC_TOTAL_DEBIT>
<RC_TOTAL_CREDIT>22189.82</RC_TOTAL_CREDIT>
- <TRANSACTIONS>
+ <TRANSACTION>
<TYPE>1</TYPE>
<BANKACC_CODE>xxxxxxxxxxxxxxxx</BANKACC_CODE>
<GL_CODE2>102.100.001.0001</GL_CODE2>
<SOURCEFREF>136466</SOURCEFREF>
<DATE>06.06.2011</DATE>
<TRCODE>2</TRCODE>
<MODULENR>7</MODULENR>
<DESCRIPTION>BANKA VİRMAN</DESCRIPTION>
<DEBIT>20000</DEBIT>
<AMOUNT>20000</AMOUNT>
<TC_XRATE>1</TC_XRATE>
<TC_AMOUNT>20000</TC_AMOUNT>
<RC_XRATE>1.5773</RC_XRATE>
<RC_AMOUNT>12679.9</RC_AMOUNT>
<BANK_PROC_TYPE>1</BANK_PROC_TYPE>
<DUE_DATE>06.06.2011</DUE_DATE>
<DATA_REFERENCE>173071</DATA_REFERENCE>
<AFFECT_RISK>1</AFFECT_RISK>
<ORGLOGOID />
- <PAYMENT_LIST>
- <PAYMENT>
<DATA_REFERENCE>0</DATA_REFERENCE>
<DISCTRDELLIST>0</DISCTRDELLIST>
</PAYMENT>
</PAYMENT_LIST>
</TRANSACTION>
- <TRANSACTION>
<TYPE>1</TYPE>
<BANKACC_CODE>XXXXXXXXXXXXXXX</BANKACC_CODE>
<GL_CODE2>102.100.001.0001</GL_CODE2>
<SOURCEFREF>136466</SOURCEFREF>
<DATE>06.06.2011</DATE>
<TRCODE>2</TRCODE>

Buna benzer bir XML dosyası oluşturmak için ben aşağıdaki gibi bir excel hazırladım ve meşhur butonu ekledim :)


Bu butonun eventinde ise exceldeki verilere istinaden xml dosyamızı oluşturacak makro  yazılmıştır.Aslında kodlama oldukça basit.String bir değişkeni xmlenki her bir noda göre manipule ediyoruz.Başlık verileri (header veriler) sabit olduğundan döngüsel bir işlem yapılmıyor.Fakat transactionlar ekranda görülen bilgilerle oluşturuluyor.Ben xml oluştururken aşağıdaki şekilde stringi manipule ediyorum.Kod  xmle çok benzediğinden okuması daha kolay oluyor.








VBA Code örneği:

strXMLHEADER = "<?xml version=""1.0"" encoding=""ISO-8859-9"" ?> <BANK_VOUCHERS>" & vbCrLf
    strXMLHEADER = strXMLHEADER & " <BANK_VOUCHER DBOP=""INS"" >" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <DATE>" & Worksheets("Sheet1").Cells(6, 2).Value & "</DATE>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <NUMBER>~</NUMBER>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <AUXIL_CODE>" & Worksheets("Sheet1").Cells(4, 2).Value & "</AUXIL_CODE>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <DEPARTMENT>" & Worksheets("Sheet1").Cells(7, 2).Value & "</DEPARTMENT>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <TYPE>2</TYPE>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <TOTAL_DEBIT>" & sumTUTAR & "</TOTAL_DEBIT>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <TOTAL_CREDIT>" & sumTUTAR & "</TOTAL_CREDIT>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <NOTES1>" & sDESCRIPTION & "</NOTES1>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <CREATED_BY>" & Worksheets("Sheet1").Cells(5, 2).Value & "</CREATED_BY>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <DATE_CREATED>" & Date & "</DATE_CREATED>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <HOUR_CREATED>" & DatePart("h", Time) & "</HOUR_CREATED>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <MIN_CREATED>" & DatePart("n", Time) & "</MIN_CREATED>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <SEC_CREATED>" & DatePart("s", Time) & "</SEC_CREATED>" & vbCrLf
    strXMLHEADER = strXMLHEADER & "     <CURRSEL_TOTALS>1</CURRSEL_TOTALS>" & vbCrLf

Sabit değerleri direk yazdım.Parametrik olan ve excel aldığım kodları ise değişken olarak stringe ekledim.

Oluşan XMlide aşağıdaki gibi bir kod yardımıyla xml dosyasına çevirebilirsiniz.
Fonksiyon xml değişkeni dosya olarak saklamamızı sağlıyor.

Private Sub CreateFile(ByVal strFullFileName As String, ByVal strXML As String)

  Dim objStream As Object
 
  Set objStream = CreateObject("ADODB.Stream")
  objStream.Open
  objStream.Position = 0
  objStream.Charset = "ISO-8859-9" '"UTF-8"
  objStream.WriteText strXMLHEADER 
  objStream.SaveToFile strFullFileName, 2
 
End Sub

Hiç yorum yok:

Yorum Gönder