× Linguagem de Programação ADVPL

Perguntas MSExecAuto Mata 410

Mais
10 anos 2 semanas atrás #26051 por kanaamlrr
Respondido por kanaamlrr no tópico MSExecAuto Mata 410
Verifique no seu SQL qual a PK dessa tabela.
Com base nos campos da PK, verifique o valor que está passando nos 2 registros enviados para a rotina.
Eles devem estar com a mesma chave.
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 semana atrás #26109 por inocenciojr
Respondido por inocenciojr no tópico MSExecAuto Mata 410
Kanãam, Valeu pela ajuda.

Quando pensei que tinha resolvido, encontrei mais uns 1.000 problemas...
Mas finalmente resolvi todos problemas (Acho rs...)
Segue de exemplo caso alguém precise.
E se alguém tiver alguma ideia de como melhorar o fonte, aceito sugestões.
#Include 'Protheus.ch'
#Include 'Topconn.ch'
#INCLUDE "TBICONN.CH"

User Function ImportaOs()

Local aItem		 	:= {}
Local aProd1     	:= {}
Local aProd2     	:= {}
Local cQuery
Local cCliente
Local cLoja
Local cNumPV		:= ""
Local cPerg     	:= "IMPOS"
Private lMsHelpAuto := .t.
Private lMsErroAuto := .f.

//AjustaSX1(cPerg)
Pergunte(cPerg)

//Query para selecionar as informações necessarias
cQuery2 := " SELECT A1_COD, A1_LOJA, COUNT(*) "+CRLF
cQuery2 += " FROM "+RetSqlName("SA1")+" SA1 "+CRLF
cQuery2 += " LEFT JOIN ( "+CRLF
cQuery2 += " SELECT DA0_CODTAB, DA1_PRCVEN, DA1_CODPRO "+CRLF
cQuery2 += " FROM "+RetSqlName("DA0")+" DA0 "+CRLF
cQuery2 += " INNER JOIN "+RetSqlName("DA1")+" DA1 "+CRLF
cQuery2 += " ON DA0_CODTAB = DA1_CODTAB "+CRLF
cQuery2 += " WHERE DA1.D_E_L_E_T_ = ' ' "+CRLF
cQuery2 += " AND DA0.D_E_L_E_T_ = ' ') CCC "+CRLF
cQuery2 += " ON CCC.DA0_CODTAB = A1_TABELA "+CRLF
cQuery2 += " INNER JOIN "+RetSqlName("SZC")+" SZC "+CRLF
cQuery2 += " ON (ZC_LOJA = A1_LOJA AND CCC.DA1_CODPRO = ZC_SERVIC) "+CRLF
cQuery2 += " INNER JOIN "+RetSqlName("SB1") +" SB1 "+CRLF
cQuery2 += " ON ZC_SERVIC = B1_COD "+CRLF
cQuery2 += " WHERE ZC_CODCLI = A1_COD "+CRLF
cQuery2 += " AND ZC_DTINI >= '"+DTOS(MV_PAR05)+"' "+CRLF
cQuery2 += " AND ZC_DTFIM <= '"+DTOS(MV_PAR06)+"' "+CRLF
cQuery2 += " AND A1_COD||A1_LOJA BETWEEN '"+MV_PAR01+MV_PAR03+"' AND '"+MV_PAR02+MV_PAR04+"' "+CRLF
cQuery2 += " AND SZC.D_E_L_E_T_ = ' ' "+CRLF
cQuery2 += " AND SA1.D_E_L_E_T_ = ' ' "+CRLF
cQuery2 += " AND SB1.D_E_L_E_T_ = ' ' "+CRLF
cQuery2 += " GROUP BY A1_COD, A1_LOJA "+CRLF
cQuery2 += " ORDER BY A1_COD, A1_LOJA "

If Select("QUERY2") > 0            // Verificar se o Alias ja esta aberto.
	DbSelectArea("QUERY2")        // Se estiver, devera ser fechado.
	DbCloseArea("QUERY2")
EndIf

cQuery2:= ChangeQuery(cQuery2)
TcQuery cQuery2 NEW ALIAS QUERY2

DbSelectArea("QUERY2")
DbGoTop()

dDtIni	:= DTOS(MV_PAR05)
dDtFim 	:= DTOS(MV_PAR06)

While QUERY2->(!EoF())
	cCliente:= QUERY2->A1_COD
	cLoja	:= QUERY2->A1_LOJA
	GeraPedido(dDtIni,dDtFim,cCliente,cLoja)
	DbSelectArea("QUERY2")
	DbSkip()
EndDo

Return .t.

Static Function GeraPedido(dDtIni,dDtFim,cCliente,cLoja)

Local cQuery
Local aCabPv	:= {}
Local aItensPV	:= {}
Local nQtdeHora  	:= 0
Local nValTot    	:= 0
Local nOpc       	:= 3
Local cTempProd

cQuery := " SELECT A1_COD, A1_LOJA, A1_NOME, A1_COND, A1_TIPO, B1_COD, DA1_CODPRO, DA1_PRCVEN, B1_TS, B1_UM, ZC_NUMOS, ZC_SERVIC, ZC_TOTFAT "+CRLF
cQuery += " FROM "+RetSqlName("SA1")+" SA1 "+CRLF
cQuery += " LEFT JOIN ( "+CRLF
cQuery += " SELECT DA0_CODTAB, DA1_PRCVEN, DA1_CODPRO "+CRLF
cQuery += " FROM "+RetSqlName("DA0")+" DA0 "+CRLF
cQuery += " INNER JOIN "+RetSqlName("DA1")+" DA1 "+CRLF
cQuery += " ON DA0_CODTAB = DA1_CODTAB "+CRLF
cQuery += " WHERE DA1.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " AND DA0.D_E_L_E_T_ = ' ') CCC "+CRLF
cQuery += " ON CCC.DA0_CODTAB = A1_TABELA "+CRLF
cQuery += " INNER JOIN "+RetSqlName("SZC")+" SZC "+CRLF
cQuery += " ON (ZC_LOJA = A1_LOJA AND CCC.DA1_CODPRO = ZC_SERVIC) "+CRLF
cQuery += " INNER JOIN "+RetSqlName("SB1") +" SB1 "+CRLF
cQuery += " ON ZC_SERVIC = B1_COD "+CRLF
cQuery += " WHERE ZC_CODCLI = A1_COD "+CRLF
cQuery += " AND ZC_DTINI >= '"+dDtIni+"' "+CRLF
cQuery += " AND ZC_DTFIM <= '"+dDtFim+"' "+CRLF
cQuery += " AND A1_COD||A1_LOJA = '"+cCliente+cLoja+"' "+CRLF
cQuery += " AND SZC.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " AND SA1.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " AND SB1.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " ORDER BY ZC_CODCLI, ZC_LOJA, ZC_SERVIC "

If Select("QUERY") > 0            // Verificar se o Alias ja esta aberto.
	DbSelectArea("QUERY")        // Se estiver, devera ser fechado.
	DbCloseArea("QUERY")
EndIf

cQuery:= ChangeQuery(cQuery)
TCQUERY cQuery NEW ALIAS QUERY

aAdd(aCabPV,{"C5_TIPO"   ,"N"       	,Nil}) // Tipo de pedido
aAdd(aCabPV,{"C5_CLIENTE",QUERY->A1_COD	,Nil}) // Codigo do cliente
aAdd(aCabPV,{"C5_LOJACLI",QUERY->A1_LOJA,Nil}) // Loja do cliente
aAdd(aCabPV,{"C5_CLIENT" ,QUERY->A1_COD	,Nil}) // Codigo do cliente
aAdd(aCabPV,{"C5_LOJAENT",QUERY->A1_LOJA,Nil}) // Loja para entrada
aAdd(aCabPV,{"C5_TIPOCLI",QUERY->A1_TIPO,Nil}) // Tipo de cliente
aAdd(aCabPV,{"C5_CONDPAG",QUERY->A1_COND,Nil}) // Codigo da condicao de pagamanto*
aAdd(aCabPV,{"C5_EMISSAO",dDatabase ,Nil}) // Data de emissao
aAdd(aCabPV,{"C5_LIBEROK","S"       ,Nil}) // Liberacao Total

cCliente := QUERY->A1_COD
cLoja	 := QUERY->A1_LOJA

DbSelectArea("QUERY")
DbGoTop()

nY:=1
cTempProd	:= QUERY->ZC_SERVIC
nPrcVen 	:= QUERY->DA1_PRCVEN
cUniMed 	:= QUERY->B1_UM
cTes 		:= QUERY->B1_TS
cTipo 		:= QUERY->A1_TIPO
cUniMed		:= QUERY->B1_UM
cTES  		:= QUERY->B1_TS

While QUERY->(!EoF())
	If cTempProd = QUERY->ZC_SERVIC
		nQtdeHora += HoraToInt(QUERY->ZC_TOTFAT)
	Else
		nValTot 	:= nPrcVen * Round(nQtdeHora,1)
		aAdd(aItensPV,{{"C6_ITEM",STRZERO(nY,2),Nil},; // Numero do Item no Pedido
		{"C6_PRODUTO",cTempProd    ,Nil},; // Codigo do Produto
		{"C6_QTDVEN" ,Round(nQtdeHora,1)    ,Nil},; // Quantidade Vendida
		{"C6_PRCVEN" ,nPrcVen    ,Nil},; // Preco Unitario Liquido
		{"C6_VALOR"  ,Round(nValTot,2)  ,Nil},; // Valor Total do Item
		{"C6_ENTREG" ,dDataBase   ,Nil},; // Data da Entrega
		{"C6_UM"     ,cUniMed     ,Nil},; // Unidade de Medida Primar.
		{"C6_TES"    ,cTes  ,Nil},; // Tipo de Entrada/Saida do Item
		{"C6_CLI"    ,QUERY->A1_COD     ,Nil},; // Cliente
		{"C6_LOJA"   ,QUERY->A1_LOJA  ,Nil}}) // Loja do Cliente
		nQtdeHora 	:= HoraToInt(QUERY->ZC_TOTFAT)
		cTempProd	:= QUERY->ZC_SERVIC
		nPrcVen 	:= QUERY->DA1_PRCVEN
		cUniMed 	:= QUERY->B1_UM
		cTes 		:= QUERY->B1_TS
		cTipo 		:= QUERY->A1_TIPO
		nY++
	EndIf
	DBSKIP()
	If QUERY->(EoF())
		nValTot 	:= nPrcVen * Round(nQtdeHora,1)
		aAdd(aItensPV,{{"C6_ITEM",STRZERO(nY,2),Nil},; // Numero do Item no Pedido
		{"C6_PRODUTO",cTempProd    ,Nil},; // Codigo do Produto
		{"C6_QTDVEN" ,Round(nQtdeHora,1)    ,Nil},; // Quantidade Vendida
		{"C6_PRCVEN" ,nPrcVen    ,Nil},; // Preco Unitario Liquido
		{"C6_VALOR"  ,Round(nValTot,2)  ,Nil},; // Valor Total do Item
		{"C6_ENTREG" ,dDataBase   ,Nil},; // Data da Entrega
		{"C6_UM"     ,cUniMed     ,Nil},; // Unidade de Medida Primar.
		{"C6_TES"    ,cTes  ,Nil},; // Tipo de Entrada/Saida do Item
		{"C6_CLI"    ,cCliente     ,Nil},; // Cliente
		{"C6_LOJA"   ,cLoja  ,Nil}}) // Loja do Cliente
	EndIf
EndDo

Begin Transaction
RptStatus({|lEnd|MSExecAuto({|x,y,z|Mata410(x,y,z)},aCabPv,aItensPV,nOpc)},"Gerando pedido de venda...",QUERY->A1_NOME )

If lMsErroAuto
	DisarmTransaction()
	break
Else
	DbSelectArea("SZC")
	DbSetOrder(1)
	If DbSeek(xFilial("SZC")+QUERY->ZC_NUMOS)
		If RecLock("SZC",.F.)
			SZC->ZC_STATUS := 3
		EndIf
	EndIf
EndIf
End Transaction

If lMsErroAuto
	Mostraerro()
	RollbackSX8()
	Return .f.
EndIf

Return

Static Function AjustaSx1(cPerg)

Local    _nx        := 0,;
_nh        := 0,;
_nlh    := 0,;
_aHelp    := Array(8,1),;
_aRegs  := {},;
_sAlias := Alias(),;
_aHead    := {"SX1->X1_GRUPO","SX1->X1_ORDEM","SX1->X1_PERGUNTE","SX1->X1_PERSPA","SX1->X1_PERENG    ",;
"SX1->X1_VARIAVL","SX1->X1_TIPO","SX1->X1_TAMANHO","SX1->X1_DECIMAL","SX1->X1_PRESEL",;
"SX1->X1_GSC","SX1->X1_VALID","SX1->X1_VAR01","SX1->X1_DEF01","SX1->X1_DEF02",;
"SX1->X1_DEF03","SX1->X1_DEF04","SX1->X1_DEF05","SX1->X1_F3"}

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Cria uma array, contendo todos os valores...³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aAdd(_aRegs,{cPerg,'01',"Cliente de  ?"      ,"Cliente de  ?"      ,"Cliente de  ?"      ,'mv_ch1','C', 6,0,0,'G','','mv_par01','','','','','','CLI'})
aAdd(_aRegs,{cPerg,'02',"Cliente Ate ?"      ,"Cliente Ate ?"      ,"Cliente Ate ?"      ,'mv_ch2','C', 6,0,0,'G','','mv_par02','','','','','','CLI'})
aAdd(_aRegs,{cPerg,'03',"Loja de  ? "          ,"Data de  ? "           ,"Data de  ? "          ,'mv_ch3','C',10,0,0,'G','','mv_par03','','','','',"",""})
aAdd(_aRegs,{cPerg,'04',"Loja ate ? "        ,"Data ate ? "        ,"Data ate ? "        ,'mv_ch4','C',10,0,0,'G','','mv_par04','','','','',"",""})
aAdd(_aRegs,{cPerg,'05',"Data de  ? "          ,"Data de  ? "           ,"Data de  ? "          ,'mv_ch3','C',10,0,0,'G','','mv_par05','','','','',"",""})
aAdd(_aRegs,{cPerg,'06',"Data ate ? "        ,"Data ate ? "        ,"Data ate ? "        ,'mv_ch4','C',10,0,0,'G','','mv_par06','','','','',"",""})

DbSelectArea('SX1')
SX1->(DbSetOrder(1))

For _nx:=1 to Len(_aRegs)
	If    RecLock('SX1',Iif(!SX1->(DbSeek(_aRegs[_nx][01]+_aRegs[_nx][02])),.t.,.f.))
		For nlh:=1 to Len(_aHead)
			If    ( nlh <> 10 )
				Replace &(_aHead[nlh]) With _aRegs[_nx][nlh]
			EndIf
		Next nlh
		MsUnlock()
	Else
		Help('',1,'REGNOIS 5')
	Endif
Next _nx

Return

Static Function FSAceArr(aArrPar, cAliasSX3)

Local nPos          := 0
Local nXi        := 0
Local aArrAux     := {}

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek(cAliasSX3,.T.)
While !Eof() .And. (X3_ARQUIVO==cAliasSX3)
	
	//Acerta array com somente uma linha
	If (nPos:= aScan(aArrPar,{|x| Alltrim(x[1]) == Alltrim(X3_CAMPO) })) <> 0
		aadd(aArrAux,aClone(aArrPar[nPos]))
	EndIf
	
	dbSkip()
	
EndDo

Return(aArrAux)

Por favor Acessar ou Registrar para participar da conversa.

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