× Linguagem de Programação ADVPL

Perguntas Criação de Saldo Inicial, Movimento Interno de Entrada, Movimento Interno de Saida

Mais
11 anos 2 semanas atrás #18355 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?
#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.

Tempo para a criação da página:0.095 segundos
Joomla templates by a4joomla