This is an old revision of the document!
2802 - ULL IKEA con NiceLabel
ANALISI AgentStampa
AGENTPRINTMSI
Richieste che effettua ad AGENTSTAMPA:
1) recprint -> ottiene il rec da stampare e lo salva sul database 2) printRecFromId -> ottiene il rec da stampare tramite query a etichetw 3) stampamanu -> effettua la stampa
AGENTSTAMPA (/code/cpp/module/service/palctrl/stampa/agentstampa.cpp)
L'agente si occupa di eseguire la stampa di etichette IKEA. Puo' stampare in due modalita':
- stampa automatica: richiesta dall'agente java
- stampa manuale: richiesta dall'interfaccia
Il p.to 1) e 2) sono eseguiti attraverso la tell, rispettivamente:
- request=stampaauto, p1=rec(codlotp), ritorna true se la stampa e' avvenuta correttamente
- request=stampamanu, p1=rec(codart,peso,npz,yyww,codlotp,codsup,barcode,npzfmt), ove codart=codice articolo Ikea, peso=peso del bancale, npz=numero pezzi, yyww=anno/settimana, codlotp=codice lotto bancale; il nome del rec (rec.name=path_file) e' il path completo del file del layout da stampare; nel nume va indicato il numero di etichette da stampare
Il rec da utilizzare per la stampa manuale puo' essere richiesto all'agente stesso attraverso la ask con:
- request=recprint, p1=rec(codart,peso,npz,codlotp,codsup), p2=path_del_file l'agente restituisce il rec con tutti i dati compilati
RECPRINT
if(smsg->request=="recprint"){ rv = recprint(IREC_GETVALUE(p1, "codart"), IREC_GETVALUE(p1, "codsup"), atof(IREC_GETVALUE(p1, "pesotot")), atof(IREC_GETVALUE(p1, "peso")), atoi(IREC_GETVALUE(p1, "npz")), IREC_GETVALUE(p1, "codlotp"), p2->value(), atoi(IREC_GETVALUE(p1, "xinterfa")), atoi(IREC_GETVALUE(p1, "yinterfa")), atof(IREC_GETVALUE(p1, "stackcap"))); }
P1(REC): codart, codsup, pesotot, peso, npz, codlotp, xinterfa, yinterfa, stackcap
P2 (String): layout
- Ottiene il numeratore attraverso una getnume della tabella 'ikeapiano' sul campo 'codice' per ottenere un codice per il PIANO del pallet
- Prepara un REC con i seguenti campi:
- 0, "codart"
- 1, "peso"
- 2, "npzfmt"
- 3, "yyww"
- 4, "codlotp"
- 5, "codsup"
- 6, "barcode"
- 7, "npz"
- 8, "idetic"
- 9, "layout"
- 10, "tm"
- 11, "pesotot"
- 12, "xinterfa"
- 13, "yinterfa"
- 14, "stackcap"
- Popola il REC con i valori ottenuti da parametro. Aggiunge 'npzfmt' con il npz formattato a 3 cifre e 'yyww' basata sulla data odierna
- Elabora il codice del piano nel seguente modo:
char copas[51]; int totlen=17; int bcforlen=m_bcforinfo->size(); char fmt[51]; sprintf(fmt, "%%0%dd", totlen-bcforlen); sprintf(copas, fmt, copa);
- "identic" → numeratore ottenuto nel punto 1
- Prepara il codice a barre in questo modo:
sprintf(s, "%s%s", m_bcforinfo->value(), copas); dove 'm_bcforinfo' -> dato fisso del fornitore per il codice a barre EAN128
- !!! FA UNA DOWNLOAD DEL REC SUL DATABASE !!!
- Imposta il nome del REC con il valore del 'layout'
- Ritorna il REC creato
RECPRINTFROMID
if(smsg->request=="recprintfromid"){ rv = recprintfromid(atoi(IREC_GETVALUE(p1, "idetic")), p2->value()); }
P1(REC): identic P2 (String): layout
- Mi estraggo dal database una riga di etichetw tramite il codice di idetic ricevuto nel p1
- Imposta il nome del REC con il layout ricevuto nel p2
- Ritorna il REC creato
STAMPAMANU
if(smsg->request=="stampamanu"){ rv = excprint(p1, smsg->nume); }
Presente un #define che distingue le funzionalità della funzione excprint
IFDEF PRINT_CODESOFT:
- Connesione con agentRemoteCS per stampa con codesoft
- Richiesta del REC per la stampa all'agentRemoteCS
- Popolazione del REC:
- filename = nome del REC p1
- codedb = p1["identic"]
- qtalotti = nume ricevuto
- qtacopie = "1" FISSO
- printer = parametro agente m_printer
- Richiesta di stampa inviata ad agentRemoteCS con request "print" passando il REC creato come parametro
- Impostato un wait di 250 ms
- Ritorna un booleano in base alla riuscita o meno della stampa
ELSE:
- Apertura\scrittura del file con il nome del file uguale al nome del REC ricevuto nel p1
- Determina la dimensione del file, aggiunge 512 byte per eventuali sostituzioni, e alloca un buffer per contenere i dati del file.
- Legge il contenuto del file nel buffer e chiude il file.
- Preparazione dei tag (5 tag)
- Crea un oggetto CTag con un numero di tag pari al numero di campi di rp meno 2.
- Imposta i tag e i valori corrispondenti ottenuti dai campi di rp.
- Apre il file "/code/etichetta.txt" e scrive il contenuto del buffer su questo file
- Crea un oggetto IConnSock e tenta di connettersi a un socket utilizzando m_port e m_ipaddr
- Se la connessione ha successo, invia il contenuto del buffer n (nume ricevuto) volte, attendendo 200 millisecondi tra ogni invio.
- Libera la memoria del buffer e dell'oggetto CTag.
- Restituisce true se almeno un invio è avvenuto con successo, altrimenti false.
TEST DEL 08/08/2024
- Nuovo Server: FFO94G ⇒ 10.205.1.94
- Vecchio Server (pallettizzatori): FFI78G ⇒ 10.205.1.78
IAF
- Stoppare il servizio
- Configurare su Nicelabel la stampante dello stampa e applica (vedere marca e modello da codesoft)
GUI
- Sostituire pagina di ristampa su PC in magazzino con (NL=1 abilita la stampa via NiceLabel)
- Cambiare /www/webapp/faber/kiosk/redirect/index.php per puntare su FFO94G
Appunti
xxx