Exemplo de tarefa que realiza processamento de dados buscando valor de Compra realizado para o fornecedor, e apurando valor de repasse com base em um % definido. Essa tarefa levanta a informação, cria registro no CONTAS A RECEBER do cliente, e já not
Citação de Kindrazki em 24 de maio de 2012, 10:46Exemplo de tarefa que realiza processamento de dados buscando valor de Compra realizado para o fornecedor, e apurando valor de repasse com base em um % definido. Essa tarefa levanta a informação, cria registro no CONTAS A RECEBER do cliente, e já notifica fornecedor a respeito do processamento.
[code]
connect $v{datasource1};
# Encontra Ultima data do mes anterior
sql
select
'$exp{addDays($v{primeiraDataMes},-1)}exp' as DF
,'$v{primeiraDataMes}' as DIMESATUAL
,'$v{ultimaDataMes}' as DFMESATUAL
from
sysibm.sysdummy1;# Calcula primeiro dia do mes anterior.
sql
select
'$exp{firstDateOfMonth($c{DF})}exp' as DI
from
sysibm.sysdummy1
;# Inicia contador de planilha
sql
Select
'-'||trim(cast(month(current_date) as char(2)))||cast(year(current_date) as char(4))||trim(cast(day(current_date) as char(2))) as IDPLANILHA
from
dummy
;connect $v{datasource2};
sql
select formacontato.destino as emailg
from
tarefaformacontato left outer join formacontato
on (tarefaformacontato.idformacontato = formacontato.idformacontato)
left outer join usuario on (usuario.idusuario = formacontato.idusuario)
where
idtarefa = $v{idTarefa} and tarefaformacontato.situacao = 0;set emailg = "$c{EMAILG:list}".replace(',', '|');
connect $v{datasource1};
# Elimina os lançamentos gerados no Contas a Receber ainda não baixados.
sql_exec delete from dba.contas_receber where idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}';# Carrega todos os fornecedores com % de Acordo Informado.
sql
select
fa.idclifor as IDFORNECEDOR
,'$v{emailg}' as EMAIL
,0 as TIPO
,fa.idclifor as ID
,fa.PERACORDO as PERACORDO
from
dba.FORNECEDORDETALHES as FA
where
fa.PERACORDO > 0
and fa.idclifor = 432
sql_var(sql_for)
;for_each_dest <columnDest>EMAIL</columnDest>
<columnDestType>TIPO</columnDestType>
<columnId>ID</columnId>
<sql>$v{sql_for}</sql>
;# Se encontrar algum registro é porque não é para gerar novamente.
sql
Select
count(*) as QTDREGCR
from
dba.contas_receber
where
idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}'
and idclifor = $v{IDFORNECEDOR}
;
stop_if $c{QTDREGCR} != 0;# Roda sql para buscar as compras no periodo cujo foram feitas para o fornecedor em questão.
sql
SELECT
f.IDCLIFOR as IDCLIFOR,
f.NOME as NOMEFORNECEDOR,
cast(sum(VALORTOTAL) as decimal(15,2)) as TOTALLIQUIDOCOMPRADO,
FA.PERACORDO as PERACORDO,
( cast(sum(VALORTOTAL) as decimal(15,2)) * FA.PERACORDO/100) as VALORTITULO,
dba.soma_dias(current_date,15) as DTVENCIMENTO
FROM
(Select
Pre_pedido.IdFornecedor,
produto.descrcomproduto as descricaoproduto,
Pre_Pedido_Prod.IdPedido as idpedido,
Date(Pre_Pedido.DtHoraEmissao) as DataPrePedido,
Pre_Pedido.IdPrePedido,
Pre_Pedido.IdEmpresa,
Pre_Pedido.TipoSituacao,
Pre_Pedido_Prod.IdSubProduto,
Pre_Pedido_Prod.QtdSolicitada,
Pre_Pedido_Prod.QtdAtendida,
Pre_Pedido_Prod.QtdEnviada,
Pre_Pedido_Prod.TipoPreco,
Pre_Pedido_Prod.ValProduto as Original,(Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) as ValProduto,(Select
e.InscrEstadual
From
Inscricao_Estadual as E
Where
E.Idempresa = Empresa.IdEmpresa and
E.UF = Empresa.UF
) as IE_Empresa,
Cast(Coalesce((Select
Coalesce(N.ValBonificacao,0) as ValBonificacao
From
Negociacao_Prod as N
Where
N.IdNegociacao = Pre_Pedido_Prod.IdNegociacao and
N.IdSubProduto = Pre_Pedido_prod.IdSubproduto and
N.TipoPreco = Pre_Pedido_prod.TipoPreco and
N.IdPrazo = Negociacao_Prazo.IdPrazo
),0) as Decimal(15,6)) as ValBonificacao,
Pedido_Compra_Prod.qtdsolicitada as qtdsolicitadaped,
Pedido_Compra_Prod.qtdatendida as qtdatendidaped ,(Pre_Pedido_Prod.ValProduto * (Case when Pre_Pedido_Prod.QtdAtendida > 0 then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTAL2 ,
((Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) * (Case when Pre_Pedido_Prod.QtdAtendida > 0 and Pre_Pedido_Prod.QtdAtendida > Pre_Pedido_Prod.QtdSolicitada then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTALFrom
Pre_Pedido
left outer join Pre_Pedido_Prod on
(Pre_Pedido.IdPrePedido = Pre_Pedido_Prod.IdPrePedido)
left outer join Negociacao_Prod on
(Pre_Pedido_Prod.IdNegociacao = Negociacao_Prod.IdNegociacao and
Pre_Pedido_Prod.IdSubProduto = Negociacao_Prod.IdSubProduto and
Pre_Pedido_Prod.tipopreco = Negociacao_Prod.tipopreco and
Pre_Pedido.IdPrazo = Negociacao_Prod.IdPrazo)
left outer join Pedido_Compra_Prod on
(Pedido_Compra_Prod.idpedido = Pre_Pedido_Prod.idPedido AND
Pedido_Compra_Prod.idProduto = Pre_Pedido_prod.idProduto and
Pedido_Compra_Prod.idSubProduto = Pre_Pedido_Prod.idSubProduto),
Produto,
Produto_Grade,
Empresa
left outer join Cidades_Ibge on
(Empresa.IdCidade = Cidades_Ibge.IdCidade),
Cliente_Fornecedor as Fornecedor
Left Outer Join Cidades_IBGE as IBGE_Fornecedor on
(Fornecedor.IdCidade = IBGE_Fornecedor.IdCidade),
Cliente_Fornecedor as Associado
Left Outer Join Cidades_IBGE as IBGE_Associado on
(Associado.IdCidade = IBGE_Associado.IdCidade),
Negociacao_Prazo
Where
Pre_Pedido_Prod.IdProduto = Produto.IdProduto and
Pre_Pedido_Prod.IdProduto = Produto_Grade.IdProduto and
Pre_Pedido_Prod.IdSubProduto = Produto_Grade.IdSubProduto and
Pre_Pedido.IdFornecedor = Fornecedor.IdClifor and
Pre_Pedido.IdAssociado = Associado.IdClifor and
Pre_pedido.IdPrazo = Negociacao_Prazo.IdPrazo and
Pre_Pedido.IdFornecedor = $v{IDFORNECEDOR} and
Pre_Pedido.TipoSituacao <> 'C' and
Empresa.IdEmpresa = 2 and
(Select Date(p.DtMovimento) From Pedido_Compra as P Where P.IdPedido =Pre_Pedido_Prod.IdPedido and P.IdEmpresa = Pre_Pedido.IdEmpresa and P.IdClifor = Pre_Pedido.IdFornecedor) between '2012-04-01' and '2012-04-30'
Order by produto.descrcomproduto
) as T inner join dba.cliente_fornecedor as f
on (f.idclifor = t.idfornecedor)
inner join FORNECEDORDETALHES as FA
on (FA.IDCLIFOR = F.IDCLIFOR)
Group by
f.IDCLIFOR
,f.NOME
,FA.PERACORDO
;# Se valor igual a zero, cancela geração
stop_if $c{TOTALLIQUIDOCOMPRADO} == 0 ;# Insere registro no Contas a Receber.
sql_exec Insert into dba.contas_receber
(IDEMPRESA
,IDCLIFOR
,IDTITULO
,DIGITOTITULO
,IDPLANILHA
,VALTITULO
,OBSTITULO
,ORIGEMMOVIMENTO
,DTMOVIMENTO
,DTVENCIMENTO
,IDCTACONTABIL)
Select
1122
,$v{IDFORNECEDOR}
,$c{IDPLANILHA} * (-1)
,'01'
,$c{IDPLANILHA}
,$c{VALORTITULO}
,'Acordo'
,'AVU'
,current_date
,'$c{DTVENCIMENTO}'
,3210233
from
dummy
;# Monta variavel titulo1 para apresentar na notificação
set titulo1 = 'Periodo de fechamento: $c{DI[1]"date:dd/MM/yyyy"} a $c{DF[1]"date:dd/MM/yyyy"}. Valor Total de Pedidos: $c{TOTALLIQUIDOCOMPRADO[1]"dec:###,###,###,##0.00"}';# Carrega Contrato acordado entre as duas partes e gravado no banco de dados.
sql
Select
cast(obsacordo as varchar(32000)) as CONTRATO
from
dba.ACORDO_COMERCIAL as AC
where
AC.IDCLIFOR = $v{IDFORNECEDOR}
;[/code]
Exemplo de tarefa que realiza processamento de dados buscando valor de Compra realizado para o fornecedor, e apurando valor de repasse com base em um % definido. Essa tarefa levanta a informação, cria registro no CONTAS A RECEBER do cliente, e já notifica fornecedor a respeito do processamento.
[code]
connect $v{datasource1};
# Encontra Ultima data do mes anterior
sql
select
'$exp{addDays($v{primeiraDataMes},-1)}exp' as DF
,'$v{primeiraDataMes}' as DIMESATUAL
,'$v{ultimaDataMes}' as DFMESATUAL
from
sysibm.sysdummy1;
# Calcula primeiro dia do mes anterior.
sql
select
'$exp{firstDateOfMonth($c{DF})}exp' as DI
from
sysibm.sysdummy1
;
# Inicia contador de planilha
sql
Select
'-'||trim(cast(month(current_date) as char(2)))||cast(year(current_date) as char(4))||trim(cast(day(current_date) as char(2))) as IDPLANILHA
from
dummy
;
connect $v{datasource2};
sql
select formacontato.destino as emailg
from
tarefaformacontato left outer join formacontato
on (tarefaformacontato.idformacontato = formacontato.idformacontato)
left outer join usuario on (usuario.idusuario = formacontato.idusuario)
where
idtarefa = $v{idTarefa} and tarefaformacontato.situacao = 0;
set emailg = "$c{EMAILG:list}".replace(',', '|');
connect $v{datasource1};
# Elimina os lançamentos gerados no Contas a Receber ainda não baixados.
sql_exec delete from dba.contas_receber where idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}';
# Carrega todos os fornecedores com % de Acordo Informado.
sql
select
fa.idclifor as IDFORNECEDOR
,'$v{emailg}' as EMAIL
,0 as TIPO
,fa.idclifor as ID
,fa.PERACORDO as PERACORDO
from
dba.FORNECEDORDETALHES as FA
where
fa.PERACORDO > 0
and fa.idclifor = 432
sql_var(sql_for)
;
for_each_dest <columnDest>EMAIL</columnDest>
<columnDestType>TIPO</columnDestType>
<columnId>ID</columnId>
<sql>$v{sql_for}</sql>
;
# Se encontrar algum registro é porque não é para gerar novamente.
sql
Select
count(*) as QTDREGCR
from
dba.contas_receber
where
idempresa = 1122 and origemmovimento = 'AVU' and flagbaixada = 'F' and OBSTITULO = 'Acordo'
and dtmovimento between '$c{DIMESATUAL}' and '$c{DFMESATUAL}'
and idclifor = $v{IDFORNECEDOR}
;
stop_if $c{QTDREGCR} != 0;
# Roda sql para buscar as compras no periodo cujo foram feitas para o fornecedor em questão.
sql
SELECT
f.IDCLIFOR as IDCLIFOR,
f.NOME as NOMEFORNECEDOR,
cast(sum(VALORTOTAL) as decimal(15,2)) as TOTALLIQUIDOCOMPRADO,
FA.PERACORDO as PERACORDO,
( cast(sum(VALORTOTAL) as decimal(15,2)) * FA.PERACORDO/100) as VALORTITULO,
dba.soma_dias(current_date,15) as DTVENCIMENTO
FROM
(Select
Pre_pedido.IdFornecedor,
produto.descrcomproduto as descricaoproduto,
Pre_Pedido_Prod.IdPedido as idpedido,
Date(Pre_Pedido.DtHoraEmissao) as DataPrePedido,
Pre_Pedido.IdPrePedido,
Pre_Pedido.IdEmpresa,
Pre_Pedido.TipoSituacao,
Pre_Pedido_Prod.IdSubProduto,
Pre_Pedido_Prod.QtdSolicitada,
Pre_Pedido_Prod.QtdAtendida,
Pre_Pedido_Prod.QtdEnviada,
Pre_Pedido_Prod.TipoPreco,
Pre_Pedido_Prod.ValProduto as Original,
(Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) as ValProduto,
(Select
e.InscrEstadual
From
Inscricao_Estadual as E
Where
E.Idempresa = Empresa.IdEmpresa and
E.UF = Empresa.UF
) as IE_Empresa,
Cast(Coalesce((Select
Coalesce(N.ValBonificacao,0) as ValBonificacao
From
Negociacao_Prod as N
Where
N.IdNegociacao = Pre_Pedido_Prod.IdNegociacao and
N.IdSubProduto = Pre_Pedido_prod.IdSubproduto and
N.TipoPreco = Pre_Pedido_prod.TipoPreco and
N.IdPrazo = Negociacao_Prazo.IdPrazo
),0) as Decimal(15,6)) as ValBonificacao,
Pedido_Compra_Prod.qtdsolicitada as qtdsolicitadaped,
Pedido_Compra_Prod.qtdatendida as qtdatendidaped ,
(Pre_Pedido_Prod.ValProduto * (Case when Pre_Pedido_Prod.QtdAtendida > 0 then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTAL2 ,
((Select
Min(PPP.ValProduto)
From
Pre_Pedido_Prod PPP
Where
Pre_Pedido_Prod.IdPedido = PPP.IdPedido And
Pre_Pedido_Prod.IdFornecedorPedido = PPP.IdFornecedorPedido And
Pre_Pedido_Prod.idProduto = PPP.idProduto And
Pre_Pedido_Prod.idSubProduto = PPP.idSubProduto
) * (Case when Pre_Pedido_Prod.QtdAtendida > 0 and Pre_Pedido_Prod.QtdAtendida > Pre_Pedido_Prod.QtdSolicitada then Pre_Pedido_Prod.QtdAtendida else Pre_Pedido_Prod.QtdSolicitada end)) as VALORTOTAL
From
Pre_Pedido
left outer join Pre_Pedido_Prod on
(Pre_Pedido.IdPrePedido = Pre_Pedido_Prod.IdPrePedido)
left outer join Negociacao_Prod on
(Pre_Pedido_Prod.IdNegociacao = Negociacao_Prod.IdNegociacao and
Pre_Pedido_Prod.IdSubProduto = Negociacao_Prod.IdSubProduto and
Pre_Pedido_Prod.tipopreco = Negociacao_Prod.tipopreco and
Pre_Pedido.IdPrazo = Negociacao_Prod.IdPrazo)
left outer join Pedido_Compra_Prod on
(Pedido_Compra_Prod.idpedido = Pre_Pedido_Prod.idPedido AND
Pedido_Compra_Prod.idProduto = Pre_Pedido_prod.idProduto and
Pedido_Compra_Prod.idSubProduto = Pre_Pedido_Prod.idSubProduto),
Produto,
Produto_Grade,
Empresa
left outer join Cidades_Ibge on
(Empresa.IdCidade = Cidades_Ibge.IdCidade),
Cliente_Fornecedor as Fornecedor
Left Outer Join Cidades_IBGE as IBGE_Fornecedor on
(Fornecedor.IdCidade = IBGE_Fornecedor.IdCidade),
Cliente_Fornecedor as Associado
Left Outer Join Cidades_IBGE as IBGE_Associado on
(Associado.IdCidade = IBGE_Associado.IdCidade),
Negociacao_Prazo
Where
Pre_Pedido_Prod.IdProduto = Produto.IdProduto and
Pre_Pedido_Prod.IdProduto = Produto_Grade.IdProduto and
Pre_Pedido_Prod.IdSubProduto = Produto_Grade.IdSubProduto and
Pre_Pedido.IdFornecedor = Fornecedor.IdClifor and
Pre_Pedido.IdAssociado = Associado.IdClifor and
Pre_pedido.IdPrazo = Negociacao_Prazo.IdPrazo and
Pre_Pedido.IdFornecedor = $v{IDFORNECEDOR} and
Pre_Pedido.TipoSituacao <> 'C' and
Empresa.IdEmpresa = 2 and
(Select Date(p.DtMovimento) From Pedido_Compra as P Where P.IdPedido =Pre_Pedido_Prod.IdPedido and P.IdEmpresa = Pre_Pedido.IdEmpresa and P.IdClifor = Pre_Pedido.IdFornecedor) between '2012-04-01' and '2012-04-30'
Order by produto.descrcomproduto
) as T inner join dba.cliente_fornecedor as f
on (f.idclifor = t.idfornecedor)
inner join FORNECEDORDETALHES as FA
on (FA.IDCLIFOR = F.IDCLIFOR)
Group by
f.IDCLIFOR
,f.NOME
,FA.PERACORDO
;
# Se valor igual a zero, cancela geração
stop_if $c{TOTALLIQUIDOCOMPRADO} == 0 ;
# Insere registro no Contas a Receber.
sql_exec Insert into dba.contas_receber
(IDEMPRESA
,IDCLIFOR
,IDTITULO
,DIGITOTITULO
,IDPLANILHA
,VALTITULO
,OBSTITULO
,ORIGEMMOVIMENTO
,DTMOVIMENTO
,DTVENCIMENTO
,IDCTACONTABIL)
Select
1122
,$v{IDFORNECEDOR}
,$c{IDPLANILHA} * (-1)
,'01'
,$c{IDPLANILHA}
,$c{VALORTITULO}
,'Acordo'
,'AVU'
,current_date
,'$c{DTVENCIMENTO}'
,3210233
from
dummy
;
# Monta variavel titulo1 para apresentar na notificação
set titulo1 = 'Periodo de fechamento: $c{DI[1]"date:dd/MM/yyyy"} a $c{DF[1]"date:dd/MM/yyyy"}. Valor Total de Pedidos: $c{TOTALLIQUIDOCOMPRADO[1]"dec:###,###,###,##0.00"}';
# Carrega Contrato acordado entre as duas partes e gravado no banco de dados.
sql
Select
cast(obsacordo as varchar(32000)) as CONTRATO
from
dba.ACORDO_COMERCIAL as AC
where
AC.IDCLIFOR = $v{IDFORNECEDOR}
;
[/code]