Moduli servizio infrastrutturali (C1)¶
Panoramica¶
I moduli servizio sono sottoprogrammi (chiamati via CALL) che forniscono funzionalita' trasversali ai programmi applicativi. Non hanno interfaccia utente propria — ricevono parametri, eseguono l'operazione e restituiscono risultati.
| Programma | Righe | Funzione | Usato da |
|---|---|---|---|
| COGS25 | 692 | Numerazione progressiva documenti | COGG69HT, COGV33, COGM58, ... |
| COGU12 | 762 | Aggiornamento saldi magazzino | COGG69HT, COGM58, COGV38, ... |
| COGL61 | 453 | Lettura prezzi acquisto/medio | IMPMER, COGE31, COGV30, COGV33 |
| COGS77 | 1.749 | Servizio centrale partite aperte | COGE40-45, COGB70, COGV38 |
| COGP13A | 3.866 | Scarico componenti produzione | COGP13, COGL01, COGL23 |
| COGE51 | 5.666 | Contabilizzazione singola fattura | COGE50 |
| COGU11 | 2.394 | Cancellazione bolle/DDT | COGV38 |
| CANIVA | 1.279 | Cancellazione contabilita' e IVA | COGV38 |
| COGD53 | 1.204 | Integrazione Modula | COGS26, COGM58, COGV38 |
COGS25 — Numerazione progressiva¶
Identificazione¶
- Programma: COGS25 (692 righe)
- Autore: Andrea Parmeggiani - Eurosystem
- Funzione: Attribuzione numerazione progressiva a documenti (bolle, fatture, prima nota, BdP, ecc.)
Interfaccia¶
CALL "COGS25" USING stringhe util-s25 util-s25b
Input (util-s25): | Parametro | Tipo | Descrizione | |-----------|------|-------------| | s25-i-mag | X(1) | Magazzino; blank = numerazioni contabilita' | | s25-i-cod | 9(2) | Codice numerazione (es. 3-50) | | s25-i-agg | X(1) | Flag aggiornamento: "N"=no, "F"=forza, ">"=forza se maggiore | | s25-i-data | 9(8) | Data registrazione | | s25-i-aa | 9(4) | Anno competenza | | s25-i-tip-doc | X(1) | Tipo documento IVA | | s25-qa-direct | X(1) | Operazione: "R"=Read, "W"=Write, spaces=standard |
Output: | Parametro | Tipo | Descrizione | |-----------|------|-------------| | s25-o-num | 9(12) | Numero progressivo assegnato |
Modalita' operative¶
| Modalita' | Trigger | File | Descrizione |
|---|---|---|---|
| Direct | s25-qa-direct <> spaces | COGNUMER | Lettura/scrittura diretta record |
| Standard | s25-i-mag = spaces | COGNUMER tab 11/76/77 | Numerazione contabile |
| Magazzino | s25-i-mag significativo | COGNUMER tab 12 | Numerazione per magazzino/anno |
Sotto-modalita' standard¶
- Se cod=5 e
az-num-pno="M"→ numerazione mensile prima nota (tab 13) con boundary check - Se
az-gio-num="S"+ tipo doc → numerazione per registro IVA (tab 76) - Se
az-gio-num="T"+ tipo doc → numerazione IVA per tipo (tab 77)
File: COGNUMER (tabelle 11, 12, 13, 76, 77)¶
COGU12 — Aggiornamento saldi magazzino¶
Identificazione¶
- Programma: COGU12 (762 righe)
- Autore: Gianluca Tonti
- Funzione: Aggiornamento centralizzato saldi magazzino (giacenza, impegnata, ordinata, prenotata)
Interfaccia¶
CALL "COGU12" USING stringhe util-u12
Input (util-u12): | Parametro | Tipo | Descrizione | |-----------|------|-------------| | u12-tipo | X(1) | Tipo: "I"=Impegnata, "G"=Giacenza, "O"=Ordinata, "P"=Prenotata | | u12-mag | X(1) | Magazzino | | u12-merce | X(7) | Chiave merce (GRU/SOT/COD) | | u12-entrusc | X(1) | Segno: "E"=entrata, "U"=uscita | | u12-qta-old | S9(09)V999 | Quantita' precedente | | u12-qta-new | S9(09)V999 | Quantita' nuova | | u12-causale | 9(2) | Codice causale movimento | | u12-fl-leggi-tes | X(1) | "O"=leggi TESOR, "B"=leggi TESBO |
Output: u12-esito ("S"=successo, "N"=errore)
Operazioni¶
| Tipo | Campo aggiornato | Logica segno |
|---|---|---|
| "G" (Giacenza) | msal-qta | E: -old +new; U: +old -new |
| "I" (Impegnata) | msal-qta-impegnata | E: +old -new; U: -old +new |
| "O" (Ordinata) | msal-qta-ordinata | E: -old +new; U: +old -new |
| "P" (Prenotata) | msal-qta-prenotata | E: +old -new; U: -old +new |
Pattern create-if-not-exists¶
Se COGSLMAG non contiene il record per mag+merce, lo crea automaticamente e poi aggiorna.
Funzionalita' aggiuntive¶
- Imballi (se
az-imballi="B"): aggiorna COGSLIMD con segno invertito - Logging (se
tm-cfg-log-*configurato): scrive su COGLOG con dettaglio operazione - Warning prenotata negativa: segnala quando il prenotato passa a negativo
File: COGSLMAG (R/W), COGSLIMD (R/W), COGTABEL tipo 15 (R), COGLOG (W)¶
COGL61 — Lettura prezzi acquisto/medio¶
Identificazione¶
- Programma: COGL61 (453 righe)
- Autore: Gianluca Tonti
- Funzione: Lookup prezzi per articolo: PMA (prezzo medio acquisto), PUA (ultimo acquisto), PMV (medio vendita)
Interfaccia¶
CALL "COGL61" USING stringhe util-cogl61
Input: | Parametro | Tipo | Descrizione | |-----------|------|-------------| | cogl61-merce | X(7) | Chiave merce | | cogl61-data | 9(8) | Data ricerca (0 = piu' recente) | | cogl61-data-precisa | X(1) | "S"=ricerca esatta, "N"=approssimata | | cogl61-in-prezacq/pma/pmv | X(1) | Flag "S" per ciascun prezzo richiesto | | cogl61-in-pre-ven | S9(15)V99 | Prezzo vendita (per calcolo % servizi) |
Output: cogl61-out-prezacq, cogl61-out-pma, cogl61-out-pmv con divise e date
Modalita'¶
| Modalita' | Trigger | Logica |
|---|---|---|
| FIFO-fisso | Merce servizio/non-giacenza + config % | PMA = PreVen - (PreVen * % / 100) |
| Storico esatto | cogl61-data-precisa="S" | Read diretto COGPRMED per data |
| Storico approssimato | Default | Scan sequenziale COGPRMED dal piu' recente |
| Fallback | Nessun storico trovato | Prezzi da COGMERCI (anagrafica) |
File: COGPRMED (R), COGMERCI (R), COGMERAP (R), COGRACMC (R)¶
COGS77 — Servizio centrale partite aperte¶
Identificazione¶
- Programma: COGS77 (1.749 righe)
- Autore: Eurosystem
- Funzione: Gestore centralizzato ricerca, aggiornamento e calcolo partite aperte/chiuse
Interfaccia¶
CALL "COGS77" USING stringhe util-s77
Dispatcher su campo s77-fun:
| Operazione | Funzione | Descrizione |
|---|---|---|
| R-PARTITA | Ricerca per chiave | Ricerca partita per identificativi univoci |
| R-VAL-DATA | Ricerca per data+cliente | Scadenzari ordinati per data |
| R-VAL-ANA | Ricerca per cliente+data | Partite ordinate per anagrafica |
| R-VAL-BAN | Ricerca per banca | Filtro RiBa per banca (ABI/CAB) |
| R-SOLO-SAL | Calcolo saldo | Saldo totale cliente/fornitore (per fido) |
| UPD-SOSP | Aggiorna sospensione | Flag sospensione su partita |
| UPD-PARTI | Sincronizza con contabilita' | Ricalcola saldo da movimenti, apri/chiudi partita |
| DEL-PADOC | Cancella documenti | Elimina riferimenti da COGPADOC |
Logica UPD-PARTI (la piu' complessa)¶
1. Leggi COGPARTI
2. Accumula movimenti da COGMOVPA/COGOLDPA
3. Se nuovo record → crea, cerca banca per RiBa
4. Se saldo != 0 → partita APERTA (D=debitore, A=accreditore)
5. Se saldo = 0 → partita CHIUSA (skip se RiBa ritirata)
6. Rewrite COGPARTI
Gestioni speciali¶
- Consorzi (
az-consorzi="S"): calcolo interessi via CAPS53, restrizione per magazzino - Scadenzari RiBa: logica riapertura se chiusa dopo data scadenzario
- Conversione Lire-Euro: per partite storiche
- Buffer movimenti: max 600 per partita
Output: COGWPNO (archivio appoggio movimenti)¶
File: COGPARTI (R/W/D), COGMOVPA (R), COGOLDPA (R), COGGEANA (R), COGPADOC (R/D), NUTSRIBA (R)¶
COGP13A — Scarico componenti produzione¶
Identificazione¶
- Programma: COGP13A (3.866 righe)
- Autore: Andrea Parmeggiani - Eurosystem
- Funzione: Motore centrale del ciclo produzione — gestione interattiva di scarico/avanzamento semilavorati
Interfaccia¶
CALL "COGP13A" USING stringhe util-p13a
Dispatcher su campo p13a-fun:
| Codice | Funzione | Chiamante | Descrizione |
|---|---|---|---|
| CL | Creazione lavorazione | COGP13 | Operatore conferma QTA semilavorati, decide passaggio a mag. c/lavoro |
| SC | Scarico successivo | COGL23 | Visualizza struttura, manda componenti su mag. c/lavoro |
| AV | Avanzamento | COGL01 | Visualizza SL in produzione/avanzati, seleziona quali avanzare |
| MD | Modifica (obsoleto) | COGL24 | Window popup modifica componenti |
Flusso operativo¶
- Apertura file (~15 file tra cui TRBN-S16 catalogo struttura)
- Se
p13a-file="$COGD51"→ produzione automatica - Visualizzazione gerarchica padre-figlio (concatenamento "───" / "│")
- Accettazione interattiva (F3=Conferma, F5=Varia QTA, F7=Parziale, F9=Disponibilita')
- Caricamento dati per modalita' (c631-load-cl / c632-load-sc)
- CALL COGW51 (motore lavorazioni standard) o COGW59 (lavoro esterno)
File transito¶
#$COGP13.{operatore}: transazione principale#$BOGS16.{operatore}: catalogo struttura backup- TRBN-S16: catalogo struttura semilavorati (I-O)
- COGTRANS2/3: transazioni prodotti/semilavorati
Chiamate: COGW51, COGW59, COGW65, COGW50, COGS22, COGS68, COGS17C, COGU12¶
COGE51 — Contabilizzazione singola fattura¶
Identificazione¶
- Programma: COGE51 (5.666 righe)
- Funzione: Motore contabile del ciclo attivo — riceve una fattura e genera tutti i movimenti contabili
Interfaccia¶
CALL "COGE51" USING stringhe wft-rec lk-area
Nessun dispatcher: esecuzione lineare — riceve UNA fattura (wft-rec) e la contabilizza completamente.
Flusso operativo¶
1. Lettura fattura + dati estesi (COGFATT2)
2. Determinazione divisa di conto (COGU10W)
3. Ricerca conti CoGe: spese, bolli, omaggi, C/C (COGTABEL tipo 16/18)
4. Validazione: duplicato IVA, piano conti, quadratura dare/avere
5. Determinazione scadenze pagamento (COGS09, max 36 rate)
6. Calcolo ritenuta d'acconto (se professionisti/competenza)
7. LOOP ELEMENTI (1-40):
- Per ogni elemento: registrazione IVA (COGARIVA) + prima nota (COGPNONC) + C/C
- Elemento 40 (totale): 1 movimento per OGNI scadenza di pagamento
8. Registrazione partite aperte (COGPARTI + COGMOVPA)
9. Aggiornamento COGFATTU (numero prima nota, cambio)
10. Post-processing: omaggi rivalsa, split payment PA, chiusura partite
Varianti di logica¶
| Variante | Condizione | Effetto |
|---|---|---|
| Consorzi | az-consorzi="S" | Apertura capfattu, logica aggregativa |
| Nota accredito | fat-segno(40)="A" | IVA negativa, bollo negativo |
| Split payment PA | w-ente-pub="S" + tm-cfg-sply="S" | Reverse charge IVA |
| Competenza/Cassa | az-tip-cmp='C' | Ritenuta d'acconto |
Pattern molti-a-molti¶
Ogni elemento puo' avere fino a 5 aliquote IVA. L'elemento 40 genera 1 riga per ciascuna delle 36 possibili scadenze. Una fattura tipica produce ~50-130 righe di prima nota.
File: ~40 file tra cui COGFATTU (R/W), COGARIVA (W), COGPNONC (W), COGPARTI (R/W), COGMOVPA (W)¶
Chiamate: COGU10W, COGS09, COGS77, COGUB1, CAPS61, RNEWCONF¶
COGU11 — Cancellazione bolle/DDT¶
Identificazione¶
- Programma: COGU11 (2.394 righe)
- Funzione: Cancellazione fisica di bolle con tutti i dettagli collegati (movimenti magazzino, BdP, cauzioni)
Interfaccia¶
CALL "COGU11" USING stringhe util-u11
Dispatcher su campo u11-ope:
| Operazione | Descrizione |
|---|---|
| cancella-tutto | Cancella testata + TUTTI i dettagli |
| cancella-entrate | Cancella legami su archivi collegati |
| cancella-mov-magaz | Cancella movimenti magazzino (fl-01="N") |
| cancella-mov-mag01 | Cancella movimenti magazzino (fl-01="S") |
| cancella-riga | Cancella una singola riga di dettaglio |
Caratteristiche¶
- Supporta ricorsione (compilazione -Zr, struttura
local-optionsOCCURS 10) - Salvataggio versione documento prima di cancellazione
- Gestione cauzioni magazzino (tabella output 100 elementi)
- Integrazione tablet: CALL WMSW01 per riapertura BdP
File: COGMOMAG (R/D), COGMOAGG (R/D), COGPCAUZ (R/W/D), COGTESBO (R), COGGENER (R/D), COGTESBP (R/D), COGRIGBP (R/D)¶
CANIVA — Cancellazione contabilita' e IVA¶
Identificazione¶
- Programma: CANIVA (1.279 righe)
- Funzione: Cancellazione fisica di documenti IVA con prima nota, ritenute, partitari e backup
Interfaccia¶
CALL "CANIVA" USING stringhe
Parametri passati via user-area in stringhe: ivaanno, ivatdo, niva, nivapro, del-logica, caller.
Modalita'¶
| Modalita' | Trigger | Comportamento |
|---|---|---|
| COGV38/CAPV38 | user-caller="COGV38"/"CAPV38" | Elaborazione diretta (go to a410) |
| Standard | Altro | Interfaccia interattiva con maschere |
Sequenza di cancellazione¶
1. COGRACCO → raccordi fattura-bolle (+ CAPFATTU/CAPRACCO)
2. COGRITAC → ritenute d'acconto
3. COGPNONC → prima nota (con backup su BOGPNONC)
4. COGMOVPA → movimenti partite (con backup su BOGMOVPA)
5. COGMOVCC → movimenti C/C (con backup su BOGMOVCC)
Backup automatico: copia record in file BOG* prima della cancellazione per audit trail¶
COGD53 — Integrazione Modula¶
Identificazione¶
- Programma: COGD53 (1.204 righe)
- Autore: Gianluca Tonti
- Funzione: Creazione liste di prelievo/carico per sistema di magazzino automatico Modula
Interfaccia¶
CALL "COGD53" USING stringhe util-d53
Operazioni (dispatcher IF sequenziali su d53-ope)¶
| Operazione | Descrizione |
|---|---|
| DOC-PRECEDENTE | Aggiunge documento precedente al file transito |
| DOC-ATTUALE | Aggiunge documento attuale (post-modifica) al file transito |
| DOC-ESEGUI | Elabora file transito e genera liste Modula (max 2: Uscite + Entrate) |
| (default) | Legge documento corrente e permette selezione movimenti |
Variante DB-Frontiera (COGD53DF)¶
Se tm-cfg-modula-db-frontiera="S" → delega a COGD53DF (stessa interfaccia).
COGD53DF opera direttamente sulle tabelle del DB frontiera anziche' generare file .imp.
Abilitazione automatica articoli (versamento da menu')¶
Problema: normalmente un articolo deve essere preventivamente abilitato a Modula (flag mer-modula = "S") tramite COGD50 prima di poterlo versare. Questo obbliga l'operatore a un passaggio separato di configurazione, che rallenta il flusso operativo quando arrivano articoli nuovi o non ancora predisposti.
Soluzione: in modalita' versamento da menu' (tm-operaz = "V", w-dc-called <> "S"), COGD53DF abilita automaticamente gli articoli mancanti al momento del versamento. L'operatore puo' cosi' versare qualsiasi articolo senza doverlo prima abilitare manualmente — l'abilitazione, l'esportazione verso Modula e la verifica di acquisizione avvengono in un unico passaggio guidato.
Fase acquisizione righe: gli articoli con mer-modula <> "S" vengono accettati senza segnalazione (il controllo standard "Articolo Non Gestito con Modula" viene saltato).
Fase pre-aggiornamento (paragrafo b-aggiorna): prima dell'aggiornamento vero e proprio, viene eseguito un ciclo su tutte le righe del documento. Per ogni articolo con mer-modula <> "S":
- Conferma operatore — messaggio con codice avanzato dell'articolo (da COGRACMC); se l'utente rifiuta, il versamento per quell'articolo viene annullato e l'intera operazione si interrompe
- Abilitazione — imposta
mer-modula = "S"e riscrive COGMERCI - Esportazione — chiama
DFNM01per esportare l'anagrafica articolo sul DB frontiera - Attesa acquisizione — ciclo di polling sulla tabella
IMPARTICOLI: quando il record scompare, significa che Modula ha acquisito l'articolo. Dialog con timer di 2 secondi; l'utente puo' interrompere l'attesa con ESC
L'operazione e' bloccante: se l'utente interrompe l'attesa per un articolo, l'intero versamento viene annullato — questo garantisce che tutti gli articoli del documento siano effettivamente presenti su Modula prima di procedere.
Generazione file¶
- Nome:
lista{YYYYMMDD}{HHMMSS}.tmp→ rinominato in.imp - Percorso configurabile via RNEWCONF (
path-interscambio-da) - Supporto thin-client (tmp-dir separata)
- Due passate: prima Uscite ("U"), poi Entrate ("E")
File: COGTRANS4 (R/W/D - transito), FILSEQ (W - lista output), LOGFILE (W)¶
Relazioni tra moduli¶
┌─────────────────────────────────┐
│ Programmi applicativi │
│ (COGV50W, COGM58, COGV38, ...) │
└───────┬─────────┬───────┬────────┘
│ │ │
┌─────────────┼─────────┼───────┼─────────────┐
▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌──────┐ ┌──────┐ ┌─────────┐
│ COGS25 │ │ COGU12 │ │COGL61│ │COGS77│ │ COGD53 │
│ Numera- │ │ Saldi │ │Prezzi│ │Parti-│ │ Modula │
│ zione │ │ magaz. │ │acqui.│ │te ap.│ │ integr. │
└─────────┘ └─────────┘ └──────┘ └──────┘ └─────────┘
▲ │
│ ┌──────────────────────────┐ │
│ │ Motori di elaborazione │ │
│ ├──────────┬───────────────┤ │
└─────────┤ COGP13A │ COGE51 │ │
│ Scarico │ Contabilizz. │ │
│ produz. │ fattura │ │
└──────────┴───────────────┘ │
│
┌──────────────────────────┐ │
│ Servizi cancellazione │ │
├──────────┬───────────────┤ │
│ COGU11 │ CANIVA ├───────┘
│ Bolle │ Contab./IVA │
└──────────┴───────────────┘