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¶
- Maschera (sezione MAIN): accept dei parametri operativi:
tm-tipo-elab(I = importazione, E previsto)tm-file-mov(file da importare; tasto F7 apreC$OPENSAVEBOXper la ricerca)tm-test(S/N, elaborazione di prova)tm-merce(prestazione di default applicata ai dettagli, validata su COGMERCI)
- Conferma (F3):
x-imposta-confermaverifica file, test, tipo elaborazione e merce prima di abilitare la conferma. - Copia file (
a-inizio-carica): il file indicato viene copiato inext-tmp-dir/import.<ext>viaC$COPY(gestendo il thin-client con prefisso@[DISPLAY]:). Se estensionexls/xlsx, viene convertito inimport.txtchiamando ESTRXLS. - Fase di controllo (
a-controlla/ex-a): scorrecogseque, per ogni riga valida verifica cliente (COGGEANA), tecnico (COGRIFER) e validita' data (AZVALIDA.COB). Ogni anomalia scrive nel log e impostatm-fl-errori = "S". - 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.
- Se
- 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.
- Ottiene un nuovo id chiamata da COGS25 (contatore
- 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 impostanotm-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
cogsequeecogtranssono dichiarate manualmente nel SELECT/FD del sorgente (non gestite da Screens). - Usa il pattern
PERFORM ... THRUeGO TO(es.a-controlla thru ex-a, loopa-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.