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 furnizori


Funcțiile customizate de tipul "Generare comenzi de aprovizionare pentru furnizori" sunt de două tipuri: STANDARD și INLINE și au fost create cu scopul de a genera comenzile de aprovizionare pentru furnizori, cu posibilitatea de stabilire a unor filtre noi. În cazul în care există funcții custom de tipul "Generare comenzi de aprovizionare pentru furnizori", meniul Asistent din modulul "Comenzi pentru furnizori" va conține itemi pentru fiecare funcție existentă. De asemenea, există posibilitatea de a genera comenzi pentru furnizori prin crearea unui task programat, din Execuție proceduri (procedura "Comanda furnizor 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
data_doc DATE Data comenzii de furnizor
id_furnizor VARCHAR(25) Codul furnizorului, în format ID(PCT_LCR)
id_gestiune VARCHAR(25) Codul gestiunii, în format ID(PCT_LCR)
id_produs VARCHAR(25) Codul produsului, în format ID(PCT_LCR)
tip_produs CHAR(3) Codul contului articolului (din nomenclator bunuri și servicii: FAA, GAA, etc.)
cantitate NUMERIC(13,3) Cantitatea comandată
pret_achizitie MONEY Prețul de achiziție
moneda CHAR(3) Codul valutei în care e exprimat prețul de achiziție (OPȚIONAL, implicit RON)
denumire_sup VARCHAR(500) Denumirea suplimentară ce sa va salva pe linia comenzii

 

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

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

INSERT INTO @ret_table(data_document, id_carnet, id_gestiune, id_produs, tip_produs, id_furnizor, pret_achizitie, cantitate)

SELECT  data_document = CAST(GETDATE() AS DATE),
        id_carnet = CAST(g.id_car_cmdfrn AS NUMERIC(18,0)),
        id_gestiune = dbo.id2cod(pg.pl_gest, pg.id_gest),
        id_produs = dbo.id2cod(n.pct_lcr, n.id),
        tip_produs = m.cod_bs, 
	id_furnizor = dbo.id2cod(n.pl_ft, n.id_ft),
        pret_achizitie = 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.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0)),
                                CEILING((IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 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 
        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 l.pl_pr, l.id_pr, SUM(l.cantitate - l.onorat) AS comandafrn
                FROM lincomnzfurnizori_view l
                INNER JOIN comenzifurnizori a ON l.anluna = a.anluna AND l.pl_cmd = a.pct_lcr AND l.id_cmd = a.id
                    AND l.cod_pr = m.cod_bs AND a.valid = 1 AND a.anulat = 0 AND a.inchis = 0 AND l.cantitate - l.onorat > 0
                WHERE g.pct_lcr = a.pl_gest AND g.id = a.id_gest AND n.pct_lcr = l.pl_pr AND n.id = l.id_pr
                GROUP BY a.pl_gest, a.id_gest, l.pl_pr, l.id_pr) f
        OUTER APPLY
            (SELECT l.pl_pr, l.id_pr, SUM(l.cant_f - l.cant_r) AS cant_nerecep
                FROM linfactfurnizori_view l
                INNER JOIN fur f ON l.anluna = f.anluna AND l.pl_fct = f.pct_lcr AND l.id_fct = f.id
                    AND l.cod_pr = m.cod_bs AND f.valid = 1 AND f.anulat = 0 AND l.cant_f - l.cant_r > 0
                WHERE f.data_doc > DATEADD(YEAR, -1, CAST(GETDATE() AS date)) AND l.pl_avm IS NULL AND l.id_avm IS NULL AND g.pct_lcr = f.pl_gest AND g.id = f.id_gest AND n.pct_lcr = l.pl_pr AND n.id = l.id_pr
                GROUP BY f.pl_gest, f.id_gest, l.pl_pr, l.id_pr) cn
        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.pl_ft IS NOT NULL AND n.id_ft IS NOT NULL AND n.tip_produs != 'C' AND n.aproviz_depozit = 0 AND m.cod_bs NOT LIKE 'S%' AND m.cod_bs NOT LIKE 'W%'
              AND IIF(n.ambalare = 0, IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0)), 
			  CEILING((IIF(ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0) < ISNULL(l.cant_aprov, 0), ISNULL(l.cant_aprov, 0), ISNULL(l.cant_min, 0) - ISNULL(s.cantitate, 0) - ISNULL(f.comandafrn, 0) - ISNULL(cn.cant_nerecep, 0))) / n.ambalare) * n.ambalare) > 0  

  •     Generare comenzi de aprovizionare pentru depozit
  • Sincronizare listă de prețuri