Fatturazione Elettronica

Moderator: Enrico Maria Giordano

User avatar
Maurizio
Posts: 705
Joined: Mon Oct 10, 2005 1:29 pm
Contact:

Re: Fatturazione Elettronica

Post by Maurizio »

Totale Fattura 114.68 € pagamento 2 rate

Code: Select all

<DatiPagamento>
<CondizioniPagamento>TP01</CondizioniPagamento>
<DettaglioPagamento>
<ModalitaPagamento>MP12</ModalitaPagamento>
<DataScadenzaPagamento>2018-12-25</DataScadenzaPagamento>
<ImportoPagamento>57.34</ImportoPagamento>
<IBAN>..........codice IBAN di chi emette ..................</IBAN>
</DettaglioPagamento>
<DettaglioPagamento>
<ModalitaPagamento>MP12</ModalitaPagamento>
<DataScadenzaPagamento>2019-01-24</DataScadenzaPagamento>
<ImportoPagamento>57.34</ImportoPagamento>
<IBAN>..........codice IBAN di chi emette ..................</IBAN>
</DettaglioPagamento>
</DatiPagamento>
Maurizio
www.nipeservice.com
User avatar
MarcoBoschi
Posts: 925
Joined: Thu Nov 17, 2005 11:08 am
Location: Padova - Italy
Contact:

Re: Fatturazione Elettronica

Post by MarcoBoschi »

:D
Grazissime!
Marco Boschi
info@marcoboschi.it
User avatar
MarcoBoschi
Posts: 925
Joined: Thu Nov 17, 2005 11:08 am
Location: Padova - Italy
Contact:

Re: Fatturazione Elettronica

Post by MarcoBoschi »

Ne approfitto ancora
<DatiBeniServizi>
<DettaglioLinee>
<NumeroLinea>1</NumeroLinea>
<Descrizione>Vendita del seguente materiale:</Descrizione>
<Quantita>0.00</Quantita>
<PrezzoUnitario>0.00</PrezzoUnitario>
<PrezzoTotale>0.00</PrezzoTotale>
<AliquotaIVA>0.00</AliquotaIVA>
</DettaglioLinee>

Una riga di questo tipo solamente descrittiva che segue pari passo quello che appare in fattura quindi io non la posso mettere nel file XML?
Sembra che dia errore sempre!
Vanno messe solo quelle con Quantita e prezzo maggiori di zero?

Grazie
Marco Boschi
info@marcoboschi.it
User avatar
Maurizio
Posts: 705
Joined: Mon Oct 10, 2005 1:29 pm
Contact:

Re: Fatturazione Elettronica

Post by Maurizio »

devi mettere la Quantità a 1 e IVA

Code: Select all

<NumeroLinea>2</NumeroLinea>
<Descrizione>TESTO </Descrizione>
<Quantita>1.00</Quantita>
<UnitaMisura>N.</UnitaMisura>
<PrezzoUnitario>0.00</PrezzoUnitario>
<PrezzoTotale>0.00000</PrezzoTotale>
<AliquotaIVA>22.00</AliquotaIVA>
</DettaglioLinee>
Maurizio
User avatar
MaxP
Posts: 85
Joined: Thu Jul 12, 2007 2:02 pm
Contact:

Re: Fatturazione Elettronica

Post by MaxP »

Salve,

per le Fatture Elettroniche tra ditte/privati NON E' OBBLIGATORIO firmare il file XML.

Codice per le scadenze

Code: Select all

    <DatiPagamento>
      <CondizioniPagamento>TP02</CondizioniPagamento>
      <DettaglioPagamento>
        <ModalitaPagamento>MP12</ModalitaPagamento>
        <DataScadenzaPagamento>2018-05-31</DataScadenzaPagamento>
        <ImportoPagamento>305.00</ImportoPagamento>
      </DettaglioPagamento>
      <DettaglioPagamento>
        <ModalitaPagamento>MP12</ModalitaPagamento>
        <DataScadenzaPagamento>2018-06-30</DataScadenzaPagamento>
        <ImportoPagamento>305.00</ImportoPagamento>
      </DettaglioPagamento>
    </DatiPagamento>
 
ciao
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: Fatturazione Elettronica

Post by solving »

Salve

per quanto riguarda il nome file xml da inviare bisogna usare un progressivo
( i famosi 5 numeri e/o caratteri di ITcodicefiscal_XXXXX.xml )
quindi partendo da 1 si arriva a 99999.

pensavo di andare oltre i soli numeri e usare un progressivo alfanumerico quando si supera il 99999.

Es. dopo il 99999 usare Lettera + 4 cifre , quindi da A0000 a A9999
poi passare da B0000 a B99999 etc....
arrivati a Z9999 passare a AA000 fino a AA999 e cosi via ( quindi lettera + lettera + 3 cifre ).

In questo modo si avra' una combinazione enorme del progressivo nome file .

Se poi si usano anche le lettere minuscole nella combinazione ( a ....z ) la quantità di generazione
aumenta.

Qualcuno ha implementato una funzione che genera questo incremento ?
ho provato alcune soluzioni ma in alcuni casi "toppano" :)

Grazie.
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: Fatturazione Elettronica

Post by solving »

salve a tutti

ho trovato questo :

Code: Select all

function getNextAlphaNumeric($str, $step = 1) {
   for ($x = 0; $x < strlen(strval($str)); $x++) {
      $ord = ord( substr(strval($str), -1 - $x, 1) );
      $nord = $ord + $step;
      if ($nord > 57 && $ord <= 57) $nord += 7;
      if ($nord > 90 && $ord <= 90) $nord += 6;
      if ($nord <= 122) {
         return substr_replace(strval($str), chr($nord), -1 - $x, 1);
      } else {
         $over = $nord - 122;
         if ($over > 62) {
            $step = floor( $over / 62 ) + 1;
            $ord = 47 + ( $over % 62 );
         } else {
            $step = 1;
            $ord = 47 + $over;
         }
         if ($ord > 57) $ord += 7;
         if ($ord > 90) $ord += 6;
         $str = substr_replace(strval($str), chr($ord), -1 - $x, 1);

      }
   }
return $str . '0';
}
 
ho convertito in questo modo :
N.B. funzione per 4 cifre ma si puo' adattare a piu' cifre.

Code: Select all

STATIC FUNCTION Renum()
LOCAL cCont := SPACE(4), cRet := ""
LOCAL aS := {}, i, nX, nY, nZ

do while .T.

    cRet := ""
    aS := {}
    nZ := 1

    dfGetW(10,10,"Codice ",@cCont,"XXXX")
    IF cCont == "XXXX"
        EXIT
    ENDIF

    AADD( aS, SUBSTR(cCont,4,1) )
    AADD( aS, SUBSTR(cCont,3,1) )
    AADD( aS, SUBSTR(cCont,2,1) )
    AADD( aS, SUBSTR(cCont,1,1) )

    FOR i = 1 TO LEN( aS )
         nX := ASC( aS[i] ) + nZ

         IF nX > 57
             nX := nX + 7
         ENDIF

         IF nX > 90
             nX := nX + 6
         ENDIF

         IF nX <= 122
             aS[i] := CHR( nX )
             EXIT
         ELSE
             nY := nX - 122
             IF nY > 62
                 nZ := INT( nY / 62 ) +1
                 nX := 47 + ( nY % 62 )
             ELSE
                 nZ := 1
                 nX := 47 + nY
             ENDIF

             IF nX > 57
                 nX := nX + 7
             ENDIF

             IF nX > 90
                 nX := nX + 6
             ENDIF
         ENDIF
    NEXT

    cRet := aS[4] + aS[3] + aS[2] + aS[1]

    dbMsgW( cRet )

enddo

RETURN NIL
 
sostituire dfGetW(.... con una get classica e dbMsgW( .... con un msgbox o alert.

sembra funzionare , es. da 0001 da 0002 da 1000 da 1001 etc...
da A998 da A999 pero' se digito A999 invece di dare B0000 da A99A .

Suggerimenti ?
Grazie.
User avatar
Maurizio
Posts: 705
Joined: Mon Oct 10, 2005 1:29 pm
Contact:

Re: Fatturazione Elettronica

Post by Maurizio »

Io uso questa funzione

Code: Select all

function Dec2Hex(nDec,lPad)
local nDig
local cHex := ""
lPad := lPad=nil .or. lPad
while .T.
   nDig := nDec%16
   cHex := if(nDig>9, Chr(Asc("A")+nDig-10), Str(nDig,1)) + cHex

   if (nDec := Int(nDec/16)) < 16
      if nDec > 0
         cHex := if(nDec>9, Chr(Asc("A")+nDec-10), Str(nDec,1)) + cHex
      end
      exit
   end
end
return if(lPad, PadL(cHex,Len(cHex)+if(Len(cHex)%2=0,0,1),"0"), cHex)

che ho trovato
http://www.pctoledo.com.br/forum/viewto ... mobile=off

Maurizio
http://www.nipeservice.com
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Fatturazione Elettronica

Post by Enrico Maria Giordano »

Questa funzione ha qualcosa che non va?

Code: Select all

cProgInvio := NTOC( nProgInvio , 36, 5, "0" )
EMG
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: Fatturazione Elettronica

Post by solving »

la funzione Dec2Hex(nDec,lPad) e' ottima , quindi trasformo in esadecimale
massimo 1.048.575 valori possibili.

per curiosità stavo provando anche quest'altra soluzione :

Code: Select all

STATIC FUNCTION Renum()
LOCAL aList := {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',;
 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',;
                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}

LOCAL cCont := SPACE(5), cRet := "", nBase := 62
LOCAL aS := {}, i, nPos, nNew

do while .T.

    cRet := ""
    aS := {}

    dfGetW(10,10,"Codice ",@cCont,"XXXXX")
    IF ALLTRIM( cCont ) == "-"
        EXIT
    ENDIF

    cCont := PADL( ALLTRIM(cCont), 5, "0" )

    AADD( aS, SUBSTR(cCont,5,1) )
    AADD( aS, SUBSTR(cCont,4,1) )
    AADD( aS, SUBSTR(cCont,3,1) )
    AADD( aS, SUBSTR(cCont,2,1) )
    AADD( aS, SUBSTR(cCont,1,1) )

    FOR i = 1 TO LEN( aS )

         nPos := ASCAN( aList, aS[i] )
         nNew := nPos + 1

         IF nNew >= nBase
             nNew := 1
             aS[i] := aList[nNew]
         ELSE
             aS[i] := aList[nNew]
             EXIT
         ENDIF
    NEXT

    cRet := aS[5] + aS[4] + aS[3] + aS[2] + aS[1]

    msgbox( cRet )

ENDDO

RETURN NIL
 
ma usero' la Dec2Hex per adesso.
Grazie.
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: Fatturazione Elettronica

Post by solving »

l'ultimo e poi basta. :D

Code: Select all

STATIC FUNCTION Renum()
* --- e' possibile cambiare nBase
LOCAL cRet, nDec, nBase := 36

DO WHILE .T.
      cRet := ""
      nDec := 0

      dfGetW(10,10,"Codice ",@nDec,"9999999")
      IF nDec == 0
         EXIT
      ENDIF

     cRet := N2C( nDec, nBase )

     dbMsgW( cRet )
ENDDO

RETURN NIL

STATIC FUNCTION N2C(n, nBase)
LOCAL cOutStr := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
LOCAL cRet  := cOutStr[ (n % nBase)+1 ]

IF n >= nBase    // Recurse for greater digits
   cRet := N2C(INT(n/nBase), nBase) + cRet
ENDIF

RETURN( cRet )
User avatar
MaxP
Posts: 85
Joined: Thu Jul 12, 2007 2:02 pm
Contact:

Re: Fatturazione Elettronica

Post by MaxP »

Ciao a tutti,

non so se potrà servire, invio un'elaborazione dell'idea,
una funzione che può generare un codice univoco per
ogni minuto che passa anche per gli anni futuri.
Sarebbe stato ottimo farlo per ogni secondo (la mia
idea era quella) ma 5 cifre base 36 non bastano.

Code: Select all

#include "Fivewin.ch"


FUNCTION MAIN()
        MsgStop( ALLTRIM( GETCODFE() ) )
RETURN NIL


#pragma BEGINDUMP

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include "hbapi.h"


static void N2C( unsigned long n, int nBase, int nPos, char *cBuf )

{
        char cOutStr[37] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
        char cRet ;

        cRet  = cOutStr[ (int)(n % (unsigned long)nBase) ] ;

        if ( n >= (unsigned long)nBase )
                N2C((unsigned long)(n/nBase), nBase, nPos-1, cBuf) ;

        cBuf[nPos] = cRet ;
}

HB_FUNC( GETCODFE )


{
        char    cBuf[11] = "          " ;        
        unsigned long count;
        
        time_t *tmppointer=NULL;
        
        count = time( tmppointer ) / (unsigned long)60 ;
        
        N2C( count, 36, 9, cBuf ) ;
        
        hb_retc( cBuf ) ;
}

#pragma ENDDUMP
 
User avatar
MarcoBoschi
Posts: 925
Joined: Thu Nov 17, 2005 11:08 am
Location: Padova - Italy
Contact:

Re: Fatturazione Elettronica

Post by MarcoBoschi »

Ciao,
ci sono regole particolari per uploadare un XML relativo ad una una TD04 nota di credito?
Parlo soprattutto dei riferimento alla fattura che nel cartaceo vengono scritti nel dettaglio.

STORNO TOTALE NS. FT.1670.15 DEL 31/08/2015 IN QUANTO VIENE RESA LA CAUZIONE

Mi immagino che il formato XML preveda TAG specifici
Oppure mi sbaglio ed è sufficiente scrivere nel dettaglio?

Grazie
Marco Boschi
info@marcoboschi.it
solving
Posts: 56
Joined: Fri Jun 05, 2009 7:55 am
Location: Sicily ( ct ) - Italy

Re: Fatturazione Elettronica

Post by solving »

ciao

io la tratto come riga dettaglio "descrittiva"
nel senso che metto q.ta = 0, prezzo = 0 e iva = xx

per ricavare xx cerco sulle righe dettaglio la prima iva valida con % diverso da 0
quindi escludo tutte quelle che hanno natura Nx.
in modo che la riga "descrittiva" non dia "fastidio" nel riepilogo.
User avatar
MarcoBoschi
Posts: 925
Joined: Thu Nov 17, 2005 11:08 am
Location: Padova - Italy
Contact:

Re: Fatturazione Elettronica

Post by MarcoBoschi »

Grazie,
che peccato il sito https://sdi.fatturapa.gov.it/SdI2Fattur ... la_fattura
in questo momento è in tilt.
Speravo di provare ma niente.
Non ci voleva
Marco Boschi
info@marcoboschi.it
Post Reply