Newsgroup: it.comp.appl.access
Titolo: Creare codice con piu' record di testa e di coda (tracciato lemco)

Ciao a tutti;ho un problema da porvi:
mi e' stato chiesto da un cliente il trasferimento delle proprie
fatture al commercialista,il quale come programma ha
"Zucchetti".Questo "FAVOLOSO" applicativo vuole il tracciato file
LEMCO per l'importazione dei dati da altri software.
In realta' bisogna creare un tracciato che presenti prima l'elenco di
tutti i clienti ai quali e' stata emessa fattura e poi in sequenza
tutte le fatture.Io (come vedrete dal codice che vi posto) ho risolto
l' 80 % della richiesta.Cioe elenco prima tutti i clienti con il tot.
record clienti finale e poi elenco le fatture con il tot record
fatture finale.
Ho inizialmente due problemi:
 
1) Nel tracciato viene chiesto il totale record (clienti + fatture )
nel record di testa.L'ho impostato ma non mi svolge il calcolo.
2) Abbiamo anche un totale alla fine dei due elenchi:Elenco clienti e
elenco fatture.Facendo un esempio: ho tre clienti e tre fatture,il tot
clienti alla fine del mio elenco e' 3 mentre il totale fatture invece
di essere 3 e' 6 cioe' mi fa un totale complessivo come fosse un
record di coda.
 
Bisogna in pratica a mio parere inserire piu' record di testa e di
coda per suddividere i due flussi.Ma qui' io mi fermo.
Di seguito vi posto il codice da implementare:
Dim NomeFile As String  'Nome del file in scrittura
    Dim risp As String      'Risposta da msgbox
    Dim Riga As String      'Stringa da scrivere di volta in volta
    Dim i    As Integer   'Contatore Cicli
    Dim Tempo1 As Date      'Cronometro di Inizio
    Dim Tempo2 As Date      'Cronometro di Fine
    Dim Tempo  As Date      'Tempo impiegato
    Dim CodDit As String    'Codice CC
    Dim NumFile As String    'indica il tipo di trasf
    Dim Numfatt     As Integer   'numero fatture
    Dim MioDB  As Database
    Dim MioRS  As DAO.Recordset
 
    CodDit = "ORTODO"   'Codice CC azienda
    NumFile = "003"     'Codice div trasf
 
    Set MioDB = CurrentDb
    Set MioRS = MioDB.OpenRecordset("Trasmfattragg", dbOpenDynaset,
dbReadOnly)
 
    If MioRS.RecordCount = 0 Then
        MsgBox "Non ci sono fatture", vbOKOnly, "ATTENZIONE!"
        MioRS.Close
        DoCmd.Close
        Exit Sub
    End If
 
    Tempo1 = Now()
    MioRS.MoveFirst
    Numfatt = MioRS.RecordCount
    'TOTRIB = 0
    'Divisa = "E"
 
    NomeFile = "C:\IMORTODO.D"
    'Trasmissione dati
    risp = MsgBox("Procedura di trasmissione fatture di vendita",
vbOKCancel)
 
    'crea file => cancellazione, per partire da zero
    Open NomeFile For Output As #1
        Print #1, " "
    Close #1
    Kill NomeFile
    'RECORD DI TESTA
    Riga = " "                             '  1-  1 Filler blank
    Riga = Riga + "I"                      '  1-  1 "I"
    Riga = Riga + NumFile                  '  2-  4 CODICE trasf
    Riga = Riga + Format(i, "0000000000000") '  5- 17 Progressivo tot
record
    Riga = Riga + Format(CodDit, "000000")   '  19- 24 codice azienda
    Riga = Riga + "27"                  ' 25- 26
    Riga = Riga + Format(Now(), "yyyymmdd")   ' 27- 34 data spedizione
file
    Riga = Riga + "V"                  ' 35-35 Tipo sped.
    Riga = Riga + "1"                  ' 36-36 Tipo sped.
    Riga = Riga + "2"                  ' 36-36 Tipo sped.
    Riga = Riga + String$(164, " ")          ' 37-200 Filler blank
 
    Open NomeFile For Output As #1
         Print #1, Riga
    Close #1
 
    'CICLO DI SCRITTURA PER OGNI UTENTE
 
 
        '--------------------
        ' SCRIVE IL RECORD F
        '--------------------
        Riga = " "                              '  1-  1 BLANK
        Riga = Riga + "F"                      '  2-  2 CODICE FISSO
        Riga = Riga + "CLIEFORN"      '  3- 10 Progressivo
        Riga = Riga + String$(191, " ")          ' 11-200 Filler blank
        Open NomeFile For Append As #1
             Print #1, Riga
        Close #1
 
 
        Do
        If Nz(MioRS![ID Num  Fattura]) > 0 Then
        i = i + 1
 
 
        '--------------------
        ' SCRIVE IL RECORD D10
        '--------------------
 
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "D"                              '  2-  2 CODICE
FISSO
        Riga = Riga + "10"                                '3-4 fisso
        Riga = Riga + "C"                                '5-5 fisso
        Riga = Riga + "000000"                           '6-11 fisso
        Riga = Riga + String$(8, " ")                    ' 12- 19 f
        Riga = Riga + Format(MioRS![Cliente], "!" & String$(50, "@"))
' 20- 67 o Rag.Sociale Utente
        Riga = Riga + String$(25, " ")                 ' 68-92 Cognome
        Riga = Riga + String$(25, " ")                 ' 93-117 nome
        Riga = Riga + Left$(Format(MioRS![PartitaIVA], "@@@@@@@@@@@")
& String$(11, " "), 11) ' 118-129 P.IVA cliente
        Riga = Riga + String$(5, " ")                  '130-134 spazi
per codice fisc
        Riga = Riga + String$(1, " ")                  '134-134 codice
fisc errato
        Riga = Riga + String$(1, " ")                  '135-135 Sog.
intracom
        Riga = Riga + "S"                              '136 - 136
fisso
        Riga = Riga + String$(63, " ")                  '137-249
filler
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
        '--------------------
        ' SCRIVE IL RECORD D11
        '--------------------
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "D"                              '  2-  2 CODICE
FISSO
        Riga = Riga + "11"                                '3-4 fisso
        Riga = Riga + Format(MioRS![Indirizzo5], "!" & String$(32,
"@"))   ' 5- 36  Indirizzo e num civ.
        Riga = Riga + String$(5, " ")                  '37-41 spazi
per num civ
        Riga = Riga + String$(4, " ")                  '42-45 Codice
comune
        Riga = Riga + Format(MioRS![CAP5], "00000")    ' 46- 50 CAP
        Riga = Riga + Format(MioRS![Città5], "!" & String$(21, "@"))
' 51- 73 Città
        Riga = Riga + Format(MioRS![Provincia5], "00")    ' 74- 75
Prov
        Riga = Riga + "S"                               '87-87 fisso
        Riga = Riga + "N"
        Riga = Riga + "N"                               'Bolla dog.
89-89 errata
        Riga = Riga + "1"                               '90-90 fisso
codice 1 = lav.autonomo
        Riga = Riga + "N"
        Riga = Riga + "N"                 'Clente fittizio. 92-92
errata
        Riga = Riga + String$(122, " ")                   'Blank.
92-200
 
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
    End If
        MioRS.MoveNext
    Loop Until MioRS.EOF
    MioRS.MoveFirst
 
        '--------------------
        ' SCRIVE IL RECORD E
        '--------------------
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "E"                              '  2-  2 CODICE
FISSO
        Riga = Riga + "CLIEFORN"                     '  3-  10 CODICE
FISSO
        Riga = Riga + Format(i, "00000000")          '  11- 18
Progressivo tot record
        Riga = Riga + String$(183, " ")                  '19-201
filler
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
 
        '--------------------
        ' SCRIVE IL RECORD F
        '--------------------
        Riga = " "                              '  1-  1 BLANK
        Riga = Riga + "F"                      '  2-  2 CODICE FISSO
        Riga = Riga + "FATTVEND"      '  3- 10 Progressivo
        Riga = Riga + String$(191, " ")                  ' Filler
 
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
 
         Do
        If Nz(MioRS![ID Num  Fattura]) > 0 Then
        i = i + 1
 
        '--------------------
        'SCRIVE IL RECORD D30
        '--------------------
        Riga = " "                                      '  1-  1 BLANK
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "D"
        Riga = Riga + "30"                              '  2-  3
CODICE FISSO 70
        Riga = Riga + "00"                              '  3-  4
CODICE FISSO ATTIVITà IVA
        Riga = Riga + Format([Datadoc], "yyyy")         ' 5- 8 Anno
competenza
        Riga = Riga + Format(Now(), "mm")             ' 6- 7 Mese
competenza
        Riga = Riga + Format([Datadoc], "yyyy")         ' 5- 8 Anno
competenza
        Riga = Riga + Format(Now(), "mm")           ' 6- 7 Mese
competenza
        Riga = Riga + "00"                              ' 3-  4 CODICE
Sezione reg.IVA
        Riga = Riga + "1"                              ' 3-  4 Tipo
doc:Fattura
        Riga = Riga + String$(2, " ")                  ' Cod. tipo
fatt "" fattura di vendita
        Riga = Riga + Format(MioRS![Num doc], "!" & String$(10, "@"))
' Num fatt
        Riga = Riga + String$(1, " ")                       ' Num bis
        Riga = Riga + Format(MioRS![Num doc], "!" & String$(10, "@"))
' Num fatt
        Riga = Riga + Format(Now(), "yyyymmdd")         ' 5- 8 Data
registr. fatt
        Riga = Riga + Format([Datadoc], "yyyymmdd")         ' Data
emissione fatt
        Riga = Riga + "000000000000000000000000000"     ' Campi
facoltativi: da Data scad.  COD. PAG
        Riga = Riga + String$(1, " ")                  ' Tipo
pag:facoltativo
        Riga = Riga + "0000000000"     ' Campi facoltativi: da Centro
di costo a  Cod. cli
        Riga = Riga + "P"                              'indica il
codice usato:Partita IVA
        Riga = Riga + Left$(Format(MioRS![PartitaIVA], "@@@@@@@@@@@")
& String$(11, " "), 11) '  P.IVA cliente
        Riga = Riga + String$(5, " ")                  ' spazi per
codice fisc
        Riga = Riga + "0000000000000"     ' Campi facoltativi
        Riga = Riga + String$(1, " ")                  ' Filler
        Riga = Riga + "00000000000"     ' Campi facoltativi
        Riga = Riga + String$(61, " ")                  ' Filler
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
         '--------------------
        'SCRIVE IL RECORD D31
        '--------------------
        Riga = " "                                      '  1-  1 BLANK
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "D"
        Riga = Riga + "31"                              '  2-  3
CODICE FISSO 70
        Riga = Riga + "81"                              '  3-  4
CODICE FISSO ATTIVITà IVA
        Riga = Riga + Format(MioRS![Totale di Totale],
"00000000000")    ' Imponibile
        Riga = Riga + "+"                              '   CODICE
FISSO
        Riga = Riga + "00000000000"                    '   Valore
FISSO: Importo imposta
        Riga = Riga + "+"                              '   CODICE
FISSO
        Riga = Riga + "52"                              '   CODICE
FISSO:Codice norma esente IVA
        Riga = Riga + "0000"                            '   Valore
FISSO: Centro di costo
        Riga = Riga + "051922"                           '   Valore
FISSO: Codice contropartita
        Riga = Riga + Format(MioRS![Totale di Totale],
"00000000000")    ' Imponibile
        Riga = Riga + "+"
        Riga = Riga + "00000000000"                    '   Valore
FISSO: Importo in valuta
        Riga = Riga + String$(136, " ")                  ' Filler
       Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
    End If
    MioRS.MoveNext
    Loop Until MioRS.EOF
    MioRS.MoveFirst
 
 
 
 
        '--------------------
        ' SCRIVE IL RECORD E
        '--------------------
        Riga = " "                                      '  1-  1 BLANK
        Riga = Riga + "E"                              '  2-  2 CODICE
FISSO
        Riga = Riga + "FATTVEND"                     '  3-  10 CODICE
FISSO
        Riga = Riga + Format(i, "00000000") '  11- 18 Progressivo tot
record
        Riga = Riga + String$(183, " ")                  '19-201
filler
        Open NomeFile For Append As #1
            Print #1, Riga
        Close #1
 
 
 
'RECORD DI CODA
    Riga = " "                             '  1-  1 Filler blank
    Riga = Riga + "C"                      '  2-  3 "I"
    Riga = Riga + NumFile                  '  3-  5 CODICE trasf
    Riga = Riga + Format(i, "0000000000000")  '  6- 18 Progressivo tot
record
    Riga = Riga + Format(CodDit, "000000")   '  19- 24 codice azienda
    Riga = Riga + "27"                  ' 25- 26
    Riga = Riga + Format(Now(), "yyyymmdd")   ' 27- 34 data spedizione
file
    Riga = Riga + "V"                  ' 35-35 Tipo sped.
    Riga = Riga + "1"                  ' 36-36 Tipo sped.
    Riga = Riga + String$(164, " ")          ' 37-200 Filler blank
    Open NomeFile For Append As #1
            Print #1, Riga
    Close #1
    Tempo2 = Now()
    MioRS.Close
    Tempo = Tempo2 - Tempo1
    MsgBox "Terminato, " & Tempo & "s"
 
Grazie in anticipo
Dino
 

Ciao Dino, 
ho una curiosità rispetto a questa tua segnalazione: hai risolto ? 
Credo di avere lo stesso problema: abbiamo Confagricoltura che ci tiene la contabilità e usa Zucchetti : noi abbiamo il gestinale EASY FATT della Danea SOFT. In DANEA mi hanno detto che non sono compatibili con Zucchetti.. ci saranno migliaia di clienti Zucchetti e altrettanti Danea nelle stessa situazione.. possibile ? 
Grazie per qualsiasi info tu abbia, ciao , Claudia


Non trovo più il suo msg originale, ma nel record di testa andava a 
scrivere il valore della variabile (uguale al numero di record del 
tracciato, che doveva incrementarsi all'interno del ciclo), mentre 
ancora il codice non era entrato nel do...loop.
Anzi, la sua "i" non era nemmeno stata azzerata.
Dovrebbe prima contare i record con qualcosa come listcount, azzerare 
(i=0). Non ho provato ma nel record di coda, dopo n incrementi, dopo il 
ciclo, la sua "i" dovrebbe valere qualcosa di più.
Fabio DV
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

Qualche anni dopo ed ecco che anche io sono alle prese con questo lavoraccio. Mi chiedevo se a scopo del tutto esemplificativo qualcuno mi possa finire un csv / txt di esempio
Ringrazio anticipatamente 


se la mail è valida ti posso madare dei txt di esempio e le specifiche.
txt con dati reali no perchè si tratta di dati di fatture di clienti
 
ciao
BFS


Grazie infinite per il riscontro, la mia mail è valida ed il problema ancora in corso...il tuo file mi sarebbe provvidenziale. 
Attendo fiduciosa, grazie!!! 
 
 
 

Il giorno martedì 2 maggio 2017 16:41:29 UTC+2, BFS ha scritto:

Mi sono sufficienti i txt di esempio, in particolar modo mi interessa che figurino un paio di clienti nel tipo record 10, e  2 o tre fatture attive per vedere come sono combinati i tipi record 30 e 31, non riesco a capire come devono alternarsi. Grazie ancora

Qualcuno puo' testare il mio lavoro di esportazione verso Zucchetti?  Sto aspettando che il distributore me lo provi...ma aspetta e spera....
Mi invento 3 fatture, faccio il file di esportazione e...forza!!!.... qualcuno che me lo testi!!!!
svegliapc(gmail)

Buonasera a tutti...
Mi sono imbattuto in questa discussione perché ho lo stesso problema che riscontravate voi e mi chiedevo se avete risolto e se si come...
Grazie mille
 
Simone


Forse se scrivi sul ng dei commercialisti c'e' sicuramente un numero 
maggiore di utilizzatori sistemi Zucchetti che, potrebbe, darti una mano

Il giorno martedì 2 maggio 2017 16:41:29 UTC+2, BFS ha scritto:

Buonasera
 
Sarebbe possibile avere una copia di questi file file? In azienda ci stiamo imbattendo negli stessi problemi.
Grazie infinite

Userei un approccio "raw"... visto che parti da access, fatti una per una tutte le query che calcolano ciascuna 1 tipologia di record. 
Query di creazione tabelle e poste in cascata, quindi che contano cio che produci al passo precedente.
E i cui valori abbiano gia il formato lunghezza campo corretto (con tipo sempre testo e conversioni cast CStr),
Alla fine una banale routine di scrittura da tabelle su/i file di testo risolve ol problema definitivamente.
Effort? 1 ora risolto x sempre con facile manutenibilita futura in caso di espansione tracciato.
Ho fatto programma sia in access che excel