Vai al contenuto

Procedura Pasticcerie - Documentazione tecnica

Architettura

La procedura Pasticcerie e' composta da:

  • 8 programmi PSW (PSW001-PSW007 + PSW006A) per la sincronizzazione gestionale ↔ APP tablet
  • 1 database PostgreSQL di frontiera con 12+ tabelle PSW*
  • Processi residenti gestiti da AGLANCIO
  • Programmi gestionali integrati (COGF64, COGQP0, COGP97, COGMAC/COGMAD)
  • 2 programmi di archivio (PST001, PST003)
  • 1 programma PLU (PSW007/YPWPLUME)

Configurazione master

Gruppo Parametro Descrizione
gestione-pasticcerie (flag) Abilita le funzionalita' pasticcerie nel gestionale
abilita attiva-areaapp Abilita la comunicazione con l'APP tablet
areaapp cod-azienda Codice azienda nel DB frontiera
areaapp db-conn-string Connection string PostgreSQL
areaapp agg-postgres-online Sincronizzazione in tempo reale (S/N)
areaapp giorni-esportazione-merci Finestra temporale esportazione (9999=tutte)
dbfront db-conn-string Connection string DB frontiera
past cau-bdc-trasformato Causale per sterilizzazione pre-bolle (obbligatorio)
ecommerce shop-attivo Integrazione e-commerce (se presente)

Programmi di sincronizzazione

Tutti i programmi PSW001-PSW004 e PSW006 sono gestiti da AGLANCIO come processi residenti. Usano la linkage section UTILAGPRG e seguono il pattern:

  1. Apertura tabelle
  2. Ciclo di elaborazione (esporta/importa)
  3. Test file "fspegni" per shutdown controllato
  4. Attesa N secondi → ripeti

PSW001 - Sincronizzazione clienti

Aspetto Dettaglio
Direzione COGGEANA → PSWANAGR (solo esportazione)
Id processo 90001
APSTATOSYN Tabella "PSWANAGR", versione 1
Esportazione differenziale Via COGANCAP (data/ora aggiornamento)
Cancellazione Logica: scansione PSWANAGR, verifica esistenza su COGGEANA

Tabelle lette: COGGEANA, COGAPPOG, COGANAPP, COGANCAP

Mapping esportazione:

PSWANAGR Origine Note
P-ANA-TIPO "C" (clienti) / "F" (fornitori)
P-ANA-NOME ANA-NOME + " " + ANA-NOME2 Parsing via GESSTR
P-ANA-IND ANA-IND Parsing via GESSTR
P-ANA-LOCA APP-LOCA (priorita'), altrimenti ANA-LOCA Parsing via GESSTR
P-ANA-CAP AAP-CAP (priorita'), altrimenti ANA-CAP Parsing via GESSTR
P-ANA-PROV ANA-PROV
P-ANA-FL-CANC ANA-VAL

Protezione conflitti: se P-ANA-AGG-APP = "A" al momento dell'esportazione, il record viene saltato (modificato su APP nel frattempo).

PSW002 - Sincronizzazione destinazioni

Aspetto Dettaglio
Direzione COGDESTI/COGDEST2 → PSWINDIR (solo esportazione)
Id processo 90002
APSTATOSYN Tabella "PSWINDIR", versione 1
Filtro Solo DST-ID-TIP = "D" (destinazioni merce)
Cancellazione Logica + fisica (gestisce entrambi i casi)

Mapping esportazione:

PSWINDIR Origine Note
P-DST-NOME DST-RAG-SOC Parsing via GESSTR
P-DST-IND DST-IND Parsing via GESSTR
P-DST-CAP DST-CAP-ALFA
P-DST-LOCA DST-LOCA Parsing via GESSTR
P-DST-PROV DST-PROV
P-DST-FL-CANC DST-FL-CANC
P-DST-GIRO (da PSWINDIR) Codice agente/giro
P-DST-GIRO-POS (da PSWINDIR) Posizione nel giro
P-DST-GIRO-FILA (da PSWINDIR) Fila nel mezzo di trasporto

PSW003 - Sincronizzazione merci (bidirezionale)

Aspetto Dettaglio
Direzione COGMERCI ↔ PSWMERCI, COGDBASE → PSWDBASE
Id processo 90003
APSTATOSYN Tabella "PSWMERCI", versione 1
Importazione Raggruppamento 3 (dolce/salato/altro) e raggruppamento produzione
Filtro esportazione Via SWAFME (filtro esportazione merci)

Importazione (C - APP → gestionale): - Query: SELECT * FROM PSWMERCI WHERE p_mer_agg_app = 'A' - Aggiornamento COGMERAP.MAP-RAGR-3 ← P-MER-RAGR-3 - Aggiornamento COGANRAG classe "PR", tipo "M" ← P-MER-RAGR-PROD - Se P-MER-RAGR-PROD vuoto: cancella record COGANRAG se esiste - Verifica/creazione raggruppamento padre (classe "PR", tipo "R")

Esportazione (B - gestionale → APP):

PSWMERCI Origine
P-MER-CMA RCM-COD-AVA
P-MER-DES MER-DESCR
P-MER-DES-LINGUA MAP-DESC
P-MER-CLASSE MER-CLASSE
P-MER-STATO MER-VAL
P-MER-UM MER-UM
P-MER-RAGR-1/2/3 MAP-RAGR-1/2/3
P-MER-SCO-MIN MER-SCO-MIN
P-MER-QTA-TEGLIA MA2-QTA-X-BANCALE
P-MER-RGR-PROD Classe "PR" da COGANRAG
P-MER-PADRE MER-PADRE
P-MER-UNITA-PROD MA3-UNITA-PRODUTTIVA
P-MER-RGR-TRAC Classe "TR" da COGANRAG
P-MER-GESTIONE-LOTTI MER-LOTTI

Esportazione distinte base: cancellazione completa PSWDBASE per la merce + re-inserimento da COGDBASE.

Cancellazione merci: via COGEVLOG evento K-EVL-CANC-MERCI → P-MER-STATO = "C".

PSW004 - Esportazione documenti

Aspetto Dettaglio
Direzione COGTESBO/COGMOMAG → PSWDOCTES/PSWDOCDET (solo esportazione)
Id processo 90004
APSTATOSYN Tabella "PSWDOCTES-D", versione 1
Filtro Solo documenti TES-TIPOB = "I" o "D"
Scansione COGTESAP chiave TSA-CHIA3 da data/ora ultimo sync

Mapping testata (PSWDOCTES):

Campo Origine
P-DTES-DOC-TIP "D" (fisso)
P-DTES-DOC-KEY TES-CHIA3
P-DTES-KEY-EDIT Chiave editata "1/2023/I/000100"
P-DTES-DATA TES-DATA
P-DTES-ANA TES-NONNO
P-DTES-DST-TIP/IDX TES-DST-ID-TIP/IDX
P-DTES-GIRO TES-AGENTE
P-DTES-NOTE TES-DESCR + TES-DESCR1
P-DTES-STATO-PREP "N"

Mapping righe (PSWDOCDET): da COGMOMAG, escluse righe con merce avanzata "DESC" (riporti).

Campo Origine
P-DDET-DOC-RIGA MAG-PROG
P-DDET-MERCE MAG-MERCE3
P-DDET-QTA-DOC MAG-QTAMAGAZ
P-DDET-QTA-EVA 0
P-DDET-QTA-MANCANTE 0

Protezione: se il documento esiste e P-DTES-STATO-PREP <> "N", skip con errore nel log.

Cancellazione documenti: via COGEVLOG evento K-EVL-CANC-COGTESBO → P-DTES-FL-CANC = "C" (solo se il documento non e' stato ricreato nel frattempo).

PSW005 - Operazioni su documento tablet (subroutine)

Programma non a menu, chiamato da altri programmi. Linkage: UTIL-PSW005.

Operazione Input Output Descrizione
DOC-STAMPABILE Tipo + chiave documento Esito S/N Verifica se il DDT e' stampabile: NON stampabile se contiene righe con MER-PESO-VAR = "V" (peso variabile). Le righe sotto merce "DESC" (riporti) vengono ignorate
RIGA-LAVORATA Tipo + chiave + riga Esito S/N Verifica flag P-DDET-FL-BILANCIA e P-DDET-FL-INCASSETTATO
RIAPRI-DOC Tipo + chiave documento Esito Imposta P-DTES-STATO-PREP = "N"
CHIUDI-DBF (nessuno) Esito Chiude la connessione al DB frontiera

PSW006 - Importazione documenti da tablet

Aspetto Dettaglio
Tipo Processo residente (no keep-alive su C00000)
Query SELECT * FROM pswdoctes WHERE p_dtes_agg_app = 'S'
Ciclo Ogni 5 secondi, con controllo file "fspegni"

Flusso per ogni documento trovato:

B.1 - Aggiornamento righe

  • Query PSWDOCDET per il documento
  • Considera solo righe con P-DDET-FL-PESATO = "S"
  • Per righe a peso variabile pesate:
  • P-DDET-QTA-DOC = 0 → cancella riga da COGMOMAG
  • P-DDET-QTA-DOC ≠ MAG-QTAMAGAZ → aggiorna COGMOMAG (quantita' + ricalcolo valore) e COGMOAGG
  • Quantita' inferiore → nota "Mancanti ... pezzi"
  • Quantita' zero → nota "Prodotto .... mancante" sull'ultima riga valida
  • Aggiorna P-DTES-AGG-APP = "N"

B.2 - Trasformazione pre-bolla → DDT

Condizioni: TES-TIPOB = "B" e P-DTES-STATO-PREP = "C".

Tipo DDT risultante: - "I" se esistono gia' documenti "I" per la data - "D" se non esistono ancora documenti "I" per la data

Clonazione (8 tabelle):

Tabella Record
COGTESBO 1
COGTESAP 1
COGMOMAG N
COGMOAGG N
COGMOAG2 N
COGDESAG N
COGDESOR 1
COGMOVLT N

Sterilizzazione pre-bolla: la causale del documento originale viene sostituita con cau-bdc-trasformato (non incide su giacenza/fatturazione).

Aggiornamento DB frontiera (4 tabelle):

Tabella Query
PSWDOCTES UPDATE SET p_dtes_tip = 'D', p_dtes_key = chiave_ddt
PSWDOCDET UPDATE SET p_ddet_dtes_tip = 'D', p_ddet_dtes_key = chiave_ddt
PSWDOCCONFTES UPDATE SET p_dct_dtes_tip = 'D', p_dct_dtes_key = chiave_ddt
PSWDOCCONFDET UPDATE SET p_dcd_dtes_tip = 'D', p_dcd_dtes_key = chiave_ddt

B.3 - Stampa

Se il documento completato contiene almeno un prodotto a peso variabile e tutti sono pesati → innesca stampa DDT.

PSW007 - Gestione tabella PLU-Merce

Aspetto Dettaglio
File cbl/psw007.cbl
Gestore Screens YPWPLUME
Tabella PSWPLUME
Build 2026/0028 (04/02)

Gestisce la tabella di raccordo tra codici merce e codici PLU per le bilance. La chiave e' composta da: azienda + merce (gru/sot/cod) + codana + dst-tip + dst-idx.

Campi principali: P-PLU-CODICE (codice PLU, char 10), P-PLU-CMA (codice merce avanzato, char 30).

Database di frontiera (PostgreSQL)

Tabelle di sistema

Tabella Gestore Funzione
PSWSTATOSYN YPWSTSYN Stato sincronizzazioni per tabella/azienda. Chiave: azienda + tabella. Campi: data/ora ultima sync, prossimo ID sincro, semaforo (" "/G/A), versione
PSWUTENTI YPWUTENT Utenti APP con profilo, magazzino, zona, flag admin, recapiti

Tabelle anagrafiche

Tabella Gestore Funzione Chiave
PSWANAGR YPWANAGR Clienti/fornitori azienda + codana + tipo
PSWINDIR YPWINDIR Destinazioni merce azienda + codana + tip + idx
PSWMERCI (PSWMERCI) Anagrafica merci azienda + codice
PSWDBASE YPWDBASE Distinte base azienda + merce + tipo_distinta + versione + prog
PSWPLUME YPWPLUME PLU-Merce azienda + merce + codana + dst-tip + dst-idx

Tabelle di preparazione

Tabella Gestore Funzione Chiave
PSWAGENDE YPWAGEND Agende incassettamento (classe R=feriale, S=festivo) azienda + classe + cod
PSWAGEDET YPWAGEDT Dettaglio agende (clienti, destinazioni, eccezioni merce) azienda + classe + cod + ragr + prog

Tabelle documenti

Tabella Gestore Funzione Chiave
PSWDOCTES (PSWDOCTES) Testata documenti (tip: O=ordine, D=DDT) azienda + tip + key
PSWDOCDET (PSWDOCDET) Righe documenti (quantita', flag pesato/incassettato) azienda + tip + key + riga
PSWDOCCONFTES YPWDOCCT Testata confezioni/vassoi per documento azienda + tip + key + conf_prog
PSWDOCCONFDET YPWDOCCD Dettaglio contenuto confezioni (riga → vassoio) azienda + tip + key + conf_prog + riga

Campi comuni a tutte le tabelle

Campo Tipo Descrizione
*_FL_CANC char(1) " " = valido, "C" = cancellato
*_AGG_APP char(1) " " = non aggiornato, "A" = aggiornato da APP, "N" = aggiornato da gestionale
*_ID_SINCRO num(15) ID progressivo di sincronizzazione
*_DI_DATA/TIME/OPE/PROG vari Audit inserimento
*_DA_DATA/TIME/OPE/PROG vari Audit modifica

Programmi gestionali integrati

COGF64 - Scheda ordini distribuzione

File: cbl/cogf64.cbl (8585 righe)

Quando la gestione pasticcerie e' attiva, F1 diventa "Evadi (modo pasticceria)": - Chiama COGMA1 per la gestione ordine - Chiama COGD27 per la preparazione del transito DDT

Configurazione: legge gestione-pasticcerie per abilitare il comportamento specifico.

COGQP0 - Produzione giornaliera alimentari

File: cbl/cogqp0.cbl (8649 righe)

Processo in 6 fasi per la produzione giornaliera. Tabelle di produzione: PGTS (testata sessione), PGRI (righe richieste), PGFA (fabbisogni), PGLO (lotti), PGLG (legami lotti), PGDO (documenti creati).

Documentazione tecnica dettagliata: docs/dev/flussi/produzione-avanzata.md

COGP97 - Ristampa ordinata DDT

Stampa DDT ordinati per giro di consegna. Usa TES-AGENTE come codice giro e ordina per posizione/fila definite in PSWINDIR.

COGMAC / COGMAD - Preparazione e modifica giri

Gestione dei giri di consegna: raggruppamento DDT per giro, ordinamento per posizione, spostamento tra giri.

PST001 / PST003 - Archivi pasticcerie

Programma Funzione Menu
PST001 Configurazione percorsi 5 archivi (anagrafica bar, ordinazioni cartellino, ordinazioni diverse, note, legame lotti) Sistema > Archivi > Archivi Pasticc.
PST003 Inizializzazione/controllo stato archivi Sistema > Archivi > Inizializzazioni/Controllo Stato

PST001 legge la configurazione da "pstfiles" (non "cogfiles"). PST003 opera in due modalita': creazione fisica da zero o verifica esistenza/accessibilita'.

Pattern di sincronizzazione

Esportazione differenziale

Tutti i programmi di esportazione seguono lo stesso pattern:

  1. Lettura APSTATOSYN per data/ora ultima sync e prossimo ID sincro
  2. Scansione tabelle sorgente da data/ora ultima sync
  3. Per ogni record: confronto dati → se diversi, aggiornamento destinazione
  4. Aggiornamento APSTATOSYN a fine ciclo

Modalita' speciali: - Singolo record (AGPRG-KEY ≠ spaces): esportazione di un singolo record (per sync online) - Esportazione totale (AGPRG-ESPORTA-TUTTO = "S"): ignora confronto, esporta tutto - Pulizia (AGPRG-OPE = "PULIZIA"): solo giro di cancellazione logica

Protezione conflitti APP

Se un record ha *_AGG_APP = "A" al momento dell'esportazione, viene saltato con segnalazione nel log (l'APP lo ha modificato nel frattempo).

Semaforo tabella

PSWSTATOSYN.P_SYN_SEMAFORO: " " = libera, "G" = in uso da gestionale, "A" = in uso da APP.

Integrazione AGLANCIO

I processi PSW sono lanciati come thread residenti da AGLANCIO. Il keep-alive e' gestito dal thread autonomo di AGLANCIO (i PSW non aggiornano direttamente il C00000). Lo shutdown avviene tramite file "fspegni" controllato ad ogni ciclo.