Centar za edukaciju-BiH



#21 20.11.2021 15:57
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,612


Predmet:Re:XML i access 2003
Gornj primjer je za dvije tabele a ti imas 3.
evo ti tvoja funkcija zapisi prepravljena

PreuzmiIzvorni kôd (Visual Basic):
  1. Function Zapisxml()
  2. Dim Tabele(1 To 3) As String ' dimenzionisane dvije memorijske pod nazivom tabele
  3. Dim Putanja As String
  4. Dim XmlFile As String
  5. Dim Temp As String
  6.  
  7. Tabele(1) = "ZAGLAVLJE" ' ?osnovna tabela ' Upisano u memrijsku Tabele(1)  vrijednost "Zahtjev"
  8. Tabele(2) = "OBAVEZA"  ' Pridodata tabela--Upis u drugu memorijsku
  9. Tabele(3) = "DL1"  ' Pridodata tabela--Upis u drugu memorijsku
  10. Putanja = "d:\_Forum\Obrada\slike\" 'Putanja zapisa bez imena filea Upis u mem. putanja
  11. XmlFile = DMin("JIB", "Radnja") & ".xml" ' Ime xml fajla Upis u mem xmlfile
  12.  
  13.  
  14. 'export u xml fajl pod nazivom sys.dll na putanji iz memorijske putanja
  15.    Set objOtherTbls = Application.CreateAdditionalData
  16.     objOtherTbls.Add Tabele(2)
  17.     objOtherTbls.Add Tabele(3)
  18.  
  19. Application.ExportXML acExportTable, Tabele(1), Putanja & "sys.dll", , , , acUTF8, acPersistReportML, , objOtherTbls
  20.  
  21. Close #1 'Zatvori sekvencialni fajl 1
  22. Close #2 'Zatvori file 2
  23. 'Ovo se sam stavio samo zato ako dodje do greske pa pokrenes proceduru a ne dodje do kraja onda znaju ostati otvoreni fajlovi pa procedura poslije nece da radi
  24. 'Inace kada se zavrsi i istestira procedura moze se i brisati.
  25.  
  26. Open Putanja & "sys.dll" For Input As 1 ' Otvori fajl pod nazivom Sys.dll kao 1 i to za citanje
  27. Open Putanja & XmlFile For Output As 2 '' Otvori fajl pod nazivom stampatinefiskalnidokument.xm kao 2 i to za cpisanje
  28. 'Znaci imas otvorena dva fajla jedan za citanje koji je predhodno napravila procedura accessa ExportXML
  29.    While Not EOF(1) 'Pocetak while petlje koja cita file 1 tj. sys.dll
  30.    Line Input #1, Temp ' cita jedan red iz fajla i zapisuje u mem. variablu koju smo dimenzionisali pod nazivom temp
  31.        If Left(Temp, 9) = "<dataroot" Then ' ovo sam prije objasnio.
  32.        'Znaci ako se u Temp u redu slijeva nalazi zapis <dataroot> tada umjesto toga upisi dole ispod
  33.        Temp = "<PRIJAVA_1002>"
  34.         End If
  35.         If Left(Temp, 11) = "</dataroot>" Then ' ovo sam isto objasnio
  36.        Temp = "</PRIJAVA_1002>"
  37.         End If
  38.         If Left(Temp, 35) = "<POSLODAVAC_KTI>0</POSLODAVAC_KTI>" Then
  39.         Temp = "<POSLODAVAC_KTI/>"
  40.         End If
  41.         If Left(Temp, 35) = "<POSLODAVAC_KTI>1</POSLODAVAC_KTI>" Then
  42.         End If
  43.         If Left(Temp, 80) = "<NACIN_OBAVLJANJA_SDJELATNOSTI>0</NACIN_OBAVLJANJA_SDJELATNOSTI>" Then
  44.         Temp = "<NACIN_OBAVLJANJA_SDJELATNOSTI/>"
  45.         End If
  46.         If Left(Temp, 35) = "<PO_NALOGU_INSPEKTORA>0</PO_NALOGU_INSPEKTORA>" Then
  47.         Temp = "<PO_NALOGU_INSPEKTORA/>"
  48.         End If
  49.     Print #2, Temp ' zapisi vrijednost temp u file 2
  50.    Wend ' Kraj petlje
  51. Close #1 ' zatvori fajl 1
  52. Close #2 'Zatvori fajl 2
  53. End Function

Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#22 20.11.2021 19:38
Branestan Van mreze
Clan
Registrovan od:07.05.2012
Postovi:114


Predmet:Re:XML i access 2003
Radi.

Dodao sam i četvrtu tabelu, prebacuje podatke i iz nje.

Nisam na početku taj dio testirao, a čini mi se da bi sada mogao biti problem. Naime, u tabeli zaglavlje će uvijek biti jedan red podataka dok će u ostalim tabelama biti viÅ¡e redova.

Trenutno mi tabelu obaveza prebaci ovako:
<OBAVEZA>
<STAVKA>0</STAVKA>
<VRSTA_PRIHODA>712113</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>138.75</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
<STAVKA1>0</STAVKA1>
</OBAVEZA>
<OBAVEZA>
<STAVKA>0</STAVKA>
<VRSTA_PRIHODA>712199</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>100</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>103</SIFRA_OPSTINE>
<STAVKA1>0</STAVKA1>
</OBAVEZA>

a treba:

<OBAVEZA>
<STAVKA>0</STAVKA>
<VRSTA_PRIHODA>712113</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>138.75</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
<STAVKA1>0</STAVKA1>
<STAVKA>0</STAVKA>
<VRSTA_PRIHODA>712199</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>100</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>103</SIFRA_OPSTINE>
<STAVKA1>0</STAVKA1>
</OBAVEZA>

Znači, da <OBAVEZA> bude na početku i </OBAVEZA> na kraju, da se ne ponavlja onoliko puta koliko ima redova u tabeli.

Ima li načina da se ovo rijeÅ¡i kroz funkciju ili moram mijenjati cijeli koncept?

Prilozi:
Informacije o tipu datoteke za:rar  POS_2.rar
Preuzimanja:18
Velicina datoteke:29.99 KB

↑  ↓

#23 20.11.2021 22:15
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,612


Predmet:Re:XML i access 2003
to mozes rijsiti preko if-ova.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#24 21.11.2021 09:55
Branestan Van mreze
Clan
Registrovan od:07.05.2012
Postovi:114


Predmet:Re:XML i access 2003
Da, još samo kad bih uspio napisati uslov.

Znači, treba da uzmemo samo slučajeve gdje je u jednom redu </OBAVEZA>, a u sledećem redu <OBAVEZA>

</OBAVEZA>
<OBAVEZA>

Pokušao sam šta sam znao...
↑  ↓

#25 22.11.2021 00:11
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,612


Predmet:Re:XML i access 2003
PreuzmiIzvorni kôd (Visual Basic):
  1. Function Zapisxml()
  2. Dim Tabele(0 To 4) As String ' dimenzionisane 4 memorijske pod nazivom tabele
  3. Dim Putanja As String
  4. Dim XmlFile As String
  5. Dim Temp As String
  6.  
  7. Tabele(1) = "ZAGLAVLJE" ' ?osnovna tabela ' Upisano u memrijsku Tabele(1)  vrijednost "Zahtjev"
  8. Tabele(2) = "OBAVEZA"  ' Pridodata tabela--Upis u drugu memorijsku
  9. Tabele(3) = "DL1"  ' Pridodata tabela--Upis u drugu memorijsku
  10. Tabele(4) = "DL2"  ' Pridodata tabela--Upis u drugu memorijsku
  11. Putanja = "d:\" 'Putanja zapisa bez imena filea Upis u mem. putanja
  12. XmlFile = DMin("JIB", "Radnja") & ".xml" ' Ime xml fajla Upis u mem xmlfile
  13.  
  14. 'export u xml fajl pod nazivom sys.dll na putanji iz memorijske putanja
  15.    Set objOtherTbls = Application.CreateAdditionalData
  16.     objOtherTbls.Add Tabele(2)
  17.     objOtherTbls.Add Tabele(3)
  18.     objOtherTbls.Add Tabele(4)
  19.  
  20. Application.ExportXML acExportTable, Tabele(1), Putanja & "sys.dll", , , , acUTF8, acPersistReportML, , objOtherTbls
  21.  
  22. Close #1 'Zatvori sekvencialni fajl 1
  23. Close #2 'Zatvori file 2
  24. 'Ovo se sam stavio samo zato ako dodje do greske pa pokrenes proceduru a ne dodje do kraja onda znaju ostati otvoreni fajlovi pa procedura poslije nece da radi
  25. 'Inace kada se zavrsi i istestira procedura moze se i brisati.
  26.  
  27. Open Putanja & "sys.dll" For Input As 1 ' Otvori fajl pod nazivom Sys.dll kao 1 i to za citanje
  28. Open Putanja & XmlFile For Output As 2 '' Otvori fajl pod nazivom stampatinefiskalnidokument.xm kao 2 i to za cpisanje
  29. 'Znaci imas otvorena dva fajla jedan za citanje koji je predhodno napravila procedura accessa ExportXML
  30.    While Not EOF(1) 'Pocetak while petlje koja cita file 1 tj. sys.dll
  31. START:
  32.     Line Input #1, Temp ' cita jedan red iz fajla i zapisuje u mem. variablu koju smo dimenzionisali pod nazivom temp
  33.        If Left(Temp, 9) = "<dataroot" Then ' ovo sam prije objasnio.
  34.        'Znaci ako se u Temp u redu slijeva nalazi zapis <dataroot> tada umjesto toga upisi dole ispod
  35.        Temp = "<PRIJAVA_1002>"
  36.         End If
  37.         If Left(Temp, 11) = "</dataroot>" Then ' ovo sam isto objasnio
  38.        Temp = "</PRIJAVA_1002>"
  39.         End If
  40.         If Left(Temp, 35) = "<POSLODAVAC_KTI>0</POSLODAVAC_KTI>" Then
  41.         Temp = "<POSLODAVAC_KTI/>"
  42.         End If
  43.         If Left(Temp, 35) = "<POSLODAVAC_KTI>1</POSLODAVAC_KTI>" Then
  44.         End If
  45.         If Left(Temp, 80) = "<NACIN_OBAVLJANJA_SDJELATNOSTI>0</NACIN_OBAVLJANJA_SDJELATNOSTI>" Then
  46.         Temp = "<NACIN_OBAVLJANJA_SDJELATNOSTI/>"
  47.         End If
  48.         If Left(Temp, 80) = "<PO_NALOGU_INSPEKTORA>0</PO_NALOGU_INSPEKTORA>" Then
  49.         Temp = "<PO_NALOGU_INSPEKTORA/>"
  50.         End If
  51. '--------------------------------------------------------------------------------
  52. Dim tmp As String
  53. '--------------------------------------------------------------------------------
  54.        If InStr(tmp, Mid(Temp, 2)) > 0 Then
  55.         Line Input #1, Temp
  56.         tmp = Temp
  57.         GoTo START
  58.         End If
  59.  
  60. '----------------------------------------------------------------------------------
  61.        Print #2, tmp ' zapisi vrijednost temp u file 2
  62.        tmp = Temp
  63. '---------------------------------------------------------------------------------
  64.    Wend ' Kraj petlje
  65. Close #1 ' zatvori fajl 1
  66. Close #2 'Zatvori fajl 2
  67. End Function

Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#26 22.11.2021 09:10
Branestan Van mreze
Clan
Registrovan od:07.05.2012
Postovi:114


Predmet:Re:XML i access 2003
Odlično radi, puno hvala!

Pregledao sam na internetu Å¡ta znače ove funkcije InStr i Mid, malo mi je jasnije ali moram detaljnije proučiti da bi ih mogao samostalno koristiti.

Pozdrav!
↑  ↓

#27 22.11.2021 14:30
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,612


Predmet:Re:XML i access 2003
evo ti ovdje imas objasnjenja.
Instr
https://icentar.ba/...&id=25532
MID
https://icentar.ba/...&id=10250
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
Ovaj post je ureden 1 puta. Posljednja izmjena 22.11.2021 14:31 od strane zxz. ↑  ↓

#28 22.11.2021 17:11
Branestan Van mreze
Clan
Registrovan od:07.05.2012
Postovi:114


Predmet:Re:XML i access 2003
Ni ova objaÅ¡njenja mi nisu pomogla, držaću se ja tabela i upita, tu se i nekako snalazim...

Ubacio sam If koji pretvara <STAVKA1>1<STAVKA1> u </STAVKA>

Ovo uredno odradi u cijelom fajlu (svaki red podataka iz tabele završava ovim tekstom).

Međutim, imam dio <STAVKA>1<STAVKA> koji treba da promijeni u <STAVKA> ali to uradi samo na početku tabele, a svi naredni ostanu neizmijenjeni (svaki red podataka iz tabele počinje ovim tekstom).

Ovo nikako ne shvatam, sve je isto kao za stavku1 ali neće da odradi. Mijenjao sam i naziv ali ne ide

Ako može pomoć joÅ¡ ovdje, pa sam zavrÅ¡io.

Prilozi:
Informacije o tipu datoteke za:rar  POS_3.rar
Preuzimanja:16
Velicina datoteke:32.18 KB

↑  ↓

#29 22.11.2021 17:58
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,612


Predmet:Re:XML i access 2003
PreuzmiIzvorni kôd (Visual Basic):
  1.         If InStr(Temp, "<STVKA>1") > 0 Then
  2.         Temp = "<STAVKA>"
  3.         End If
  4.         If InStr(Temp, "</STVKA>1") > 0 Then
  5.         Temp = "</STAVKA>"
  6.         End If
  7.         Print #2, tmp ' zapisi vrijednost temp u file 2
  8.        tmp = Temp
  9. '---------------------------------------------------------------------------------
  10.    Wend ' Kraj petlje

za ovoe dvije naredbe mozes otvoriti temu pa postavljati pitanje jedno po jedno sta nie jasno.
netreba nejasnoce preskakati
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#30 22.11.2021 18:58
Branestan Van mreze
Clan
Registrovan od:07.05.2012
Postovi:114


Predmet:Re:XML i access 2003
Ista stvar, promijeni prvi tekst sve poslije toga ostane nepromijenjeno.

Tamo gdje počinje tabela OBAVEZA prvi tekst je izmijenio, isto tako gdje počinje tabela DL1, ako ima viÅ¡e stavki u istoj tabeli njih ne izmijeni

Evo kako izgleda:

<?xml version="1.0" encoding="UTF-8"?>
<PRIJAVA_1002>
<ZAGLAVLJE>
<VRSTA_PRIJAVE>MPO1</VRSTA_PRIJAVE>
<TIP_PRIJAVE>O</TIP_PRIJAVE>
<JIB>4403425160003</JIB>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
<PORESKI_PERIOD_OD>1.10.2021</PORESKI_PERIOD_OD>
<PORESKI_PERIOD_DO>31.10.2021</PORESKI_PERIOD_DO>
<ISPLATNI_PERIOD_OD>1.10.2021</ISPLATNI_PERIOD_OD>
<ISPLATNI_PERIOD_DO>31.10.2021</ISPLATNI_PERIOD_DO>
<POSLODAVAC_KTI/>
<NAMJENA_PRIJAVE>2</NAMJENA_PRIJAVE>
<ISPLATA_PRIMANJA>1</ISPLATA_PRIMANJA>
<NACIN_OBAVLJANJA_SDJELATNOSTI/>
<PO_NALOGU_INSPEKTORA>1</PO_NALOGU_INSPEKTORA>
</ZAGLAVLJE>
<OBAVEZA>
<STAVKA>
<VRSTA_PRIHODA>712129</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>2387.99</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
</STAVKA>
<GRUPA1>1</GRUPA1>
<VRSTA_PRIHODA>712149</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>0</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
</STAVKA>
<GRUPA1>1</GRUPA1>
<VRSTA_PRIHODA>712199</VRSTA_PRIHODA>
<IZNOS_OBAVEZE>10912.54</IZNOS_OBAVEZE>
<SIFRA_OPSTINE>028</SIFRA_OPSTINE>
</STAVKA>
</OBAVEZA>
<DL1>
<STAVKA>
<IME_PREZIME>AAAA AAAA</IME_PREZIME>
<JMBG>1809974128123</JMBG>

Treba da izmijeni ovo <GRUPA1>1</GRUPA1> tako da bude <STAVKA>
Ovaj post je ureden 1 puta. Posljednja izmjena 22.11.2021 19:01 od strane Branestan. ↑  ↓

Stranice (4):1,2,3,4


Sva vremena su GMT +02:00. Trenutno vrijeme: 10: 29 am.