Π?ΠΌΠΏΠΎΡΡ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΎΠΉ Π²ΡΠΏΠΈΡΠΊΠΈ
(ββParseOneStatement) |
(ββFindAccount) |
||
| Π‘ΡΡΠΎΠΊΠ° 123: | Π‘ΡΡΠΎΠΊΠ° 123: | ||
End If | End If | ||
| + | End Function | ||
| + | |||
| + | === FindBank === | ||
| + | |||
| + | Function FindBank(BankCode) | ||
| + | Dim Creator, q | ||
| + | Set Creator = new TCreator | ||
| + | Set q = Creator.GetObject(Application, "TIBSQL", "") | ||
| + | q.Transaction = gdcBaseManager.ReadTransaction | ||
| + | q.SQL.Text = "SELECT bankkey FROM gd_bank WHERE bankcode = :BC" | ||
| + | q.ParamByName("BC").AsString = BankCode | ||
| + | q.ExecQuery | ||
| + | If q.EOF Then | ||
| + | Dim ObjB | ||
| + | Set ObjB = Creator.GetObject(Application, "TgdcBank", "") | ||
| + | ObjB.Open | ||
| + | ObjB.Insert | ||
| + | ObjB.FieldByName("name").AsString = BankCode | ||
| + | ObjB.FieldByName("bankcode").AsString = BankCode | ||
| + | ObjB.Post | ||
| + | FindBank = ObjB.ID | ||
| + | Else | ||
| + | FindBank = q.Fields(0).AsInteger | ||
| + | End If | ||
End Function | End Function | ||
ΠΠ΅ΡΡΠΈΡ 23:39, 25 ΡΠ΅Π²ΡΠ°Π»Ρ 2007
ΠΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠΏΠΎΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ²Π³ΠΎ ΡΠ°ΠΉΠ»Π° Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΠ΅Π΄ΡΠΌΠΈΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ°, ΡΠ°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ°Π·ΡΠ° ΡΠ°ΠΉΠ»Π° Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΡΡ Π²ΡΠΏΠΈΡΠΊΡ ΠΠ΅Π»Π°Π³ΡΠΎΠΏΡΠΎΠΌΠ±Π°Π½ΠΊΠ°. ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° -- ΡΡΠΎ Π²ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΠΌ ΡΡΠ΅ΡΠ°ΠΌ. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ParseFile, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ» Ρ Π΄ΠΈΡΠΊΠ° Π² ΡΡΡΠΎΠΊΡ, ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΠΠ‘ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠ°Π·Π±ΠΎΡΠ° Π²ΡΠΏΠΈΡΠΊΠΈ ParseStatement:
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ |
ParseFile
Sub ParseFile
Const ForReading = 1
Dim s
s = System.OEMToAnsi(CreateObject("Scripting.FileSystemObject")._
OpenTextFile("c:\temp\vyp.txt", ForReading).ReadAll)
ParseStatement s
End Sub
ΠΠ°Π΄Π°ΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ParseStatement -- ΡΠ°Π·Π±ΠΈΡΡ ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠ΅ Π²ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ParseOneStatement, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π΅ΠΉ Π½Π° Π²Ρ ΠΎΠ΄ ΡΡΠ΅Ρ, Π΄Π°ΡΡ Π²ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π΅Π΅ ΡΠ΅ΠΊΡΡ:
ParseStatement
Sub ParseStatement(s)
Dim regEx, Matches, I, J
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "ΠΠΈΡΠ΅Π²ΠΎΠΉ\s+ΠΏΠΎ\s+ΡΡΠ΅ΡΡ\s+N\s+(\d{4})-(\d{9}).+Π·Π°\D+(\d{1,2})\.(\d{1,2})\.(\d{1,4})"
Set Matches = regEx.Execute(s)
For I = 1 To Matches.Count
If I = Matches.Count Then
J = Len(s)
Else
J = Matches(I).FirstIndex
End If
ParseOneStatement Matches(I - 1).SubMatches(0) & Matches(I - 1).SubMatches(1), _
DateSerial(Matches(I - 1).SubMatches(4), Matches(I - 1).SubMatches(3), Matches(I - 1).SubMatches(2)), _
Mid(s, Matches(I - 1).FirstIndex, J - Matches(I - 1).FirstIndex)
Next
End Sub
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΠΌ Π²ΡΠΏΠΈΡΠΊΠΈ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ. ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠΎΠΊΡ "ΠΠΈΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅Ρ". ΠΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΡΠ° ΠΈ Π΄Π°ΡΡ Π²ΡΠΏΠΈΡΠΊΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ΅Ρ ΠΌΡ "ΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅ΠΌ" ΠΈΠ· Π΄Π²ΡΡ ΡΠ°ΡΡΠ΅ΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ -- Π΄Π΅ΡΠΈΡ. ΠΠ°ΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΏΠΎ-ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ: Π΄Π΅Π½Ρ, ΠΌΠ΅ΡΡΡ ΠΈ Π³ΠΎΠ΄, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ ΠΈΡ ΠΏΠΎΡΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ DateSerial.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΡΠΏΠΈΡΠΊΠΈ, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ΅ΡΠ°, Π΄Π°ΡΡ Π²ΡΠΏΠΈΡΠΊΠΈ ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΅Π΅ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π½Π° Π²Ρ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ParseOneStatement.
ParseOneStatement
Sub ParseOneStatement(acc, dt, s)
Dim regEx, Match, Matches, I
Set regEx = CreateObject("VBScript.RegExp")
regEx.IgnoreCase = True
regEx.Global = True
regEx.MultiLine = True
regEx.Pattern = "ΠΠΎΠ΄ Π±Π°Π½ΠΊΠ° \d{6}(\d{3})"
Set Matches = regEx.Execute(s)
Dim AccID
AccID = FindAccount(acc, Matches(0).SubMatches(0))
regEx.Pattern = "^\s+(\d{1,2}) (\d{3}) (\d{4})-(\d{9})\s+(\d+).{6}\s+([0-9 .]+)"
Set Matches = regEx.Execute(s)
If Matches.Count > 0 Then
Dim Creator, ObjV, ObjL
Set Creator = new TCreator
Set ObjV = Creator.GetObject(Application, "TgdcBankStatement", "")
Set ObjL = Creator.GetObject(Application, "TgdcBankStatementLine", "")
ObjV.Open
ObjV.Insert
ObjV.FieldByName("accountkey").AsInteger = AccID
ObjV.FieldByName("documentdate").AsDateTime = dt
ObjV.Post
ObjL.Open
For Each Match In Matches
ObjL.Insert
ObjL.FieldByName("operationtype").AsString = Match.SubMatches(0)
ObjL.FieldByName("account").AsString = Match.SubMatches(2) & Match.SubMatches(3)
ObjL.FieldByName("bankcode").AsString = Match.SubMatches(1)
ObjL.FieldByName("number").AsString = Match.subMatches(4)
ObjL.FieldByName("documentdate").AsDateTime = dt
If Len(Match.Value) < 55 Then
ObjL.FieldByName("dsumncu").AsCurrency = Replace(Match.subMatches(5), " ", "")
Else
ObjL.FieldByName("csumncu").AsCurrency = Replace(Match.subMatches(5), " ", "")
End If
ObjL.FieldByName("parent").AsInteger = ObjV.ID
ObjL.Post
Next
End If
End Sub
FindAccount
Function FindAccount(Acc, BankCode)
Dim BankID
BankID = FindBank(BankCode)
Dim Creator, q
Set Creator = new TCreator
Set q = Creator.GetObject(Application, "TIBSQL", "")
q.Transaction = gdcBaseManager.ReadTransaction
q.SQL.Text = "SELECT a.id FROM gd_companyaccount a JOIN gd_bank b " &_
"ON b.bankkey = a.bankkey AND b.bankcode = :BC AND a.account = :ACC "
q.ParamByName("BC").AsString = BankCode
q.ParamByName("Acc").AsString = Acc
q.ExecQuery
If q.EOF Then
Dim ObjA
Set ObjA = Creator.GetObject(Application, "TgdcAccount", "")
ObjA.Open
ObjA.Insert
ObjA.FieldByName("account").AsString = Acc
ObjA.FieldByName("companykey").AsInteger = IBLogin.CompanyKey
ObjA.FieldByName("bankkey").AsInteger = BankID
ObjA.Post
FindAccount = ObjA.ID
Else
FindAccount = q.Fields(0).AsInteger
End If
End Function
FindBank
Function FindBank(BankCode)
Dim Creator, q
Set Creator = new TCreator
Set q = Creator.GetObject(Application, "TIBSQL", "")
q.Transaction = gdcBaseManager.ReadTransaction
q.SQL.Text = "SELECT bankkey FROM gd_bank WHERE bankcode = :BC"
q.ParamByName("BC").AsString = BankCode
q.ExecQuery
If q.EOF Then
Dim ObjB
Set ObjB = Creator.GetObject(Application, "TgdcBank", "")
ObjB.Open
ObjB.Insert
ObjB.FieldByName("name").AsString = BankCode
ObjB.FieldByName("bankcode").AsString = BankCode
ObjB.Post
FindBank = ObjB.ID
Else
FindBank = q.Fields(0).AsInteger
End If
End Function