Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Bloco de código
languagejava
themeMidnight
titleExemplo de rotina automática
collapsetrue
#INCLUDE '"Protheus.ch'"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.ch"CH"

Static __COMPAUT := Nil

User Function CMPCPAUTCMPAUTOMA()
	Local nSavIndlRet := IndexOrd()
LOCAL nSavRec.F.
	Local cQry := RecNO()
PRIVATE nTamTit""
	Local aTipos := TamSX3("E2_PREFIXO")[1]+TamSX3("E2_NUM")[1]+TamSX3("E2_PARCELA")[1]
PRIVATE nTamTip{"NF ", "PA ", "NDF"}
	Local cTblTmp := TamSX3("E2_TIPO")[1]
Private aCores
	Local aNF :={ { 'E2_SALDO = E2_VALOR .AND. E2_ACRESC = E2_SDACRES','ENABLE'},; // Titulo nao Compensado 
{ 'E2_SALDO = 0' , 'DISABLE'},; // Titulo Compensado Totalmente 
{ 'E2_SALDO <> 0' , 'BR_AZUL'} } // Titulo Compensado Parcialmente

//-----------------------------
// Define Variaveis 
//-----------------------------

PRIVATE aRotina := { { "Pesquisar","AxPesqui" , 0 , 1,,.F. },; //"Pesquisar" 
{ "Visualizar","AxVisual" , 0 , 2 },; //"Visualizar" 
{ "Compensar","XAFCMPAD" , 0 , 4 },; //"Compensar" 
{ "Excluir","Fa340Desc" , 0 , 4 },; //"Excluir" 
{ "Legenda","Fa340Leg" ,0,2, ,.F.} } //"Legenda"

//-----------------------------------------------------------------
// Carrega fun‡„o Pergunte 
//-----------------------------------------------------------------
SetKey (VK_F12,{|a,b| AcessaPerg("AFI340",.T.)})
Pergunte("AFI340",.F.)

//-------------------------------------------------
// Define o cabe‡alho da tela de baixas 
//-------------------------------------------------
PRIVATE cCadastro := "Compensação de Titulos Automatico"

//------------------------------------------------
// Verifica o numero do Lote 
//------------------------------------------------
PRIVATE cLoteLoteCont( "FIN" )
PRIVATE VALOR := 0
PRIVATE VLRINSTR := 0 Private aTxMoedas := {}

dbSelectArea("SE2")
dbSetOrder(1)
dbGoTop() 

//----------------------------------------
// Endere‡a a Funçao de BROWSE 
//----------------------------------------
mBrowse( 6, 1,22,75,"SE2",,,,,,aCores)

dbSelectArea("SE2")
dbSetOrder(nSavInd)
dbGoTo(nSavRec)

Return

/* Programa | XAFCMPAD
==========================================================
Desc. | Realiza a compensação do titulo de adiantamento 
*/ 
Static Function XAFCMPAD()
Local aArea := GetArea()
Local aAreaSE2 := SE2->(GetArea())
Local aRecPA := {} // Array contendo os Recnos dos titulos PA
Local aRecAux := {}
Local nX := 0
Local lContabiliza := .F.
Local lAglutina := .F.
Local lDigita := .F.
Local aRecSE2 := {SE2->(Recno())}
LOCAL oDlg
LOCAL nOpca := 0
Local dBaixaCMP := dDataBase

//--------------------------------------------------------
// Carrega o pergunte da rotina de compensação financeira
//--------------------------------------------------------
PERGUNTE("AFI340",.F.)

lContabiliza := MV_PAR11 == 1
lAglutina := MV_PAR08 == 1
lDigita := MV_PAR09 == 1

//----------------------------------
//Ordenação das tabelas envolvidas
//----------------------------------

SE2->(dbSetOrder(1)) //E2_FILIAL+E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_FORNECE+E2_LOJA
aRecAux := {}
aRecAux := XGetTitAd(SE2->E2_FORNECE,SE2->E2_LOJA )

For nX := 1 To Len(aRecAux)
aADD(aRecPA,aRecAux[nX])
Next nX

If !Empty(aRecPA)
DEFINE MSDIALOG oDlg FROM 080,000 TO 190,260 TITLE "Data de Baixa para a Compensação" PIXEL
oDlg:lMaximized := .F.
oPanel := TPanel():New(0,0,'',oDlg,, .T., .T.,, ,20,20) 
oPanel:Align := CONTROL_ALIGN_ALLCLIENT 
@ 015, 010 SAY "Dt. Baixa: " SIZE 52, 08 OF oPanel PIXEL 
@ 015, 035 MSGET dBaixaCMP Valid !Empty(dBaixaCMP) SIZE 52, 08 OF oPanel PIXEL hasbutton 
DEFINE SBUTTON FROM 034,050 TYPE 1 ACTION {||oDlg:End(),nOpca:=1} ENABLE OF oDlg 
DEFINE SBUTTON FROM 034,080 TYPE 2 ACTION {||oDlg:End(),nOpca:=0} ENABLE OF oDlg 
ACTIVATE MSDIALOG oDlg CENTERED 

If nOpca == 1 .and. !MaIntBxCP(2,aRecSE2,,aRecPA,,{lContabiliza,lAglutina,lDigita,.F.,.F.,.F.},,,,dBaixaCMP) 
Help("XAFCMPAD",1,"HELP","XAFCMPAD","Não foi possível a compensação"+CRLF+" do titulo do adiantamento",1,0) 
ElseIf nOpca == 0 
MsgInfo("Processo não realizado por desistência do usuário","Atencao") 
Else 
MsgInfo("Compensação Automática Concluida","Atencao") 
EndIf
EndIf

RestArea(aAreaSE2)
RestArea(aArea)

Return

/* Programa| XGetTitAd
=====================================================================
Desc| Função que retorna os titulos de adiantamento do Fornecedor 
| e Loja Informados 
===================================================================== 
*/
Static Function XGetTitAd( cFornece,cLoja )
Local aArea := GetArea()
Local aRecPA := {} // Array contendo os Recnos dos titulos PA
Local cQuery := ""
Local cTab := GetNextAlias()

If Select(cTab) > 0 
(cTab)->(dbCloseArea())
EndIf

cQuery += " SELECT "
cQuery += " R_E_C_N_O_ SE2REC "
cQuery += " FROM " + RetSqlTab("SE2")
cQuery += " WHERE " cQuery += " E2_FORNECE = '"+cFornece+"' AND "
cQuery += " E2_LOJA = '"+cLoja+"' AND "
cQuery += " E2_TIPO IN ('PA ','NDF') AND "
cQuery += " E2_SALDO > 0 AND "
cQuery += RetSQLCond("SE2")

cQuery := ChangeQuery(cQuery)

dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), cTab, .F., .T.)
(cTab)->(dbGoTop())

While (cTab)->(!EOF()) 
aAdd(aRecPA,(cTab)->SE2REC) 
(cTab)->(dbSkip()) 
EndDo

(cTab)->(dbCloseArea())
RestArea(aArea)

Return aRecPA
}
	Local aPA_NDF := {}
	Local aContabil := {}
	Local bBlock := Nil
	Local aEstorno := {}
	Local nSldComp := 0
	Local nTaxaPA := 0
	Local nTaxaNF := 0
	Local nHdl := 0
	Local nOperacao := 0

	If __COMPAUT == Nil
		cQry := "SELECT E2_TIPO TIPO, R_E_C_N_O_ R_E_C_N_O FROM " + RetSqlName("SE2") + " "
		cQry += "WHERE E2_SALDO > 0 AND E2_TIPO IN (?) "
		cQry += "ORDER BY E2_TIPO" 
		cQry := ChangeQuery(cQry)
	__COMPAUT := FWPreparedStatement():New(cQry)
	EndIf

	__COMPAUT:SetIn(1, aTipos)
	cQry := __COMPAUT:GetFixQuery()
	cTblTmp := MpSysOpenQuery(cQry)

	While (cTblTmp)->(!Eof())
		If (cTblTmp)->TIPO $ MVPAGANT+"|"+MV_CPNEG
			Aadd(aPA_NDF, (cTblTmp)->R_E_C_N_O) 
		Else
			Aadd(aNF, (cTblTmp)->R_E_C_N_O)
		EndIf 

		(cTblTmp)->(DbSkip()) 
		lRet := .T.
	EndDo 

	(cTblTmp)->(DbCloseArea())
	cTblTmp := ""

	If lRet
		Pergunte("AFI340", .F.)
		lContabiliza := MV_PAR11 == 1
		lAglutina := MV_PAR08 == 1
		lDigita := MV_PAR09 == 1

		lRet := FinCmpAut(aNF, aPA_NDF, aContabil, bBlock, aEstorno, nSldComp, dDatabase, nTaxaPA ,nTaxaNF, nHdl, nOperacao)

		If lRet
			Alert("Compensação realizada com sucesso")
		Else
			Alert("Ocorreu um erro no processo de compensação")
		EndIf
	EndIf
	
Return
Informações
titleObservação

Para utilizar o processo de Compensação Automática Contas a Pagar é necessário chamar a função: FinCmpAut.
A compensação pode ser realizada de N para N: N adiantamentos/devoluções (PA ou NDF) para N títulos (NF, DP, etc.) ou vice-versa.

Compensação contas a pagar automática 

Informações
titleObservação

A data da baixa desejada, para o processo, poderá ser enviada utilizando o 11º parâmetro da função MaIntBxCP(). Caso isso não ocorra, será considerada a data base com data de baixa.

Exemplo: MaIntBxCP(2,aRecSE2,,aRecPA,,{lContabiliza,lAglutina,lDigita,.F.,.F.,.F.},,,,,dBaixaCMP)


03. OPERAÇÕES

  • Compensar

Através desta operação é possível a compensação de títulos a pagar: 

...