mojaSymfonia FORUM
https://forum.mix-soft.pl/

Raport export XML - format e-Faktury
https://forum.mix-soft.pl/viewtopic.php?f=15&t=7521
Strona 1 z 1

Autor:  borgrapid [ 2016-11-06, 22:07 ]
Tytuł:  Raport export XML - format e-Faktury

Witam serdecznie,

Chciałbym aby użytkownik na dokumencie sprzedaży kliknął prawy klawisz myszy i wybrał ten raport, który wyeksportowałby fakturę do pliku xml.
Dodałem nowy raport do Katalogu "Raporty z menu" oraz przekopiowałem kod oryginalnego raportu.
Raport pojawia się w menu kontekstowym ale nic nie robi, czy ktoś mógłby pokierować mnie jak odpalić taki raport i kodzie raportu ustawić na stałe nazwę pliku do jakiego ma się eksportować faktura?

Męczę się z tym już kilka dni i nic mi nie wychodzi, będę wdzięczny za wszelkie wskazówki.

Autor:  rafal [ 2016-11-07, 07:45 ]
Tytuł:  Re: Raport export XML - format e-Faktury

Pokaż co zrobiłeś do tej pory.

Autor:  borgrapid [ 2016-11-08, 19:16 ]
Tytuł:  Re: Raport export XML - format e-Faktury

To jest oryginalny raport z Symfonii (oraz parę linijek mojego kodu), który dostępny jest na dokumentach sprzedaży w menu operacje->eksport danych->export XML
Kod:
//"EXPeInv1.sci","Eksport e-Faktury - include I",12006,0,1.0.0,SYSTEM
//"Eksport - include",12005,14,16
/////////////////////////////////////////
// "Eksport e-Faktury - include I"
// EXPeInv1.sci
/////////////////////////////////////////


Limit 32767

#define DOCUMENT_STATUS         IIF( Arg0 == "" || Arg0 == "0", "Oryginał", "Duplikat" )
#define DOCUMENT_STATUS2      IIF( Arg0 == "" || Arg0 == "0", "Faktura", "Duplikat faktury" )
#define KOREKTA_STATUS         IIF( Arg0 == "" || Arg0 == "0", "Korekta faktury",  "Duplikat korekty" )

#define   NOT_FOUND_ID         -1
#define   NOT_FOUND_TEXT         ""
#define   NOT_FOUND_VALUE         0.00

#define DOKUMENT_ANULOWANY      0
#define PARAGON_ANULOWANY      3

#define   YES                  "Tak"
#define   NO                  "Nie"

#define   VAT_MULTIPLICATION      "Iloczynowe"   // Iloczynowe liczenie VATu
#define   VAT_SUM               "Sumacyjne"      // Sumacyjne liczenie VATu

#define VAT_SUM_FLAG         0x8000         // Flaga sumacyjnego liczenia VATu
#define   SET_POSITION_FLAG      0x4000         // Flaga pozycji kompletu

#define METODA_KASOWA_FLAGA      0x0080
                                    // Metody rozliczania podatku VAT
#define METODA_KASOWA         "Kasowa"
#define METODA_MEMORIALOWA      "Memoriałowa"

#define   MAX_LEN               100            // Podzial dlugiej nazwy


// Wydajnosc !!!
// Stawka VAT szukana wielokrotnie po numerze spoza klucza / indeksu
Long   lVAT_LastNo = NOT_FOUND_ID            // Numer ostatnio szukanej stawki VAT
Long   lVAT_LastIndex = NOT_FOUND_ID         // Kolejnosc prezentowania ostatnio szukanej stawki VAT
String   sVAT_LastCode = NOT_FOUND_TEXT         // Kod ostatnio szukanej stawki VAT
Float   fVAT_LastValue = NOT_FOUND_VALUE      // Wartosc ostatnio szukanej stawki VAT

BaseDK   BasDK
BaseDP   BasDP
BaseDP   BasDP_Set
BaseKH   BasKH
BaseNT   BasNT
BaseTW   BasTW
BaseXT   BasXT
BaseXT   BasXT_VAT

Int      iExported = 1                     // e-Faktura zostala poprawnie wyeksportowana

                                    // Sumowanie wartosci netto i VAT na podstawie numeru stawki VAT
                                    // ( zminimalizowanie dostepow do bazy danych )
MapValue   SumaNetto                     // Sumy kwot netto wg numeru stawki VAT
MapValue   SumaVAT                        // Sumy kwot VAT wg numeru stawki VAT
SumaNetto.Type( Float )
SumaVAT.Type( Float )
SumaNetto.Clear()
SumaVAT.Clear()

                                    // Sortowanie stawek VAT identyczne jak na podgladzie dokumentu
                                    // Przejsciowki : kolejnosc <-> numer + kod
MapValue   SumaNumer                     // Numery stawek VAT
MapValue   SumaKod                        // Kody stawek VAT
SumaNumer.Type( String )
SumaKod.Type( String )
SumaNumer.Clear()
SumaKod.Clear()

//----------------------------------------------------------------------------------------------------
// Informacja o bledzie
//----------------------------------------------------------------------------------------------------

Int Sub ERROR_STAMP( String sInfo )

   Eksport.Pole( "Blad" , sInfo )
   iExported = 0

EndSub

//----------------------------------------------------------------------------------------------------
// Ostrzezenie
//----------------------------------------------------------------------------------------------------

Int Sub WARNING_STAMP( String sInfo )

   Eksport.Pole( "Ostrzezenie" , sInfo )

EndSub

//----------------------------------------------------------------------------------------------------
// Sekcja ze numerem wersji e-Faktury
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaWERSJA()

   Eksport.PoczatekSekcji( "e-Faktura", 103 )
   Eksport.Pole( "Wersja", "1.03" )
   Eksport.KoniecSekcji()

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja z danymi wystawcy / odbiorcy faktury
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaWYSTAWCAODBIORCA( Long lIdKontrahenta, Long lIdRejestruPlatnosci )

   Int      iWystawca = ( lIdkontrahenta == 1 )

   Int      iError
   Int      iErrorBank = 0
   String   sInfo = IIF( iWystawca, "wystawcy", "odbiorcy" )
   String   sNIP = ""
   String   sNumerRachunkuBankowego = ""
   String   sSekcja = IIF( iWystawca, "Wystawca", "Odbiorca" )
   String   sVATUE = ""

   // Konto bankowe wystawcy z rejestru platnosci
   If iWystawca Then
      BasKH.SetKey( "id" )
      BasKH.SetKeySeg( "id", lIdRejestruPlatnosci )
      iErrorBank = BasKH.GetRec( EQ )
      If !iErrorBank Then
         sNumerRachunkuBankowego = BasKH.GetField( "bkonto" )
      EndIf
   Endif

   // Wystawca / Odbiorca
   BasKH.SetKey( "id" )
   BasKH.SetKeySeg( "id", lIdKontrahenta )
   iError = BasKH.GetRec( EQ )

   // NIP / VAT-UE
   If !iError Then
      If iWystawca Then
         // Wystawca
         sNIP = BasKH.GetField( "nazwisko" )
         sVATUE = BasKH.GetField( "typks" )
      Else
         // Odbiorca
         If BasKH.GetField( "statusUE" ) Then
            sVATUE = BasKH.GetField( "nip" )
         Else
            sNIP = BasKH.GetField( "nip" )
         EndIf
      EndIf
   EndIf

   Eksport.PoczatekPodsekcji( sSekcja )
      If iError Then
         If iWystawca Then
            ERROR_STAMP( Using "Nie można odczytać danych %s", sInfo )
         Else
            WARNING_STAMP( Using "Nie można odczytać danych %s", sInfo )
         EndIf
      Else
         Eksport.Pole( "GUID", BasKH.GetField( "guid" ) )
         Eksport.Pole( "Kod", BasKH.GetField( "kod" ) )
         Eksport.Pole( "Nazwa", BasKH.GetField( "nazwa" ) )
         Eksport.Pole( "Ulica", BasKH.GetField( "ulica" ) )
         Eksport.Pole( "NumerDomu", BasKH.GetField( "dom" ) )
         Eksport.Pole( "NumerLokalu", BasKH.GetField( "lokal" ) )
         Eksport.Pole( "KodPocztowy", BasKH.GetField( "kodpocz" ) )
         Eksport.Pole( "Miejscowosc", BasKH.GetField( "miejscowosc" ) )
         Eksport.Pole( "Wojewodztwo", BasKH.GetField( "rejon" ) )
         If iWystawca Then
            Eksport.Pole( "Kraj", "" )
         Else
            BasXT.SetKey( "id" )
            BasXT.SetKeySeg( "id", BasKH.GetField( "idKraju" ) )
            If BasXT.GetRec( EQ ) Then
               ERROR_STAMP( Using "Nie można odczytać informacji o kraju %s", sInfo )
            Else
               Eksport.Pole( "Kraj", BasXT.GetField( "kod" ) )
            EndIf
         EndIf
         Eksport.Pole( "ILN", BasKH.GetField( "poledod1" ) )
         Eksport.Pole( "NIP", sNIP )
         Eksport.Pole( "REGON", BasKH.GetField( "regon" ) )
         Eksport.Pole( "PESEL", BasKH.GetField( "pesel" ) )
         Eksport.Pole( "VIES", IIF( BasKH.GetField( "statusUE" ), YES, NO ) )
         Eksport.Pole( "VATUE", sVATUE )
         If iErrorBank Then
            ERROR_STAMP( Using "Nie można odczytać informacji o numerze rachunku bankowego %s", sInfo )
         Else
            Eksport.Pole( "NumerRachunkuBankowego", sNumerRachunkuBankowego )
         EndIf
         Eksport.Pole( "Telefon1", BasKH.GetField( "tel1" ) )
         Eksport.Pole( "Telefon2", BasKH.GetField( "tel2" ) )
         Eksport.Pole( "Fax", BasKH.GetField( "fax" ) )
         Eksport.Pole( "Email", BasKH.GetField( "email" ) )
      EndIf
   Eksport.KoniecSekcji()

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja definicji waluty
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaWALUTA( String sKodWaluty )

   If sKodWaluty != "" Then
      Eksport.PoczatekPodSekcji( "Waluta" )
         BasXT.SetKey( "super" )
         BasXT.SetKeySeg( "super", 5100 )
         BasXT.SetKeySeg( "kod", sKodWaluty )
         If BasXT.GetRec( EQ ) Then
            ERROR_STAMP( Using "Nie można odczytać informacji o walucie '%s'", sKodWaluty )
         Else
            Eksport.Pole( "Kod", sKodWaluty )
            Eksport.Pole( "Nazwa", BasXT.GetField( "nazwa" ) )
            Eksport.Pole( "Przelicznik", ( Using "%l", BasXT.GetField( "long" ) ) )
         EndIf
      Eksport.KoniecSekcji()
   EndIf

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja definicji stawki VAT
// Dodatkowo zwraca na zmiennej globalnej kolejnosc prezentowania stawki VAT ( XT:long ) oraz wartosc ( XT:wartosc )
//----------------------------------------------------------------------------------------------------

String Sub eFakturaSTAWKAVAT( Long lNrStawkiVAT )

   Int      iError
   String   sKodStawkiVAT

   if( lNrStawkiVAT == lVAT_LastNo ) then
      // Identyczna jak ostatnio szukana
      sKodStawkiVAT = sVAT_LastCode
   Else
      // Rozna od ostatnio szukanej
      BasXT_VAT.SetKey( "super" )
      BasXT_VAT.SetKeySeg( "super", 10000 )
      iError = BasXT_VAT.GetRec( GE )
      While !iError && BasXT_VAT.GetKeySeg( "super" ) == 10000
         If BasXT_VAT.GetField( "subtypi" ) == lNrStawkiVAT Then
            Exit
         EndIf         
         iError = BasXT_VAT.GetRec( NX )
      Wend

      If iError || BasXT_VAT.GetKeySeg( "super" ) != 10000 || BasXT_VAT.GetField( "subtypi" ) != lNrStawkiVAT Then
         sKodStawkiVAT = NOT_FOUND_TEXT
      Else
         sKodStawkiVAT = BasXT_VAT.GetField( "kod" )
      EndIf
   
      // Zapamietaj ostatnio szukana stawke VAT
      lVAT_LastNo = lNrStawkiVAT
      lVAT_LastIndex = IIF( sKodStawkiVAT == NOT_FOUND_TEXT, NOT_FOUND_ID, BasXT_VAT.GetField( "long" ) )
      sVAT_LastCode = sKodStawkiVAT
      fVAT_LastValue = IIF( sKodStawkiVAT == NOT_FOUND_TEXT, NOT_FOUND_VALUE, BasXT_VAT.GetField( "wartosc" ) )

   EndIf

   eFakturaSTAWKAVAT = sKodStawkiVAT

EndSub

//----------------------------------------------------------------------------------------------------
// Wycina znak formatujacy w kodzie stawek VAT poniżej 10%
//----------------------------------------------------------------------------------------------------

String Sub LTRIM_VAT( String sKodStawkiVAT )

   buf = sKodStawkiVAT
   Delete Regular "^%A0"
   LTRIM_VAT = buf
   
EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja opisu z nazwa krotka lub dluga
// Priorytetowa jest dluga nazwa dzielona na wiersze o dlugosci MAX_LEN.
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaNAZWA( String sSekcja, String sNazwa, Long lIdDlugiejNazwy )

   Int      iError
   Int      iOldPos
   String   sOldBuf
   String   sOpis

   If lIdDlugiejNazwy != 0 Then
      // Dluga nazwa
      BasNT.SetKey( "id" )
      BasNT.SetKeySeg( "id", lIdDlugiejNazwy )
      iError = BasNT.GetRec( EQ )
      if( iError ) Then
         Eksport.PoczatekPodsekcji( sSekcja )
            ERROR_STAMP( Using "Nie można odczytać nazwy" )
         Eksport.KoniecSekcji()   
      Else
         // Zapamietaj zawartosc zmiennej buf
         iOldPos = Move 0
         sOldBuf = buf
            
         buf = BasNT.GetField( "opis" )
         Do
            sOpis = Mid( buf, 1, MAX_LEN )
            Eksport.PoczatekPodsekcji( sSekcja )
               Eksport.Pole( "Opis", sOpis )
            Eksport.KoniecSekcji()   
            Delete sOpis
         Loop While Len( buf ) > 0
            
         // Odtworz zawartosc zmiennej buf
         buf = sOldBuf
         Move To iOldPos
      EndIf
   Else
      // Nazwa krotka
      Eksport.PoczatekPodsekcji( sSekcja )
         Eksport.Pole( "Opis", sNazwa )
      Eksport.KoniecSekcji()   
   EndIf

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja definicji towaru
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaTOWAR( Long lIdTowaru, String sKodTowaru, String sNazwaTowaru, Long lIdDlugiejNazwy, String sPKWiU, Long lNrStawkiVAT, Long lSuperDP, Long lLpDP )

   Int      iError
   String   sRodzaj

   Eksport.PoczatekPodsekcji( "Towar" )
      BasTW.SetKey( "id" )
      BasTW.SetKeySeg( "id", lIdTowaru )
      If BasTW.GetRec( EQ ) && sKodTowaru != "" Then
         ERROR_STAMP( Using "Nie można odczytać danych towaru '%s'", sKodTowaru )
      Else
         If BasTW.GetField( "kod" ) != sKodTowaru && sKodTowaru != "" Then
            ERROR_STAMP( Using "Kod towaru w pozycji dokumentu ( '%s' ) niezgodny z kodem towaru w definicji ( '%s' )", sKodTowaru, BasTW.GetField( "kod" ) )
         Else
            If sKodTowaru == "" Then
               BasTw.Clear()
               BasTw.SetField( "subtypi", 1 )
            EndIf
            Eksport.Pole( "Kod", sKodTowaru )
            eFakturaNAZWA( "Nazwa", sNazwaTowaru, lIdDlugiejNazwy )
            Eksport.Pole( "KodPaskowy", BasTW.GetField( "kodpaskowy" ) )
            Eksport.Pole( "PKWiU", sPKWiU )
            Eksport.Pole( "CN", BasTW.GetField( "pcn" ) )
            Eksport.PoczatekPodsekcji( "JednostkaMiary" )
               Eksport.Pole( "Ewidencyjna", BasTW.GetField( "jm" ) )
               Eksport.Pole( "Dodatkowa1", BasTW.GetField( "jmdod1" ) )
               Eksport.Pole( "Przelicznik1", ( Using "%.4f", BasTW.GetField( "przeljmdod1" ) ) )
               Eksport.Pole( "Dodatkowa2", BasTW.GetField( "jmdod2" ) )
               Eksport.Pole( "Przelicznik2", ( Using "%.4f", BasTW.GetField( "przeljmdod2" ) ) )
            Eksport.KoniecSekcji()
            Eksport.Pole( "StawkaVAT", LTRIM_VAT( eFakturaSTAWKAVAT( lNrStawkiVAT ) ) )
            Select Case BasTW.GetField( "subtypi" )
               Case 0
                     Eksport.Pole( "Rodzaj", "Artykuł" )
               Case 1
                     Eksport.Pole( "Rodzaj", "Usługa" )
               Case 3
                     sRodzaj = "Usługa"
                     BasDP_Set.SetKey( "super" )
                     BasDP_Set.SetKeySeg( "super", lSuperDP )
                     BasDP_Set.SetKeySeg( "lp", lLpDP )
                     iError = BasDP_Set.GetRec( GE )
                     While !iError && BasDP_Set.GetField( "super" ) == lSuperDP && BasDP_Set.GetField( "lp" ) == lLpDP
                        BasTW.SetKeySeg( "id", BasDP_Set.GetField( "idtw" ) )
                        If !BasTW.GetRec( EQ ) && BasTW.GetField( "subtypi" ) == 0 Then
                           sRodzaj = "Artykuł"
                           Exit
                        EndIf
                        iError = BasDP_Set.GetRec( NX )
                     Wend
                     Eksport.Pole( "Rodzaj", sRodzaj )   
               Case Else
                     ERROR_STAMP( "Nieobsługiwany rodzaj towaru" )
            EndSelect
         EndIf
      EndIf
   Eksport.KoniecSekcji()

EndSub

//----------------------------------------------------------------------------------------------------
// Sumowanie wartosci wg stawek VAT
// Operuje na biezacym, poprawnie odczytanym rekordzie tabeli DP.
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaSUMOWANIEVAT()

   Float   fSuma
   String   sNrStawkiVAT = ( Using "%08l", BasDP.GetField( "stvati" ) )

   fSuma = Round( SumaNetto.Get( sNrStawkiVAT, 0.00 ) + BasDP.GetField( "wartNetto" ), 2 )
   SumaNetto.Set( sNrStawkiVAT, fSuma )
   fSuma = Round( SumaVAT.Get( sNrStawkiVAT, 0.00 ) + BasDP.GetField( "wartVAT" ), 2 )
   SumaVAT.Set( sNrStawkiVAT, fSuma )

EndSub

//----------------------------------------------------------------------------------------------------
// Lista definicji stawek VAT
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaLISTASTAWEKVAT()

   Int      iInd
   Long   lNrStawkiVAT
   String   sIndex
   String   sKodStawkiVAT
   String   sNrStawkiVAT

   // Po zsumowaniu stawek VAT wg numeru sortujemy identyczne jak na podgladzie dokumentu
   For iInd = 1 To iInd > SumaNetto.Size()
      sNrStawkiVAT = SumaNetto.GetKey( iInd )
      eFakturaSTAWKAVAT( Val( sNrStawkiVAT ) )
      sIndex = ( Using "%08l", lVAT_LastIndex )
      SumaNumer.Set( sIndex, sNrStawkiVAT )
   Next iInd
   SumaNumer.Sort( 0 )

   For iInd = 1 To iInd > SumaNumer.Size()
      lNrStawkiVAT = Val( SumaNumer.Get( iInd ) )
      sKodStawkiVAT = LTRIM_VAT( eFakturaSTAWKAVAT( lNrStawkiVAT ) )
      Eksport.PoczatekPodsekcji( "StawkaVAT" )
         If sKodStawkiVAT == NOT_FOUND_TEXT Then
            ERROR_STAMP( Using "Nie można odczytać informacji o stawce VAT numer '%l'", lNrStawkiVAT )
         Else
            Eksport.Pole( "Kod", sKodStawkiVAT )
            Eksport.Pole( "Nazwa", BasXT_VAT.GetField( "nazwa" ) )
            Eksport.Pole( "Wartosc", ( Using "%.4f", BasXT_VAT.GetField( "wartosc" ) ) )
            Eksport.Pole( "ObowiazujeOd", BasXT_VAT.GetField( "data1" ) )
            Eksport.Pole( "ObowiazujeDo", BasXT_VAT.GetField( "data2" ) )
            Eksport.Pole( "StawkaRR", IIF( BasXT_VAT.GetField( "flag" ) & 0x100, YES, NO ) )
            Eksport.Pole( "Typ", ( Using "%l", lNrStawkiVAT ) )
         EndIf
      Eksport.KoniecSekcji()

   Next iInd
   SumaNumer.Clear()

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja stopki z sumami wartosci wg stawek VAT
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaSTOPKA( Long lNaliczanieVAT )

   Int      iInd
   String   sIndex
   String   sKod
   String   sNumer

   // Po zsumowaniu stawek VAT wg numeru sortujemy identyczne jak na podgladzie dokumentu
   For iInd = 1 To iInd > SumaNetto.Size()
      sNumer = SumaNetto.GetKey( iInd )
      sKod = eFakturaSTAWKAVAT( Val( sNumer ) )
      sIndex = ( Using "%08l", lVAT_LastIndex )
      SumaNumer.Set( sIndex, sNumer )
      SumaKod.Set( sIndex, sKod )
      If !( lNaliczanieVAT & VAT_SUM_FLAG ) Then
         // Iloczynowe naliczanie VAT
         SumaVAT.Set( iInd, ROUND( SumaNetto.Get( iInd ) * fVAT_LastValue, 2 ) )
      EndIf
   Next iInd
   SumaNumer.Sort( 0 )
   SumaKod.Sort( 0 )

   Eksport.PoczatekPodsekcji( "Stopka" )
      For iInd = 1 To iInd > SumaKod.Size()
         Eksport.PoczatekPodsekcji( "KwotaVAT" )
            Eksport.Pole( "StawkaVAT", LTRIM_VAT( SumaKod.Get( iInd ) ) )
            sNumer = SumaNumer.Get( iInd )
            Eksport.Pole( "Netto", ( Using "%.2f", SumaNetto.Get( sNumer ) ) )
            Eksport.Pole( "VAT", ( Using "%.2f", SumaVAT.Get( sNumer ) ) )
         Eksport.KoniecSekcji()
      Next iInd
   Eksport.KoniecSekcji()
   
   SumaNumer.Clear()
   SumaKod.Clear()
   SumaNetto.Clear()
   SumaVAT.Clear()

EndSub

//----------------------------------------------------------------------------------------------------
// Podsekcja pozycji dokumentu
// Operuje na biezacym, poprawnie odczytanym rekordzie tabeli DP.
//----------------------------------------------------------------------------------------------------

Int Sub eFakturaPOZYCJADOKUMENTU( Int iRodzajCeny )

   Long   lIdTowaru = BasDP.GetField( "idtw" )
   String   sKodTowaru = BasDP.GetField( "kod" )
   String   sNazwaTowaru = BasDP.GetField( "opis" )
   Long   lIdDlugiejNazwy = BasDP.GetField( "idlongname" )
   String   sPKWiU = BasDP.GetField( "opisdod" )
   String   sJm = BasDP.GetField( "jmwp" )
   Long   lNrStawkiVAT = BasDP.GetField( "stvati" )
   Float   fIlosc = BasDP.GetField( "iloscwp" )
   Float   fCena = BasDP.GetField( "cenawal" )
   String   sWartosc
   Float   fWartoscVAT = BasDP.GetField( "wartVat" )

   If iRodzajCeny & 1 Then
      sWartosc = ( Using "%.2f", BasDP.GetField( "walNetto" ) )
   Else
      sWartosc = ( Using "%.2f", BasDP.GetField( "walBrutto" ) )
   EndIf
   
   Eksport.PoczatekPodsekcji( "PozycjaDokumentu" )
      Eksport.Pole( "Lp", ( Using "%d", BasDP.GetField( "lp" ) ) )
      eFakturaTOWAR( lIdTowaru, sKodTowaru, sNazwaTowaru, lIdDlugiejNazwy, sPKWiU, lNrStawkiVAT, BasDP.GetField( "super" ), BasDP.GetField( "lp" ) )
      Eksport.Pole( "JednostkaMiary", sJm )
      Eksport.Pole( "Ilosc", ( Using "%.4f", fIlosc ) )
      Eksport.Pole( "Cena", ( Using "%.6f", fCena ) )
      Eksport.Pole( "StawkaVAT", LTRIM_VAT( eFakturaSTAWKAVAT( lNrStawkiVAT ) ) )
      Eksport.Pole( "Wartosc" , sWartosc )
      Eksport.Pole( "WartoscVAT" , ( Using "%.2f", fWartoscVAT ) )
   Eksport.KoniecSekcji()

EndSub

int sub CzyKorekta(int charakter)
   CzyKorekta = 0
   select case charakter
      case 41, 102, 125, 112, 118, 43, 51, 120, 80, 45, 127
         CzyKorekta = 1
   endselect
endsub

int sub MiejsceOdbioruTowaru()
    Int   iError
    String notatka1
    //notatka

Eksport.PoczatekPodsekcji( "Notatka" )
     
baseall nt
nt.setbase("NT")
nt.setkey("super")
nt.setkeyseg("super", 65610)
nt.setkeyseg("typi", 0)
nt.setkeyseg("baza",16)


if nt.getrec(EQ) == 0 then
notatka1 = nt.getfield("opis")
else
notatka1 =""
endif


Eksport.Pole("Notatka",notatka1)
Eksport.KoniecSekcji()

   //notatka


    Eksport.PoczatekPodsekcji( "MiejsceOdbioru" )
     

      Eksport.Pole("odkodpocz", basDK.GetField ("odkodpocz" ) )
   
    Eksport.Pole("odid", (Using "%l", basDK.GetField("odid")))
    Eksport.Pole("odkod", basDK.GetField("odkod"))
   
    long IDKH = basDK.GetField("odid")
    baseKH kh
    kh.GetRecById(IDKH)
     
    Eksport.Pole("ILNOdbiorcy",(kh.GetField("poledod1")))
   int err
baseMG basMG
basMG.SetKey("idhandl")
long idDH = basDK.GetField("id")
basMG.SetKeySeg("idhandl", idDH )
err=basMG.GetRec(GE)
while !err && basMG.GetField("idhandl")==idDH
Eksport.Pole("WZNumer",basMG.GetField("kod"))
err=basMG.getrec(NX)
wend

Eksport.KoniecSekcji()

   endsub

//----------------------------------------------------------------------------------------------------
// Eksport dokumentu sprzedazy
//----------------------------------------------------------------------------------------------------

int Sub eFakturaDOKUMENTSPRZEDAZY( Long idDokumentuSprzedazy )

   Int      iEdsCom = EdsCom()
   Int   iError
   Int   iFound
   Int iRodzajCeny

   // Znacznik e-Faktury z numerem wersji
   eFakturaWersja()

   BasDK.SetKey( "id" )
   BasDK.SetKeySeg( "id", idDokumentuSprzedazy )
   iError = BasDK.GetRec( EQ )

   Eksport.PoczatekSekcji( "DokumentHandlowy", idDokumentuSprzedazy )
      If iError Then
         ERROR_STAMP( Using "Nie można odczytać dokumentu sprzedaży o identyfikatorze '%l'", idDokumentuSprzedazy )
      Else
         Eksport.Pole( "GUID", BasDK.GetField( "guid" ) )
         if(iEdsCom) then
            Eksport.Pole( "Status", DOCUMENT_STATUS )
         else
            if( CzyKorekta(BasDK.GetField("subtypi")) ) then
               Eksport.Pole( "Status", KOREKTA_STATUS )
            else
               Eksport.Pole( "Status", DOCUMENT_STATUS2 )
            endif
         endif
         Eksport.Pole( "NumerDokumentu", BasDK.GetField( "kod" ) )
         Eksport.Pole( "Nazwa", BasDK.GetField( "nazwa" ) )
         Eksport.Pole( "Charakter", ( Using "%d", BasDK.GetField( "subtypi" ) ) )
         Eksport.Pole( "Typ", BasDK.GetField( "typ_dk" ) )
         Eksport.Pole( "Seria", BasDK.GetField( "seria" ) )
            Eksport.Pole("Opis",BasDK.GetField("opis"))
         eFakturaWYSTAWCAODBIORCA( 1, IIF( iError, NOT_FOUND_ID, BasDK.GetField( "plattypi" ) ) )
         eFakturaWYSTAWCAODBIORCA( IIF( iError, NOT_FOUND_ID, BasDK.GetField( "khid" ) ), NOT_FOUND_ID )
            MiejsceOdbioruTowaru()
         // Rejestr VAT
         BasXT.SetKey( "kod" )
         BasXT.SetKeySeg( "typi", 55 )
         BasXT.SetKeySeg( "super", 10500 )
         iError = BasXT.GetRec( GE )
         iFound = 0
         While !iError && BasXT.GetKeySeg( "typi" ) == 55
            If BasXT.GetField( "long" ) == BasDK.GetField( "rejestrVati" ) && BasXT.GetField( "super" ) == 10500 Then
               iFound = 1
               Exit
            EndIf
            iError = BasXT.GetRec( NX )
         Wend
         If !iFound Then
            ERROR_STAMP( "Nie można odczytać rejestru" )
         Else
            Eksport.Pole( "Rejestr", BasXT.GetField( "nazwa" ) )
         EndIf
         iRodzajCeny = BasDK.GetField( "grupaceni" )
         If iRodzajCeny & 1 Then
            Eksport.Pole( "RodzajCeny", "Netto" )
         Else
            Eksport.Pole( "RodzajCeny", "Brutto" )
         EndIf
         Eksport.Pole( "NaliczanieVAT", IIF( BasDK.GetField( "flag" ) & VAT_SUM_FLAG, VAT_SUM, VAT_MULTIPLICATION ) )
         Eksport.Pole( "MetodaRozliczaniaVAT", IIF( BasDK.GetField( "flag" ) & METODA_KASOWA_FLAGA, METODA_KASOWA, METODA_MEMORIALOWA ) )
         Eksport.Pole( "DataWystawienia", BasDK.GetField( "data" ) )
         Eksport.Pole( "DataSprzedazy", BasDK.GetField( "datasp" ) )
         // Rejestr platnosci
         BasKH.SetKey( "id" )
         BasKH.SetKeySeg( "id", BasDK.GetField( "plattypi" ) )
         If BasKH.GetRec( EQ ) Then
            ERROR_STAMP( "Nie można odczytać rejestru płatności" )
         Else
            Eksport.Pole( "RejestrPlatnosci", BasKH.GetField( "kod" ) )
         EndIf
         // Forma platnosci
         BasXT.SetKey( "kod" )
         BasXT.SetKeySeg( "typi", 90 )
         iError = BasXT.GetRec( GE )
         iFound = 0
         While !iError && BasXT.GetKeySeg( "typi" ) == 90
            If BasXT.GetField( "klient" ) == BasDK.GetField( "formaplatn" ) Then
               iFound = 1
               Exit
            EndIf
            iError = BasXT.GetRec( NX )
         Wend
         If !iFound Then
            ERROR_STAMP( "Nie można odczytać formy płatności" )
            ERROR_STAMP( "Nie można odczytać terminu płatności" )
         Else
            Eksport.Pole( "FormaPlatnosci", BasXT.GetField( "nazwa" ) )
            Eksport.Pole( "TerminPlatnosci", ( Using "%l dni", BasXT.GetField( "long" ) ) )
         EndIf
         Eksport.Pole( "DataPlatnosci", BasDK.GetField( "plattermin" ) )
         eFakturaWaluta( BasDK.GetField( "waluta" ) )
         Eksport.Pole( "KursVAT", ( Using "%.4f", BasDK.GetField( "kurs" ) ) )
         Eksport.Pole( "KursCITPIT", ( Using "%.4f", BasDK.GetField( "kursDoch" ) ) )
         Eksport.Pole( "OdebranyPrzez", BasDK.GetField( "odebrane" ) )

         // Sumowanie stawek VAT
         BasDP.SetKey( "super" )
         BasDP.SetKeySeg( "super", idDokumentuSprzedazy )
         iError = BasDP.GetRec( GE )
         While !iError && BasDP.GetKeySeg( "super" ) == idDokumentuSprzedazy
            If !( BasDP.GetField( "flag" ) & SET_POSITION_FLAG ) Then
               eFakturaSUMOWANIEVAT()
            EndIf
            iError = BasDP.GetRec( NX )
         Wend

         // Lista definicji stawek VAT
         eFakturaLISTASTAWEKVAT()

         // Sekcja stopki z sumami wartosci wg stawek VAT
         eFakturaSTOPKA( BasDK.GetField( "flag" ) & VAT_SUM_FLAG )

         // Podsekcje pozycji dokumentu
         BasDP.SetKey( "super" )
         BasDP.SetKeySeg( "super", idDokumentuSprzedazy )
         iError = BasDP.GetRec( GE )
         While !iError && BasDP.GetKeySeg( "super" ) == idDokumentuSprzedazy
            If !( BasDP.GetField( "flag" ) & SET_POSITION_FLAG ) Then
               eFakturaPOZYCJADOKUMENTU( BasDK.GetField( "grupaceni" ) )
            EndIf
            iError = BasDP.GetRec( NX )
         Wend
      EndIf
   Eksport.KoniecSekcji()

EndSub

//----------------------------------------------------------------------------------------------------

Int Sub BeginProcess( Int iFlagi, Int iCzyPytac )

   If ( BasDK.Open() || BasDP.Open() || BasDP_Set.Open() || BasKH.Open() || BasNT.Open() || BasTW.Open() || BasXT.Open() || BasXT_VAT.Open() ) Then
      Eksport.AddError( "Błąd podczas otwierania tabeli DK, DP, KH, NT, TW i/lub XT." )
      BeginProcess = 0
   EndIf

EndSub

//----------------------------------------------------------------------------------------------------

Int Sub DoProcess()
   
   
   
   String   sError = "Wystapiły błędy podczas eksportu.\nSzczegółowe informacje o błędach znajdują się w pliku z wyeksportowanymi danymi."

   DoProcess = 1

   eFakturaDOKUMENTSPRZEDAZY( Eksport.GetId() )
   If !iExported Then
      If !BasDK.GetRecById( Eksport.GetId() ) Then
         If ( BasDK.GetField( "subtypi" ) == DOKUMENT_ANULOWANY ) || ( BasDK.GetField( "subtypi" ) == PARAGON_ANULOWANY ) Then
            sError = "Dokumenty anulowane nie mogą być eksportowane w formacie e-Faktury"
         EndIf
      EndIf
      Eksport.AddError( sError )
      DoProcess = 0
   EndIf

EndSub

//----------------------------------------------------------------------------------------------------

Int Sub EndProcess()

   BasDK.close()
   BasDP.close()
   BasDP_Set.close()
   BasKH.close()
   BasNT.close()
   BasTW.close()
   BasXT.close()
   BasXT_VAT.close()
   
EndSub


//----------------------------------------------------------------------------------------------------


Próbowałem na dwa sposoby, pierwszy to skopiowałem go do katalogu Raporty->Kartoteki->Raporty z menu
Drugi to próbowałem z tego katalogu wywołać ten raport za pomocą kodu, który znalazłem na forum:
Kod:
Run("Eksport e-Faktury", -2, "e:\\tmp\\", "", (Using "%l", id), "", "0", "", "", "")

Niestety w obu przypadkach otwiera się okno z podglądem pustego pdf. Chciałbym aby użytkownik kliknął na dokument sprzedaży i mógł odpalić ten raport, który zapisałby plik xml w określonym miejscu. Przekopałem się przez forum, ale niestety albo nie znalazłem, albo nie umiem poskładać informacji które znalazłem w spójną całość. Nie mogę zrozumieć skąd raport wie, że ma skończyć jako xml a nie pdf?

Autor:  rafal [ 2016-11-08, 23:05 ]
Tytuł:  Re: Raport export XML - format e-Faktury

Kod:
iorec ior
ior.SetField("sterownik", "IE11.DLL")
ior.SetField("parametry", "XML eFaktura.xsd")
ior.SetField("raport", "Eksport e-Faktury")
ior.SetField("nazwapliku", "E:\\faktury.xml")
ior.BeginSection("DocsData")
ior.SetField("id", "65603")
ior.EndSection()
ExportSp(ior)

Autor:  borgrapid [ 2016-11-08, 23:33 ]
Tytuł:  Re: Raport export XML - format e-Faktury

Pięknie dziękuje!!!
Wszystko działa jak trzeba.
Nie wiedziałem że w ten sposób można wywołać raport, przeglądałem instrukcje i znalazłem informację o obiekcie iorec ale nie było tam żadnych informacji o raportach.
Jeszcze raz bardzo dziękuję za pomoc :)

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/