| 162 | | Na potrzeby integracji sugeruje się wykorzystać język VBA. Import danych do Forte HM (na przykładzie generowania dokumentu Zamówienia Obcego przedstawiam Poniżej |
| | 162 | Na potrzeby integracji sugeruje się wykorzystać język VBA. Import danych do Forte HM (na przykładzie generowania dokumentu '''Zamówienia Obcego''' przedstawiam poniżej. |
| | 163 | 1. W systemie Forte Handel uruchamiamy z menu VBA > VBA IDE. Uruchamia się środowisko programowania VBA, w którym utworzymy skrypt integracyjny. |
| | 164 | 2. Otwieramy UserElement z lewego Panelu >> pokazuje się okno kodu VBA. |
| | 165 | 3. Wprowadzamy kod VBA skryptu: |
| | 166 | {{{ |
| | 167 | Private Sub GenerateZO() |
| | 168 | |
| | 169 | |
| | 170 | ' Deklaracje zmiennych |
| | 171 | Dim oFactory As Object |
| | 172 | Dim oRec As Object 'Rekord danych |
| | 173 | Dim nError |
| | 174 | |
| | 175 | Dim sDocumentType As String ' Typ dokumentu |
| | 176 | Dim sDesc As String ' Opis dokumentu |
| | 177 | Dim sClientCode As String 'Nazwa kontrahenta |
| | 178 | Dim sProductCode As String 'Kod produktu |
| | 179 | Dim sQuantity As String ' Ilosc |
| | 180 | Dim sPrice As String ' Cena netto |
| | 181 | |
| | 182 | Dim sPath As String ' ścieżka katalogu z plikami wyeksportowanymi z eDokumentów |
| | 183 | Dim sBkpPath As String ' ścieżka katalogu, do którego odczytane i przetworzone pliki |
| | 184 | ' zostaną przeniesione po zakończonym procesie |
| | 185 | Dim sName As String ' nazwa pliku |
| | 186 | Dim sFileName As String ' kompletna ścieżka do pliku |
| | 187 | Dim iFileNum As Integer ' znacznik pliku do operacji Input, Line Input |
| | 188 | Dim sBuf As String ' Bofor stringu odczytanego z pliku |
| | 189 | Dim iCounter As Integer ' Licznik przebiegu po liniach pliku |
| | 190 | Dim iNumber As Integer ' Licznik przebiegu po liniach pozycji produktu w pliku |
| | 191 | Dim oFileSystem As Object ' Obiekt do operacji na plikach |
| | 192 | |
| | 193 | Set oFileSystem = CreateObject("Scripting.FileSystemObject") |
| | 194 | |
| | 195 | sPath = "C:\Users\ztestowy\dane\" |
| | 196 | sBkpPath = "C:\Users\ztestowy\dane\done\" |
| | 197 | sName = Dir$(sPath & "*.txt") ' Pobranie listy plików w katalogu |
| | 198 | |
| | 199 | Do While sName <> "" ' Jeżeli/dopóki istnieją pliki w katalogu to wykonaj dalsze operacje |
| | 200 | sFileName = sPath & sName ' Ustawienie pełnej ścieżki dokumentu |
| | 201 | |
| | 202 | iFileNum = FreeFile() |
| | 203 | |
| | 204 | iCounter = 1 ' Licznik przebiegu po liniach pliku |
| | 205 | iNumber = 0 ' Licznik przebiegu po pozycjach dokumentu. |
| | 206 | ' Dopuszczalne wartości dla jednej pozycji dokumentu to 0-2 |
| | 207 | ' 0 - symbol produktu |
| | 208 | ' 1 - ilość |
| | 209 | ' 2 - cena netto |
| | 210 | Open sFileName For Input As iFileNum |
| | 211 | |
| | 212 | ' Tworzenie obiektów deklaracji danych |
| | 213 | Set oFactory = Application.PropertyAp("HFactory") |
| | 214 | Set oRec = oFactory.NewObject("BIORec") ' Rekord danych, który zostanie wstawiony do systemu |
| | 215 | |
| | 216 | sDocumentType = "ZMO" ' Typ dokumentu: Zamówienie obce |
| | 217 | nError = oRec.SetField("typDk", Trim(sDocumentType)) ' Ustawienie typu dokumentu |
| | 218 | |
| | 219 | Do While Not EOF(iFileNum) |
| | 220 | Line Input #iFileNum, sBuf |
| | 221 | |
| | 222 | Select Case iCounter |
| | 223 | Case Is = 1 ' Wywołanie identyfikatora kontrahenta |
| | 224 | |
| | 225 | sClientCode = "" & Trim(sBuf) |
| | 226 | nError = oRec.BeginSection("danekh") |
| | 227 | nError = oRec.SetField("KhKod", Trim(sClientCode)) |
| | 228 | nError = oRec.EndSection() |
| | 229 | Case Is = 2 ' Opis dokumentu |
| | 230 | sDesc = Trim(sBuf) |
| | 231 | nError = oRec.SetField("opis", Trim(sDesc)) |
| | 232 | Case Is > 2 ' Pozycje dokumentu |
| | 233 | |
| | 234 | |
| | 235 | Select Case iNumber |
| | 236 | Case Is = 0 ' Kod produktu |
| | 237 | sProductCode = Trim(sBuf) |
| | 238 | nError = oRec.BeginSection("Pozycja dokumentu") |
| | 239 | nError = oRec.SetField("kod", Trim(sProductCode)) |
| | 240 | |
| | 241 | Case Is = 1 ' Ilość |
| | 242 | sQuantity = Trim(sBuf) |
| | 243 | nError = oRec.SetField("ilosc", Trim(sQuantity)) |
| | 244 | |
| | 245 | Case Is = 2 ' Cena netto |
| | 246 | sPrice = Trim(sBuf) |
| | 247 | nError = oRec.SetField("cena", Trim(sPrice)) |
| | 248 | nError = oRec.EndSection() |
| | 249 | |
| | 250 | End Select |
| | 251 | |
| | 252 | iNumber = iNumber + 1 ' Inkrementacja licznika |
| | 253 | If iNumber > 2 Then |
| | 254 | iNumber = 0 ' Resetowanie wartości licznika |
| | 255 | End If |
| | 256 | |
| | 257 | |
| | 258 | End Select |
| | 259 | |
| | 260 | iCounter = iCounter + 1 |
| | 261 | |
| | 262 | Loop |
| | 263 | |
| | 264 | Dim oFunction As Object |
| | 265 | Set oFunction = oFactory.NewObject("BFunkcja") |
| | 266 | |
| | 267 | ' Wywołanie generowania dokumentu |
| | 268 | Dim DocumentID As Long |
| | 269 | DocumentID = oFunction.ImportZO(oRec) ' GENEROWANIE DOKUMENTU ZAMÓWIENIA OBCEGO |
| | 270 | |
| | 271 | Close iFileNum ' Zamykanie pliku |
| | 272 | |
| | 273 | oFileSystem.MoveFile sFileName, sBkpPath & sName ' Przeniesienie pliku do katalogu bkp |
| | 274 | |
| | 275 | sName = Dir() |
| | 276 | Loop |
| | 277 | |
| | 278 | End Sub |
| | 279 | |
| | 280 | }}} |
| | 281 | 4. Aby wywołać powyższy skrypt dodajemy w tym samym module metodę: |
| | 282 | {{{ |
| | 283 | Private Sub MainDoc_TryToOpen(ByVal Category As String, ByVal Group As String, Name As String, ByVal ActionType As AmOpenAction, Cancel As Boolean) |
| | 284 | 'Procedura ta wykonywana jest w momencie uruchamiania okna bądź raportu |