Versões comparadas

Chave

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


ÍNDICE

Índice
excludeÍNDICE
stylenone

CONTEÚDO

...


01. 

...

VISIÓN GENERAL

Durante o processo de compensação em filiais diferentes da filial dos títulos, era realizada uma gravação incorreta na tabela el proceso de compensación en sucursales diferentes de la sucursal de los títulos, se realizaba una grabación incorrecta en la tabla FK7 (antes de Setembro Septiembre de 2020). Essa gravação acabava impactando a sequência de baixa dos títulos envolvidos, gerando então o problema de não conseguir realizar o estorno corretamenteEsta grabación acaba impactando en la secuencia de baja de los títulos involucrados, impidiendo que se realice la reversión correctamente.

Este rdmake realiza a correção da sequência de baixa das compensações afetadas pelo processo descrito acimala corrección de la secuencia de baja de las compensaciones afectadas por el proceso descrito anteriormente.

Obs. O  El problema de gravação incorreta foi corrigido na issue DSERFINPgrabación incorrecta se corrigió en la issue DSERFINP-32706.

02. 

...

EJEMPLO DE

...

UTILIZACIÓN

Card documentos
InformacaoO Rdmake foi realizado através do problema reportado na issue citada no tótico "Visão geral", sendo disponibilizado a correção somente para este cenário. Caso seja encontrado outros cenários a função de usuário esta disponível nesta documentação para personalização.
TituloIMPORTANTE!


Como Cómo utilizar:

       1 - Realize um backup da Realice una copia de seguridad de la base de dados datos 

       2 - Em um ambiente de homologação execute o En un entorno de homologación ejecute el Smartclient

       3 - No En el programa inicial, preencha complete "U_FA340FIX" e clique em y haga clic en "OK"

       4 - Na primeira tela apresentada, clique em En la primera pantalla presentada, haga clic en "OK"

       5 - Na segunda tela apresentadaEn la segunda pantalla presentada, informe o el código do del grupo de empresas do ambiente del entorno que deseja desea reparar. Será preciso informar também uma filial deste También será necesario informar una sucursal de este grupo de empresa, apenas solamente para inicializar o ambiente el entorno (deixamos dejamos claro que a         reparação será feita para todas as filiais do la reparación se realizará para todas las sucursales del grupo de empresas). Clique em Haga clic en "OK"

      6 - O processamento será executado, e ao ser finalizado, nenhuma tela será apresentada, apenas a mensagem "Atualização concluída." no console do Se ejecutará el procesamiento y al finalizar, no se mostrará ninguna pantalla, solamente el mensaje "Actualización finalizada." en la consola del appserver

      7 - Valide a gravação das compensações que foram reparadas no banco de dados e no sistema.


São cobertos os seguintes cenários (compensação/estornoSe cubren los siguientes escenarios (compensación/reversión):

  • Compensação Compensación de NF com PA sem impostos
  • Compensação de NF com PA com correção monetária
  • Compensação de parcial de NF com PA
  • Compensação de NF com PA com acréscimo/decréscimo
  • factura con PA sin impuestos
  • Compensación de factura con PA con corrección monetaria
  • Compensación parcial de factura con PA
  • Compensación de factura con PA con aumento/descuento
  • Compensación con retención Compensação com retenção de PCC/IRRF


Bloco de código
languagejava
themeMidnight
titleCódigo fonte:
collapsetrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWCOMMAND.CH" 

#DEFINE CHAVEFK6 1 
#DEFINE IDFK6    2 

Static _oSeqAtu   := Nil
Static _oTmpEST   := Nil
Static _oTmpEST2  := Nil
Static _lPccBaixa := Nil
Static _lIssBaixa := Nil
Static _lPaBruto  := Nil
Static _nTamDoc   := Nil
Static _nTamForn  := Nil
Static _aRecCM	  := {}

//--------------------------------------------------------------------------
/*/{Protheus.doc}FA340FIX
Correcao das sequencias das compensacoesFA340FIX
Corrección de las secuencias de las compensaciones que foramse feitasrealizaron emen 
filialsucursal diferente de la dasucursal filialde doslos titulostítulos

@since  14/08/2020
@version 12
/*/
//--------------------------------------------------------------------------
User Function FA340FIX()

	Local aSay      As Array
	Local aButton   As Array
	Local aEmp	    As Array
	Local cTitulo   As Character
	Local cDesc1    As Character
	Local cDesc2    As Character
	Local cDesc3    As Character
	Local cDesc4    As Character
	Local lOk		As Logical

	Private oMainWnd  As Object
	Private oProcess  As Object

	aSay      := {}
	aButton   := {}
	cTitulo   := "CorrecaoCorrección de base - CompensacaoCompensación CP"
	cDesc1    := "Este programa iracorregirá corrigirlas assecuencias sequenciasde dala CompensacaoCompensación CP. "
	cDesc2    := "Este processoproceso devedebe serejecutarse executado emen modo EXCLUSIVO, oues sejadecir naono podempuede haverhaber outrosotros        "
	cDesc3    := "  usuarios  ouo  jobs utilizando el o FinanceiroFinanciero.  EEs extremamentemuy recomendavel recomendabel que  se haga faca umuna"
	cDesc4    := "  COPIA BACKUPDE SEGURIDAD dade la BASE DE DADOSDATOS antes de destaesta atualizacaoactualización.                   "

	aAdd(  aButton, {  1, .T., { || lOk := .T., FechaBatch() } } )
	aAdd(  aButton, {  2, .T., { || lOk := .F., FechaBatch() } } )
	aAdd( aSay, cDesc1 )
	aAdd( aSay, cDesc2 )
	aAdd( aSay, cDesc3 )
	aAdd( aSay, cDesc4 )


	FormBatch(  cTitulo,  aSay,  aButton )

	If lOk
		aEmp := {}
		aEmp := SelCompany()

		If !Empty( aEmp )
			oProcess := MsNewProcess():New( { | lEnd | lOk := FA340Process(aEmp) }, "AtualizandoActualizando", "AguardeEspere, atualizandoactualizando...", .F. )
			oProcess:Activate()

			If lOk
				Conout( "AtualizacaoActualización concluidafinalizada." )
			Else
				Conout( "AtualizacaoActualización nao foino realizada." )
			EndIf
		EndIf
	EndIf

Return .T.

/*/
---------------------------------------------------------------------
    ReconstrucaoReconstrucción de compensacoescompensaciones CP
---------------------------------------------------------------------
/*/
Static Function FA340Process(aEmp As Array) As Logical
	Local aAreaAnt  as Array
	Local cChaveDoc as Character
	Local cChaveMov as Character
	Local cQuery    as Character
	Local lFirst	as Logical
	Local lRet		as Logical
	Local cIDAnt	as Character
	Local cIDFK2Ant as Character
	Local lMigrador as Logical
	Local lEstFK6	as Logical
	Local cIDFK6	as Character
	Local aEstFK6	as Array

	RpcSetType(3)

	RPCSetEnv(aEmp[1],aEmp[2], NIL, NIL, "FIN")

	_lPccBaixa := SuperGetMv("MV_BX10925", .F., "2") == "1"
	_lIssBaixa := SuperGetMv("MV_MRETISS",.F.,"1") == "2"
	_lPaBruto  := SuperGetMv("MV_PABRUTO", .F., "2") $ "1| "
	_nTamDoc   := TamSX3("E5_PREFIXO")[1]+TamSX3("E5_NUMERO")[1]+;
					TamSX3("E5_PARCELA")[1]+TamSX3("E5_TIPO")[1]
	_nTamForn  := TamSX3("E5_CLIFOR")[1]+TamSX3("E5_LOJA")[1]

	aAreaAnt  := GetArea()
	lRet	  := .F.
	cQuery    := ""
	cIDAnt	  := ""
	lMigrador := .T.
	lEstFK6	  := .F.
	cIDFK6	  := ""
	aEstFK6	  := {}

	cQuery := "SELECT SE5.E5_VALOR, SE5.E5_PREFIXO, SE5.E5_NUMERO, SE5.E5_PARCELA, "
	cQuery += "SE5.E5_TIPO, SE5.E5_CLIFOR, SE5.E5_LOJA, SE5.E5_SITUACA, SE5.E5_TIPODOC, "
	cQuery += "SE5.E5_VLJUROS, SE5.E5_VLACRES, SE5.E5_VLDECRE, SE5.E5_DATA, "
	cQuery += "SE5.R_E_C_N_O_ RECSE5, SE5.E5_DOCUMEN, SE5.E5_VALOR, SE5.E5_FILORIG, "
	cQuery += "FK2.R_E_C_N_O_ RECFK2, FK2.FK2_FILIAL, FK2.FK2_IDDOC, "
	cQuery += "FK7.R_E_C_N_O_ RECFK7, FKA.R_E_C_N_O_ RECFKA, "
	cQuery += 		"(SELECT COUNT(CMP.FK2_IDDOC) FROM "+ RetSqlName("FK2") +" CMP"	// QtdCant. compensacoesCompensaciones p/ titulotítulo
	cQuery += 		" WHERE CMP.FK2_FILIAL = FK7.FK7_FILIAL AND "
	cQuery += 		" CMP.FK2_IDDOC = FK7.FK7_IDDOC AND "
	cQuery += 		" CMP.FK2_MOTBX = 'CMP' AND CMP.FK2_RECPAG = 'P' AND"
	cQuery += 		" CMP.FK2_TPDOC <> 'ES' AND CMP.D_E_L_E_T_ = ' '"
	cQuery += 		") QTDCMP, "
	cQuery += 		"( SELECT COUNT(EST.FK2_IDDOC) FROM "+ RetSqlName("FK2") +" EST"	// QtdCant. Reversiones Estornosde dala CMP
	cQuery += 		" WHERE EST.FK2_FILIAL = FK7.FK7_FILIAL AND"
	cQuery += 		" EST.FK2_IDDOC = FK7.FK7_IDDOC AND "
	cQuery += 		" EST.FK2_MOTBX = 'CMP' AND EST.FK2_RECPAG = 'R' AND"
	cQuery += 		" EST.FK2_TPDOC = 'ES' AND EST.D_E_L_E_T_ = ' '"
	cQuery += 		") QTDEST "
	cQuery += " FROM "+ RetSqlName("SE5") +" SE5 "
	cQuery += 	"INNER JOIN "+ RetSqlName("FK2") +" FK2 "
	cQuery += 		"ON FK2.FK2_FILIAL = SE5.E5_FILIAL AND "
	cQuery += 			"FK2.FK2_IDFK2 = SE5.E5_IDORIG "
	cQuery +=	 "INNER JOIN "+ RetSqlName("FK7") +" FK7 "
	cQuery += 		"ON FK2.FK2_FILIAL = FK7.FK7_FILIAL AND "
	cQuery += 			"FK2.FK2_IDDOC = FK7.FK7_IDDOC "
	cQuery +=	 "INNER JOIN "+ RetSqlName("FKA") +" FKA "
	cQuery += 		"ON FKA.FKA_FILIAL = FK2.FK2_FILIAL AND "
	cQuery += 			"FKA.FKA_IDORIG = FK2.FK2_IDFK2 "
	cQuery += "WHERE FK2.FK2_FILORI <> FK7.FK7_FILIAL AND FK2.FK2_MOTBX = 'CMP' AND "
	cQuery += "FK2.FK2_RECPAG = 'P' AND FK2.FK2_TPDOC <> 'ES' AND "
	cQuery += "SE5.D_E_L_E_T_ = ' ' AND "
	cQuery += "FK2.D_E_L_E_T_ = ' ' AND "
	cQuery += "FKA.D_E_L_E_T_ = ' ' AND "
	cQuery += "FK7.D_E_L_E_T_ = ' '"
	cQuery += "ORDER BY SE5.E5_FILIAL, SE5.E5_TIPODOC, SE5.E5_PREFIXO, SE5.E5_NUMERO, SE5.E5_PARCELA, SE5.E5_TIPO, SE5.E5_CLIFOR, SE5.E5_LOJA"

	cQuery := ChangeQuery(cQuery)
	MpSysOpenQuery(cQuery,"E5TRB")

	dbSelectArea("SE2")
    dbSelectArea("SA2")
    dbSelectArea("SED")
    dbSelectArea("SE5")
	dbSelectArea("FK2")
	dbSelectArea("FKA")
	dbSelectArea("FK3")
	dbSelectArea("FK6")

	SE5->(dbSetOrder(2))
	FK2->(dbSetOrder(1))
	FK3->(dbSetOrder(2))
	FK6->(dbSetOrder(3))

	lFirst := .T.

	// Abre copia de dala __SE5 para cachecaché dodel E5_IDORIG aposdespués odel fkcommit en nala ATUSEQ
	If Select("__SE5") == 0
		ChkFile("SE5",.F.,"__SE5")
	Else
		DbSelectArea("__SE5")
	EndIf

	While E5TRB->(!EOF())

		lMigrador := .T.
		lAtuEst   := .T.
		lEstFK6   := .T.
		
		BEGIN TRANSACTION

			cChaveDoc := E5TRB->E5_DOCUMEN
			cChaveMov := E5TRB->E5_PREFIXO + E5TRB->E5_NUMERO + E5TRB->E5_PARCELA +;
								E5TRB->E5_TIPO + E5TRB->E5_CLIFOR + E5TRB->E5_LOJA

			FKA->(dbGoTo(E5TRB->RECFKA))
			FK2->(dbGoTo(E5TRB->RECFK2))
			FK7->(dbGoTo(E5TRB->RECFK7))

			If FK2->FK2_IDDOC == cIDAnt
				lMigrador := .F.
			EndIf

			cIDFK2Ant := FK2->FK2_IDFK2
			cIDAnt := FK2->FK2_IDDOC

			If E5TRB->E5_SITUACA == "C" .And. E5TRB->E5_TIPODOC $ "CM"
				lMigrador := .F.
				AAdd(aEstFK6,E5TRB->RECSE5)
			EndIf

			CleanFKImp()
			CleanFK7()
			CleanFK2()		
			CleanFKA()

			SE5->(dbGoTo(E5TRB->RECSE5))
			__SE5->(dbGoTo(SE5->(Recno())))

			If SE5->E5_TIPODOC $ "CP|BA"

				If E5TRB->E5_TIPO $ MVPAGANT+"|"+MV_CPNEG
					If !Empty(__SE5->E5_IDORIG) .And. lMigrador

						//Atualiza sequencias da SE5 
						ATUSEQ(E5TRB->FK2_FILIAL,cChaveDoc,cChaveMov)

						SE5->(dbGoTop())	// SomenteSolamente para atualizaractualizar workarea
						SE5->(dbGoTo(E5TRB->RECSE5))

					EndIf

					If E5TRB->QTDEST > 0
						FixES(E5TRB->FK2_FILIAL,cChaveDoc,cChaveMov, @aEstFK6) // ProcuraBuscar ey arrumaarregla estornosreversiones inconsistentes
					EndIf
				EndIf
			Else	
				lMigrador := .F.
			EndIf

		END TRANSACTION	// EncerroFinaliza ala transacaotransacción para commitar as atualizacoes realizar el commit en las actualizaciones antes de rodarejecutar oel migrador

		If lMigrador
			BEGIN TRANSACTION
				FnBaixaE2(E5TRB->RECSE5,E5TRB->E5_FILORIG)
			END TRANSACTION

			SE5->(dbGoTo(E5TRB->RECSE5))
			
			If SE5->E5_VLJUROS > 0 .Or. SE5->E5_VLMULTA > 0 .Or. SE5->E5_VLDESCO > 0 .Or. SE5->E5_VLCORRE > 0
				If E5TRB->QTDEST > 0
					lEstFK6 := .T.
				EndIf

				SE5->(dbGoTo(E5TRB->RECSE5))
				AtuFK6(cIDFK2Ant, SE5->E5_IDORIG, lEstFK6)
			Endif
		Endif

		E5TRB->(dbSkip())

		If lFirst
			lRet := .T.
			lFirst := .F.
		EndIf

	EndDo

	If !Empty(aEstFK6)
		AtuEsCm(aEstFK6)
	EndIf
	
	aSize(_aRecCM,0)
	_aRecCM := NIL
	DelTmps(_oSeqAtu)
	DelTmps(_oTmpEST)

	RestArea(aAreaAnt)

Return lRet 

/*/
----------------------------------------------------------------------
    AtualizaActualiza oslas estornosreversiones de correçoescorrecciones monetarias
----------------------------------------------------------------------
/*/
Static Function AtuEsCm(aEstFK6 As Array)
	Local cChvParc1 As Character
	Local cChvParc2 As Character
	Local cData		As Character
	Local cFil		As Character
	Local cTipoDoc 	As Character
	Local cNewOrig	As Character
	Local nTamEST	As Numeric
	Local nX		As Numeric
	Local aAreaAnt	As Array
	Local cSeq		As Character
	Local nPosEST	As Numeric

	cChvParc1	:= ""
	cChvParc2	:= ""
	cData 		:= ""
	cFil		:= ""
	cTipoDoc	:= ""
	cNewOrig	:= ""
	nTamEST		:= Len(aEstFK6)
	nX			:= 1
	cSeq		:= ""
	nPosEST		:= 0

	Default aEstFK6 := {}

	aAreaAnt := SE5->(GetArea())
	FK6->(dbSetOrder(3))
	SE5->(dbSetOrder(2))

	For nX := 1 To nTamEST
		SE5->(dbGoTo(aEstFK6[nX]))

		cChvParc1	:= SE5->(E5_PREFIXO + E5_NUMERO + E5_PARCELA + E5_TIPO)
		cChvParc2	:= SE5->(E5_CLIFOR + E5_LOJA)
		cData 		:= DTOS(SE5->E5_DATA)
		cFil		:= SE5->E5_FILIAL
		cTipoDoc	:= IIF(SE5->E5_TIPO $ MVPAGANT+"|"+MV_CPNEG, "BA","CP")
		cSeq		:= SE5->E5_SEQ
		
		If !(SE5->E5_TIPODOC $ "BA|CP|ES")
			If SE5->(dbSeek(cFil+cTipoDoc+cChvParc1+cData+cChvParc2+cSeq))
				cNewOrig := SE5->E5_IDORIG

				SE5->(dbGoTo(aEstFK6[nX]))	
				RecLock("SE5",.F.) 
				SE5->E5_IDORIG	:= cNewOrig
				SE5->(MsUnlock())
			EndIf
		EndIf

		If (nPosEST := ASCAN(_aRecCM,{|x| x[CHAVEFK6] == cChvParc1 + cChvParc2 })) > 0
			If SE5->(dbSeek(cFil+"ES"+cChvParc1+cData+cChvParc2+cSeq))
				If FK6->(dbSeek(SE5->E5_FILIAL+_aRecCM[nPosEST][IDFK6]+"FK2"))
					RecLock("FK6")
					FK6->FK6_IDORIG := SE5->E5_IDORIG
					FK6->(MsUnLock())
				EndIf
			EndIf
		EndIf
	Next nX

	RestArea(aAreaAnt)

Return Nil

/*/
----------------------------------------------------------------------
    Encuentra Encontralas osreversiones estornosincorrectas incorretosde daslas compensacoescompensaciones para refaze-losrehacerlas
----------------------------------------------------------------------
/*/
Static Function FixES(cFil As Character, cDoc As Character, cChave As Character, aEstFK6 As Array) As Logical

	Local aAreaAnt   As Array
	Local aAreaSE5   As Array
	Local cQuery     As Character
	Local cIDFK2     As Character
	Local cCposChave As Character
	Local nValor	 As Numeric
	Local nValorE5   As Numeric

	Default cFil 	  := ""
	Default cDoc	  := ""
	Default cChave    := ""
	Default aEstFK6	  := {}

	aAreaAnt := GetArea()
	aAreaSE5 := SE5->(GetArea())
	nValor	 := 0
	nValorE5 := 0

	BEGIN SEQUENCE

		If E5TRB->QTDCMP > 1	// 1 PA x Multi NFs
			If _oTmpEST == Nil
				cCposChave := " SE5.E5_PREFIXO || SE5.E5_NUMERO || SE5.E5_PARCELA || "
				cCposChave += " SE5.E5_TIPO || SE5.E5_CLIFOR || SE5.E5_LOJA CHAVE, "

				cQuery := "SELECT SE5.R_E_C_N_O_ RECSE5, SE5.E5_DOCUMEN, SE5.E5_FILORIG, SE5.E5_MOEDA, "
				cQuery += cCposChave + " SE5.E5_TIPO, SE5.E5_CLIFOR, SE5.E5_LOJA, SE5.E5_DATA, "
				cQuery += "SE5.E5_VLCORRE, SE5.E5_VLJUROS, SE5.E5_VLMULTA, SE5.E5_VLDESCO, "
				cQuery += "SE5.E5_IDORIG, SE5.E5_VALOR, SE5.E5_VLMOED2, SE5.E5_FILIAL, FK2.R_E_C_N_O_ RECFK2, "
				cQuery += "FK2.FK2_IDDOC "
				cQuery += "FROM "+ RetSqlName("SE5") +" SE5 "
				cQuery += 	"INNER JOIN "+ RetSqlName("FK2") +" FK2 "
				cQuery += 		"ON FK2.FK2_FILIAL = SE5.E5_FILIAL AND "
				cQuery += 			"FK2.FK2_IDFK2 = SE5.E5_IDORIG "
				cQuery += "WHERE "
				cQuery += "SE5.E5_FILIAL = ? AND "
				cQuery += "SE5.E5_DOCUMEN = ? AND "
				cQuery += "SE5.E5_RECPAG = 'R' AND SE5.E5_TIPODOC = 'ES' AND "
				cQuery += "FK2.FK2_RECPAG = 'R' AND FK2.FK2_TPDOC = 'ES' AND "
				cQuery += "SE5.D_E_L_E_T_ = ' ' AND "
				cQuery += "FK2.D_E_L_E_T_ = ' ' "
				cQuery += "ORDER BY SE5.R_E_C_N_O_"

				cQuery := ChangeQuery(cQuery)
				_oTmpEST := FWPreparedStatement():New(cQuery)
			EndIf

			_oTmpEST:SetString(1,cFil)
			_oTmpEST:SetString(2,cChave)

			cQuery := _oTmpEST:GetFixQuery()
			MpSysOpenQuery(cQuery,"FIXES")

			SE5->(dbSetOrder(2)) //e5_filial, e5_tipodoc, e5_prefixo, e5_numero, e5_parcela, e5_tipo, e5_data, e5_clifor, e5_loja

			While FIXES->(!EOF())
				If SE5->(dbSeek(cFil+"ES"+Left(FIXES->E5_DOCUMEN,_nTamDoc)+FIXES->E5_DATA+SubStr(FIXES->E5_DOCUMEN,_nTamDoc+1,_nTamForn)))
					cIDFK2 := SE5->E5_IDORIG
					If FIXES->E5_MOEDA <> SE5->E5_MOEDA
						If FIXES->E5_MOEDA <> "01" 
							nValor := FIXES->E5_VLMOED2
						Else
							nValor := FIXES->E5_VALOR
						EndIf

						If SE5->E5_MOEDA <> "01" 
							nValorE5 := SE5->E5_VLMOED2
						Else
							nValorE5 := SE5->E5_VALOR
						EndIf
					Else
						nValor := FIXES->E5_VALOR
						nValorE5 := SE5->E5_VALOR
					EndIf
					If nValorE5 <> nValor .Or. RTrim(SE5->E5_DOCUMEN) <> FIXES->CHAVE	// Si Seel valor forfue diferente, sabemos que la ehpierna ade pernala erradareversión doestá estornoequivocada
						If FIXES->E5_VLCORRE > 0 .Or. FIXES->E5_VLJUROS > 0 .Or. FIXES->E5_VLMULTA > 0 .Or. FIXES->E5_VLDESCO
							aAdd(_aRecCM,{FIXES->CHAVE, FIXES->E5_IDORIG})
							aAdd(aEstFK6, FIXES->RECSE5)
						Endif

						If SE5->E5_VLCORRE > 0 .Or. SE5->E5_VLJUROS > 0 .Or. SE5->E5_VLMULTA > 0 .Or. SE5->E5_VLDESCO
							aAdd(_aRecCM, { SE5->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA), SE5->E5_IDORIG})
							aAdd(aEstFK6, SE5->(RECNO()))
						Endif

						FixSE2("SE5",SE5->E5_FILORIG,FIXES->E5_DOCUMEN,"-") // Deshace Desfazreversión estornoincorrecta incorretode dala compensacaocompensación
						FixSE5("FIXES",aAreaSE5)	// Corrige pierna pernade doreversión estornoen nala SE5
						If FK2->(dbSeek(cFil+cIDFK2))	// DeletaBorra 1a perna do estorno napierna de la reversión en la FK2
							CleanFK2()
						EndIf
						If FK2->(dbSeek(cFil+FIXES->E5_IDORIG))	// Borra Deletaen la 2a pierna de pernala doreversión estornoen nala FK2
							CleanFK2()
						EndIf
						
						FixSE2("SE5",FIXES->E5_FILORIG,FIXES->E5_DOCUMEN,"+")
					EndIf
				EndIf
				FIXES->(dbSkip())
			EndDo
		Else	// 1 NF x Multi PAs
			If _oTmpEST2 == Nil
				cCposChave := " SE5.E5_PREFIXO || SE5.E5_NUMERO || SE5.E5_PARCELA || "
				cCposChave += " SE5.E5_TIPO || SE5.E5_CLIFOR || SE5.E5_LOJA CHAVE, "

				cQuery := "SELECT SE5.R_E_C_N_O_ RECSE5, SE5.E5_DOCUMEN, SE5.E5_FILORIG, SE5.E5_MOEDA, "
				cQuery += cCposChave + " SE5.E5_TIPO, SE5.E5_CLIFOR, SE5.E5_LOJA, SE5.E5_DATA, "
				cQuery += "SE5.E5_VLCORRE, SE5.E5_VLJUROS, SE5.E5_VLMULTA, SE5.E5_VLDESCO, "
				cQuery += "SE5.E5_VLACRES, SE5.E5_VLDECRE, SE5.E5_FILIAL, SE5.E5_VRETIRF, "
				cQuery += "SE5.E5_VRETCOF, SE5.E5_VRETCSL, SE5.E5_VRETPIS, SE5.E5_VRETISS, "
				cQuery += "SE5.E5_IDORIG, SE5.E5_VALOR, SE5.E5_SEQ, SE5.E5_VLMOED2, FK2.R_E_C_N_O_ RECFK2, "
				cQuery += "FK2.FK2_IDDOC "
				cQuery += "FROM "+ RetSqlName("SE5") +" SE5 "
				cQuery += 	"INNER JOIN "+ RetSqlName("FK2") +" FK2 "
				cQuery += 		"ON FK2.FK2_FILIAL = SE5.E5_FILIAL AND "
				cQuery += 			"FK2.FK2_IDFK2 = SE5.E5_IDORIG "
				cQuery += "WHERE "
				cQuery += "SE5.E5_FILIAL = ? AND "
				cQuery += "SE5.E5_PREFIXO || SE5.E5_NUMERO || SE5.E5_PARCELA || "
				cQuery += "SE5.E5_TIPO || SE5.E5_CLIFOR || SE5.E5_LOJA = ? AND "
				cQuery += "SE5.E5_RECPAG = 'R' AND SE5.E5_TIPODOC = 'ES' AND "
				cQuery += "FK2.FK2_RECPAG = 'R' AND FK2.FK2_TPDOC = 'ES' AND "
				cQuery += "SE5.D_E_L_E_T_ = ' ' AND "
				cQuery += "FK2.D_E_L_E_T_ = ' ' "
				cQuery += "ORDER BY SE5.R_E_C_N_O_"

				cQuery := ChangeQuery(cQuery)
				_oTmpEST2 := FWPreparedStatement():New(cQuery)
			EndIf

			_oTmpEST2:SetString(1,cFil)
			_oTmpEST2:SetString(2,RTrim(cDoc))

			cQuery := _oTmpEST2:GetFixQuery()
			MpSysOpenQuery(cQuery,"FIXES")

			dbSelectArea("SE5")
			While FIXES->(!EOF())
				SET FILTER TO SE5->E5_FILIAL == cFil .and.;
					RTrim(SE5->E5_DOCUMEN) == RTrim(FIXES->CHAVE) .and.;
					SE5->E5_TIPODOC == "ES" .and. SE5->E5_SEQ == FIXES->E5_SEQ .and.;
					SE5->E5_VALOR <> FIXES->E5_VALOR

				SE5->(dbGoTop())

				cIDFK2 := FIXES->E5_IDORIG
				If FIXES->E5_MOEDA <> SE5->E5_MOEDA
					If FIXES->E5_MOEDA <> "01" 
						nValor := FIXES->E5_VLMOED2
					Else
						nValor := FIXES->E5_VALOR
					EndIf

					If SE5->E5_MOEDA <> "01" 
						nValorE5 := SE5->E5_VLMOED2
					Else
						nValorE5 := SE5->E5_VALOR
					EndIf
				Else
					nValor := FIXES->E5_VALOR
					nValorE5 := SE5->E5_VALOR
				EndIf
				If nValor <> nValorE5 .Or.;	// SeSi el valor forfuera diferente, sabemos que es ehla apierna pernaequivocada erradade dola estornoreversión
						RTrim(FIXES->E5_DOCUMEN) <> SE5->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA)

					If FIXES->E5_VLCORRE > 0 .Or. FIXES->E5_VLJUROS > 0 .Or. FIXES->E5_VLMULTA > 0 .Or. FIXES->E5_VLDESCO
						aAdd(_aRecCM,{FIXES->CHAVE, FIXES->E5_IDORIG})
						aAdd(aEstFK6, FIXES->RECSE5)
					Endif

					If SE5->E5_VLCORRE > 0 .Or. SE5->E5_VLJUROS > 0 .Or. SE5->E5_VLMULTA > 0 .Or. SE5->E5_VLDESCO
						aAdd(_aRecCM, { SE5->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA), SE5->E5_IDORIG})
						aAdd(aEstFK6, SE5->(RECNO()))
					Endif

					FixSE2("FIXES",SE5->E5_FILORIG,SE5->E5_DOCUMEN,"-") // Deshace la Desfazreversión estornoincorrecta incorretode dala compensacaocompensación
					FixSE5("SE5",aAreaSE5)	// Corrige perna do estorno nala pierna de la reversión en la SE5
					If FK2->(dbSeek(cFil+cIDFK2))	// Deleta 1a perna do estorno naBorrar la pierna de la reversión en la FK2
						CleanFK2()
					EndIf
					If FK2->(dbSeek(cFil+SE5->E5_IDORIG))	// Deleta 2a perna do estorno naBorra la 2ª pierna de la reversión en la FK2
						CleanFK2()
					EndIf
					FixSE2("SE5",SE5->E5_FILORIG,SE5->E5_DOCUMEN,"+")
				EndIf
				FIXES->(dbSkip())
			EndDo
			If nValor <> 0
				SE5->(dbClearFilter())
			EndIf
		EndIf

		FIXES->(dbCloseArea())

	END SEQUENCE

	RestArea(aAreaAnt)

	RestArea(aAreaSE5)

Return Nil

/*/
---------------------------------------------------------------------
    Deshace Desfazla acompensación compensacaoen noslos titulos para refazerrehacer depoisdespués
---------------------------------------------------------------------
/*/
Static Function FixSE2(cAlias As Character, cFil As Character, cChave As Character,cOper As Character)

    Local aAreaAnt  As Array
    Local nSaldo    As Numeric

	Default cAlias   := "SE5"

    aAreaAnt := GetArea()

    SE2->(dbSetOrder(1))
    If SE2->(dbSeek(cFil+RTrim(cChave))) .and. !Empty(SE2->E2_BAIXA)  // Verifica sesi oel titulotítulo jaya foise reconstituidoreconstituyó
        SA2->(dbSetOrder(1))
        SA2->(dbSeek(xFilial("SA2",SE2->E2_FILORIG)+SE2->(E2_FORNECE+E2_LOJA)))
        nSaldo := MontaSaldo(cAlias)
		RecLock("SE2",.F.)
		If cOper == "-"	// SubtraiSustrae, deshaciendo desfazendola estornoreversión incorretoincorrecta
			SE2->E2_SALDO     -= nSaldo
			SE2->E2_SDACRES   -= (cAlias)->E5_VLACRES
			SE2->E2_SDDECRE   -= (cAlias)->E5_VLDECRE
		Else	// SomaSuma, rehaciendo refazendola estornoreversión corretocorrecta
			SE2->E2_SALDO     += nSaldo
			SE2->E2_SDACRES   += (cAlias)->E5_VLACRES
			SE2->E2_SDDECRE   += (cAlias)->E5_VLDECRE
		EndIf
        MsUnlock()
    EndIf
    RestArea(aAreaAnt)

Return Nil

/*/
---------------------------------------------------------------------
    Corrige oslas estornosreversiones de compensaciones compensacoesen nala SE5
---------------------------------------------------------------------
/*/
Static Function FixSE5(cAlias As Character, aAreaSE5 As Array)
	
	Local aAreaAnt  As Array
	Local cSeq		As Character
	Local nValor	As Numeric
	Local nVLMD2	As Numeric
	Local cDocumen  As Character
	Local cChave 	As Character
	Local cTipo 	As Character
	Local cFil		As Character
	Local nAuxVal	As Numeric

	Default cAlias   := "SE5"
	Default aAreaSE5 := SE5->(GetArea())

	aAreaAnt := SE5->(GetArea())
	nValor 	 := (cAlias)->E5_VALOR
	nVLMD2 	 := (cAlias)->E5_VLMOED2
	cDocumen := (cAlias)->E5_DOCUMEN
	cTipo	 := IIF((cAlias)->E5_TIPO $ MVPAGANT+"|"+MV_CPNEG, "BA", "CP")
	cSeq	 := ""
	cFil	 := (cAlias)->E5_FILIAL

	If cAlias == "FIXES"
		cChave	 := (cAlias)->CHAVE	
	Else
		cChave	 := (cAlias)->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA)
	EndIf

	dbSelectArea("SE5")
	SET FILTER TO SE5->E5_FILIAL == cFil .and.;
				RTrim(SE5->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA)) == cChave .and.;
				RTrim(SE5->E5_DOCUMEN) == RTrim(cDocumen) .and.;
				SE5->E5_TIPODOC == cTipo
		SE5->(dbGoTop())
		cSeq := SE5->E5_SEQ	// Pega seqSec. atualizadaActualizada
	SE5->(dbClearFilter())
	RestArea(aAreaAnt)

	If cAlias == "SE5"
		SE5->(dbSetOrder(2))
        SE5->(dbSeek(cFil+"ES"+Left((cAlias)->E5_DOCUMEN,_nTamDoc)+DTOS((cAlias)->E5_DATA)+SubStr((cAlias)->E5_DOCUMEN,_nTamDoc+1,_nTamForn)))
	EndIf

	If FIXES->E5_MOEDA <> SE5->E5_MOEDA  //EmEn casos de moneda moedaextranjero estrangeirose inverteinvierten oslos valores
		nAuxVal := nValor
		nValor  := nVLMD2
		nVLMD2  := nAuxVal
	EndIf

	If SE5->(!EOF())
		RecLock("SE5",.F.)
		SE5->E5_DOCUMEN := cChave
		SE5->E5_VALOR	:= nValor
		SE5->E5_VLMOED2	:= nVLMD2
		SE5->E5_SEQ		:= cSeq
		SE5->(MsUnlock())
		CleanSE5()

		SE5->(DbSetOrder(7))
		If SE5->(dbSeek(SE5->E5_FILIAL + Rtrim(cChave)))
			SeqRecord(cSeq)	// Actualiza Atualizala estornoreversión
			CleanSE5()
		EndIf
	EndIf

	RestArea(aAreaAnt)

Return 

/*/
---------------------------------------------------------------------
    Recompone Recompoeel saldo dosde los titulostítulos estornadosrevertidos incorretamenteincorrectamente
---------------------------------------------------------------------
/*/
Static Function MontaSaldo(cAlias As Character) As Numeric

    Local nSaldo    As Numeric
    Local lIrfBaixa As Logical

	Default cAlias := "SE5"

    lIrfBaixa := SA2->A2_CALCIRF == "2" .AND.  !SE2->E2_TIPO $ MVPAGANT .And.;
				(Posicione("SED",1,xFilial("SED",SE2->E2_FILORIG)+SE2->E2_NATUREZ,"ED_CALCIRF") == "S")

    nSaldo := (cAlias)->E5_VALOR

	If lIrfBaixa
		nSaldo += (cAlias)->E5_VRETIRF
	EndIf
	If _lPccBaixa
		nSaldo += (cAlias)->(E5_VRETPIS+E5_VRETCOF+E5_VRETCSL)
	EndIf
	If _lIssBaixa
		nSaldo += (cAlias)->E5_VRETISS
	EndIf

Return nSaldo

/*/
---------------------------------------------------------------------
    AtualizaActualiza sequenciassecuencias de compensacoescompensaciones en nala SE5
---------------------------------------------------------------------
/*/
Static Function ATUSEQ(cFil As Character, cDoc As Character, cChave As Character)
	Local aAreaAnt  As Array
	Local cChavePai As Character
	Local cSeqPAI 	As Character
	Local cDocPAI	As Character
	Local lMultSeq 	As Logical
	Local cCountSeq	As Character
	Local cNewSeq 	As Character
	Local lRet		As Logical
	Local lFlush 	As Logical
	Local nBxParc	As Numeric
	Local cQuery 	As Character
	Local aAreaSE5  As Array

	Default cFil 	  := ""
	Default cDoc	  := ""
	Default cChave    := ""

	aAreaAnt   := GetArea()
	aAreaSE5   := SE5->(GetArea())
	cDocPAI	   := Alltrim(SE5->(E5_FILIAL+E5_DOCUMEN))
	lMultSeq   := lRet := lFlush := .F.
	cCountSeq  := cSeqPAI := SE5->E5_SEQ
	cNewSeq    := cQuery := ""	
	nBxParc    := 1
	cDocNf	   := ""

	If _oSeqAtu == Nil
		cQuery := " SELECT R_E_C_N_O_ RECNO FROM " + RetSqlName("SE5")
		cQuery += " WHERE"
		cQuery += " E5_FILIAL = ? AND "
		cQuery += " E5_DOCUMEN = ? AND "
		cQuery += " E5_RECPAG = 'P' AND E5_TIPODOC <> 'ES' AND "
		cQuery += " D_E_L_E_T_ = ' ' "
		cQuery += " ORDER BY R_E_C_N_O_ "

		cQuery := ChangeQuery(cQuery)
		_oSeqAtu := FWPreparedStatement():New(cQuery)
	EndIf	

	_oSeqAtu:SetString(1,cFil)
	_oSeqAtu:SetString(2,IIf(E5TRB->QTDCMP > 1,cChave,RTrim(cDoc)))

	cQuery := _oSeqAtu:GetFixQuery()
	MpSysOpenQuery(cQuery,"E5SEQ")

	While E5SEQ->(!EOF())
		SE5->(dbGoTo(E5SEQ->RECNO))
		If lMultSeq
			cCountSeq := Soma1(cCountSeq)
		Else
			cCountSeq := SE5->E5_SEQ
			lFlush 	  := .T.
			lMultSeq  := .T.
		EndIf

		cChavePai  := SE5->(E5_PREFIXO + E5_NUMERO + E5_PARCELA + E5_TIPO + E5_CLIFOR + E5_LOJA)

		//AtualizaActualiza sequenciasecuencia dodel titulotítulo de destino
		SeqRecord(cCountSeq)
		ChkMovCompl(cCountSeq)
		CleanSE5()

		cDocNf := RTrim(SE5->E5_DOCUMEN)
		
		dbSelectArea("SE5")
		SET FILTER TO SE5->E5_FILIAL == cFil .and.; 
					RTrim(SE5->E5_DOCUMEN) == RTrim(cChavePai) .and.;
					RTrim(SE5->(E5_PREFIXO+E5_NUMERO+E5_PARCELA+E5_TIPO+E5_CLIFOR+E5_LOJA)) == cDocNf
					  

		SE5->(dbGoTop())

		//AtualizaActualiza sequenciasecuencia dodel titulotítulo de partida
		SeqRecord(cCountSeq)
		ChkMovCompl(cCountSeq)
		CleanSE5()
		SE5->(dbClearFilter())

		E5SEQ->(dbSkip())
	EndDo	
	
	If lFlush
		SE5->(FKCommit())
	EndIf
	
	RestArea(aAreaSE5)
	RestArea(aAreaAnt)

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra referencias incorrectas incorretasde dala FKA
---------------------------------------------------------------------
/*/
Static Function CleanFKA()

	If FKA->(!EoF())	
		RecLock("FKA")
		FKA->(DbDelete())
		FKA->(MsUnLock())
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra referencias incorrectas incorretasde dala FK2
---------------------------------------------------------------------
/*/
Static Function CleanFK2()

	If FK2->(!EoF())	
		RecLock("FK2")
		FK2->(DbDelete())
		FK2->(MsUnLock())
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra referencias incorrectas incorretasde dala FK3 ey FK4
---------------------------------------------------------------------
/*/
Static Function CleanFKImp()

	Local aArea		As Array
	Local cFilter	As Character

	aArea := GetArea()
	cFilter:= ""

	If FK3->(dbSeek(FK2->FK2_FILIAL+"FK2"+FK2->FK2_IDFK2))
		dbSelectArea("FK4")
		cFilter := FK4->(dbFilter())
		While FK3->(!EOF()) .and. FK3->FK3_FILIAL == FK2->FK2_FILIAL .and.;
			  FK3->FK3_IDORIG == FK2->FK2_IDFK2 .and. FK3->FK3_TABORI == "FK2"

			SET FILTER TO FK4->FK4_FILIAL == FK3->FK3_FILIAL .and.;
						  FK4->FK4_IDFK4 == FK3->FK3_IDRET

			FK4->(dbGoTop())
			If FK4->(!EoF())
				RecLock("FK4")
				FK4->(DbDelete())
				FK4->(MsUnLock())
			EndIf
	
			RecLock("FK3")
			FK3->(DbDelete())
			FK3->(MsUnLock())
			FK3->(dbSkip())
		EndDo
		If Empty(cFilter)
			FK4->(dbClearFilter())
		Else
			SET FILTER TO &cFilter
		EndIf
	EndIf

	RestArea(aArea)

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra referencias incorretasincorrectas de dala FK6
---------------------------------------------------------------------
/*/
Static Function AtuFK6(cIDFK2 As Character, cFK2Atu As Character, lEstFK6)

	Local aArea		As Array

	Default cIDFK2  := cFK2Atu:= FK2->FK2_IDFK2
	Default lEstFK6	:= .F.

	aArea := GetArea()

	FK6->(dbSetOrder(3))
	If FK6->(dbSeek(FK2->FK2_FILIAL+cIDFK2+"FK2"))
		While FK6->(!EOF()) .and. FK6->FK6_FILIAL == FK2->FK2_FILIAL .and.;
			  FK6->FK6_IDORIG == cIDFK2 .and. FK6->FK6_TABORI == "FK2"

			
			RecLock("FK6")
			If FK6->FK6_TPDOC == "CM" .And. !lEstFK6
				FK6->(DBDelete())
			Else
				FK6->FK6_IDORIG := cFK2Atu
			EndIf
			FK6->(MsUnLock())
			
			FK6->(dbSkip())
		EndDo
	EndIf

	RestArea(aArea)

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra referencias incorretasincorrectas de dala FK7
---------------------------------------------------------------------
/*/
Static Function CleanFK7()

	If !SE2->(dbSeek(STRTRAN(FK7->FK7_CHAVE, "|", "")))
		If FK7->(!EoF())	
			RecLock("FK7")
			FK7->(DbDelete())
			FK7->(MsUnLock())
		EndIf
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    Actualiza Atualizasecuencia de sequencialos dosmovimientos movimentosde dala SE5
---------------------------------------------------------------------
/*/
Static Function SeqRecord(cSeq As Character)

	If SE5->(!EoF())	
		RecLock("SE5",.F.)
		SE5->E5_SEQ    := cSeq
		SE5->(MsUnlock())

		//FlagMov()
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    Verifica sesi existe movimentosmovimientos complementarescomplementarios
---------------------------------------------------------------------
/*/
Static Function ChkMovCompl(cSeq As Character)

	Local aTipoDoc As Array

	Default cSeq := SE5->E5_SEQ

	aTipoDoc := {}

	DO CASE
		CASE SE5->E5_VLJUROS > 0
			aAdd(aTipoDoc,"JR")

		CASE SE5->E5_VLMULTA > 0
			aAdd(aTipoDoc,"MT")

		CASE SE5->E5_VLCORRE > 0
			aAdd(aTipoDoc,"CM")
	ENDCASE
		
	If !Empty(aTipoDoc)
		AtuMovCompl(aTipoDoc,cSeq)
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    AtualizaActualiza oslos movimentosmovimientos complementarescomplementarios
---------------------------------------------------------------------
/*/
Static Function AtuMovCompl(aTipoDoc As Array, cSeq As Character)

	Local aArea 	As Array
	Local cChvParc1 As Character
	Local cChvParc2 As Character
	Local cData		As Character
	Local cIdOrig	As Character
	Local cFil		As Character
	Local nX		As Numeric

	Default aTipoDoc := {}
	Default cSeq	 := SE5->E5_SEQ

	cChvParc1	:= SE5->(E5_PREFIXO + E5_NUMERO + E5_PARCELA + E5_TIPO)
	cChvParc2	:= SE5->(E5_CLIFOR + E5_LOJA)
	cData 		:= DTOS(SE5->E5_DATA)
	cIdOrig		:= SE5->E5_IDORIG
	cFil		:= SE5->E5_FILIAL
	nX			:= 1

	aArea := SE5->(GetArea())

	SE5->(dbSetOrder(2))
	For nX := 1 to Len(aTipoDoc)
		If SE5->(dbSeek(cFil+aTipoDoc[nX]+cChvParc1+cData+cChvParc2))
			If SE5->E5_IDORIG == cIdOrig
				SeqRecord(cSeq)
				CleanSE5()	
			Endif
		EndIf
	Next nX

	RestArea(aArea)

Return Nil

/*/
---------------------------------------------------------------------
    LimpaLimpia referencias de las dasFK FKsen nala SE5 para ejecutar rodarel migrador
---------------------------------------------------------------------
/*/
Static Function CleanSE5()

	Local aArea As Array

	aArea := __SE5->(GetArea())
	__SE5->(dbGoTo(SE5->(Recno())))

	If __SE5->(!EoF())
		RecLock("__SE5",.F.)
		__SE5->E5_IDORIG := ""
		__SE5->E5_TABORI := ""
		__SE5->E5_MOVFKS := ""
		__SE5->(MsUnlock())
	Else
		RestArea(aArea)
	EndIf

Return Nil

/*/
---------------------------------------------------------------------
    DeletaBorra oslos Statements temporariostemporales
---------------------------------------------------------------------
/*/
Static Function DelTmps(oTmp As Object)

	If oTmp != NIL
		oTmp:Destroy()
		oTmp := NIL
	Endif

Return Nil 
/*/
---------------------------------------------------------------------
    Elabora Montala telapantalla para la selecaoselección dodel grupo de empresas
---------------------------------------------------------------------
/*/
Static Function SelCompany() As Character

	Local aRet     As Array
	Local oDlg     As Object
	Local oGrpEmp  As Object
	Local oFilial  As Object
	Local oSay     As Object
	Local cEmp 	   As Character
	Local cFil 	   As Character

	aRet     := {}
	cEmp 	 := "  "
	cFil 	 := "        "

	Define MSDialog  oDlg Title "FA340FIX" From 0, 0 To 170, 326 Pixel

	oDlg:cToolTip := "DefinicaoDefinición dodel grupo de empresas que serase processadoprocesará"
	oDlg:cTitle   := "InicializacaoInicialización dodel ambienteentorno"

	@ 14, 37 Say  oSay Prompt "Informe oel codigocódigo dodel grupo de empresa" Size  55, 20 Of oDlg Pixel
	@ 16, 91 MSGet  oGrpEmp Var  cEmp Size  05, 05 Of oDlg Pixel Picture "@!" 

	@ 34, 37 Say  oSay Prompt "Informe umauna sucursal filialde desteeste grupo de empresas" Size  55, 20 Of oDlg Pixel
	@ 36, 94 MSGet  oFilial Var  cFil Size  05, 05 Of oDlg Pixel Picture "@!" 

	Define SButton From 63, 73 Type 1 Action ( oDlg:End() ) OnStop "Confirma"  Enable Of oDlg
	Activate MSDialog  oDlg Center

	Aadd(aRet,cEmp)
	Aadd(aRet,AllTrim(cFil))

Return aRet


03. 

...

TABLAS UTILIZADAS

Este Rdmake realiza a correção nas tabelas la corrección en las tablas SE5, FKA, FK2, FK6, FK7 e SE2 nos cenários descritos no  y SE2 en los escenarios descritos en el tópico "Exemplo Ejemplo de utilizaçãoutilización".


HTML
<!-- esconder o menu --> 


<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>