Cara veja se te ajuda...
/* Limpa dados antigos no browse */
for each tt-saldo exclusive-lock:
delete tt-saldo.
end.
RUN Get-Field-Screen-Value IN adm-broker-hdl
(INPUT THIS-PROCEDURE,
INPUT "cb-ref").
assign c-cod-refer = return-value.
if c-cod-refer = ? then assign c-cod-refer = "".
RUN Get-Field-Screen-Value IN adm-broker-hdl
(INPUT THIS-PROCEDURE,
INPUT "de-saldo-inic").
assign de-saldo-inic = dec(string(return-value)).
RUN Get-Field-Screen-Value IN adm-broker-hdl
(INPUT THIS-PROCEDURE,
INPUT "de-quant-segur").
assign de-quant-segur = dec(string(return-value)).
assign i-dif-dias = dt-corte-par - today.
run utp/ut-acomp.p persistent set h-acomp.
run pi-inicializar in h-acomp ("Simulando Saldos do Item").
do i-cont = 0 to (i-dif-dias + 1):
create tt-saldo.
assign dt-auxiliar = (TODAY - 1) + i-cont.
run pi-calc-saldo-browse.
assign de-saldo-inic = de-saldo-inic -
(if l-cons-qt-aba
then tt-saldo.pedidos
else 0)
+ tt-saldo.producao
+ tt-saldo.compras
- tt-saldo.reservas.
/*O de-saldo-inic subtrai o valor do Estoque de Segurança.*/
/*Dessa forma, o estoque de segurança não influencia no cálculo
do saldo disponível. */
assign tt-saldo.disponivel = de-saldo-inic + de-quant-segur.
if dt-auxiliar < TODAY then do:
{utp/ut-liter.i Anterior * }
assign tt-saldo.data = trim(return-value).
assign c-data = tt-saldo.data.
end.
else assign tt-saldo.data = string(dt-auxiliar,"99/99/9999").
if tt-saldo.pedidos = 0 and tt-saldo.producao = 0
and tt-saldo.reserva = 0 and tt-saldo.compras = 0 then
delete tt-saldo.
end.
run pi-finalizar in h-
acomp.
RUN dispatch IN THIS-PROCEDURE ('open-query':U).
procedure pi-calc-saldo-browse:
/
*------------------------------------------------------------------------------
Purpose:
Parameters: <none>
Notes: Ler os saldos do item "antes" e "a cada dia" depois de hoje
------------------------------------------------------------------------------
*/
find first param-global no-lock no-error.
assign c-tab-sit-ped = ""
c-tab-sit-aval = ""
dt-aux-1900 = date("01/01/1900").
if l-abertos-par = yes
then assign c-tab-sit-ped = "1".
if l-at-parcial-par = yes
then assign c-tab-sit-ped = c-tab-sit-ped + "2".
if l-ped-n-av-par = yes
then assign c-tab-sit-aval = "1".
if l-ped-aval-par = yes
then assign c-tab-sit-aval = c-tab-sit-aval + "2".
if l-ped-apro-par = yes
then assign c-tab-sit-aval = c-tab-sit-aval + "3".
if l-ped-repr-par = yes
then assign c-tab-sit-aval = c-tab-sit-aval + "4".
FOR EACH tt-sit.
DELETE tt-sit.
END.
CREATE tt-sit.
ASSIGN tt-sit.cod-sit-ent = 1.
CREATE tt-sit.
ASSIGN tt-sit.cod-sit-ent = 2.
if i-cont = 0 then do:
if item.baixa-estoq then do:
FOR EACH tt-sit,
each ped-ent fields (it-codigo cod-refer cod-sit-ent dt-
entrega
nome-abrev nr-pedcli nr-sequencia
qt-pedida qt-atendida qt-alocada)
where ped-ent.it-codigo = item.it-codigo
and ped-ent.cod-refer = c-cod-refer
and ped-ent.cod-sit-ent = tt-sit.cod-sit-ent
and ped-ent.dt-entrega <= dt-auxiliar no-lock,
first ped-item fields (nome-abrev nr-pedcli nr-sequencia it-
codigo
cod-refer nat-operacao) of ped-ent
no-lock,
first natur-oper fields (nat-operacao baixa-estoq) no-lock
where natur-oper.nat-operacao = ped-item.nat-operacao
and natur-oper.baixa-estoq = yes,
first ped-venda fields (nome-abrev nr-pedcli cod-estabel
cod-sit-ped cod-sit-aval) no-lock
where ped-venda.nome-abrev = ped-item.nome-abrev
and ped-venda.nr-pedcli = ped-item.nr-pedcli
and ped-venda.cod-estabel = c-cod-estabel-par
&IF '{&bf_dis_versao_ems}' >= "2.04" &THEN
AND ped-venda.log-cotacao = NO
&ENDIF :
if (ped-venda.cod-sit-ped = 1 and l-abertos-par = no)
or (ped-venda.cod-sit-ped = 2 and l-at-parcial-par = no)
or (ped-venda.cod-sit-ped > 2)
or (ped-venda.cod-sit-aval = 1 and l-ped-n-av-par = no)
or (ped-venda.cod-sit-aval = 2 and l-ped-aval-par = no)
or (ped-venda.cod-sit-aval = 3 and l-ped-apro-par = no)
or (ped-venda.cod-sit-aval = 4 and l-ped-repr-par = no)
then
next.
assign de-aux-saldo-item = 0
de-aux-saldo-aloc = 0
de-aux-saldo-item = if (ped-ent.qt-pedida - ped-
ent.qt-atendida) > 0
then (ped-ent.qt-pedida - ped-
ent.qt-atendida)
else 0
de-aux-saldo-aloc = if (ped-ent.qt-alocada - ped-
ent.qt-atendida) > 0
then (ped-ent.qt-alocada - ped-
ent.qt-atendida)
else 0
tt-saldo.pedidos = tt-saldo.pedidos +
if de-aux-saldo-item > de-aux-
saldo-aloc
then (de-aux-saldo-item - de-
aux-saldo-aloc)
else 0.
end.
end.
if param-global.modulo-cp then do:
find first ord-prod use-index item
where ord-prod.it-codigo = item.it-
codigo
and (ord-prod.dt-termino + item.res-cq-fabri) <= dt-
auxiliar
and ord-prod.estado < 7
and ord-prod.cod-refer = c-cod-refer
and ord-prod.cod-estabel = c-cod-estabel-par
and (ord-prod.qt-ordem - ord-prod.qt-produzida) > 0
no-lock no-error.
assign dt-aux-inicio = if avail ord-prod then ord-prod.dt-
termino + item.res-cq-fabri
else dt-auxiliar + 1.
/* da-auxiliar é a data que varia em função da tada informada
nos parâmetros */
/* da-aux-inicio serve para buscar as OP */
do dt-aux-inicio = dt-aux-inicio to dt-auxiliar:
for each ord-prod fields (it-codigo dt-termino estado cod-
refer
cod-estabel qt-ordem qt-
produzida)
use-index item no-lock
where ord-prod.it-codigo = item.it-
codigo
and (ord-prod.dt-termino + item.res-cq-fabri) = dt-
aux-inicio
and ord-prod.estado <
7
and ord-prod.cod-refer = c-cod-
refer
and ord-prod.cod-estabel = c-cod-estabel-par
and (ord-prod.qt-ordem - ord-prod.qt-produzida) > 0:
assign tt-saldo.producao = tt-saldo.producao +
(ord-prod.qt-ordem - ord-
prod.qt-produzida).
end.
end.
find first reservas use-index planejamento
where reservas.it-codigo = item.it-codigo
and reservas.estado = 1
and reservas.dt-reserva <= dt-auxiliar
and reservas.cod-refer = c-cod-refer
and (reservas.quant-orig - reservas.quant-atend) > 0 no-
lock no-error.
assign dt-aux-inicio = if avail reservas then reservas.dt-
reserva
else dt-auxiliar +
1.
do dt-aux-inicio = dt-aux-inicio to dt-auxiliar:
for each reservas fields (it-codigo dt-reserva estado cod-
refer
quant-orig quant-atend)
use-index data no-lock
where reservas.it-codigo = item.it-codigo
and reservas.dt-reserva = dt-aux-inicio
and reservas.estado = 1
and reservas.cod-refer = c-cod-
refer
and (reservas.quant-orig - reservas.quant-atend) > 0:
assign tt-saldo.reserva = tt-saldo.reserva +
(reservas.quant-orig -
reservas.quant-atend).
end.
end.
end.
if param-global.modulo-cc then do:
for each prazo-compra fields (it-codigo data-entrega situacao
cod-refer
quant-saldo numero-ordem) use-
index entrega-pl
where prazo-compra.it-codigo = item.it-codigo
and prazo-compra.data-entrega <= ( dt-auxiliar - item.res-
cq-comp )
and prazo-compra.data-entrega >= ( dt-aux-1900 -
item.res-cq-comp )
and prazo-compra.situacao <> 4
and prazo-compra.situacao <> 6
and prazo-compra.cod-refer = c-cod-refer
and prazo-compra.quant-saldo > 0 no-lock,
first ordem-compra fields (numero-ordem cod-estabel ordem-
servic natureza origem)
where ordem-compra.numero-ordem = prazo-compra.numero-
ordem
and ordem-compra.cod-estabel = c-cod-estabel-par no-
lock:
If ordem-compra.ordem-servic <> 0 and
ordem-compra.natureza = 3 and
ordem-compra.origem = 2 then next.
assign tt-saldo.compras = tt-saldo.compras + prazo-
compra.quant-saldo.
end.
end.
end.
else do:
if item.baixa-estoq then do:
FOR EACH tt-sit,
each ped-ent fields (it-codigo cod-refer cod-sit-ent dt-
entrega
nome-abrev nr-pedcli nr-sequencia
qt-pedida qt-atendida qt-alocada)
where ped-ent.it-codigo = item.it-codigo
and ped-ent.cod-refer = c-cod-refer
and ped-ent.dt-entrega = dt-auxiliar
and ped-ent.cod-sit-ent = tt-sit.cod-sit-ent no-lock,
first ped-item fields (nome-abrev nr-pedcli nr-sequencia it-
codigo
cod-refer nat-operacao) of ped-ent no-
lock,
first natur-oper fields (nat-operacao baixa-estoq) no-lock
where natur-oper.nat-operacao = ped-item.nat-operacao
and natur-oper.baixa-estoq = yes,
first ped-venda fields (nome-abrev nr-pedcli cod-estabel
cod-sit-ped cod-sit-aval) no-lock
where ped-venda.nome-abrev = ped-item.nome-
abrev
and ped-venda.nr-pedcli = ped-item.nr-
pedcli
and ped-venda.cod-estabel = c-cod-estabel-par
&IF '{&bf_dis_versao_ems}' >= "2.04" &THEN
AND ped-venda.log-cotacao = NO
&ENDIF :
if (ped-venda.cod-sit-ped = 1 and l-abertos-par = no)
or (ped-venda.cod-sit-ped = 2 and l-at-parcial-par = no)
or (ped-venda.cod-sit-aval = 1 and l-ped-n-av-par = no)
or (ped-venda.cod-sit-aval = 2 and l-ped-aval-par = no)
or (ped-venda.cod-sit-aval = 3 and l-ped-apro-par = no)
or (ped-venda.cod-sit-aval = 4 and l-ped-repr-par = no)
then
next.
assign de-aux-saldo-item = 0
de-aux-saldo-aloc = 0
de-aux-saldo-item = if (ped-ent.qt-pedida - ped-
ent.qt-atendida) > 0
then (ped-ent.qt-pedida - ped-
ent.qt-atendida)
else 0
de-aux-saldo-aloc = if (ped-ent.qt-alocada - ped-
ent.qt-atendida) > 0
then (ped-ent.qt-alocada - ped-
ent.qt-atendida)
else 0
tt-saldo.pedidos = tt-saldo.pedidos +
if (de-aux-saldo-item - de-aux-
saldo-aloc) > 0
then (de-aux-saldo-item - de-
aux-saldo-aloc)
else 0.
end.
end.
if param-global.modulo-cp then do:
for each ord-prod fields (it-codigo dt-termino estado cod-
refer
cod-estabel qt-ordem qt-produzida)
use-index item no-lock
where ord-prod.it-codigo = item.it-codigo
and (ord-prod.dt-termino + item.res-cq-fabri) = dt-
auxiliar
and ord-prod.estado < 7
and ord-prod.cod-refer = c-cod-refer
and ord-prod.cod-estabel = c-cod-estabel-par
and (ord-prod.qt-ordem - ord-prod.qt-produzida) > 0:
assign tt-saldo.producao = tt-saldo.producao +
(ord-prod.qt-ordem - ord-
prod.qt-produzida).
end.
for each reservas fields (it-codigo dt-reserva estado cod-
refer
quant-orig quant-atend)
use-index data no-lock
where reservas.it-codigo = item.it-codigo
and reservas.dt-reserva = dt-auxiliar
and reservas.estado = 1
and reservas.cod-refer = c-cod-refer
and (reservas.quant-orig - reservas.quant-atend) > 0:
assign tt-saldo.reserva = tt-saldo.reserva +
(reservas.quant-orig -
reservas.quant-atend).
end.
end.
if param-global.modulo-cc then do:
for each prazo-compra fields (it-codigo data-entrega situacao
cod-refer
quant-saldo numero-ordem) use-
index entrega-pl
where prazo-compra.it-codigo = item.it-codigo
and prazo-compra.data-entrega <= (dt-auxiliar - item.res-
cq-comp)
and prazo-compra.data-entrega >= (dt-auxiliar - item.res-
cq-comp)
and prazo-compra.situacao <> 4
and prazo-compra.situacao <> 6
and prazo-compra.cod-refer = c-cod-refer
and prazo-compra.quant-saldo > 0 no-lock,
first ordem-compra fields (numero-ordem cod-estabel ordem-
servic natureza origem)
where ordem-compra.numero-ordem = prazo-compra.numero-
ordem
and ordem-compra.cod-estabel = c-cod-estabel-par no-
lock:
If ordem-compra.ordem-servic <> 0 and
ordem-compra.natureza = 3 and
ordem-compra.origem = 2 then next.
assign tt-saldo.compras = tt-saldo.compras + prazo-
compra.quant-saldo.
end.
end.
end.
END PROCEDURE.
On 25 nov, 09:39, "Dilonei - G-Mail" <
dilonei.gra...@gmail.com> wrote:
> Olá Pessoal,
>
> Estou precisando simular os saldos em estoque dos itens,
> igualmente faz o programa PD0912, do EMS Datasul. Alguém sabe se tem alguma
> API, ou alguém tem um script para pegar estes saldos?
>
> Atenciosamente,
>
> Dilonei Grando
>
> Celular - 51 9985 5398
>
> E-mail: <mailto:
dilonei.gra...@gmail.com>
dilonei.gra...@gmail.com
>
> Web: <
http://dilonei.000webhost.info/>
http://dilonei.000webhost.info/
>
> MSN: <mailto:
dilonei.gra...@ibest.com.br>
dilonei.gra...@ibest.com.br