- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com Ponto de Entrada
×
Linguagem de Programação ADVPL
Perguntas Ajuda com Ponto de Entrada
- ftvernier
- Autor do Tópico
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 386
- Obrigados Recebidos: 2
10 anos 5 meses atrás #22872
por ftvernier
Ajuda com Ponto de Entrada foi criado por ftvernier
Fala Galera Boa Tarde,
Criei um ponto de entrada para assim que for incluído um pedido de comprar gerar uma prévia no financeiro, porém quando o pedido for excluído a prévia deve ser excluída também, o que não está ocorrendo poderiam me ajudar?
Segue abaixo o ponto:
#include "rwmake.ch"
User Function MT120GOK()
Local cA120Num
Local l120Inclui
Local l120Altera
Local l120Deleta
aAreaF := GetArea()
cDocto := AllTrim(SC7->C7_NUM)// Montagem do Titulo no Financeiro
cParc := ''
cNumPed:= SC7->C7_NUM
nTotal := 0.00
cCond := SC7->C7_COND
nRecno := SC7->(Recno())
cCodFor:= SC7->C7_FORNECE
cLojFor:= SC7->C7_LOJA
dDtPrev:= SC7->C7_DATPRF
cA120Num := ParamIxb[1]
l120Inclui := ParamIxb[2]
l120Altera := ParamIxb[3]
l120Deleta := ParamIxb[4]
IF SC7->(dbSetOrder(1), dbSeek(xFilial("SC7")+cNumPed))
While !SC7->(EOF()) .And. SC7->C7_FILIAL == xFilial("SC7") .And. SC7->C7_NUM == cNumPed
nTotal += Round(SC7->(C7_TOTAL + C7_VALIPI + C7_VALFRE - C7_VLDESC),2)
SC7->(Dbskip())
Enddo
Endif
SC7->(dbGoTo(nRecno))
If !Empty(nTotal)
aCond := condicao( nTotal , cCond, 0, dDtPrev )
If ALTERA // Se For Uma Alteracao Entao Exclui todos Os Titulos provisorios gerados anteriormente
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto))
While SE2->(!Eof()) .And. SE2->E2_FILIAL == xFilial("SE2") .And. SE2->E2_NUM == cDocto
If Alltrim(SE2->E2_TIPO) == 'PR'
If RecLock("SE2",.f.)
SE2->(dbDelete())
SE2->(MsUnlock())
Endif
Endif
SE2->(dbSkip(1))
Enddo
Endif
Endif
If l120Deleta
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto+l120Deleta))
While SE2->(!Eof()) .And. SE2->E2_FILIAL == xFilial("SE2") .And. SE2->E2_NUM == cDocto
If Alltrim(SE2->E2_TIPO) == 'PR'
If RecLock("SE2",.f.)
SE2->(dbDelete())
SE2->(MsUnlock())
Endif
Endif
SE2->(dbSkip(1))
Enddo
Endif
Endif
If INCLUI .Or. ALTERA
Begin Transaction
If Len(aCond) > 1
cParc := 'A'
Endif
For nI := 1 To Len(aCond)
lMsErroAuto := .f.
dbSelectArea("SE2")
// Geracao da Previa
nOpc := 3
aVetor := {{"E2_PREFIXO" ,'PR ',Nil},;
{"E2_NUM" ,cDocto,Nil},;
{"E2_PARCELA" ,cParc,Nil},;
{"E2_TIPO" ,'PR ',Nil},;
{"E2_FORNECE" ,cCodFor,Nil},;
{"E2_LOJA" ,cLojFor,Nil},;
{"E2_EMISSAO" ,dDataBase,NIL},;
{"E2_VENCTO" ,DataValida(aCond[nI,1],.T.),NIL},;
{"E2_VENCREA" ,DataValida(aCond[nI,1],.T.),NIL},;
{"E2_VALOR" ,aCond[nI,2],Nil},;
{"E2_HIST" ,'PREVIA COMPRAS',Nil}}
MSExecAuto({|x,y,z| Fina050(x,y,z)},aVetor,,nOpc) //Inclusao
If lMsErroAuto
MostraErro()
DisarmTransaction()
Endif
cParc := Soma1(cParc,1)
Next
End Transaction
Endif
Endif
Restarea(aAreaF)
Return .T.
Criei um ponto de entrada para assim que for incluído um pedido de comprar gerar uma prévia no financeiro, porém quando o pedido for excluído a prévia deve ser excluída também, o que não está ocorrendo poderiam me ajudar?
Segue abaixo o ponto:
#include "rwmake.ch"
User Function MT120GOK()
Local cA120Num
Local l120Inclui
Local l120Altera
Local l120Deleta
aAreaF := GetArea()
cDocto := AllTrim(SC7->C7_NUM)// Montagem do Titulo no Financeiro
cParc := ''
cNumPed:= SC7->C7_NUM
nTotal := 0.00
cCond := SC7->C7_COND
nRecno := SC7->(Recno())
cCodFor:= SC7->C7_FORNECE
cLojFor:= SC7->C7_LOJA
dDtPrev:= SC7->C7_DATPRF
cA120Num := ParamIxb[1]
l120Inclui := ParamIxb[2]
l120Altera := ParamIxb[3]
l120Deleta := ParamIxb[4]
IF SC7->(dbSetOrder(1), dbSeek(xFilial("SC7")+cNumPed))
While !SC7->(EOF()) .And. SC7->C7_FILIAL == xFilial("SC7") .And. SC7->C7_NUM == cNumPed
nTotal += Round(SC7->(C7_TOTAL + C7_VALIPI + C7_VALFRE - C7_VLDESC),2)
SC7->(Dbskip())
Enddo
Endif
SC7->(dbGoTo(nRecno))
If !Empty(nTotal)
aCond := condicao( nTotal , cCond, 0, dDtPrev )
If ALTERA // Se For Uma Alteracao Entao Exclui todos Os Titulos provisorios gerados anteriormente
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto))
While SE2->(!Eof()) .And. SE2->E2_FILIAL == xFilial("SE2") .And. SE2->E2_NUM == cDocto
If Alltrim(SE2->E2_TIPO) == 'PR'
If RecLock("SE2",.f.)
SE2->(dbDelete())
SE2->(MsUnlock())
Endif
Endif
SE2->(dbSkip(1))
Enddo
Endif
Endif
If l120Deleta
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto+l120Deleta))
While SE2->(!Eof()) .And. SE2->E2_FILIAL == xFilial("SE2") .And. SE2->E2_NUM == cDocto
If Alltrim(SE2->E2_TIPO) == 'PR'
If RecLock("SE2",.f.)
SE2->(dbDelete())
SE2->(MsUnlock())
Endif
Endif
SE2->(dbSkip(1))
Enddo
Endif
Endif
If INCLUI .Or. ALTERA
Begin Transaction
If Len(aCond) > 1
cParc := 'A'
Endif
For nI := 1 To Len(aCond)
lMsErroAuto := .f.
dbSelectArea("SE2")
// Geracao da Previa
nOpc := 3
aVetor := {{"E2_PREFIXO" ,'PR ',Nil},;
{"E2_NUM" ,cDocto,Nil},;
{"E2_PARCELA" ,cParc,Nil},;
{"E2_TIPO" ,'PR ',Nil},;
{"E2_FORNECE" ,cCodFor,Nil},;
{"E2_LOJA" ,cLojFor,Nil},;
{"E2_EMISSAO" ,dDataBase,NIL},;
{"E2_VENCTO" ,DataValida(aCond[nI,1],.T.),NIL},;
{"E2_VENCREA" ,DataValida(aCond[nI,1],.T.),NIL},;
{"E2_VALOR" ,aCond[nI,2],Nil},;
{"E2_HIST" ,'PREVIA COMPRAS',Nil}}
MSExecAuto({|x,y,z| Fina050(x,y,z)},aVetor,,nOpc) //Inclusao
If lMsErroAuto
MostraErro()
DisarmTransaction()
Endif
cParc := Soma1(cParc,1)
Next
End Transaction
Endif
Endif
Restarea(aAreaF)
Return .T.
Por favor Acessar ou Registrar para participar da conversa.
- dexter
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 5 meses atrás #22874
por dexter
Respondido por dexter no tópico Ajuda com Ponto de Entrada
Tudo bom Fernando.
Bem pelo pouco que sei, percebi que sua função tem ação de alterar e excluir
que fazem a mesma ação, se a opção de alterar funciona então a exclusão funciona da mesma forma,
se eu estiver entendido bem.
Alterar
[/color]
Excluir
Só muda no seu IF ao lado do ( cDocto ) que pra deletar vc concatena com l120Deleta!
Bem pelo pouco que sei, percebi que sua função tem ação de alterar e excluir
que fazem a mesma ação, se a opção de alterar funciona então a exclusão funciona da mesma forma,
se eu estiver entendido bem.
Alterar
If ALTERA // Se For Uma Alteracao Entao Exclui todos Os Titulos provisorios gerados anteriormente
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto))
Excluir
If l120Deleta
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto+l120Deleta))
Só muda no seu IF ao lado do ( cDocto ) que pra deletar vc concatena com l120Deleta!
Por favor Acessar ou Registrar para participar da conversa.
- ftvernier
- Autor do Tópico
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 386
- Obrigados Recebidos: 2
10 anos 5 meses atrás - 10 anos 5 meses atrás #22878
por ftvernier
Respondido por ftvernier no tópico Ajuda com Ponto de Entrada
Dexter,
Desculpa mas não entendi muito bem.
Eu exclui o IF que continha o IF l120Deleta e concatenei no outro IF ficando dessa forma.
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto+l120Deleta))
Ok?
Abraços.
Desculpa mas não entendi muito bem.
Eu exclui o IF que continha o IF l120Deleta e concatenei no outro IF ficando dessa forma.
If SE2->(dbSetOrder(1), dbSeek(xFilial("SE2")+cDocto+l120Deleta))
Ok?
Abraços.
Ultima edição: 10 anos 5 meses atrás por ftvernier.
Por favor Acessar ou Registrar para participar da conversa.
- THALESCOTR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 124
- Obrigados Recebidos: 0
10 anos 5 meses atrás #22879
por THALESCOTR
Respondido por THALESCOTR no tópico Ajuda com Ponto de Entrada
Bom dia Fernando, provavelmente o seu problema está no Dbseek.
O índice 1 da SE2 é: Filial + Prefixo + Titulo, você está usando apenas Filial + Titulo, onde ele não encontra os titulos daí.
Tente alterando os dBseek da SE2, para:
dbSeek(xFilial("SE2")+'PR '+cDocto)
Att
Thales
O índice 1 da SE2 é: Filial + Prefixo + Titulo, você está usando apenas Filial + Titulo, onde ele não encontra os titulos daí.
Tente alterando os dBseek da SE2, para:
dbSeek(xFilial("SE2")+'PR '+cDocto)
Att
Thales
Por favor Acessar ou Registrar para participar da conversa.
- ftvernier
- Autor do Tópico
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 386
- Obrigados Recebidos: 2
- THALESCOTR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 124
- Obrigados Recebidos: 0
10 anos 5 meses atrás #22883
por THALESCOTR
Respondido por THALESCOTR no tópico Ajuda com Ponto de Entrada
Estranho, deveria funcionar.
Tente debugar a rotina, ou colocar um alert na linha do DbSeek.
Assim:
SE2->(dbSetOrder(1)
msgAlert(dbSeek(xFilial("SE2")+'PR '+cDocto)))
If dbSeek(xFilial("SE2")+cDocto))
...
A mensagem terá que retornar .T. se encontrou ou registro, caso contrário debugue a rotina, e verifique, pois provavelmente é os espaços daí.
Att
Thales
Tente debugar a rotina, ou colocar um alert na linha do DbSeek.
Assim:
SE2->(dbSetOrder(1)
msgAlert(dbSeek(xFilial("SE2")+'PR '+cDocto)))
If dbSeek(xFilial("SE2")+cDocto))
...
A mensagem terá que retornar .T. se encontrou ou registro, caso contrário debugue a rotina, e verifique, pois provavelmente é os espaços daí.
Att
Thales
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com Ponto de Entrada
Tempo para a criação da página:0.111 segundos