Vai al contenuto

COGM10 - Caricamento Bolla di Acquisto da File

Scopo

Programma per la generazione automatica di una bolla di carico (entrata da fornitore) a partire da un file di testo tabellato o da un file Excel (.xls). L'operatore imposta i dati di testata (causale, magazzino, fornitore, pagamento, divisa, cambio) e indica l'archivio sorgente; il programma legge le righe (articolo, descrizione, quantita', prezzo delimitati da TAB), le valida in una passata di "prova" con log degli errori e poi, in "definitiva", crea la testata bolla su COGTESBO e i movimenti di magazzino su COGMOMAG, creando eventualmente le anagrafiche merce mancanti (COGMERCI) e aggiornando le giacenze tramite COGU12.

Magazzino > Trasferimenti > Inserimento/gestione > Uscita Magazzino 1

File e tabelle

File Tipo Descrizione
FEURTAB Parametri File parametri di ambiente (cogfiles.cpy)
COGTABEL Indicizzato (i-o) Tabelle codificate; letta per causale (tipo 15), pagamento (tipo 14), divisa (tipo 56); campi euta-cb-fl-eu, euta-cb-cli-for, euta-cb-con-gia, euta-cb-con-pm, euta-cb-con-val, euta-cb-con-fat, euta-cb-cau-mag
COGGEANA Indicizzato (input) Anagrafiche generiche; letta per il fornitore (ana-tipo = "F", ana-cod, ana-nome, ana-pag1, ana-rb, ana-divisa)
COGMAGAZ Indicizzato (input) Anagrafica magazzini (FD cogmaga2); validazione magazzino (magz-tipo = "M", magz-cod)
COGMERCI Indicizzato (i-o) Anagrafica merci; letta per validare l'articolo (mer-chia) e, in definitiva, creata se mancante (wr-cogmerci)
COGTESBO Indicizzato (i-o) Testate bolle; scrittura della testata di carico (wr-cogtesbo), con cogtesbo.k01-agg
COGMOMAG Indicizzato (i-o) Movimenti di magazzino; scrittura righe di carico (wr-cogmomag), con cogmomag.k01-agg
COGSEQUE Line sequential File di testo sorgente (.txt) da cui si leggono le righe (seq-rec, 300 char)
FILE-ASCII Line sequential File di log errori generato in ext-tmp-dir (cogm10.txt)

Copybook

File e select

  • feurtab.fd, cogtabel.fd, coggeana.fd, cogmaga2.fd, cogmerci.fd, cogtesbo.fd, cogmomag.fd
  • Chiavi: cogtabel.k01, coggeana.k01, cogmaga2.k01, cogmerci.k01, cogtesbo.k01, cogmomag.k01, cogtesbo.k01-agg, cogmomag.k01-agg
  • COGSEQUE e FILE-ASCII sono dichiarati manualmente nel sorgente (SELECT/FD)

Working-storage standard

  • wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy, cogazien.cpy

Utilita'

  • opensave.def -- finestra di dialogo apri file (C$OPENSAVEBOX)
  • utils23.cpy (input nome file), utils25.cpy (numeratore documento), utils52.cpy (data), utils65.cpy (ricerca fornitore)
  • utilu10.cpy (editing/arrotondamento valori), utilu12.cpy (aggiornamento giacenza), utilu20.cpy (input cambio), utilu22.cpy (condizione pagamento)
  • utilw01.cpy, utilw02.cpy, utilw36.cpy (aiuti causale/pagamento/magazzino), utilxls.cpy (conversione Excel)

Linkage

  • wcont.cpy, utilw35.cpy (aiuto divisa), wcont1.cpy

Procedure

  • stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, open1.cpy, mmmask.cpy
  • sendu22.cpy, sendw01.cpy, sendw02.cpy, sendw35.cpy, sendw36.cpy

CALL

Programma Descrizione
COGU10 Recupero divisa di conto (GetDivisaConto), editing e arrotondamento valore riga
COGS52 Input data documento
COGS65 Ricerca/selezione fornitore
COGS23 Input del nome file sorgente con estensione
COGS25 Numeratore progressivo del documento (s25-o-num -> tes-bolla3)
COGU20 Input del cambio divisa
COGU22 Gestione della condizione di pagamento (rb) via sendu22.cpy
COGS05 Calcolo/generazione codice EAN della merce in fase di creazione anagrafica
COGU12 Aggiornamento giacenza a fronte del movimento (u12-tipo = "G")
EXCEL Conversione del file .xls in .txt (util-xls, sincrono)
C$OPENSAVEBOX Routine di sistema per la finestra di scelta file (ambiente Windows)
C$TOLOWER / C$OPENSAVEBOX Routine di sistema AcuCOBOL

Gli aiuti F8 richiamano i gestori tabella tramite send-w01 (causale), send-w02 (pagamento), send-w35 (divisa), send-w36 (magazzino).

Logica di elaborazione

  1. m-00: program-id, controllo abilitazioni, apertura file, lettura azienda e data; recupera la divisa di conto (COGU10 GetDivisaConto); verifica la disponibilita' della finestra di scelta file (C$OPENSAVEBOX, solo az-sys = "W"); prepara la maschera mm-1.
  2. a4: azzera tab-maschera, visualizza la maschera e imposta la divisa di conto.
  3. Accept testata: a-get-data (data via COGS52), a-get-cau (causale con validazione su COGTABEL tipo 15: deve essere di entrata E e di fornitore F; recupera parametri con/gia, pm, val, fat, eventuale magazzino di causale), a-get-mag (magazzino, validazione su COGMAGAZ), a-get-for (fornitore via COGS65 e COGGEANA, eredita pagamento e divisa), a-get-pag/a-get-pag-1 (condizione e codice pagamento), a-get-div (divisa via COGTABEL tipo 56, con determinazione tipo cambio L/E), a-get-cambio (cambio via COGU20).
  4. a-get-seq-name: input del nome archivio (COGS23 + eventuale C$OPENSAVEBOX); se il file e' .xls invoca converti-excel (chiama EXCEL per produrre il .txt); apre e verifica il file sequenziale.
  5. a90: conferma (acc-conf); esegue prima una passata di prova -- crea il file di log (crea-file-ascii), esegue ciclo-file con fl-def = "N" (nessuna scrittura). Se emergono errori avvisa e mostra il percorso del log. Poi propone l'elaborazione definitiva (fl-def = "S").
  6. ciclo-file / ciclo-file-loop: legge riga per riga il file sequenziale, spezza il record sui TAB (x'09') in 5 colonne (k-num-colonne), popola ta-riga (articolo, descrizione, quantita', prezzo); scarta le righe vuote, conta letti/scartati/errati/scritti e li mostra a video.
  7. ciclo-file-loop-1: normalizza il codice articolo (padding con "0"), verifica che sia numerico, valida quantita' (controlla-qta) e prezzo (controlla-pre) con parser carattere per carattere (gestione virgola e decimali via agg-qta/agg-pre/cambia-dato); verifica la merce su COGMERCI; se assente e in definitiva la crea (ins-art), quindi in definitiva registra la riga (ins-riga).
  8. ins-riga / ins-testa: alla prima riga crea la testata bolla -- ricava il numero con COGS25 e scrive su COGTESBO (ins-testa-loop, gestione bolla gia' esistente con richiesta numerazione successiva).
  9. registra-riga: calcola il valore riga (qta x prezzo, arrotondato via COGU10), compone il record movimento (mag-recz: merce, magazzino, data, bolla, entrata E, fornitore, quantita', prezzo, valore, divisa, progressivo) e lo scrive su COGMOMAG (wr-cogmomag); infine chiama COGU12 per l'aggiornamento della giacenza.
  10. fine / z-chiudi: chiude i file ed esce.

Note tecniche

  • La maschera mm-1 e' una maschera testuale a box (11 righe x 69 colonne) ridefinita in mm-1-ele, non gestita da Screens.
  • Il file sorgente atteso e' delimitato da TAB con 5 colonne; la prima colonna e' ignorata come intestazione/tag, le colonne 2-5 mappano articolo/descrizione/quantita'/prezzo (ta-riga).
  • La conversione Excel (converti-excel) elimina un eventuale .txt preesistente, richiama EXCEL in modalita' sincrona e si aspetta di trovare il .txt corrispondente al termine.
  • Doppia passata: "prova" (fl-def = "N", sola validazione e log) seguita da "definitiva" (fl-def = "S", scritture su archivi); il log errori e' cogm10.txt in ext-tmp-dir.
  • Le anagrafiche merce create automaticamente (ins-art) ricevono valori di default (u.m. NR, codiva 20, contribuente 501, classe M, divise E, EAN calcolato da COGS05); vari blocchi accessori (COGMERAP, COGDESAG, COGRACMC, lotti, listino fornitore) sono presenti ma commentati nel sorgente.
  • La causale deve essere di entrata (euta-cb-fl-eu = "E") e di fornitore (euta-cb-cli-for = "F"); se la causale porta un magazzino (euta-cb-cau-mag) questo viene proposto.
  • I parametri numerici di quantita' e prezzo sono interpretati manualmente carattere per carattere (senza numval), con gestione della virgola decimale e controllo di virgole multiple.