Vai al contenuto

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)

  1. z-99-init-program (mmmask.cpy), ctr-abil, rd-azi.
  2. Lettura configurazione RNEWCONF tramite x99-confi (utilncnf).
  3. open-files, lettura divisa conto.
  4. Tasti abilitati: F1-configura, F3-conferma, F8-calendario.
  5. Data e ora sistema (datasis, timesis).
  6. x-carica-lingua, get-divisa-conto.
  7. Titolo form "Presenze Giornaliere su Commessa".
  8. rd-msk-pop, display s-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 popolare tm-tab-ragg (fino a k-max-ragg reparti, k-max-comm-x-ragg commesse 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 → popola tm-sel-ragg e tm-sel-ragg-desa-pagina-02.
  • Fine attivita': fl-fine-attivita = k-yesa-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 → popola tm-sel-tsc, tm-sel-tsc-des, tm-sel-tsc-ana, tm-e-sota-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

  1. ltn-ora-fin = tm-ora-lettura.
  2. Calcolo durata: COGS62 (s62-ora-1 = ltn-ora-fin, s62-ora-2 = ltn-ora-ini, operazione "-") → s62-secondi-o / 60ltn-tempo (minuti).
  3. rwr-coglogtn.
  4. Se ok: agg-collegati thru ex-agg-collegati.

agg-collegati

  1. COGCOMTN: lookup per ltn-tcn + ltn-com; se non esiste → wr-cogcomtn; aggiornamento ctn-data-ini (se zero), ctn-data-fin, ctn-tot-tempo += ltn-tempo / 60 (ore); rwr-cogcomtn.

  2. 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-cogdmtes con dmt-data, dmt-currency.

  3. COGDMRIG: scansione st-cogdmrig-notmin + loop rdnxt-cogdmrig per trovare riga con stessa merce + commessa + sottocommessa:

  4. Se non trovata: inserimento nuova riga con tutti i dati (merce tecnico, commessa, sottocommessa, anagrafica, magazzino, currency).
  5. 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 in cogx51.decla. Usa mmmask.cpy (standalone).
  • La navigazione tra le 3 pagine avviene via tab-control con eventi cmd-tabchanged e event-data-1 = numero pagina.
  • I pulsanti reparto/commessa sono identificati da costanti k-exc-pb-pg1-* e k-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-lettura gestisce 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-ammin identifica un operatore con privilegi amministrativi sul programma.
  • Il programma legge da linkage utils01, utils01f, wcont1.