SF1100I

Faz tratativas após incluir um Documento de Entrada

Exemplo 1- Manipular títulos (a pagar / a receber) vinculados ao Documento de Entrada:

User Function SF1100I()
    Local aArea := GetArea()
    Local aAreaF1 := SF1->(GetArea())
    Local aAreaE2 := SE2->(GetArea())
    Local aAreaE1 := SE1->(GetArea())
    Local dVenc := Date()
 
    //Se for Utiliza Fornecedor ou Devolucao, será Título a Receber
    If SF1->F1_TIPO $ "B;D;"
        DbSelectArea("SE1")
        SE1->(DbSetOrder(2))  //E1_FILIAL+E1_CLIENTE+E1_LOJA+E1_PREFIXO+E1_NUM+E1_PARCELA+E1_TIPO
         
        //Se conseguir posicionar, altera o vencimento... se houver mais de uma parcela, o ideal é transformar o trecho abaixo em um while com DbSkip
        If SE1->(DbSeek(FWxFilial("SE1")+SF1->F1_FORNECE+SF1->F1_LOJA+SF1->F1_SERIE+SF1->F1_DOC))
         
            RecLock("SE1",.F.)
                SE1->E1_VENCTO  := dVenc
                SE1->E1_VENCREA := DataValida(dVenc)
            SE1->(MsUnLock())
        EndIf
         
    //Senão, será Título a Pagar
    Else
        DbSelectArea("SE2")
        SE2->(DbSetOrder(6))  //E2_FILIAL + E2_FORNECE + E2_LOJA + E2_PREFIXO + E2_NUM
         
        //Se conseguir posicionar, altera o vencimento... se houver mais de uma parcela, o ideal é transformar o trecho abaixo em um while com DbSkip
        If SE2->(DbSeek(FWxFilial("SE2")+SF1->F1_FORNECE+SF1->F1_LOJA+SF1->F1_SERIE+SF1->F1_DOC))
         
            RecLock("SE2",.F.)
                SE2->E2_VENCTO  := dVenc
                SE2->E2_VENCREA := DataValida(dVenc)
            SE2->(MsUnLock())
        EndIf
    EndIf
     
    RestArea(aAreaE1)
    RestArea(aAreaE2)
    RestArea(aAreaF1)
    RestArea(aArea)
Return

Exemplo 2- Percorrer todas as parcelas do contas a pagar e atualizar um campo customizado:

User Function SF1100I()
    Local aArea := GetArea()
    Local aAreaF1 := SF1->(GetArea())
    Local aAreaE2 := SE2->(GetArea())
 
    //Se [Não] for Utiliza Fornecedor ou Devolucao, será Título a Pagar
    If ! SF1->F1_TIPO $ "B;D;"
        
        DbSelectArea("SE2")
        SE2->(DbSetOrder(6))  //E2_FILIAL + E2_FORNECE + E2_LOJA + E2_PREFIXO + E2_NUM
         
        //Se conseguir posicionar no título a pagar
        If SE2->(DbSeek(FWxFilial("SE2")+SF1->F1_FORNECE+SF1->F1_LOJA+SF1->F1_SERIE+SF1->F1_DOC))
         
			//Enquanto houver parcelas na SE2 desse mesmo documento
			While ! SE2->(EoF()) .And. SE2->E2_FILIAL == FWxFilial("SE2") .And. SE2->(E2_FORNECE + E2_LOJA + E2_PREFIXO + E2_NUM) == SF1->(F1_FORNECE + F1_LOJA + F1_SERIE + F1_DOC)
				//Atualiza as informações da parcela atual
				RecLock("SE2", .F.)
					SE2->E2_X_COND := SF1->F1_COND
				SE2->(MsUnlock())
			
				SE2->(DbSkip())
			EndDo
        EndIf
    EndIf
     
    RestArea(aAreaE1)
    RestArea(aAreaE2)
    RestArea(aAreaF1)
    RestArea(aArea)
Return

Observações:

  • Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
  • Se tiver sugestões de rotinas, pode entrar em contato;