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/ |