- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSExecAuto Mata 410
×
Linguagem de Programação ADVPL
Perguntas MSExecAuto Mata 410
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
10 anos 2 semanas atrás #26002
por inocenciojr
MSExecAuto Mata 410 foi criado 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:
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
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.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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.
Pela mensagem você está passando um array em algum lugar que ele espera um caracter.
Por favor Acessar ou Registrar para participar da conversa.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
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:
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.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
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.
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSExecAuto Mata 410
Tempo para a criação da página:0.147 segundos