- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Criação de Saldo Inicial, Movimento Interno de Entrada, Movimento Interno de Saida
×
Linguagem de Programação ADVPL
Perguntas Criação de Saldo Inicial, Movimento Interno de Entrada, Movimento Interno de Saida
- Rstrozi
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 123
- Obrigados Recebidos: 0
11 anos 2 semanas atrás #18355
por Rstrozi
Criação de Saldo Inicial, Movimento Interno de Entrada, Movimento Interno de Saida foi criado por Rstrozi
Bom dia Pessoal,
Estou montando uma rotina automática para fazer as seguintes coisas: criar saldo inicial na SB9 para determinados produtos caso nao exista, fazer um movimento de entrada neste armazem e fazer um movimento de saida em outro.
Se utilizar um unico item, funciona direitinho, mas a partir do momento que coloco uma query buscando itens de algumas NFs para rodar a rotina, parece que nada mais funciona. Para o primeiro item da tabela temporaria as informações são carregadas, o armazem é criado, o movimento de saida é incluido, porém o de entrada não. A partir do segundo item, as informações ficam em branco. No exemplo a seguir, a query retornaria 82 registros.
Alguém poderia me dar uma luz?
Estou montando uma rotina automática para fazer as seguintes coisas: criar saldo inicial na SB9 para determinados produtos caso nao exista, fazer um movimento de entrada neste armazem e fazer um movimento de saida em outro.
Se utilizar um unico item, funciona direitinho, mas a partir do momento que coloco uma query buscando itens de algumas NFs para rodar a rotina, parece que nada mais funciona. Para o primeiro item da tabela temporaria as informações são carregadas, o armazem é criado, o movimento de saida é incluido, porém o de entrada não. A partir do segundo item, as informações ficam em branco. No exemplo a seguir, a query retornaria 82 registros.
Alguém poderia me dar uma luz?
#Include "Protheus.ch"
#include "rwmake.ch"
#include "tbiconn.ch"
User Function NWTR20XX()
Local cProduto := ''
Local nQuant := 0
Local cDocto := ''
Local cUM := ''
Local cConta := ''
Local cGrupo := ''
Local cSegUM := ''
Local cTipo := ''
Local cCC := ''
Local cTPConv := ''
Local nConv := 0
Local dEmissao := CTOD(' / / ')
Local cEstorno := ''
Local cLocDest := 'XX'
Local aAutoSB9 := {}
Local aAutoSD3 := {}
Local nOpc := 3
Local cQuery := ''
Local cSB9 := ''
Private lMsErroAuto := .F.
Private lMsHelpAuto := .F.
Prepare Environment Empresa "15" Filial "01"
cQuery := "select d2_doc as docto, d2_cod as produto, "
cQuery += "b1_um as UM, b1_conta as conta, b1_grupo as grupo, b1_segum as segum, "
cQuery += "b1_tipo as tipo, b1_cc as cc, b1_tipconv as tipconv, b1_conv as conv, "
cQuery += "cast(d2_quant as dec(10,2)) as quant, d2_local "
cQuery += "from "+RetSQLName("SD2")+" D2, "+RetSQLName("SB1")+" B1 "
cQuery += "where "
cQuery += "d2_cod = b1_cod and "
cQuery += "d2_filial = '01' and d2_serie = '7' and d2_doc in "
cQuery += "('259744','259471','258228','260797','260798','260793','260794','260795','260796','258650','260630','260645','260538','260629',"
cQuery += "'260367','260197','260198','260199','260200','260201','260202','260203','260204','260205','260206','260207','260208') "
cQuery += "and d2.d_e_l_e_t_ = '' "
cQuery += "and d2_local = 'XX' "
cQuery += "order by d2_doc, d2_serie, d2_cod"
dbUseArea(.T.,"TOPCONN",TCGENQRY(,,cQuery),"NWTRANSF",.T.,.T.)
dEmissao := dDatabase
dbSelectArea("NWTRANSF")
dbGoTop()
While !EOF()
cProduto := NWTRANSF->PRODUTO
cDocto := NWTRANSF->DOCTO
nQuant := NWTRANSF->QUANT
cUM := NWTRANSF->UM
cConta := NWTRANSF->CONTA
cGrupo := NWTRANSF->GRUPO
cSegUM := NWTRANSF->SEGUM
cTipo := NWTRANSF->TIPO
cCC := NWTRANSF->CC
cTpConv := NWTRANSF->TIPCONV
nConv := NWTRANSF->CONV
dbSelectArea("SB9")
dbSetOrder(1)
dbSeek(xFilial("SB9")+cProduto+cLocDest)
If !Found()//Alltrim(cSB9) == ''
aadd (aAutoSB9, {'B9_FILIAL', xFilial('SB9') ,NIL})
aadd (aAutoSB9, {'B9_COD', cProduto ,NIL})
aadd (aAutoSB9, {'B9_LOCAL', cLocDest ,NIL})
MsExecAuto({|x,y,z|MATA220(x,y,z)},aAutoSB9,3)
If lMsErroAuto
//Alert("Erro ao incluir armazem "+alltrim(cLocDest)+" para o produto "+alltrim(cProduto)+". Informe este erro ao depto de Informática!")
mostraerro("\log_execauto\","mata220_"+Alltrim(StrTran(cProduto,'/',''))+"_"+Alltrim(cLocDest)+".txt")
lMsErroAuto := .F.
EndIf
EndIf
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Gera saida no SD3 (TM Devolucao - 550), no armazem XX ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Begin Transaction
aItem :={{"D3_FILIAL",xFilial("SD3"),Nil},;
{"D3_TM","050",Nil},;
{"D3_COD",cProduto,Nil},;
{"D3_EMISSAO",dEmissao,Nil},;
{"D3_QUANT",nQuant,Nil},;
{"D3_CF","DE0",Nil},;
{"D3_UM",cUM,Nil},;
{"D3_CONTA",cConta,Nil},;
{"D3_LOCAL","XX",Nil},;
{"D3_DOC",cDocto,Nil},;
{"D3_GRUPO",cGrupo,Nil},;
{"D3_CUSTO1",0,Nil},;
{"D3_CUSTO2",0,Nil},;
{"D3_CUSTO3",0,Nil},;
{"D3_CUSTO4",0,Nil},;
{"D3_CUSTO5",0,Nil},;
{"D3_CC",cCC,Nil},;
{"D3_PARCTOT",Space(1),Nil},;
{"D3_ESTORNO",cEstorno,Nil},;
{"D3_NUMSEQ",ProxNum(),Nil},;
{"D3_SEGUM",cSegUM,Nil},;
{"D3_QTSEGUM",IIf(cTpConv =="M",nQuant*nConv,nQuant/nConv),Nil},;
{"D3_TIPO",cTipo,Nil},;
{"D3_NIVEL",Space(1),Nil},;
{"D3_USUARIO",'NWTR20XX',Nil},;
{"D3_LOTECTL",Space(10),Nil},;
{"D3_DTVALID",CTOD(" / / "),Nil},;
{"D3_NUMLOTE",Space(6),Nil},;
{"D3_PERDA",0,Nil},;
{"D3_DTLANC",CTOD(" / / "),Nil},;
{"D3_TRT",Space(1),Nil},;
{"D3_CHAVE","E0",Nil},;
{"D3_IDENT",Space(1),Nil},;
{"D3_SEQCALC",Space(1),Nil}}
MSExecAuto({|x,y| MATA240(x,y)},aItem,,nOpc)
If lMsErroAuto
DisarmTransaction()
break
Mostraerro("\log_execauto\","mata240_"+Alltrim(cDocto)+"_"+alltrim(strtran(cProduto,'/',''))+"_050.txt")
lMsErroAuto := .F.
EndIf
End Transaction
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Gera saida no SD3 (TM Devolucao - 550), no armazem 20 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Begin Transaction
aItem :={{"D3_FILIAL",xFilial("SD3"),Nil},;
{"D3_TM","550",Nil},;
{"D3_COD",cProduto,Nil},;
{"D3_EMISSAO",dEmissao,Nil},;
{"D3_QUANT",nQuant,Nil},;
{"D3_CF","RE0",Nil},;
{"D3_UM",cUM,Nil},;
{"D3_CONTA",cConta,Nil},;
{"D3_LOCAL","20",Nil},;
{"D3_DOC",cDocto,Nil},;
{"D3_GRUPO",cGrupo,Nil},;
{"D3_CUSTO1",0,Nil},;
{"D3_CUSTO2",0,Nil},;
{"D3_CUSTO3",0,Nil},;
{"D3_CUSTO4",0,Nil},;
{"D3_CUSTO5",0,Nil},;
{"D3_CC",cCC,Nil},;
{"D3_PARCTOT",Space(1),Nil},;
{"D3_ESTORNO",cEstorno,Nil},;
{"D3_NUMSEQ",ProxNum(),Nil},;
{"D3_SEGUM",cSegUM,Nil},;
{"D3_QTSEGUM",IIf(cTpConv =="M",nQuant*nConv,nQuant/nConv),Nil},;
{"D3_TIPO",cTipo,Nil},;
{"D3_NIVEL",Space(1),Nil},;
{"D3_USUARIO",'NWTR20XX',Nil},;
{"D3_LOTECTL",Space(10),Nil},;
{"D3_DTVALID",CTOD(" / / "),Nil},;
{"D3_NUMLOTE",Space(6),Nil},;
{"D3_PERDA",0,Nil},;
{"D3_DTLANC",CTOD(" / / "),Nil},;
{"D3_TRT",Space(1),Nil},;
{"D3_CHAVE","E0",Nil},;
{"D3_IDENT",Space(1),Nil},;
{"D3_SEQCALC",Space(1),Nil}}
MSExecAuto({|x,y| MATA240(x,y)},aItem,,nOpc)
If lMsErroAuto
DisarmTransaction()
break
Mostraerro("\log_execauto\","mata240_"+Alltrim(cDocto)+"_"+alltrim(strtran(cProduto,'/',''))+"_550.txt")
lMsErroAuto := .F.
EndIf
End Transaction
DbSelectArea("NWTRANSF")
NWTRANSF->(DbSkip())
EndDo
//RestArea (_aAreaSB1)
SB9->(DbCloseArea())
NWTRANSF->(DbCloseArea())
Return
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Criação de Saldo Inicial, Movimento Interno de Entrada, Movimento Interno de Saida
Tempo para a criação da página:0.095 segundos