Vai al contenuto

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

  1. apri (main): imposta prog-err/w-nome-hlp, salva wo-parametro, esegue ctr-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.
  2. a4: inizializza tab-maschera con i default (operazione "I", tipo "C", solo esistenti "S", ordinamento "C"). In base a w-sav-wo-parametro (ECL/ICL) forza l'operazione: per ECL imposta export, copia in locale contatti.xls via COPIAF e lo propone come file; per ICL imposta import e azzera il file.
  3. 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 in x-controlla-tm-*; supporto ricerca codici via COGS65W/CRMS02.
  4. a-richiesta-conferma: alla conferma (F3), se import copia il file scelto nella cartella temporanea (C$COPY); se il file e' .xls/.xlsx lo converte in testo con ESTRXLS forzando il delimitatore. Prepara il file risultati imprif.txt.
  5. a-open-cogrisul: apre il file di log cogrisul, carica il tracciato campi (a1-carica-campi, oppure a2-carica-campi per export completo) e instrada su b-importa (I) o c-esporta (E).
  6. b-importa / b-10-loop: apre cogseque, salta le righe di intestazione (tm-righe-int), legge riga per riga, parsifica con b1-carica-delimitato (gestisce apici e delimitatore), esegue b1-validazioni-incrociate e, se non in test, aggiorna con b3-aggiorna. Consente l'interruzione con ESC + conferma.
  7. b1-carica-delimitato: scompone il record nei campi delimitati riempiendo tab-dati (td-dato/td-dato-num), gestendo campi tra apici e il marcatore di azzeramento #@#.
  8. b3-aggiorna: determina inserimento o modifica. In import con codice 0 e non "solo esistenti" cerca un codice libero (cerca-libero/cerca-buchi). Legge cogrifer (chiave rif-tip+rif-cod): se assente scrive (wr-cogrifer, contatore inserimenti), altrimenti salva il vecchio in old-rec (contatore modifiche). Garantisce l'esistenza del record esteso (rd-cogrife2/wr-cogrife2). Poi mappa ogni ID campo (tc-inf) sul campo di rif-rec/rif2-rec, con logica di azzeramento esplicito, e riscrive (rwr-cogrifer/rwr-cogrife2).
  9. c-esporta / c-10-loop: apre cogexprt, scrive due righe di testa (tipi campo e ID campo), poi scorre cogrifer (st-cogrifer-notmin per tutti, oppure st-cogrifer-notmin-chia2 per la chiave secondaria per tipo/codice anagrafica), scrive una riga TSV per contatto leggendo anche cogrife2. In c-90 chiude e apre il file come Excel via GRIDTOXS.
  10. a-fine / fine / z-chiudi: chiude cogrisul; se ci sono segnalazioni propone l'apertura del log (OPENFILE), chiude i file e la window ed esegue exit 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 costante RIF-LIV-ACC e' 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": con ECL il file contatti.xls viene copiato in locale prima dell'export.
  • Configurazioni RNEWCONF lette: delimitatore-colonne-excel (gruppo cogesys) e ricerca-upper (gruppo ricegenera); inoltre una configurazione su COGTABEL tipo 70 (RICE/DEFINE, flag euta-c008-rif) per abilitare la ricerca del codice contatto.

Documentazione tecnica -- creata 2026-08-06