Perguntas Ponto de Entrada SF2460I ( faturamento )

Mais
9 anos 6 meses atrás #28230 por dexter
Olá, estou precisando de ajuda para implementar
esse P.E de acordo com a necessidade de um usuário.

Preciso identificar um pedido de devolução (D) na SD2
e feito isto preciso comparar essa nota de saída com a nota de entrada
encontrando essa nota, preciso alterar o campo de centro de custo na SD2,
sendo igual o que esta na SD1 de entrada.

Estou tentando fazer desta forma, mas quando eu faturo a
nota e o P.E é chamado então entra em LOOP e não sai..


User Function SF2460I
 
 Private aArea := GetArea()

 If SD2->( dbSetOrder(8), dbSeek(xFilial("SD2") + SC5->C5_NUM  ) ) 
 
   DbSelectArea( "SF1" ) 
   dbSetOrder(1) 
   DbSelectArea( "SF2" ) 
   dbSetOrder(2)
   DbSelectArea( "SD1" ) 
   dbSetOrder(1)  
   
   // preciso pegar na SD2 o pedido sendo como 'D' devolução, comparando na SC5 
  While SD2->(!Eof()) .And. SD2->D2_FILIAL == xFilial("SD2") .And. SD2->D2_TIPO == 'D'.And. SD2->D2_PEDIDO == SC5->C5_NUM   
   
   // Aqui entra! 
   
   //Preciso comparar numero da nota de entrada com a saida nos campos, serie e item...
   IF SF1->F1_SERIE == SF2->F2_SERIORI .And. SF1->F1_DOC == SF2->F2_NFORI .And. SD2->D2_ITEMORI == SD1->D1_ITEM  
   
    // Aqui preciso definir na SD2(nota de saida) o Centro de custo 
	// que esta na nota de entrada , quando for um pedido de devolução.
	  IF RecLock("SD2",.F.) 
	              SD2->D2_CCUSTO := SD1->D1_CC  
            SD2->(MsUnlock())
        Endif  
     Endif   
       SD2->(dbSkip(1))
  Enddo
   
 Endif
RestArea(aArea) 

return()


Se alguém já tiver passado por algo semelhante
e puder dar um luz.
Grato.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 6 meses atrás - 9 anos 6 meses atrás #28231 por lalberto
User Function SF2460I
Local aArea := GetArea()

If SF2->F2_TIPO == 'D'
	If SD2->(dbSetOrder(3), dbSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE))
		While SD2->(!Eof()) .And. SD2->D2_FILIAL == xFilial("SD2") .And. SD2->D2_DOC+SD2->D2_SERIE == SF2->F2_DOC+SF2->F2_SERIE
			If SD1->(dbSetOrder(1), dbSeek(xFilial("SD1")+SD2->D2_NFORI+SD2->D2_SERIORI+SD2->D2_ITEMORI))
				If RecLock("SD2",.f.)
					SD2->D2_CCUSTO := SD1->D1_CC
					SD2->(MsUnlock())
				Endif
			Endif
			
			SD2->(dbSkip(1))
		Enddo
	Endif
Endif
RestArea(aArea) 
return .t.

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br
Ultima edição: 9 anos 6 meses atrás por lalberto.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 6 meses atrás #28236 por dexter
Olá , Luiz, desculpe a demora em responder.


Obrigado por postar sua solução, tomei ela como base
e fui debugando o código, eu tive que mudar a seguinte linha.
//essa linha 
 If SD1->(dbSetOrder(1), dbSeek(xFilial("SD1")+SD2->D2_NFORI+SD2->D2_SERIORI+SD2->D2_ITEMORI ) )

//mudei para esta
 IF SF1->F1_SERIE == SD2->D2_SERIORI .And. SF1->F1_DOC == SD2->D2_NFORI .And. SD2->D2_ITEMORI == SD1->D1_ITEM  



Fiz alguns testes aqui e funcionou.
;)



Agradeço sua atenção e tempo de ajuda, este é o diferencial
e que faz o forum ser uma referência em Advpl/Protheus.




Abração!!!

Por favor Acessar ou Registrar para participar da conversa.

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