IMPRIF - Import/export di massa contatti cli/for¶
Intestazione¶
| Campo | Valore |
|---|---|
| Programma | IMPRIF |
| Titolo | Importazione/Esportazione contatti (riferimenti) clienti/fornitori |
| Modulo | Sistema |
| Posizione menu | Sistema > Utility > Imp/exp di massa > Clienti/fornitori > Contatti |
Scopo e logica generale¶
IMPRIF fa parte del framework IMP* per l'import/export di massa. Gestisce i contatti / riferimenti associati a un'anagrafica cliente o fornitore (nome, telefoni, interno, fax, e-mail, posizione, titolo, Skype, note, flag mailing e flag stampa in chiamata). Il record principale e' cogrifer (record rif-rec), affiancato dal file esteso cogrife2 (rif2-rec) per i campi lunghi (es. note).
Il programma opera in due direzioni, selezionate dal campo di maschera tm-ope:
- "I" (Importazione): legge un file delimitato (CSV/tab) o Excel, ne interpreta le colonne in base a un tracciato di ID campo e scrive/aggiorna i contatti su
cogrifer/cogrife2. - "E" (Esportazione): scorre i contatti (per tipo anagrafica o tutti) e produce un file TSV che viene poi aperto come Excel tramite
GRIDTOXS.
L'interfaccia e' una maschera GUI (framework mmmask.cpy) con un tasto funzione custom "Trova file (F7)" per la selezione del file. Il programma non ha parametri di linkage propri: la procedure division using stringhe e' senza area dedicata; l'eventuale richiamo automatico avviene tramite wo-parametro che puo' valere ECL (export contatti/clienti) o ICL (import contatti/clienti), preimpostando operazione, file e modello.
Flusso principale¶
apri(main): impostaprog-err/w-nome-hlp, salvawo-parametro, eseguectr-abil,z-99-init-program,rd-azi,open-files,x99-load-config. Attiva i tasti funzione (F1 configura, F3 conferma, F8 aiuto, F9 ricerca avanzata), carica bitmap e pulsante custom F7, imposta titolo maschera e costruisce i controlli.a4: inizializzatab-mascheracon i default (operazione "I", tipo "C", solo esistenti "S", ordinamento "C"). In base aw-sav-wo-parametro(ECL/ICL) forza l'operazione: perECLimposta export, copia in localecontatti.xlsviaCOPIAFe lo propone come file; perICLimposta import e azzera il file.a-tm-ope...a-tm-file: accept dei campi di maschera (operazione, tipo anagrafica, filtri codice da/a, esporta tutto, file di input/output, modalita' test). Controlli inx-controlla-tm-*; supporto ricerca codici viaCOGS65W/CRMS02.a-richiesta-conferma: alla conferma (F3), se import copia il file scelto nella cartella temporanea (C$COPY); se il file e'.xls/.xlsxlo converte in testo conESTRXLSforzando il delimitatore. Prepara il file risultatiimprif.txt.a-open-cogrisul: apre il file di logcogrisul, carica il tracciato campi (a1-carica-campi, oppurea2-carica-campiper export completo) e instrada sub-importa(I) oc-esporta(E).b-importa/b-10-loop: aprecogseque, salta le righe di intestazione (tm-righe-int), legge riga per riga, parsifica conb1-carica-delimitato(gestisce apici e delimitatore), esegueb1-validazioni-incrociatee, se non in test, aggiorna conb3-aggiorna. Consente l'interruzione con ESC + conferma.b1-carica-delimitato: scompone il record nei campi delimitati riempiendotab-dati(td-dato/td-dato-num), gestendo campi tra apici e il marcatore di azzeramento#@#.b3-aggiorna: determina inserimento o modifica. In import con codice 0 e non "solo esistenti" cerca un codice libero (cerca-libero/cerca-buchi). Leggecogrifer(chiaverif-tip+rif-cod): se assente scrive (wr-cogrifer, contatore inserimenti), altrimenti salva il vecchio inold-rec(contatore modifiche). Garantisce l'esistenza del record esteso (rd-cogrife2/wr-cogrife2). Poi mappa ogni ID campo (tc-inf) sul campo dirif-rec/rif2-rec, con logica di azzeramento esplicito, e riscrive (rwr-cogrifer/rwr-cogrife2).c-esporta/c-10-loop: aprecogexprt, scrive due righe di testa (tipi campo e ID campo), poi scorrecogrifer(st-cogrifer-notminper tutti, oppurest-cogrifer-notmin-chia2per la chiave secondaria per tipo/codice anagrafica), scrive una riga TSV per contatto leggendo anchecogrife2. Inc-90chiude e apre il file come Excel viaGRIDTOXS.a-fine/fine/z-chiudi: chiudecogrisul; se ci sono segnalazioni propone l'apertura del log (OPENFILE), chiude i file e la window ed esegueexit program.
File e tabelle acceduti¶
| File | Record | Modalita' | Uso |
|---|---|---|---|
| COGRIFER (logico) | rif-rec (chiave rif-tip+rif-cod; chiave secondaria cogrifer.k02 per tipo/codice anagrafica) |
I-O | Contatto principale: nome, telefoni, interno, fax, mail, posizione, titolo, Skype, flag mailing/stampa. Letto, scritto, riscritto in import; scorso in export |
| COGRIFE2 (logico) | rif2-rec |
I-O | Record esteso del contatto (campi lunghi, es. note) |
COGTABEL (logico feurtab) |
euta-rec |
I-O | Lettura configurazione (tipo 70, RICE/DEFINE, flag euta-c008-rif) |
| cogseque | seq-rec (line sequential) |
Input | File di appoggio con le righe da importare (dopo copia/conversione) |
| cogexprt | exp-rec (line sequential) |
Output | File di appoggio TSV generato in export, dato in pasto a GRIDTOXS |
| cogrisul | ris-rec (line sequential) |
Output | File imprif.txt con esiti/segnalazioni per riga |
Verbi di accesso (da imprif.prc): rd-cogrifer, wr-cogrifer, rwr-cogrifer, st-cogrifer-notmin, st-cogrifer-notmin-chia2, rdnxt-cogrifer, rd-cogrife2, wr-cogrife2, rwr-cogrife2, rd-cogtabel.
Copybook principali¶
Strutture dati / record:
- feurtab.fd, cogfiles.cpy - file fisico generalizzato tabelle (COGTABEL).
- cogrifer.cpy - record contatto rif-rec (incluso una seconda volta con replacing leading "rif-" by "old-" per conservare lo stato precedente in old-rec).
- cogrifer.k02 - chiave secondaria (per tipo/codice anagrafica), aggiunta a fine procedure.
- k-personal.cpy, k-tipi-cogtabel.cpy, costanti-clipot.cpy - costanti (personalizzazioni, tipi COGTABEL, clienti potenziali).
Utility / servizio:
- utilestrxls.cpy (ESTRXLS), utilopenfile.cpy (OPENFILE), utilncnf.cpy (RNEWCONF), utilu10.cpy/utilu20.cpy, utils05.cpy/utils25.cpy/utils43.cpy/utils44.cpy/utils52.cpy/utils65.cpy, utilcogsa1.cpy, utilcrms02.cpy, utilcogsad.cpy.
- l-copiaf.cpy, u-copiaf.cpy (COPIAF), opensave.def (C$OPENSAVEBOX).
Working standard: wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy, cogazien.cpy, wcont.cpy, wcont1.cpy.
Screen Designer: imprif.select, imprif.fd, imprif.wrk, imprif.decla, imprif.prc, imprif-01.scr.
Routine finali: stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, opengen.cpy, mmmask.cpy.
Programmi chiamati (CALL)¶
| Programma | Scopo |
|---|---|
| ESTRXLS | Conversione file Excel (.xls/.xlsx) in testo delimitato per l'import |
| GRIDTOXS | Apertura del file TSV esportato come foglio Excel |
| COPIAF / C$COPY | Copia del file tra cartella server e client (thin client) |
| OPENFILE | Apertura del file di log risultati su richiesta |
| C$OPENSAVEBOX | Dialog di scelta file (tasto F7 "Trova file") |
| RNEWCONF | Lettura configurazioni (delimitatore Excel, ricerca upper) |
| COGU10W | Recupero divisa conto (GetDivisaConto) |
| COGS65W | Ricerca/aiuto sui codici anagrafica |
| CRMS02 | Ricerca/servizio anagrafiche CRM |
| COGSA1 / COGSAD | Servizi di supporto anagrafica |
Note¶
- I ID campo gestiti sono definiti come costanti
78 k-rif-*(RIF-TIP,RIF-COD,RIF-ANA-TIP,RIF-ANA-COD,RIF-NOME,RIF-TEL-1/2/3,RIF-INTERNO,RIF-FAX,RIF-MAIL,RIF-POSIZIONE,RIF-TITOLO,RIF-SKYPE,RIF-NOTE,RIF-FL-MAILING,RIF-FL-STAMPA-CHIAMATA). La costanteRIF-LIV-ACCe' presente ma commentata. - Il valore
#@#(k-campo-svuotato) in una colonna forza l'azzeramento esplicito del campo corrispondente durante l'import. - La modalita' test (
tm-test= "S") esegue il parsing e le validazioni senza scrivere sulle tabelle, producendo solo il log. - Il richiamo automatico via
wo-parametro(ECL/ICL) e' pensato per il flusso "clienti potenziali": conECLil filecontatti.xlsviene copiato in locale prima dell'export. - Configurazioni RNEWCONF lette: delimitatore-colonne-excel (gruppo
cogesys) e ricerca-upper (grupporicegenera); inoltre una configurazione su COGTABEL tipo 70 (RICE/DEFINE, flageuta-c008-rif) per abilitare la ricerca del codice contatto.
Documentazione tecnica -- creata 2026-08-06