CREATE PROCEDURE PR_EXPLODIRLISTA( EMPRESA INTEGER, PRODUTO VARCHAR(40), QUANTIDADE FLOAT, QT_NIVEIS INTEGER, QT_NIVELATUAL INTEGER ) RETURNS( CD_PRODUTO VARCHAR(40), DS_PRODUTO VARCHAR(100), CD_ITEM VARCHAR(40), DS_ITEM VARCHAR(100), QT_ITEM FLOAT, DS_UNIDADE VARCHAR(20), CD_FORNECEDOR INTEGER, NM_FORNECEDOR VARCHAR(100), NR_FONEFORNECEDOR VARCHAR(12), FG_ENTREGAPRAZO CHAR(1), FG_PRODUTODANIFICADO CHAR(1), FG_ENTREGACORRETA CHAR(1), CD_DEPOSITO INTEGER, NM_DEPOSITO VARCHAR(50), QT_ESTOQUE FLOAT, TP_ITEM CHAR(2) ) AS DECLARE VARIABLE NR_NIVEL INTEGER; DECLARE VARIABLE NR_NIVELATUAL INTEGER; DECLARE VARIABLE NR_NOTA INTEGER; DECLARE VARIABLE NR_SERIE VARCHAR(10); begin NR_NIVEL = :QT_NIVEIS; NR_NIVELATUAL = :QT_NIVELATUAL +1; FOR SELECT cd_componente, qt_componente, tp_componente FROM SGACProdLigacoes WHERE cd_produto = :produto INTO :cd_item, :qt_item, :tp_item DO BEGIN SELECT ds_produto, ds_unidade FROM SGACProduto WHERE cd_produto = :cd_item INTO :DS_ITEM, :DS_UNIDADE; CD_PRODUTO = :produto; QT_ITEM = :QT_ITEM * :QUANTIDADE; SUSPEND; IF ( :cd_item IS NOT NULL ) THEN EXECUTE PROCEDURE PR_EXPLODIRLISTA( :empresa, :cd_item, :qt_item, :nr_nivel, :nr_nivelatual ) RETURNING_VALUES :CD_PRODUTO, :DS_PRODUTO, :CD_ITEM, :DS_ITEM, :QT_ITEM, :DS_UNIDADE, :CD_FORNECEDOR, :NM_FORNECEDOR, :NR_FONEFORNECEDOR, :FG_ENTREGAPRAZO, :FG_PRODUTODANIFICADO, :FG_ENTREGACORRETA, :CD_DEPOSITO, :NM_DEPOSITO, :QT_ESTOQUE, :TP_ITEM; END end