Acest site folosește cookie-uri. Prin navigarea pe acest site, iți exprimi acordul asupra folosirii cookie-urilor. Vezi și politica noastră de confidențialitate

N E X U S
Nexus ERP

Nexus ERP progres

loading

Generare comenzi de aprovizionare pentru depozit


Funcțiile customizate de tipul "Generare comenzi de aprovizionare pentru depozit" sunt de două tipuri: STANDARD și INLINE și au fost create cu scopul de a genera comenzile interne pentru aprovizionare, cu posibilitatea de stabilire a unor filtre noi. În cazul în care există funcții custom de tipul "Generare comenzi de aprovizionare pentru depozit", meniul Asistent din modulul "Comenzi interne" va conține itemi pentru fiecare funcție existentă. De asemenea, există posibilitatea de a genera comenzi interne prin crearea unui task programat, din Execuție proceduri (procedura "Comandă internă aprovizionare - funcție custom").

Pentru funcțiile INLINE se va realiza un select care să returneze structura prezentată, iar pentru funcțiile STANDARD se va realiza un INSERT INTO @ret_table, respectând aceeași structură.

Parametri funcție customizată

Parametru Tip Descriere
@data_ini DATE Data de început a perioadei de căutare
@data_fin DATE Data de sfârșit a perioadei de căutare
@nr_zile_aprov INT Numărul de zile pentru calculul necesarului de marfă (OPȚIONAL)

 

Structura returnată de funcția customizată

Structură Tip Descriere
serie_document VARCHAR(10) Seria comenzii interne
numar_document VARCHAR(20) Numărul comenzii interne (OPȚIONAL, dacă se specifică id_carnet)
data_document DATE Data comenzii interne
id_document VARCHAR(25) Identificator al documentului ce va fi salvat în câmpul id_extern din comanda internă (OPȚIONAL)
id_carnet NUMERIC(18,0) ID-ul carnetului, în cazul în care se dorește generarea automată a numărului de document (OPȚIONAL)
id_gestiune VARCHAR(25) Codul gestiunii sursă, în format ID(PCT_LCR)
id_gestiune_in VARCHAR(25) Codul gestiunii destinație, în format ID(PCT_LCR)
id_produs VARCHAR(25) Codul produsului, în format ID(PCT_LCR)
tip_produs VARCHAR(3) Codul contului articolului (din nomenclator bunuri și servicii: FAA, GAA, etc.)
cota_tva_ies NUMERIC(3,0) Cota TVA de ieșire
pret_vanzare_tva MONEY Prețul de vânzare cu TVA (OPȚIONAL)
cantitate NUMERIC(15,3) Cantitate comandată
aprobare BIT Câmp ce indică dacă documentul se va aproba automat la validare (OPȚIONAL, implicit 1)

 

Exemplu de funcție customizată INLINE pentru generarea comenzilor de aprovizionare pentru depozit

Pentru funcția STANDARD se va insera în tabela @ret_table, urmat de același select:

INSERT INTO @ret_table(data_document, id_document, id_carnet, den_gestiune, id_gestiune_in, id_produs, tip_produs, cota_tva_ies, pret_vanzare, pret_vanzare_tva, pret_furnizor, cantitate)

SELECT  data_document = CAST(GETDATE() AS DATE),    
	id_document = RANK() OVER(ORDER BY g.id_car_cmdint, pg.pl_gest, pg.id_gest),    
	id_carnet = CAST(g.id_car_cmdint AS NUMERIC(18,0)),    
	den_gestiune = 'DEPOZIT',    
	id_gestiune_in = dbo.id2cod(pg.pl_gest, pg.id_gest),    
	id_produs = dbo.id2cod(n.pct_lcr, n.id),     
	tip_produs = m.cod_bs,    
	cota_tva_ies = n.tva_o,    
	pret_vanzare = CAST(p.puv AS money),    
	pret_vanzare_tva = CAST(p.puv_tva AS money),     
	pret_furnizor = CAST(ISNULL(o.pu, n.pu_furn) AS money),      
	cantitate = IIF(n.ambalare = 0, IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0)),           CEILING((IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) -                                                                                                                                                    ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0))) / n.ambalare) * n.ambalare)    
	FROM nomen1 c     
	INNER JOIN 
	nomen3 n ON n.pl_clasa = c.pct_lcr AND n.id_clasa = c.id      
	INNER JOIN preturi_ma_linii p ON n.pct_lcr = p.pl_pr AND n.id = p.id_pr    
	INNER JOIN preturi_ma m ON p.pl_ant = m.pct_lcr AND p.id_ant = m.id AND m.cod_bs LIKE 'G%' AND m.anulat = 0 AND m.valid = 1 AND m.pl_part IS NULL AND m.id_part IS NULL AND m.id_disc IS NULL    
	INNER JOIN preturi_ma_gestiuni pg ON p.pl_ant = pg.pl_lista AND p.id_ant = pg.id_lista     
	INNER JOIN gestiuni g ON pg.pl_gest = g.pct_lcr AND pg.id_gest = g.id    
	LEFT JOIN     
		(SELECT l.pl_pr, l.id_pr, l.pu, d.presc, l.pl_dev, l.id_dev, ROW_NUMBER() OVER(PARTITION BY l.pl_pr, l.id_pr ORDER BY a.data_doc DESC, l.pu) AS rowNo      
			FROM oferte_furnizori_lin l      
			INNER JOIN oferte_furnizori a ON l.pl_ofr = a.pct_lcr AND l.id_ofr = a.id      
			INNER JOIN devize d ON l.pl_dev = d.pct_lcr AND l.id_dev = d.id      
			WHERE a.valid = 1 AND a.anulat = 0 AND CAST(GETDATE() AS date) BETWEEN a.data_doc AND a.data_exp AND l.pu != 0) o ON o.pl_pr = n.pct_lcr AND o.id_pr = n.id AND o.rowNo = 1    
	LEFT JOIN dbo.cant_limite l ON l.pl_pr = n.pct_lcr AND l.id_pr = n.id AND l.pl_gest = pg.pl_gest AND l.id_gest = pg.id_gest    
	LEFT JOIN 
		(SELECT pl_gest, id_gest, pl_pr, id_pr, cod_pr, SUM(cantitate) AS cantitate      
			FROM dbo.sel_stoc(dbo.anluna(GETDATE()))      
			WHERE pl_cmd IS NULL AND id_cmd IS NULL        
			GROUP BY pl_gest, id_gest, pl_pr, id_pr, cod_pr       
			HAVING (SUM(cantitate) > 0)) s ON s.pl_gest = pg.pl_gest AND s.id_gest = pg.id_gest AND s.pl_pr = n.pct_lcr AND s.id_pr = n.id AND s.cod_pr = m.cod_bs    
	OUTER APPLY       
		(SELECT a.pl_gest, a.id_gest, l.pl_pr, l.id_pr, SUM(l.cantitate - l.onorat) AS comanda_int      
			FROM lincomnzclienti_view l      
			INNER JOIN comenziclienti a ON l.anluna = a.anluna AND l.pl_comcli = a.pct_lcr AND l.id_comcli = a.id AND l.cod_pr = m.cod_bs AND a.valid = 1 AND a.anulat = 0 AND a.data_inchid IS NULL AND l.cantitate - l.onorat > 0 AND a.tip_doc = 'Comanda interna'      
			WHERE a.pl_g_i = pg.pl_gest AND a.id_g_i = pg.id_gest AND l.pl_pr = n.pct_lcr AND l.id_pr = n.id AND l.cod_pr = m.cod_bs      
			GROUP BY a.pl_gest, a.id_gest, l.pl_pr, l.id_pr) f    
	LEFT JOIN cant_limite b ON b.pl_pr = n.pct_lcr AND b.id_pr = n.id AND b.pl_gest = pg.pl_gest AND b.id_gest = pg.id_gest AND (b.cant_max <= 0 OR b.cant_max <= ISNULL(s.cantitate, 0))    
	WHERE b.id IS NULL AND n.tip_produs != 'C' AND n.aproviz_depozit = 1 AND g.id_car_cmdint IS NOT NULL               
		  AND IIF(n.ambalare = 0, IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0)), CEILING((IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comanda_int, 0))) / n.ambalare) * n.ambalare) > 0        

  •     Generare avertizări
  • Generare comenzi de aprovizionare pentru furnizori