COGX51 - Rilevazione Presenze Giornaliere su Commesse¶
Descrizione¶
Programma GUI per la rilevazione delle presenze dei tecnici sulle commesse di lavoro. Interfaccia a 3 pagine (tab-control) con pulsanti touch-friendly: pagina 1 = selezione reparto (raggruppamento), pagina 2 = selezione commessa (sottoscala), pagina 3 = inserimento lettura con calcolo automatico durata. Gestisce apertura e chiusura di sessioni di lavoro su COGLOGTN; aggiorna i totali su COGCOMTN e i giornalieri su COGDMTES/COGDMRIG. Autore: Gio - Eurosystem.
Tabelle utilizzate¶
| Tabella | Accesso | Descrizione |
|---|---|---|
| COGLOGTN | Lettura/Scrittura/Rewrite | Log sessioni tecnico (inizio/fine attivita' per commessa) |
| COGCOMTN | Lettura/Scrittura/Rewrite | Totale ore tecnico per commessa |
| COGDMTES | Lettura/Scrittura | Testate giornalieri di produzione |
| COGDMRIG | Lettura/Scrittura | Righe giornalieri di produzione |
| COGTABEL | Lettura | Tabelle configurazione (tipo raggruppamento k-euta-tipo-ragg = "BE") |
| FEURTAB | Lettura | Tabella file euro/percorsi |
| Tabelle cogx51 | Lettura | Definite in cogx51.select / cogx51.fd / cogx51.wrk |
Struttura dati principale¶
Costanti di configurazione¶
| Costante | Valore | Significato |
|---|---|---|
k-max-ragg |
4 | Numero massimo reparti (raggruppamenti) |
k-max-comm-x-ragg |
20 | Numero massimo commesse per reparto |
k-euta-tipo-ragg |
"BE" | Tipo COGTABEL per raggruppamenti |
tab-maschera / tm-dati¶
Campi principali di stato macchera:
| Campo | Descrizione |
|---|---|
tm-tempo-hr |
Ore lavorate calcolate (9(06)v999) |
tm-tcn |
Tecnico corrente (tipo + codice 10 cifre) |
tm-tcn-des |
Descrizione tecnico |
tm-tcn-merce |
Merce associata al tecnico (gru+sot+cod) |
tm-tcn-mer-um |
Unita' di misura |
tm-tcn-mer-contr |
Codice contratto |
tm-tcn-mer-cc |
Centro di costo |
tm-tcn-mer-ali |
Aliquota IVA |
tm-data-lettura |
Data lettura corrente (AAAAMMGG) |
tm-ora-lettura |
Ora lettura (HHMMSSCC) |
tm-lettura |
Input lettura badge/tastiera (X(11)) |
tm-sel-ragg |
Raggruppamento selezionato (X(02)) |
tm-sel-tsc |
Commessa selezionata (X(10)) |
tm-sel-sot |
Sottocommessa selezionata (X(10)) |
tm-sel-tsc-ana |
Anagrafica commessa (tipo + codice) |
tm-pg1/2/3-eti-stato |
Etichette di stato per le 3 pagine |
tm-tab-ragg |
Tabella reparti con commesse associate (struttura annidata) |
Tabella reparti (tm-tab-ragg)¶
tm-ragg-idx : numero reparti caricati
tm-ragg-ele (1..4)
tm-e-ragg : codice reparto (X(02))
tm-e-ragg-des : descrizione reparto (X(40))
tm-tab-tsc
tm-tsc-idx : numero commesse per reparto
tm-tsc-ele (1..20)
tm-e-tsc : codice commessa (X(10))
tm-e-tsc-des : descrizione commessa (X(40))
tm-e-tsc-ana : anagrafica (tipo X(01) + cod 9(05))
tm-e-sot : codice sottocommessa (X(10))
tm-e-sot-des : descrizione sottocommessa (X(40))
tm-cfg - Configurazione programma¶
| Campo | Descrizione |
|---|---|
tm-cfg-info-chiave-su-scheda |
Numero chiave da mostrare su scheda (9(05)) |
tm-cfg-ins-auto-sot-da-scheda-abilita |
Abilita inserimento automatico sottocommessa da scheda (X(01)) |
tm-cfg-ins-auto-sot-da-scheda-tcl |
Tipo classe per inserimento automatico (X(03)) |
tm-cfg-cogx51-ope-ammin |
Codice operatore amministratore (9(03)) |
Flusso di elaborazione¶
Inizializzazione (apri)¶
z-99-init-program(mmmask.cpy),ctr-abil,rd-azi.- Lettura configurazione RNEWCONF tramite
x99-confi(utilncnf). open-files, lettura divisa conto.- Tasti abilitati: F1-configura, F3-conferma, F8-calendario.
- Data e ora sistema (
datasis,timesis). x-carica-lingua,get-divisa-conto.- Titolo form "Presenze Giornaliere su Commessa".
rd-msk-pop, displays-mm-1,z-costruisci-controlli.
Ciclo principale (a4)¶
x-status-bar-init,initialize tab-maschera.carica-elenco-commesse: lettura da COGTABEL e tabelle commesse per popolaretm-tab-ragg(fino ak-max-raggreparti,k-max-comm-x-raggcommesse per reparto).tm-data-lettura = datasis(data odierna come default).- Navigazione pagine via tab-control: evento
cmd-tabchanged.
Pagina 1 - Selezione reparto (a-pagina-01 → a-tm-pg1-eti-stato)¶
- Etichetta di stato: "SELEZIONARE IL REPARTO PREMENDO IL RELATIVO PULSANTE".
- Pulsanti: ESCI (
k-exc-pb-pg1-esci), FINE ATTIVITA' (k-exc-pb-pg1-fine-attivita), RAGGR1..4 (k-exc-pb-pg1-raggr1..4). - Selezione reparto:
tm-sel-ragg-idx = 1..4→ popolatm-sel-raggetm-sel-ragg-des→a-pagina-02. - Fine attivita':
fl-fine-attivita = k-yes→a-pagina-03.
Pagina 2 - Selezione commessa (a-pagina-02 → a-tm-pg2-eti-stato)¶
- Etichetta: "COMMESSE DEL :
". - Pulsanti: FINE ATTIVITA', INDIETRO (→ pagina 1), COMMESSA1..20 (
k-exc-pb-pg2-commessa1..20). - Selezione commessa:
tm-sel-tsc-idx = 1..20→ popolatm-sel-tsc,tm-sel-tsc-des,tm-sel-tsc-ana,tm-e-sot→a-pagina-03.
Pagina 3 - Inserimento lettura (a-pagina-03 → a-tm-data-lettura → a-tm-lettura)¶
a-pagina-03-ini: etichetta di stato con reparto e commessa selezionati (o "FINE ATTIVITA'" se fl-fine-attivita = k-yes). z-cambia-controlli.
a-tm-data-lettura:
- Se visibilita' campo = 0: data proposta automaticamente, skip a a-tm-lettura.
- Input data via UTILS52 (calendario, F8).
- Validazione x-controlla-tm-data-lettura.
a-tm-lettura:
- initialize tm-lettura, display del campo.
- Accept libero (e-tm-lettura).
- segnala-esito-lettura: aggiorna etichette esito (verde/rosso).
- x-controlla-tm-lettura: se non valida → segnala-esito-lettura, ritorna.
- elabora-lettura: esegue la logica di registrazione.
- Loop su a-tm-lettura (il tecnico puo' registrare piu' letture consecutive).
- Pulsante INDIETRO (k-exc-pb-pg3-indietro) → a-pagina-02.
elabora-lettura¶
se fl-fine-attivita = k-yes:
se x-visible-tm-data-lettura != 0: tm-ora-lettura = 18300000 (18:30)
cerca-logtn-aperto-per-tecnico
se esiste sessione aperta: chiudi-logtn-per-tecnico
fl-ok-lettura = k-yes
altrimenti:
cerca-logtn-aperto-per-tecnico
se esiste sessione aperta:
chiudi-logtn-per-tecnico → ricomincia elabora-lettura (chiude e riapre)
altrimenti:
apri-logtn-per-tecnico
segnala-esito-lettura
cerca-logtn-aperto-per-tecnico¶
Ricerca su COGLOGTN per tecnico (tm-tcn) senza ora di fine: fl-esiste-ltn-aperto.
apri-logtn-per-tecnico¶
Inserisce nuovo record COGLOGTN con:
- ltn-tcn = tm-tcn
- ltn-data = tm-data-lettura
- ltn-ora-ini = tm-ora-lettura
- ltn-com = tm-sel-tsc
- ltn-stc = tm-sel-sot
chiudi-logtn-per-tecnico¶
ltn-ora-fin = tm-ora-lettura.- Calcolo durata: COGS62 (
s62-ora-1 = ltn-ora-fin,s62-ora-2 = ltn-ora-ini, operazione "-") →s62-secondi-o / 60→ltn-tempo(minuti). rwr-coglogtn.- Se ok:
agg-collegati thru ex-agg-collegati.
agg-collegati¶
-
COGCOMTN: lookup per
ltn-tcn+ltn-com; se non esiste →wr-cogcomtn; aggiornamentoctn-data-ini(se zero),ctn-data-fin,ctn-tot-tempo += ltn-tempo / 60(ore);rwr-cogcomtn. -
COGDMTES: lookup per
dmt-doc-tip = "G",dmt-doc-sed = az-main-mag,dmt-doc-ann,dmt-doc-bar = spaces,dmt-doc-num = data-mmgg; se non esiste →wr-cogdmtescondmt-data,dmt-currency. -
COGDMRIG: scansione
st-cogdmrig-notmin+ looprdnxt-cogdmrigper trovare riga con stessa merce + commessa + sottocommessa: - Se non trovata: inserimento nuova riga con tutti i dati (merce tecnico, commessa, sottocommessa, anagrafica, magazzino, currency).
- Se trovata: aggiornamento ore (
dmr-ore += ltn-tempo / 60), valori costo/prezzo (dmr-cst,dmr-pre);rwr-cogdmrig.
Subroutine e utility chiamate¶
| Subroutine | Scopo |
|---|---|
| COGS62 | Calcolo differenza oraria in secondi |
| UTILS52 | Input data con calendario |
| UTILS65 | Ricerca anagrafica (utility header) |
| UTILS62 | Utility calcolo ore |
| UTILU10 | Display valori in divisa |
| UTILU20 | Utility generica |
| UTILU35 | Gestione U35 (call-u35-cancel in chiusura) |
| UTILU18 | Utility generica |
| UTILCOGL61 | Calcolo prezzi |
| UTILNCNF | Lettura configurazioni RNEWCONF |
Note implementative¶
- Interfaccia GUI AcuCOBOL: screen section in
cogx51-01.scr; declaratives incogx51.decla. Usammmask.cpy(standalone). - La navigazione tra le 3 pagine avviene via
tab-controlcon eventicmd-tabchangedeevent-data-1= numero pagina. - I pulsanti reparto/commessa sono identificati da costanti
k-exc-pb-pg1-*ek-exc-pb-pg2-*nel working storage. x-visible-tm-data-lettura: se = 0 la data e' nascosta e viene usata la data di sistema; altrimenti e' visibile e modificabile dall'utente (dipende dalla configurazione RNEWCONF).- La logica "chiudi e riapri" in
elabora-letturagestisce il caso in cui il tecnico scansioni la stessa commessa due volte di fila: la prima chiude, la seconda riapre. - L'orario di fine attivita' predefinito e'
18300000(18:30:00.00) quando la data non e' visibile e viene premuto "Fine Attivita'". - COGDMTES usa chiave
"G" + magazzino + anno + " " (spaces) + mmgg(numero giornaliero come data MMGG compressa in numerico). - La configurazione
tm-cfg-cogx51-ope-amminidentifica un operatore con privilegi amministrativi sul programma. - Il programma legge da linkage
utils01,utils01f,wcont1.