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.
Menu¶
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 COGSEQUEeFILE-ASCIIsono 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.cpysendu22.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¶
m-00: program-id, controllo abilitazioni, apertura file, lettura azienda e data; recupera la divisa di conto (COGU10GetDivisaConto); verifica la disponibilita' della finestra di scelta file (C$OPENSAVEBOX, soloaz-sys = "W"); prepara la mascheramm-1.a4: azzeratab-maschera, visualizza la maschera e imposta la divisa di conto.- Accept testata:
a-get-data(data via COGS52),a-get-cau(causale con validazione su COGTABEL tipo 15: deve essere di entrataEe di fornitoreF; 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). a-get-seq-name: input del nome archivio (COGS23 + eventualeC$OPENSAVEBOX); se il file e'.xlsinvocaconverti-excel(chiama EXCEL per produrre il.txt); apre e verifica il file sequenziale.a90: conferma (acc-conf); esegue prima una passata di prova -- crea il file di log (crea-file-ascii), esegueciclo-fileconfl-def = "N"(nessuna scrittura). Se emergono errori avvisa e mostra il percorso del log. Poi propone l'elaborazione definitiva (fl-def = "S").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), popolata-riga(articolo, descrizione, quantita', prezzo); scarta le righe vuote, conta letti/scartati/errati/scritti e li mostra a video.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 viaagg-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).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).registra-riga: calcola il valore riga (qta x prezzo, arrotondato via COGU10), compone il record movimento (mag-recz: merce, magazzino, data, bolla, entrataE, fornitore, quantita', prezzo, valore, divisa, progressivo) e lo scrive su COGMOMAG (wr-cogmomag); infine chiama COGU12 per l'aggiornamento della giacenza.fine/z-chiudi: chiude i file ed esce.
Note tecniche¶
- La maschera
mm-1e' una maschera testuale a box (11 righe x 69 colonne) ridefinita inmm-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.txtpreesistente, richiama EXCEL in modalita' sincrona e si aspetta di trovare il.txtcorrispondente 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.txtinext-tmp-dir. - Le anagrafiche merce create automaticamente (
ins-art) ricevono valori di default (u.m.NR, codiva 20, contribuente 501, classeM, diviseE, 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.