Vai al contenuto

SIMS01 - Importazione storico interventi

Sorgente: cbl/sims01.cbl (1.283 righe) | Tipo: Programma interattivo standalone (GUI) | Program-ID: sims01

Menu: Non a menu (non presente in prog.txt). Avviabile direttamente o richiamato come strumento di importazione.


Scopo

Importa nell'azienda corrente uno storico di interventi tecnici a partire da un file esterno (CSV/Excel .xls/.xlsx). Per ogni riga valida del file crea le strutture del modulo Assist 2.0: testata chiamata (ASNCHTES), testata intervento (ASNINTES), indagini (ASNINDAG), record secondario intervento (ASNINTE2) e dettaglio prestazione (ASNINDET). L'elaborazione e' eseguibile in modalita' "Test" (solo controllo, senza aggiornamenti) o in modalita' definitiva con scrittura sugli archivi.


File e tabelle usati

File di lavoro

File Assegnazione Org. Scopo
cogseque w-seqname (line sequential) line seq. Copia locale del file di importazione (riga grezza in seq-rec pic x(2000))
cogtrans w-trs-name (indexed, key trs-chia1) indexed File di lock "#$sims01.<operatore>" per impedire l'uso concorrente della funzione
feurtab copy "feurtab.fd" / cogfiles.cpy indexed File tabelle Eurocoge (accesso anagrafiche/configurazioni)

Tabelle Assist scritte (output)

Tabella Copybook Record Campi rilevanti valorizzati
ASNCHTES asnchtes acht-rec acht-id, acht-data, acht-cli-ass-tip="C", acht-cli-ass-cod, acht-tip-att, acht-operatore=1, acht-stato (da config), acht-situazione="C", acht-chiu-data, acht-note, acht-classe="C", acht-fl-fat="S", acht-oggetto (BAT/FT/CIsp)
ASNINTES asnintes acit-rec acit-id, acit-id-chiamata, acit-ass-data/acit-int-data, acit-tecnico(1), acit-note, acit-fl-bol="E", acit-stato="C", acit-fl-risolutivo="S", acit-tipo-intervento="C"
ASNINDAG asnindag aitd-rec aitd-id, aitd-tipo="F", aitd-note
ASNINTE2 asninte2 acit2-rec acit2-id (creato se mancante)
ASNINDET asnindet acid-rec acid-id, acid-prog, acid-tip="P", acid-merce, acid-qta (ore), acid-importo, acid-pre-lor/acid-pre-net, acid-fl-mov="X", acid-fl-fat="S", acid-tecnico, acid-mag, acid-data-int

Tabelle lette (controllo/validazione)

Tabella Copybook Uso
COGGEANA rd-coggeana Verifica esistenza cliente (ana-tipo="C", ana-cod=w-codcli)
COGRIFER rd-cogrifer Verifica esistenza operatore/tecnico (rif-tip="C", rif-cod=tm-tecnico1)
COGMERCI rd-cogmerci Verifica codice prestazione/merce indicato a maschera (mer-chia=tm-merce)

Struttura del file di importazione

Ogni riga (delimitatore configurato, vedi RNEWCONF) e' spacchettata via unstring in w-seq-rec:

Campo Contenuto
w-seq-a-codcli Codice cliente (Area)
w-seq-b-tipo-att Tipo attivita'
w-seq-c-data-inter Data intervento (gg/mm/aaaa)
w-seq-d-posiz Posizione
w-seq-e-descriz Descrizione/note (x(2000))
w-seq-f-importo Importo
w-seq-g-ore Ore
w-seq-h-ope-tec Operatore/tecnico
w-seq-i-bat Riferimento BAT
w-seq-j-ft Riferimento FT
w-seq-k-cisp Riferimento CIsp
w-seq-l-id-rem / w-seq-m-data-rem Id e data remoti

La prima riga del file (intestazione) viene saltata (if tm-letti = 1).


Logica di elaborazione

  1. Maschera (sezione MAIN): accept dei parametri operativi:
    • tm-tipo-elab (I = importazione, E previsto)
    • tm-file-mov (file da importare; tasto F7 apre C$OPENSAVEBOX per la ricerca)
    • tm-test (S/N, elaborazione di prova)
    • tm-merce (prestazione di default applicata ai dettagli, validata su COGMERCI)
  2. Conferma (F3): x-imposta-conferma verifica file, test, tipo elaborazione e merce prima di abilitare la conferma.
  3. Copia file (a-inizio-carica): il file indicato viene copiato in ext-tmp-dir/import.<ext> via C$COPY (gestendo il thin-client con prefisso @[DISPLAY]:). Se estensione xls/xlsx, viene convertito in import.txt chiamando ESTRXLS.
  4. Fase di controllo (a-controlla / ex-a): scorre cogseque, per ogni riga valida verifica cliente (COGGEANA), tecnico (COGRIFER) e validita' data (AZVALIDA.COB). Ogni anomalia scrive nel log e imposta tm-fl-errori = "S".
  5. Esito controllo:
    • Se tm-fl-errori = "S" → mostra "elaborazione con errori", apre il log via GESLPRC e termina.
    • Se tm-test = "S" → "Test senza errori" e termina (nessun aggiornamento).
    • Altrimenti prosegue con l'aggiornamento.
  6. Fase di aggiornamento (b-aggiorna / ex-b): per ogni riga valida:
    • Ottiene un nuovo id chiamata da COGS25 (contatore 59), evitando collisioni su ASNCHTES (a-rd-numer).
    • Calcola l'id intervento via cerca-numerazione-bis (id chiamata * 100 + progressivo) e ulteriore scan su ASNINTES (a-rd-numer-int).
    • Scrive testata chiamata, testata intervento, indagine "F", record ASNINTE2, e dettaglio prestazione con prezzo unitario = importo / ore.
    • Incrementa tm-scritti.
  7. Chiusura: log conteggi (letti/inseriti), proposta di consultare il log via GESLPRC, chiusura file e finestra.

Gli importi e le ore sono ricavati con function numval; il prezzo lordo/netto del dettaglio e' acid-importo / acid-qta. Se le ore risultano zero, vengono forzate a 1 (per evitare divisione per zero).


CALL ad altri moduli

Modulo Modalita' Scopo
RNEWCONF using stringhe util-ncnf ncnf-tab Lettura configurazioni (delimitatore Excel, codice stato evasione)
ESTRXLS using stringhe util-estrxls Conversione file Excel → testo
COGS25 using stringhe util-s25 Generazione contatore/numerazione (codice 59) per id chiamata
AZVALIDA.COB using ws-campoa Validazione data intervento
GESLPRC using stringhe util-geslprc Consultazione log procedura
C$COPY / C$OPENSAVEBOX librerie ACUCOBOL Copia file e dialog di selezione file

Configurazioni RNEWCONF (x99-confi)

Gruppo Chiave Variabile Uso
cogesys delimitatore-colonne-excel tm-cfg-delimiter Delimitatore di colonna del file importato
ASSIST codice-stato-evasione tm-cfg-stato-evasa Valore di acht-stato assegnato alle chiamate create

COPY principali

feurtab.fd, sims01.select, sims01.fd, sims01.wrk, sims01.decla, sims01.prc, sims01-01.scr, cogfiles.cpy, utils25.cpy, utils68.cpy, opensave.def, utilncnf.cpy, utilopenfile.cpy, utilestrxls.cpy, utilgesdebug.cpy, cogazien.cpy, wgrave/wnscr/wopenf/wstato, wcont.cpy/wcont1.cpy (linkage), mmmask.cpy, gesdebug.cpy, cogtrans.k01.


Gestione errori e log

  • Le anomalie di controllo (cliente non codificato, tecnico non codificato, data errata) vengono scritte sul log di procedura tramite gesdebug-write (geslprc-msg) e impostano tm-fl-errori.
  • Il log e' apribile a fine elaborazione tramite GESLPRC (CONSULTA-PROCEDURA).
  • Il file di lock cogtrans (#$sims01.<operatore>) impedisce l'esecuzione concorrente: se gia' aperto da altro operatore, mostra messaggio e termina.

Note

  • Programma di tipo "strumento di importazione una-tantum": non a menu, richiede file esterno e prestazione/merce di default.
  • Le tabelle temporanee cogseque e cogtrans sono dichiarate manualmente nel SELECT/FD del sorgente (non gestite da Screens).
  • Usa il pattern PERFORM ... THRU e GO TO (es. a-controlla thru ex-a, loop a-10-loop/b-10-loop): codice in stile legacy non ancora adeguato alle convenzioni correnti.
  • Il prefisso "SIMS" appare nei commenti come etichetta del programma ("SIMS: Importazione storico interventi"); non vi e' nel sorgente alcun riferimento a logiche di "lista fissa" ne' a funzionalita' offline.