PDV

Topics: COM komponenta za fiskalizaciju
Mar 18, 2013 at 2:09 PM
Pozdrav,
integrirao sam uspješno komponentu u VB6 i radi OK. Jedino mi nije jasno kako da prijavim PDV, tj imam potrebu prijave dijelova računa po drugim tarifama.
Coordinator
Mar 18, 2013 at 6:02 PM
Nažalost nisam uspio pronaći da je FINA objavila neku dokumentaciju CIS web servisa.
Dali su samo WSDL i XSD shemu(XML shema FiskalizacijaService).
Od WSDL-a i sheme je generirana C# klasa FiskalizacijaService FiskalizacijaService.

To su dva mjesta gdje se može vidjet kako izgledaju objekti koji se popunjavaju za slanje i koji se vrijednosti očekuju(regex u XSD shemi).

Dio klase RacunType u kojoj se popunjava porez:
 public partial class RacunType {
        public PorezType[] Pdv;
        public PorezType[] Pnp;
        public PorezOstaloType[] OstaliPor;
        public string IznosOslobPdv;
        .......
    }
Dakle za PDV i porez na promet to je array PorezType instanci.
PorezType je definiran:
public partial class PorezType {
        public string Stopa;
        public string Osnovica;
        public string Iznos;
    }
Primjer za VB6:
' PDV 25%
Dim pdv25 As New PorezType
With pdv25
    .Stopa = "25.00"
    .Osnovica = "10.00"
    .Iznos = "2.50"
End With
Dim taxes(1) As PorezType
Set taxes(1) = pdv25
    
' Create Racun
Dim invoice As New RacunType
With invoice
    .oib = oib
    .USustPdv = True
    .IznosUkupno = "123.45"
    .DatVrijeme = cisInterop.DateFormatLong(DateTime.Now)
    .OznSlijed = OznakaSlijednostiType.OznakaSlijednostiType_N
    .NacinPlac = NacinPlacanjaType.NacinPlacanjaType_G
    .OibOper = "98642375382"
    .NakDost = False
    .BrRac = invoiceNr
    .Pdv = taxes
End With
Pozdrav
Tomislav
Mar 19, 2013 at 1:33 PM
Hvala na brzom odgovoru. To sam probao i prije ali sam "fulao" sa decimalnim "zarezom". Sada mi radi OK.

Kako sam shvatio iz odgovora, kod više tarifa bi išlo:

Dim pdv25 As New PorezType
With pdv25
.Stopa = "25.00"
.Osnovica = "10.00"
.Iznos = "2.50"
End With

Dim pdv10 As New PorezType
With pdv10
.Stopa = "10.00"
.Osnovica = "10.00"
.Iznos = "1.00"
End With

Dim taxes(2) As PorezType
Set taxes(1) = pdv25
Set taxes(2) = pdv10
...

Pozdrav
Kristian
Coordinator
Mar 19, 2013 at 7:14 PM
Upravo tako !

Porez na promet isti array samo u Pnp property.

Za ovu glupost sa stringovima za brojeve i datume mogao bi pomoć neki validator koji bi izvukao validaciju iz XSD sheme kao npr. dužina stringa ili točka za broj.
Možda u sljedećoj verziji zajedno sa generiranom dokumentacijom metoda i objekata servisa iz XSD sheme :)

Pozdrav
Tomislav
Mar 21, 2013 at 11:56 PM
Ovo radi odlično.
Još ne uspijevam obaviti prijavu poslovnog prostora:
    Dim cisInterop As New FiscalizationComInterop
    Dim pProstor As New PoslovniProstorType
    Dim pAdresa As New AdresaType
    Dim cert

    cisInterop.LogFileName = "C:\Fiskalizacija\FiskVet.log"
    Set cert = cisInterop.GetCertificateFile(MDBData.Fields(11), MDBData.Fields(12))

    With pAdresa
        .Ulica = MDBData.Fields(3)
        .KucniBroj = MDBData.Fields(4)
        .KucniBrojDodatak = MDBData.Fields(5)
        .BrojPoste = MDBData.Fields(6)
        .Naselje = MDBData.Fields(7)
        .Opcina = MDBData.Fields(8)
    End With
    Dim pAdrese(1) As AdresniPodatakType
    Set pAdrese(1) = pAdresa
    With pProstor
        .oib = MDBData.Fields(10)
        .OznPoslProstora = MDBData.Fields(0)
        .Adresa = pAdrese
        .RadnoVrijeme = MDBData.Fields(2)
        .DatumPocetkaPrimjene = cisInterop.DateFormatLong(MDBData.Fields(1))
    End With

    Dim request As PoslovniProstorZahtjev
    Set request = cisInterop.CreateLocationRequest(pProstor)
    Call cisInterop.Sign(request, (cert))
    Dim result As PoslovniProstorOdgovor
    'On Error Resume Next
    Set result = cisInterop.SendLocationRequest(request, (cert), 0, True)

Greška mi je kod adresa. Što griješim?

Pozdrav K.
Coordinator
Mar 22, 2013 at 10:17 AM
Po shemi PoslovniProstorType ima property AdresniPodatak tipa AdresniPodatakType
Mogli su to i pametnije definirat u shemi ali ovako je.
<complexType name="AdresniPodatakType">
    <choice>
      <element name="Adresa" type="tns:AdresaType">
        <annotation>
          <documentation>
            Adresa poslovnog prostora.
          </documentation>
        </annotation>
      </element>
      <element name="OstaliTipoviPP" type="tns:String100Type">
        <annotation>
          <documentation>
            Ostali tipovi poslovnog prostora.
            Predvidjen je slobodan unos za specificne slucajeve kada ne postoji adresa poslovnog prostora (internet trgovina, pokretna trgovina i sl.).
          </documentation>
        </annotation>
      </element>
    </choice>
  </complexType>
A to je generirano u objekt
    public partial class AdresniPodatakType {
        [System.Xml.Serialization.XmlElementAttribute("Adresa", typeof(AdresaType))]
        [System.Xml.Serialization.XmlElementAttribute("OstaliTipoviPP", typeof(string))]
        public object Item;
    }
To znači da u AdresniPodatakType u property Item treba upisati ili AdresaType ili string max. duljine 100 znakova(to je String100Type).
U tvom primjeru
Dim cisInterop As New FiscalizationComInterop
Dim pProstor As New PoslovniProstorType
Dim pAdresniPodatak As AdresniPodatakType
Dim pAdresa As New AdresaType
Dim cert

cisInterop.LogFileName = "C:\Fiskalizacija\FiskVet.log"
Set cert = cisInterop.GetCertificateFile(MDBData.Fields(11), MDBData.Fields(12))

With pAdresa
    .Ulica = MDBData.Fields(3)
    .KucniBroj = MDBData.Fields(4)
    .KucniBrojDodatak = MDBData.Fields(5)
    .BrojPoste = MDBData.Fields(6)
    .Naselje = MDBData.Fields(7)
    .Opcina = MDBData.Fields(8)
End With

With pAdresniPodatak
    .Item = pAdresa ' ili string "OstaliTipoviPP - Ostali tipovi poslovnog prostora"
End With

With pProstor
    .oib = MDBData.Fields(10)
    .OznPoslProstora = MDBData.Fields(0)
    .AdresniPodatak = pAdresniPodatak
    .RadnoVrijeme = MDBData.Fields(2)
    .DatumPocetkaPrimjene = cisInterop.DateFormatShort(MDBData.Fields(1))
    ' po shemi je tu kratki format datuma, kao da je dodatno vrijeme problem?! :)
End With

Dim request As PoslovniProstorZahtjev
Set request = cisInterop.CreateLocationRequest(pProstor)
Call cisInterop.Sign(request, (cert)) ' nije potrebno jer se zove u SendLocationRequest ako već nije potpisan
Dim result As PoslovniProstorOdgovor
'On Error Resume Next
Set result = cisInterop.SendLocationRequest(request, (cert), 0, True)
Pozdrav
Tomislav
Jul 14, 2013 at 8:14 PM
Pozdrav,

COM komponentu sam integrirao na web server 2003 i pokušavam je koristiti sa ASP (server side VB Script). Uspio sam srediti da radi sve, osim PDV-a.
Set pdv25=server.CreateObject("Cis.PorezType")
With pdv25
    .Stopa = "25.00"
    .Osnovica = "10.00"
    .Iznos = "2.50"
End With
dim taxes(1)
set taxes(1)=pdv25
Set invoice = server.CreateObject("Cis.RacunType")
With invoice
    .OIB = oib
    .USustPdv = True
    .IznosUkupno = "12.50"
    .DatVrijeme = cisInterop.DateFormatLong(Date)
    .OznSlijed = cisInterop.OznakaSlijednostiType_N
    .NacinPlac = cisInterop.NacinPlacanjaType_G
    .OibOper = "98642375382"
    .NakDost = False
    .BrRac = invoiceNr
    .Pdv = taxes
End With
U redu ".Pdv = taxes" dobijam ovi error:
Microsoft VBScript runtime error '800a000d'

Type mismatch: 'Pdv'

Možda koja ideja, šta radim pogrešno? Na koji način dodati PDV u VBScript-u?
Coordinator
Jul 15, 2013 at 7:14 PM
Edited Jul 15, 2013 at 7:15 PM
Izgleda da array u VBScript-u jedino postoji kao Variant array, a kao takav se ne može popuniti na type-ani array kao što je property Pdv(PorezType[]) na računu.

Rješenje :)
Budući da postoje tri tipa array koji se popunjavaju, za njih sam kreirao metode za konverziju Variant() array-a(ToPorezTypeArray, ToPorezOstaloTypeArray, ToNaknadaTypeArray).

Napravio sam novi release(FiscalizationCom v1.1.0) i update-ao dokumentaciju.

Ovako treba popuniti Pdv ili Pnp property
' Create taxes
Dim pdv25
....
Dim taxes(1)
Set taxes(0) = pdv25

' Create Racun
Dim invoice
Set invoice = CreateObject("Cis.RacunType")
With invoice
    .....
    ' Convert Variant() to PorezType[]
    .Pdv = cisInterop.ToPorezTypeArray((taxes))
End With
Nemam iskustva u VBScript-u i ne znam da li postoji neko bolje rješenje, neka implicitna konverzija između .NET i VBScript array-a.

Pozdrav
Tomislav
Coordinator
Jul 15, 2013 at 7:18 PM
This discussion has been copied to a work item. Click here to go to the work item and continue the discussion.
Jul 25, 2013 at 8:30 AM
Pozdrav,

hvala puno za rješenje i upgrade.

Bojan