- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSExecAuto Mata 410
×
Linguagem de Programação ADVPL
Perguntas MSExecAuto Mata 410
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
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!
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.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
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.
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.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- MSExecAuto Mata 410
Tempo para a criação da página:0.088 segundos