× Linguagem de Programação ADVPL

Perguntas MSExecAuto Mata 410

Mais
10 anos 2 semanas atrás #26002 por inocenciojr
Boa Noite Pessoal,

Estou tentando fazer uma execauto para incluir um pedido de venda buscando informações de outras tabelas customizadas.
Porém não estou conseguindo e cada hora um erro diferente. Podem em dar uma ajuda?
Segue o fonte:
#Include 'Protheus.ch'
#Include 'Topconn.ch'
#INCLUDE "TBICONN.CH"

User Function ImportaOs()
Local aCabPv     := {}
Local aItensPV   := {}
Local aProd1     := {}
Local aProd2     := {}
Local cQuery
Local nQtdeHora  := 0
Local nValTot    := 0
Local nOpc       := 3
Local cCliente
Local cLoja
Local cProdTemp
Local cNumPV
Local cPerg     := "IMPOS"
Private lMsHelpAuto := .t.
Private lMsErroAuto := .f.

//AjustaSX1(cPerg)
Pergunte(cPerg)
/*/
cQuery := " Select * From "+ RetSQLName("SZC")+"
cQuery += " Where ZC_CODCLI Between "+ Alltrim(MV_PAR01) +" .And. "+ Alltrim(MV_PAR02) +" .And. "
cQuery += " ZC_LOJA Between "+ Alltrim(MV_PAR03) + " .And. "+ Alltrim(MV_PAR04) + " .And. "
cQuery += " ZC_DTINI Between " Alltrim(MV_PAR05) + " .And. "+ Alltrim(MV_PAR06)
cQuery += " Order By ZC_CODCLI,ZC_CODCLI, ZC_LOJA,ZC_SERVIC "
/*/
cQuery := " SELECT A1_COD, A1_LOJA, A1_COND, A1_TIPO, B1_COD, DA1_CODPRO, DA1_PRCVEN, B1_TS, B1_UM, 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("SZA")+" SZA "+CRLF
cQuery += " ON ZC_CODTEC = ZA_CODTEC "+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 >= '"+DTOS(MV_PAR05)+"' "+CRLF
cQuery += " AND ZC_DTFIM <= '"+DTOS(MV_PAR06)+"' "+CRLF
cQuery += " AND A1_COD||A1_LOJA BETWEEN '"+MV_PAR01+MV_PAR03+"' AND '"+MV_PAR02+MV_PAR04+"' "+CRLF
cQuery += " AND SZC.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " AND SA1.D_E_L_E_T_ = ' ' "+CRLF
cQuery += " AND SZA.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

DbSelectArea("QUERY")
DbGoTop()

cCliente := QUERY->A1_COD
cNumPV:= GetSxeNum("SC5","C5_NUM")
cTempProd := QUERY->ZC_SERVIC
cLoja := QUERY->A1_LOJA

aAdd(aProd1,{cNumPV,cCliente, cLoja,QUERY->A1_COND, QUERY->A1_TIPO})

While QUERY->(!EoF())
	If cCliente <> QUERY->A1_COD
		cNumPV     := GetSxeNum("SC5","C5_NUM")
		aAdd(aProd1,{cNumPV,cCliente, QUERY->A1_LOJA,QUERY->A1_COND, QUERY->A1_TIPO})
	EndIf
	If cTempProd == QUERY->ZC_SERVIC
		nQtdeHora += HoraToInt(QUERY->ZC_TOTFAT)
	Else
		nValTot := QUERY->DA1_PRCVEN * nQtdeHora
		aAdd(aProd2,{QUERY->B1_COD,nQtdeHora,QUERY->DA1_PRCVEN,nValTot,QUERY->B1_UM,QUERY->B1_TS,cCliente,QUERY->A1_LOJA})
		cTempProd := QUERY->ZC_SERVIC
	EndIf
	DBSKIP()
End

If Len(aProd2) == 0
	aAdd(aProd2,{cTempProd,nQtdeHora,QUERY->DA1_PRCVEN,nValTot,QUERY->B1_UM,QUERY->B1_TS,cCliente,cLoja})
EndIf

Begin Transaction
For nX := 1 to Len(aProd1)
	aAdd(aCabPV,{{"C5_NUM" ,aProd1[nX][1],Nil},; // Numero do pedido
	{"C5_TIPO"   ,"N"            	 ,Nil},; // Tipo de pedido
	{"C5_CLIENTE",aProd1[nX][2]	 	 ,Nil},; // Codigo do cliente
	{"C5_LOJACLI",aProd1[nX][3]  	 ,Nil},; // Loja do cliente
	{"C5_CLIENT" ,aProd1[nX][2]	 	 ,Nil},; // Codigo do cliente
	{"C5_LOJAENT",aProd1[nX][3]  	 ,Nil},; // Loja para entrada
	{"C5_TIPOCLI",aProd1[nX][5]		 ,Nil},; // Tipo de cliente	
	{"C5_CONDPAG",aProd1[nX][4]  	 ,Nil},; // Codigo da condicao de pagamanto*	
	{"C5_EMISSAO",dDatabase      	 ,Nil},; // Data de emissao
	{"C5_LIBEROK","S"            	 ,Nil}}) // Liberacao Total
Next
For nX := 1 to Len(aProd2)
	aAdd(aItensPV,{{"C6_NUM",cNumPv,Nil},; // Numero do Pedido
	{"C6_ITEM"   ,STRZERO(nX,2) ,Nil},; // Numero do Item no Pedido
	{"C6_PRODUTO",aProd2[nX][1] ,Nil},; // Codigo do Produto
	{"C6_UM"     ,aProd2[nX][5] ,Nil},; // Unidade de Medida Primar.
	{"C6_QTDVEN" ,aProd2[nX][2] ,Nil},; // Quantidade Vendida
	{"C6_PRCVEN" ,aProd2[nX][3] ,Nil},; // Preco Unitario Liquido
	{"C6_VALOR"  ,aProd2[nX][4] ,Nil},; // Valor Total do Item
	{"C6_ENTREG" ,dDataBase     ,Nil},; // Data da Entrega
	{"C6_TES"    ,aProd2[nX][6] ,Nil},; // Tipo de Entrada/Saida do Item
	{"C6_LOCAL"  ,"01"			,Nil},; // Armazem	
	{"C6_CLI"    ,aProd2[nX][7] ,Nil},; // Cliente
	{"C6_LOJA"   ,aProd2[nX][8] ,Nil}}) // Loja do Cliente

Next nX

MSExecAuto({|x,y,z|Mata410(x,y,z)},aCabPv,aItensPV,nOpc)



If lMsErroAuto
	DisarmTransaction()
	break
EndIf

End Transaction

/*
Se estiver em uma aplicao normal e ocorrer alguma incosistencia nos parametros passados, mostrar na tela o log informando qual coluna teve a incosistencia.
*/

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

Return .t.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 semanas atrás #26010 por kanaamlrr
Respondido por kanaamlrr no tópico MSExecAuto Mata 410
Bom dia Inocêncio.
Poste o erro que está ocorrendo para que possamos te ajudar.
At.,
Kanaãm.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 semanas atrás #26014 por inocenciojr
Respondido por inocenciojr no tópico MSExecAuto Mata 410
Bom dia Kanaãm,

Já foram diversas mensagens de erro que fui corrigindo.
Esta é a que está dando agora:

HELP: ERR_FORM
Existe um ERRO na fórmula digitada.
argument #0 error, expected C->A, function upper


Isso é mostrado pela função mostra erro.
Meu grande problema é que a função não mostra em que momento está dando esse erro.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 semanas atrás #26019 por kanaamlrr
Respondido por kanaamlrr no tópico MSExecAuto Mata 410
Tenta debugar e antes da execução do execauto, verifique se todas as posições dos seus arrays estão preenchidas corretamente.
Pela mensagem você está passando um array em algum lugar que ele espera um caracter.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 semanas atrás #26020 por inocenciojr
Respondido por inocenciojr no tópico MSExecAuto Mata 410
Kanaãm Valeu pela ajuda mas consegui finalmente resolver.

Já estava a tempos debugando e nada de achar o erro aí mandei ele exibir o Array em uma msginfo e vi que ele estava vindo em branco, mesmo que linha por linha do array que iria pra execauto havia o registro.

Resolvi mudando o array assim:
For nX := 1 to Len(aProd1)
	aAdd(aCabPV,{"C5_NUM"  	 ,aProd1[nX][1]	,Nil})// Numero do pedido
	aAdd(aCabPV,{"C5_TIPO"   ,"N"           ,Nil}) // Tipo de pedido
	aAdd(aCabPV,{"C5_CLIENTE",aProd1[nX][2]	,Nil}) // Codigo do cliente
	aAdd(aCabPV,{"C5_LOJACLI",aProd1[nX][3] ,Nil}) // Loja do cliente
	aAdd(aCabPV,{"C5_CLIENT" ,aProd1[nX][2]	,Nil}) // Codigo do cliente
	aAdd(aCabPV,{"C5_LOJAENT",aProd1[nX][3] ,Nil}) // Loja para entrada
	aAdd(aCabPV,{"C5_TIPOCLI",aProd1[nX][5]	,Nil}) // Tipo de cliente
	aAdd(aCabPV,{"C5_CONDPAG",aProd1[nX][4] ,Nil}) // Codigo da condicao de pagamanto*
	aAdd(aCabPV,{"C5_EMISSAO",dDatabase     ,Nil}) // Data de emissao
	aAdd(aCabPV,{"C5_LIBEROK","S"           ,Nil}) // Liberacao Total
Next
For nX := 1 to Len(aProd2)
	aAdd(aItensPV,{"C6_NUM"		,cNumPv			,Nil}) // Numero do Pedido
	aAdd(aItensPV,{"C6_ITEM"	,STRZERO(nX,2) 	,Nil}) // Numero do Item no Pedido
	aAdd(aItensPV,{"C6_PRODUTO"	,aProd2[nX][1] 	,Nil}) // Codigo do Produto
	aAdd(aItensPV,{"C6_UM"     	,aProd2[nX][5] 	,Nil}) // Unidade de Medida Primar.
	aAdd(aItensPV,{"C6_QTDVEN" 	,aProd2[nX][2] 	,Nil}) // Quantidade Vendida
	aAdd(aItensPV,{"C6_PRCVEN" 	,aProd2[nX][3] 	,Nil}) // Preco Unitario Liquido
	aAdd(aItensPV,{"C6_VALOR"  	,aProd2[nX][4] 	,Nil}) // Valor Total do Item
	aAdd(aItensPV,{"C6_ENTREG" 	,dDataBase     	,Nil}) // Data da Entrega
	aAdd(aItensPV,{"C6_TES"    	,aProd2[nX][6]	,Nil}) // Tipo de Entrada/Saida do Item
	aAdd(aItensPV,{"C6_LOCAL"  	,"01"			,Nil}) // Armazem
	aAdd(aItensPV,{"C6_CLI"    	,aProd2[nX][7]	,Nil}) // Cliente
	aAdd(aItensPV,{"C6_LOJA"   	,aProd2[nX][8]	,Nil}) // Loja do Cliente
	
	aAdd(aItem,aItensPV)
	
Next nX

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 2 semanas atrás #26045 por inocenciojr
Respondido por inocenciojr no tópico MSExecAuto Mata 410
Agora quando tento incluir algo que tem mais de um item dá o seguinte erro:

Exceção ocorrida: DB error (Insert): -37 File: SC6290 - Error : -803 (23505) - [IBM][CLI Driver][DB2/LINUXX8664] SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "13" constrains table "DB2.SC6290" from having duplicate values for the index key. SQLSTATE=23505
( SQL Statement : INSERT INTO DB2.SC6290(C6_FILIAL,C6_ITEM,C6_PRODUTO,C6_UM,C6_QTDVEN,C6_PRCVEN,C6_VALOR,C6_TES,C6_LOCAL,C6_CF,C6_CLI,C6_ENTREG,C6_LOJA,C6_NUM,C6_DESCRI,C6_TPOP,C6_SUGENTR,C6_RATEIO,C6_DTFIMNT,R_E_C_N_O_) VALUES ( '01','02','SERV04 ','UN',32.1000000000,65.0000000000,2086.5000000000,'501','01','5101 ','716760','20141107','07','000002','CONSULTORIA JR. ','F','20141107','2','20141107',4) ) ( From tISAMFile::Write )
Thread ID [935765760] User [Inocencio.Matos] IO [1297] Tables [65] MaxTables [65] Comment [IMPORTAOS - TCPIP] Status [] SP [ ] Traced [No] InTran [Yes] DBEnv [DB2/montani] DBThread [(DB2ID: 10.0.0.227.40714.141107184303) ] Started [07/11/2014 16:43:03] LastIO [] IP [10.0.0.227] RCV [113153] SND [245342] TCBuild [20110919]
- Integrity failure. in file ./lib/top.cpp at line 2311


Alguém consegue identificar onde está o problema pra me ajudar? Pois eu não consigo de forma nenhuma.

Por favor Acessar ou Registrar para participar da conversa.

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