Árvore de páginas

01. DATOS GENERALES


Producto

TOTVS Backoffice

Línea de producto: 

Línea Protheus

Segmento:

Backoffice

Módulo:SIGAFAT - Facturación
Función:
RutinaDescripción
FISA057.prwTransmisión de factura - Rondanet
País:Uruguay
Ticket:15464117
Requisito/Story/Issue (informe el requisito vinculado):DMICNS-15544 | DMICNS-17517


02. SITUACIÓN/REQUISITO

Se solicita la creación de dos puntos de entrada (FIS57XML y RFtC01) en la rutina de transmisión de facturas (FISA057) para poder personalizar la generación del XML y las consulta a rondanet.


03. SOLUCIÓN

En la rutina de transmisión de facturas (FISA057), se crean los puntos de entrada FIS57XML y RFtC01 los cuales permitirán personalizar la generación del XML y consultas a rondanet respectivamente.


  1. Aplicar el parche generado para la issue DMICNS-15544.
  2. Configurar en el módulo de facturación (SIGAFAT>>Actualizaciones | Archivos ).
    1. Una condición de pago con baja automática.
    2. Un cliente.
    3. Un producto.
    4. Una TES de salida y de entrada.
  3. Crear una Factura de Salida (NF) (SIGAFAT>Actualizaciones | Facturación | Facturaciones).
    • En el área superior de la pantalla se encuentran los campos que compondrán el encabezado de la factura, informar:
      • Cliente / Proveedor
      • Tienda.
      • Serie.
      • Número del documento.
      • Tipo Doc.
    • En el área central están los ítems de la factura, agregar ítems informando:
      • Producto.
      • Cantidad.
      • Valor Unitario.
      • Valor total.
      • Tipo de entrada (TES). 
  1. Ingrese al módulo de Facturación y por medio de la rutina "Transmisión de facturas" (Actualizaciones | Facturación), se mostrará la pantalla de parámetros. 
  2.  En la pantalla de parámetros se deben complementar las preguntas:
    1. ¿Tipo de e-Fact?:
      1. Salida (e-Facturas / Etickets)
      2. Entrada (Notas de Crédito de e-Factura / eTicket)
    2. ¿Filtra? :
      1. 1-No Transmitidas
      2. 2-Transmitidas
      3. 3-Rechazadas
      4. 4-Sin Filtro
    3. ¿Serie?: Según se definieron en el control de Numeración.
    4. ¿Fecha inicial?: Informe el rango de fechas.
    5. ¿Fecha Final?: Informe el rango de fechas.
  3. Para transmitir, primero utilizar la opción Transmisión y seleccionamos el Rango de Documentos. 

Descripción

Permite personalizar el XML antes de ser transmitido a Rondanet.

Programa Fuente:

FISA057.PRW

Función

FIS57XML

Parámetros

Posición

Tipo

Descripción

1

C-Carácter 

Tipo de doc: 1 para SF2, 2 -para SF1.

2C-Carácter Serie de documento.
C-Carácter 

Número del documento.

4C-Carácter Cliente / Proveedor.
5C-Carácter Tienda del Cliente / Proveedor.

Retorno:

Array personalizado con el XML generado por el RDMake.

return aXML

Descripción

Permite personalizar la consulta de estado de los documentos fiscales vía webservice a Rondanet.

Programa Fuente:

FISA057.PRW

Función

RFTC01

Parámetros

Posición

Tipo

Descripción

1

C-Carácter 

Registro Único Tributario del Emisor

2

N-Numérico

ID Tipo Documento.

C-Carácter 

Serie del documento.

4C-Carácter Número del documento.
5N-NuméricoTipo de llamada (1=Sin interfaz, 2=Con interfaz)

Retorno:

Array con datos del estado del comprobante con dos posibles formatos según el Tipo de llamada.

return xRet

- cRet: String de retorno (nCall == 1)
    cCodRec + cMotivo + cDescri

- aRet: Array de retorno (nCall <> 1)
    aRet[1] => lRet: Indica si se pudo hacer la consulta.
    aRet[2] => cCodRec: Código de la negativa.
    aRet[3] => cMotivo: Motivo de la negativa.
    aRet[4] => cDescri: Descripción.

  • Punto de entrada FIS57XML.

    User Function FIS57XML(cTipo,cSerie,cNota,cClieFor,cLoja) 
    
    Local cString      := ""
    Local cAliasSD1    := "cAliSD1"
    Local cAliasSD2    := "cAliSD2"
    Local cMensCli     := ""
    Local cMensFis     := ""
    Local cNFe         := ""
    Local cWhere	   := "" 
    Local cCodUM	   := ""
    Local cNfOriPe	   := ""
    Local cNfSerPe	   := "" 	
    
    Local lPedido 	   := ""
    Local lQuery       := .F.
    
    Local aNota        := {}
    Local aDest        := {}
    Local aEntrega     := {}
    Local aProd        := {}
    Local acabNF 	   := {}
    Local aPed 		   := {}             
    Local aNfVinc	   := {}       
                                                                        
    Local nX           := 0
    Local nIB		   := 0
    Local nIV		   := 0
    Local nTasaBas 	   := 0
    Local nTasaMin 	   := 0
    Local nMntTasBas   := 0
    Local nBasiva 	   := 0
    Local nXY	  	   := 0	
    local nConAprod    := 0
    local nTkBruto	   := 0
    local cTpFret	   := ""
    Local nPosBas	:=	0
    Local nPos:=0
    Private aColIB	   :={}
    Private aColIVA	   :={}
    Private aColIVAZer :={}
    Private aColIVAIse :={}
    Private aColIVASus :={}
    Private aIB		   :={}
    Private aIVA	   :={}
    Private _cSerie    := ""
    
    DEFAULT cTipo      := PARAMIXB[1]
    DEFAULT cSerie     := PARAMIXB[2]
    DEFAULT cNota      := PARAMIXB[3]                         
    DEFAULT cClieFor   := PARAMIXB[4]
    DEFAULT cLoja      := PARAMIXB[5]
    
    If cTipo == "1"
    	//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    	//³Posiciona NF                                                            ³
    	//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    	dbSelectArea("SF2")
    	dbSetOrder(1)
    	DbGoTop()
    	If DbSeek(xFilial("SF2")+cNota+cSerie+cClieFor+cLoja)		
    		aadd(aCabNF,SF2->F2_SERIE)
    		aadd(aCabNF,SF2->F2_DOC)                  
    		aadd(aCabNF,SF2->F2_EMISSAO)  
    		aadd(aCabNF,SF2->F2_COND) 
    		Fis57Imp()
    		nVlIv:=0
    		For nIV := 1 To Len(aColIVA)
    			nMntTasBas  := &("SF2->F2_VALIMP"+aColIVA[nIV][1]) 
    			nBasIva  	:= &("SF2->F2_BASIMP"+aColIVA[nIV][1])   								
    			If  &("SF2->F2_VALIMP"+aColIVA[nIV][1]) > 0
    				aadd(aIVA,{&("SF2->F2_VALIMP"+aColIVA[nIV][1]),;
    							&("SF2->F2_BASIMP"+aColIVA[nIV][1]),;
    								aColIVA[nIV][2],;
    								aColIVA[nIV][3],;
    								})
    			EndIf					
    		Next
    		aadd(aCabNF,0/*nTasaBas*/)  			  						// aliq basica
    		aadd(aCabNF,0/*nTasaMin*/)    			  						//aliq min
    		aadd(aCabNF,nMntTasBas)  				  						//valor do imposto     7 MntIVATasaBasica
    		aadd(aCabNF,nBasIva)	 				  						//base do iva		   8 MntNetoIVATasaBasica	    
    		aadd(aCabNF,SF2->F2_FRETE+SF2->F2_DESPESA+SF2->F2_SEGURO)  
    		aadd(aCabNF,SF2->F2_ESPECIE) 			 						//tipo da nota
    		aadd(aCabNF,SF2->F2_VALMERC) 			 						//valor da mercadoria s impostos
    		aadd(aCabNF,SF2->F2_VALFAT- Iif(GETMV("MV_DESCSAI")=="2",0,SF2->F2_DESCONT))	//valor total da nota 
    		aadd(aCabNF,SF2->F2_TXMOEDA) //13
    		aadd(aCabNF,SF2->F2_BASIMP1) //14                         	    
    		aadd(aCabNF,"") //15 
    		aadd(aCabNF,"") //16
    		aadd(aCabNF,"") //17
    		aadd(aCabNF,"") //18
    		aadd(aCabNF,"") //19
    		aadd(aCabNF,"") //20
    		_cSerie := SF2->F2_SERIE  
    		//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    		//³Posiciona cliente ou fornecedor                                         ³
    		//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ	
    		If Alltrim(SF2->F2_ESPECIE)=="NDI" .Or. Alltrim(SF2->F2_ESPECIE)=="NCP" .OR. Alltrim(SF2->F2_ESPECIE)=="NDP"
    			dbSelectArea("SA2")
    			dbSetOrder(1)
    			DbSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)
    			aadd(aDest,SA2->A2_PAIS)   
    			aadd(aDest,AllTrim(SA2->A2_CGC))
    			aadd(aDest,Alltrim(SA2->A2_NOME)) 
    			aadd(aDest,MyGetEnd(SA2->A2_END,"SA2")[1])
    			aadd(aDest,AllTrim(SA2->A2_MUN))
    			aadd(aDest,AllTrim(SA2->A2_ESTADO))						
    			aadd(aDest,AllTrim(SA2->A2_TIPO))		
    			aadd(aDest,"")
    			aadd(aDest,"")
    			aadd(aDest,"") 
    			aadd(aDest,"") //Contacto
    		Else
    			dbSelectArea("SA1")
    			dbSetOrder(1)
    			DbSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)		
    			aadd(aDest,SA1->A1_PAIS)  
    			aadd(aDest,AllTrim(SA1->A1_CGC))
    			aadd(aDest,Alltrim(SA1->A1_NOME)) 
    			//aadd(aDest,MyGetEnd(SA1->A1_END,"SA1")[1])
    			aadd(aDest,ALLTRIM(SA1->A1_END))
    			aadd(aDest,AllTrim(SA1->A1_MUN))
    			aadd(aDest,AllTrim(SA2->A2_ESTADO))
    			aadd(aDest,AllTrim(SA1->A1_TIPO))
    			aadd(aDest,AllTrim(SA1->A1_PESSOA))
    			aadd(aDest,Iif(SA1->(FieldPos("A1_VEXP")) >0,AllTrim(SA1->A1_VEXP),"")) 
    			aadd(aDest,Iif(SA1->(FieldPos("A1_TP")) >0,AllTrim(SA1->A1_TP),""))		 
    			aadd(aDest,"") //Contacto
    		EndIf	
    		dbSelectArea("SF2")
    		//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    		//³Pesquisa itens de nota                                                  ³
    		//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ	
    		dbSelectArea("SD2")
    		dbSetOrder(3)	
    		#IFDEF TOP
    			lQuery  := .T.
    			BeginSql Alias cAliasSD2
    				SELECT *
    				FROM %Table:SD2% SD2
    				WHERE
    				SD2.D2_FILIAL = %xFilial:SD2% AND
    				SD2.D2_SERIE = %Exp:SF2->F2_SERIE% AND 
    				SD2.D2_DOC = %Exp:SF2->F2_DOC% AND 
    				SD2.D2_CLIENTE = %Exp:SF2->F2_CLIENTE% AND 
    				SD2.D2_LOJA = %Exp:SF2->F2_LOJA% AND 
    				SD2.%NotDel%
    				ORDER BY %Order:SD2%
    			EndSql
    		#ELSE
    			DbSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE+SF2->F2_CLIENTE+SF2->F2_LOJA)
    		#ENDIF 
    		dbSelectArea(cAliasSD2)
    		While !Eof() .And. xFilial("SD2") == (cAliasSD2)->D2_FILIAL .And.;
    			SF2->F2_SERIE == (cAliasSD2)->D2_SERIE .And.;
    			SF2->F2_DOC == (cAliasSD2)->D2_DOC
    			//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    			//³Verifica as notas vinculadas                                            ³
    			//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    			If !Empty((cAliasSD2)->D2_NFORI) 
    				If (cAliasSD2)->D2_TIPO $ "DBN"
    					dbSelectArea("SD1")
    					dbSetOrder(1)
    					If DbSeek(xFilial("SD1")+(cAliasSD2)->D2_NFORI+(cAliasSD2)->D2_SERIORI+(cAliasSD2)->D2_CLIENTE+(cAliasSD2)->D2_LOJA+(cAliasSD2)->D2_COD+(cAliasSD2)->D2_ITEMORI)
    						dbSelectArea("SF1")
    						dbSetOrder(1)
    						DbSeek(xFilial("SF1")+SD1->D1_DOC+SD1->D1_SERIE+SD1->D1_FORNECE+SD1->D1_LOJA+SD1->D1_TIPO)
    						If SD1->D1_TIPO $ "DB"
    							dbSelectArea("SA1")
    							dbSetOrder(1)
    							DbSeek(xFilial("SA1")+SD1->D1_FORNECE+SD1->D1_LOJA)
    						Else
    							dbSelectArea("SA2")
    							dbSetOrder(1)
    							DbSeek(xFilial("SA2")+SD1->D1_FORNECE+SD1->D1_LOJA)
    						EndIf
    						
    				aadd(aNfVinc,{SD1->D1_EMISSAO,SD1->D1_SERIE,SD1->D1_DOC,IIF(SD1->D1_TIPO $ "DB",IIF(SD1->D1_FORMUL=="S",SM0->M0_CGC,SA1->A1_CGC),IIF(SD1->D1_FORMUL=="S",SM0->M0_CGC,SA2->A2_CGC)),SM0->M0_ESTCOB,SF1->F1_ESPECIE})
    					EndIf
    				Else
    					aOldReg  := SD2->(GetArea())
    					aOldReg2 := SF2->(GetArea())
    					dbSelectArea("SD2")
    					dbSetOrder(3)
    					If DbSeek(xFilial("SD2")+(cAliasSD2)->D2_NFORI+(cAliasSD2)->D2_SERIORI+(cAliasSD2)->D2_CLIENTE+(cAliasSD2)->D2_LOJA+(cAliasSD2)->D2_COD+(cAliasSD2)->D2_ITEMORI)
    						dbSelectArea("SF2")
    						dbSetOrder(1)
    						DbSeek(xFilial("SF2")+SD2->D2_DOC+SD2->D2_SERIE+SD2->D2_CLIENTE+SD2->D2_LOJA)
    						If !SD2->D2_TIPO $ "DB"
    							dbSelectArea("SA1")
    							dbSetOrder(1)
    							DbSeek(xFilial("SA1")+SD2->D2_CLIENTE+SD2->D2_LOJA)
    						Else
    							dbSelectArea("SA2")
    							dbSetOrder(1)
    							DbSeek(xFilial("SA2")+SD2->D2_CLIENTE+SD2->D2_LOJA)
    						EndIf
    						aadd(aNfVinc,{SF2->F2_EMISSAO,SD2->D2_SERIE,SD2->D2_DOC,SM0->M0_CGC,SM0->M0_ESTCOB,SF2->F2_ESPECIE})
    					EndIf
    					RestArea(aOldReg)
    					RestArea(aOldReg2)
    				EndIf
    			EndIf
    			//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    			//³Obtem os dados do produto                                               ³
    			//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ			
    			dbSelectArea("SB1")
    			dbSetOrder(1)
    			DbSeek(xFilial("SB1")+(cAliasSD2)->D2_COD)
    			cMensFis:=""
    			lPedido:=.F.
    			cTpFret := ""
    			If !Empty((cAliasSD2)->D2_PEDIDO)
    				dbSelectArea("SC5")
    				dbSetOrder(1)
    				if DbSeek(xFilial("SC5")+(cAliasSD2)->D2_PEDIDO)
    					cTpFret := SC5->C5_TPFRETE
    					if SC5->C5_TPFRETE == "C"
    						cTpFret := "CIF"
    					elseif SC5->C5_TPFRETE == "F"
    						cTpFret := "FOB"         
    					else
    						cTpFret := "   "         
    					endif
    					dbSelectArea("SC6")
    					dbSetOrder(1)
    					DbSeek(xFilial("SC6")+(cAliasSD2)->D2_PEDIDO+(cAliasSD2)->D2_ITEMPV+(cAliasSD2)->D2_COD)
    					If !AllTrim(SC5->C5_MENNOTA) $ cMensCli
    						cMensCli += AllTrim(SC5->C5_MENNOTA)
    					EndIf
    					If !Empty(SC5->C5_MENPAD) .And. !AllTrim(FORMULA(SC5->C5_MENPAD)) $ cMensFis
    						cMensFis += AllTrim(FORMULA(SC5->C5_MENPAD))
    					EndIf			
    					lPedido:=.T.
    				endif	                
    			EndIf     
    			aadd(aPed,AllTrim(SA1->A1_CGC))                        //1
    			aadd(aPed,AllTrim(SA1->A1_PAIS))                       //2
    			aadd(aPed,MyGetEnd(SA1->A1_ENDENT,"SA2")[1])           //3
    			aadd(aPed,cMensFis)			                           //4
    			cMoeda:='GetMV("MV_SIMB'+Alltrim(str(SF2->F2_MOEDA))+'")'
    			If(SYF->(Dbseek(xFilial("SYF")+&cMoeda)))              //5
    				aadd(aPed,SYF->YF_MOEDA)
    			Else
    				aadd(aPed,"UYU")                                   //5
    		   	EndIf                                           
    		   	aadd(aPed,Iif(FieldPos("F2_IDIOMA") > 0,(SF2->F2_IDIOMA),""))                           //6
    			aadd(aPed,Iif(SE4->(Dbseek(xFilial("SE4")+SF2->F2_COND)),SE4->E4_FMPAGEX,""))           //7     
    			aadd(aPed,SF2->F2_VALMERC)																//8
    			aadd(aPed,SC6->C6_NFORI)                                                                //9
    			aadd(aPed,SC6->C6_SERIORI)                                                              //10
    			aadd(aPed,cTpFret)                                                                      //11
    			dbSelectArea(cAliasSD2)	
    			While !Eof() .And. xFilial("SD2") == (cAliasSD2)->D2_FILIAL .And.;
    				SF2->F2_SERIE == (cAliasSD2)->D2_SERIE .And.;
    				SF2->F2_DOC == (cAliasSD2)->D2_DOC                                                     
    				dbSelectArea("SB1")
    				dbSetOrder(1)
    				DbSeek(xFilial("SB1")+(cAliasSD2)->D2_COD) 				
        			nX ++		
    		 		aadd(aProd,	{Len(aProd)+1,;	  					   
    							SB1->B1_DESC,;    		//2
    							(cAliasSD2)->D2_QUANT,; //3
    							SB1->B1_UM,; 			//4
    							(cAliasSD2)->D2_PRCVEN,;//5
    							(cAliasSD2)->D2_TOTAL}) //6
    					// Basico
    				nBAliq:= 0
    				nBBas := 0
    				nBVal := 0         
    				cBClasq:=""
    					 //Minimo
    				nMAliq:=0
    				nMBas :=0
    				nMVal :=0   
    				cMClasq:=""
    					//Exportação
    				nEAliq:=0
    				nEBas :=0
    				nEVal :=0
    				cEClasq:=""
    					//Outros
    				nOAliq:=0
    				nOBas :=0
    				nOVal :=0
    				cOClasq:=""
    				nPos:=0                  
    				For nPos:=1 To Len(aColIVA)  
    					dbSelectArea("SFC")
    					dbSetOrder(2)						
    			    		If DbSeek(xFilial("SFC")+(cAliasSD2)->D2_TES+aColIVA[nPos][4])
    				
    						If aColIVA[nPos][2] == "1"  //Basica
    					   		If nBBas =0
    				   		   		nBAliq:= &(cAliasSD2+"->D2_ALQIMP"+aColIVA[nPos][1])
    					   	   			cBClasq:= aColIVA[nPos][2]
    					   		EndIf
    					   		nBBas :=nBBas+&(cAliasSD2+"->D2_BASIMP"+aColIVA[nPos][1])
    							nBVal :=nBVal+&(cAliasSD2+"->D2_VALIMP"+aColIVA[nPos][1])
    						 ElseIf aColIVA[nPos][2] == "2" //Minima
    				   			If nMBas=0
    				   				nMAliq:=&(cAliasSD2+"->D2_ALQIMP"+aColIVA[nPos][1])
    				   				cMClasq:= aColIVA[nPos][2]
    							EndIf
    							nMBas :=nMBas+&(cAliasSD2+"->D2_BASIMP"+aColIVA[nPos][1])
    							nMVal :=nMVal+&(cAliasSD2+"->D2_VALIMP"+aColIVA[nPos][1])
    						ElseIf aColIVA[nPos][2] $ "345"   //Exportação
    							If nEBas=0
    								nEAliq:=&(cAliasSD2+"->D2_ALQIMP"+aColIVA[nPos][1])
    								cEClasq:= aColIVA[nPos][2]
    							EndIf
    							nEBas :=nEBas+&(cAliasSD2+"->D2_BASIMP"+aColIVA[nPos][1])
    							nEVal :=nEVal+&(cAliasSD2+"->D2_VALIMP"+aColIVA[nPos][1])
    						Else
    							IF 	nOBas=0
    								nOAliq:=&(cAliasSD2+"->D2_ALQIMP"+aColIVA[nPos][1])
    								cOClasq:= aColIVA[nPos][2]
    						  	EndIf
    							nOBas :=nOBas+&(cAliasSD2+"->D2_BASIMP"+aColIVA[nPos][1])
    							nOVal :=nOVal+&(cAliasSD2+"->D2_VALIMP"+aColIVA[nPos][1])
    						EndIf                   
    					EndIf
    				Next
    				nAliq:=0
    				nBas:=0
    				nVal:=0        
    				cClas:= "3"
    				If 	nBVal>0     
    					nAliq:=nBAliq
    					nBas :=nBBas
    					nVal :=nBVal+nMVal +nEVal 						
    					cClas:=cBClasq
    				ElseIf nMVal>0
    					nAliq:=nMAliq
    					nBas :=nMBas
    					nVal :=nMVal 
    					cClas:=cMClasq
    				ElseIF nEVal>0
    					nAliq:=nEAliq
    					nBas :=nEBas
    					nVal :=nEVal
    					cClas:=cEClasq	
    				ElseIF nOVal >0      
    					nAliq:=nOAliq
    					nBas :=nOBas
    					nVal :=nOVal
    					cClas:="3"
    				EndIf
    	           	aadd(aProd[Len(aProd)],cClas) //TPCLASS           //7
    		        aadd(aProd[Len(aProd)],nBas)   //8            
    		        aadd(aProd[Len(aProd)],nAliq)   //9             
    		        aadd(aProd[Len(aProd)],nVal)   //10
    		     	aadd(aProd[Len(aProd)],(cAliasSD2)->D2_NFORI)  	//11
    				aadd(aProd[Len(aProd)],(cAliasSD2)->D2_SERIORI) //12  
    				aadd(aProd[Len(aProd)],(cAliasSD2)->D2_ESPECIE) //13
    				aadd(aProd[Len(aProd)],(cAliasSD2)->D2_EMISSAO) //14
    				aadd(aProd[Len(aProd)],DescItem(SB1->B1_COD))	//15 
    				aadd(aProd[Len(aProd)],(cAliasSD2)->D2_COD) 	//16
    	            aadd(aProd[Len(aProd)],(cAliasSD2)->D2_ITEM) 	//17 
    	         	aadd(aProd[Len(aProd)],Iif(GETMV("MV_DESCSAI")=="2",0,(cAliasSD2)->D2_DESCON)) //18                
    	      		aadd(aProd[Len(aProd)],"") 	//19                	      		
    	      		aadd(aProd[Len(aProd)],"") //20               	      			      		
    	      		aadd(aProd[Len(aProd)],"") //21              	      			      		
    	      		aadd(aProd[Len(aProd)],"") 			//22
    	      		aadd(aProd[Len(aProd)],"") 		//23
    				dbSelectArea(cAliasSD2)
    				dbSkip()
    			EndDo	
    	    EndDo
    	    If lQuery
    	    	dbSelectArea(cAliasSD2)
    	    	dbCloseArea()
    	    	dbSelectArea("SD2")
    	    EndIf
    	EndIf
    Else
    	dbSelectArea("SF1")
    	dbSetOrder(1)
    	If DbSeek(xFilial("SF1")+cNota+cSerie+cClieFor+cLoja)
    		aadd(aCabNF,SF1->F1_SERIE)
    		aadd(aCabNF,SF1->F1_DOC)                  
    		aadd(aCabNF,SF1->F1_EMISSAO)  
    		aadd(aCabNF,SF1->F1_COND) 
    		Fis57Imp()
    		nVlIv:=0            
    		For nIV := 1 To Len(aColIVA)
    			nMntTasBas  := &("SF1->F1_VALIMP"+aColIVA[nIV][1]) 
    			nBasIva  	:= &("SF1->F1_BASIMP"+aColIVA[nIV][1])   						
    			If  &("SF1->F1_VALIMP"+aColIVA[nIV][1]) > 0
    				aadd(aIVA,{&("SF1->F1_VALIMP"+aColIVA[nIV][1]),;
    							&("SF1->F1_BASIMP"+aColIVA[nIV][1]),;
    								aColIVA[nIV][2],;
    								aColIVA[nIV][3],;
    								})
    			EndIf					
    		Next 	       
    		aadd(aCabNF,0/*nTasaBas*/)    								// aliq basica
    		aadd(aCabNF,0/*nTasaMin*/)    								//aliq min
    		aadd(aCabNF,nMntTasBas)  	  								//valor do imposto    7 MntIVATasaBasica
    		aadd(aCabNF,nBasIva)	 	  								//base do iva		  8	MntNetoIVATasaBasica	    
    		aadd(aCabNF,SF1->F1_FRETE+SF1->F1_DESPESA+SF1->F1_SEGURO)  
    		aadd(aCabNF,SF1->F1_ESPECIE) 								//tipo da nota
    		aadd(aCabNF,SF1->F1_VALMERC) 								//valor da mercadoria s impostos
    		aadd(aCabNF,SF1->F1_VALBRUT-Iif(GETMV("MV_DESCSAI")=="2",0,SF1->F1_DESCONT)	) 							//valor total da nota 
    		aadd(aCabNF,SF1->F1_TXMOEDA)	  
    		aadd(aCabNF,SF1->F1_BASIMP1)   //14
    		aadd(aCabNF,"") //15 
    		aadd(aCabNF,"") //16
    		aadd(aCabNF,"") //17
    		aadd(aCabNF,"") //18
    		aadd(aCabNF,"") //19
    		aadd(aCabNF,"") //20
    		_cSerie := SF1->F1_SERIE          
    		//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    		//³Posiciona cliente ou fornecedor                                         ³
    		//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ		
    			If SF1->F1_TIPO $ "DB|N|C"  .Or. Alltrim(SF1->F1_ESPECIE)=="NCI" .Or. Alltrim(SF1->F1_ESPECIE)=="NCC"  
    			    If Alltrim(SF1->F1_ESPECIE)=="NCI"  .And. Alltrim(SF1->F1_TIPO)<>"N" .And.Alltrim(SF1->F1_TIPO)<>"C"
    				    dbSelectArea("SA2")
    					dbSetOrder(1)
    					DbSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)
    					aadd(aDest,AllTrim(SA2->A2_PAIS))
    					aadd(aDest,AllTrim(SA2->A2_CGC))
    					aadd(aDest,SA2->A2_NOME)					
    					aadd(aDest,MyGetEnd(SA2->A2_END,"SA1")[1])
    					aadd(aDest,AllTrim(SA2->A2_MUN))
    					aadd(aDest,Alltrim(RetCodPais(SA1->A1_PAIS,.T.)))
    			    	aadd(aDest,AllTrim(SA2->A2_TIPO))
    					aadd(aDest,"")
    					aadd(aDest,"")
    					aadd(aDest,"")
    					aadd(aDest,"") //Contacto
    			    ElseIf (SF1->F1_TIPO $ "N" .AND. Alltrim(SF1->F1_ESPECIE)=="NF") .OR. (SF1->F1_TIPO $ "C" .AND. Alltrim(SF1->F1_ESPECIE)=="NCI")
    			    	dbSelectArea("SA2")
    					dbSetOrder(1)
    					DbSeek(xFilial("SA2")+SF1->F1_FORNECE+SF1->F1_LOJA)
    					aadd(aDest,AllTrim(SA2->A2_PAIS))
    					aadd(aDest,AllTrim(SA2->A2_CGC))
    					aadd(aDest,SA2->A2_NOME)					
    					aadd(aDest,MyGetEnd(SA2->A2_END,"SA1")[1])
    					aadd(aDest,AllTrim(SA2->A2_MUN))
    					aadd(aDest,Alltrim(RetCodPais(SA2->A2_PAIS,.T.)))
    			    	aadd(aDest,AllTrim(SA2->A2_TIPO))
    					aadd(aDest,"")
    					aadd(aDest,"")
    					aadd(aDest,"")
    					aadd(aDest,"") //Contacto
    			    Else		
    					dbSelectArea("SA1")
    					dbSetOrder(1)
    					DbSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA)
    					aadd(aDest,AllTrim(SA1->A1_PAIS))
    					aadd(aDest,AllTrim(SA1->A1_CGC))
    					aadd(aDest,SA1->A1_NOME)
    					aadd(aDest,Alltrim(SA1->A1_END))
    					aadd(aDest,AllTrim(SA1->A1_MUN))
    					aadd(aDest,Alltrim(RetCodPais(SA1->A1_PAIS,.T.)))	
    					aadd(aDest,AllTrim(SA1->A1_TIPO))
    					aadd(aDest,AllTrim(SA1->A1_PESSOA))
    					aadd(aDest,Iif(SA1->(FieldPos("A1_VEXP")) >0,AllTrim(SA1->A1_VEXP),"")) 
    					aadd(aDest,Iif(SA1->(FieldPos("A1_TP")) >0,AllTrim(SA1->A1_TP),""))		 
    					aadd(aDest,"") //Contacto
    				EndIf	
    				dbSelectArea("SD1")
    				dbSetOrder(1)	
    				#IFDEF TOP
    					lQuery  := .T.
    					BeginSql Alias cAliasSD1
    					SELECT *
    					FROM %Table:SD1% SD1
    					WHERE
    					SD1.D1_FILIAL = %xFilial:SD1% AND
    					SD1.D1_SERIE = %Exp:SF1->F1_SERIE% AND 
    					SD1.D1_DOC = %Exp:SF1->F1_DOC% AND 
    					SD1.D1_FORNECE = %Exp:SF1->F1_FORNECE% AND 
    					SD1.D1_LOJA = %Exp:SF1->F1_LOJA% AND 
    					SD1.%NotDel%
    					ORDER BY %Order:SD1%
    				EndSql
    			#ELSE
    				DbSeek(xFilial("SD1")+SF1->F1_DOC+SF1->F1_SERIE+SF1->F1_FORNECE+SF1->F1_LOJA)
    			#ENDIF
    			While !Eof() .And. xFilial("SD1") == (cAliasSD1)->D1_FILIAL .And.;
    				SF1->F1_SERIE == (cAliasSD1)->D1_SERIE .And.;
    				SF1->F1_DOC == (cAliasSD1)->D1_DOC .And.;
    				SF1->F1_FORNECE == (cAliasSD1)->D1_FORNECE .And.;
    				SF1->F1_LOJA ==  (cAliasSD1)->D1_LOJA				
    				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    				//³Verifica as notas vinculadas                                            ³
    				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ			
    				If !Empty((cAliasSD1)->D1_NFORI) 
    					If !(cAliasSD1)->D1_TIPO $ "DBN"
    						aOldReg  := SD1->(GetArea())
    						aOldReg2 := SF1->(GetArea())
    						dbSelectArea("SD1")
    						dbSetOrder(1)
    						If DbSeek(xFilial("SD1")+(cAliasSD1)->D1_NFORI+(cAliasSD1)->D1_SERIORI+(cAliasSD1)->D1_FORNECE+(cAliasSD1)->D1_LOJA+(cAliasSD1)->D1_COD+(cAliasSD1)->D1_ITEMORI)
    							dbSelectArea("SF1")
    							dbSetOrder(1)
    							DbSeek(xFilial("SF1")+SD1->D1_DOC+SD1->D1_SERIE+SD1->D1_FORNECE+SD1->D1_LOJA+SD1->D1_TIPO)
    							If SD1->D1_TIPO $ "DB"
    								dbSelectArea("SA1")
    								dbSetOrder(1)
    								DbSeek(xFilial("SA1")+SD1->D1_FORNECE+SD1->D1_LOJA)
    							Else
    								dbSelectArea("SA2")
    								dbSetOrder(1)
    								DbSeek(xFilial("SA2")+SD1->D1_FORNECE+SD1->D1_LOJA)
    							EndIf
    							aadd(aNfVinc,{SD1->D1_EMISSAO,SD1->D1_SERIE,SD1->D1_DOC,IIF(SD1->D1_TIPO $ "DB",IIF(SD1->D1_FORMUL=="S",SM0->M0_CGC,SA1->A1_CGC),IIF(SD1->D1_FORMUL=="S",SM0->M0_CGC,SA2->A2_CGC)),SM0->M0_ESTCOB,SF1->F1_ESPECIE})
    						EndIf
    						RestArea(aOldReg)
    						RestArea(aOldReg2)
    					Else					
    						dbSelectArea("SD2")
    						dbSetOrder(3)
    						If DbSeek(xFilial("SD2")+(cAliasSD1)->D1_NFORI+(cAliasSD1)->D1_SERIORI+(cAliasSD1)->D1_FORNECE+(cAliasSD1)->D1_LOJA+(cAliasSD1)->D1_COD+(cAliasSD1)->D1_ITEMORI)
    							dbSelectArea("SF2")
    							dbSetOrder(1)
    							DbSeek(xFilial("SF2")+SD2->D2_DOC+SD2->D2_SERIE+SD2->D2_CLIENTE+SD2->D2_LOJA)
    							If !SD2->D2_TIPO $ "DB"
    								dbSelectArea("SA1")
    								dbSetOrder(1)
    								DbSeek(xFilial("SA1")+SD2->D2_CLIENTE+SD2->D2_LOJA)    
    							Else
    								dbSelectArea("SA2")
    								dbSetOrder(1)
    								DbSeek(xFilial("SA2")+SD2->D2_CLIENTE+SD2->D2_LOJA)
    							EndIf							
    							aadd(aNfVinc,{SD2->D2_EMISSAO,SD2->D2_SERIE,SD2->D2_DOC,SM0->M0_CGC,SM0->M0_ESTCOB,SF2->F2_ESPECIE})							
    						EndIf
    					EndIf				
    				EndIf			 							 			
    				aadd(aPed,AllTrim(SA1->A1_CGC))                
    				aadd(aPed,AllTrim(SA1->A1_PAIS))               
    				aadd(aPed,MyGetEnd(SA1->A1_ENDENT,"SA2")[1])   
    				aadd(aPed,cMensFis)                            
    				cMoeda:='GetMV("MV_SIMB'+Alltrim(str(SF1->F1_MOEDA))+'")'
    				If(SYF->(Dbseek(xFilial("SYF")+&cMoeda)) )
    					aadd(aPed,SYF->YF_MOEDA)       
    				Else
    					aadd(aPed,"UYU")                 
    				EndIf
    				aadd(aPed,SF1->F1_IDIOMA)
    				aadd(aPed,Iif(SE4->(Dbseek(xFilial("SE4")+SF1->F1_COND)),SE4->E4_FMPAGEX,"")    )  
    				aadd(aPed,SF1->F1_VALMERC)   
    				aadd(aPed,SC6->C6_NFORI)   
    				aadd(aPed,SC6->C6_SERIORI)				
    				aadd(aPed,"")			
    				//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    				//³Obtem os dados do produto                                               ³
    				//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ			
    				aAliasAnt:=GetArea()
    				dbSelectArea("SAH")
    				dbSetOrder(1)
    		        If SAH->(DbSeek(xFilial("SAH")+(cAliasSD1)->D1_UM) )
    		        	 cCodUM := AH_CODUMFEX
    				Else  				
    					cCodUM	:=	"98"    
    				EndI
    			   RestArea(aAliasAnt)
    				While (cAliasSD1)->(!Eof()) .And. xFilial("SD1") == (cAliasSD1)->D1_FILIAL .And.;
    					SF1->F1_SERIE == (cAliasSD1)->D1_SERIE .And.;
    					SF1->F1_DOC == (cAliasSD1)->D1_DOC 	
    					dbSelectArea("SB1")
    					dbSetOrder(1)
    					DbSeek(xFilial("SB1")+(cAliasSD1)->D1_COD) 				
    					nX ++
    			 		aadd(aProd,	{Len(aProd)+1,;		   				   
    								SB1->B1_DESC,;          //2
    								(cAliasSD1)->D1_QUANT,; //3
    								SB1->B1_UM,;            //4
    								(cAliasSD1)->D1_VUNIT,; //5
    								(cAliasSD1)->D1_TOTAL}) //6
    						// Basico
    					nBAliq:= 0
    					nBBas := 0
    					nBVal := 0
    					 //Minimo
    					nMAliq:=0
    					nMBas :=0
    					nMVal :=0
    					//Exportação
    					nEAliq:=0
    					nEBas :=0
    					nEVal :=0
    					//Outros
    					nOAliq:=0
    					nOBas :=0
    					nOVal :=0
    					nPos:=0                  
    					For nPos:=1 To Len(aColIVA)  
    						dbSelectArea("SFC")
    						dbSetOrder(2)						
    				    		If DbSeek(xFilial("SFC")+(cAliasSD1)->D1_TES+aColIVA[nPos][4])
    							If aColIVA[nPos][2] == "1"  //Basica
    						   		If nBBas =0
    				   			   		nBAliq:= &(cAliasSD1+"->D1_ALQIMP"+aColIVA[nPos][1])
    					   		   			cBClasq:= aColIVA[nPos][2]
    						   		EndIf
    						   		nBBas :=nBBas+&(cAliasSD1+"->D1_BASIMP"+aColIVA[nPos][1])
    								nBVal :=nBVal+&(cAliasSD1+"->D1_VALIMP"+aColIVA[nPos][1])
    							 ElseIf aColIVA[nPos][2] == "2" //Minima
    					   			If nMBas=0
    					   				nMAliq:=&(cAliasSD1+"->D1_ALQIMP"+aColIVA[nPos][1])
    				   					cMClasq:= aColIVA[nPos][2]
    								EndIf
    								nMBas :=nMBas+&(cAliasSD1+"->D1_BASIMP"+aColIVA[nPos][1])
    								nMVal :=nMVal+&(cAliasSD1+"->D1_VALIMP"+aColIVA[nPos][1])
    							ElseIf aColIVA[nPos][2] $ "345"   //Exportação
    								If nEBas=0
    									nEAliq:=&(cAliasSD1+"->D1_ALQIMP"+aColIVA[nPos][1])
    									cEClasq:= aColIVA[nPos][2]
    								EndIf
    								nEBas :=nEBas+&(cAliasSD1+"->D1_BASIMP"+aColIVA[nPos][1])
    								nEVal :=nEVal+&(cAliasSD1+"->D1_VALIMP"+aColIVA[nPos][1])
    							Else
    								IF 	nOBas=0
    									nOAliq:=&(cAliasSD1+"->D1_ALQIMP"+aColIVA[nPos][1])
    									cOClasq:= aColIVA[nPos][2]
    							  	EndIf
    								nOBas :=nOBas+&(cAliasSD1+"->D1_BASIMP"+aColIVA[nPos][1])
    								nOVal :=nOVal+&(cAliasSD1+"->D1_VALIMP"+aColIVA[nPos][1])
    							EndIf                   
    						EndIf
    					Next					
    				nAliq:=0
    				nBas:=0
    				nVal:=0    
    				cClas:="3"
    				If 	nBVal>0     
    					nAliq:=nBAliq
    					nBas :=nBBas
    					nVal :=nBVal						
    					cClas:=cBClasq
    				ElseIf nMVal>0
    					nAliq:=nMAliq
    					nBas :=nMBas
    					nVal :=nMVal 
    					cClas:=cMClasq
    				ElseIF nEVal>0
    					nAliq:=nEAliq
    					nBas :=nEBas
    					nVal :=nEVal
    					cClas:=cEClasq	
    				ElseIF nOVal >0      
    					nAliq:=nOAliq
    					nBas :=nOBas
    					nVal :=nOVal
    					cClas:="3"
    				EndIf
    					dbSelectArea("SFC")
    					dbSetOrder(2)						
    					DbSeek(xFilial("SFC")+(cAliasSD1)->D1_TES)
    					If SFC->FC_INCNOTA == '3'
    					   nTkBruto ++
    					EndIf 
    		    	    aadd(aProd[Len(aProd)],cClas) //TPCLASS           //7	                    
    			        aadd(aProd[Len(aProd)],nBas)  //8
    			        aadd(aProd[Len(aProd)],nAliq)  //9
    			        aadd(aProd[Len(aProd)],nVal)  //10
    		            aadd(aProd[Len(aProd)],(cAliasSD1)->D1_NFORI)	//11
    					aadd(aProd[Len(aProd)],(cAliasSD1)->D1_SERIORI) //12
    					aadd(aProd[Len(aProd)],(cAliasSD1)->D1_ESPECIE) //13
    					aadd(aProd[Len(aProd)],(cAliasSD1)->D1_EMISSAO) //14
    					aadd(aProd[Len(aProd)],DescItem(SB1->B1_COD))	//15 
    					aadd(aProd[Len(aProd)],(cAliasSD1)->D1_COD) 	//16
    		            aadd(aProd[Len(aProd)],(cAliasSD1)->D1_ITEM) 	//17
    		            aadd(aProd[Len(aProd)],Iif(GETMV("MV_DESCSAI")=="2",0,(cAliasSD1)->D1_VALDESC)) 	//18                  		
    		      		aadd(aProd[Len(aProd)],(cAliasSD1)->D1_TOTAL) 	//19 
    		      		aadd(aProd[Len(aProd)],"") //20               	      			      		
    		      		aadd(aProd[Len(aProd)],"") //21              	      			      		
    	    	  		aadd(aProd[Len(aProd)],"") 			//22
    	      			aadd(aProd[Len(aProd)],"") 		//23		      		               
    					dbSelectArea(cAliasSD1)
    					dbSkip()
    				EndDo
    		    EndDo
    		    If lQuery
    		    	dbSelectArea(cAliasSD1)
    		    	dbCloseArea()
    		    	dbSelectArea("SD1")
    		    EndIf     
    		EndIf
    	EndIf
    EndIf   
    //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
    //³Função que gera a string com conteúdo do XML.³
    //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
    If !Empty(aCabNF)
    	aXML := GeraXML(aCabNF,aDest,aPed,aProd,Paramixb[1],cMensCli,nTkBruto)
    EndIf
    Return(aXML)
  • Ejemplo de uso RFTC01.


    User Function RFTC01(cRUTEmi, nIdTipo, cSerDoc, nNumDoc, nCall, lAuto,cVerWs,cUser,cPass)
    	
    	 
    Local Ret		:= Nil
    Local cRet		:= ""
    Local aRet		:= {}
    Local cStatus		:= ""
    Local cMensagem	:= ""
    Local lAvisos		:= !IsBlind()
    Local lRet		:= .F.
    Local oRet		:= Nil
    Local cCodRec		:= ""
    Local cMotivo		:= ""
    Local cDescri		:= ""
    Local aParam		:= {}
    Local cWsVersao		:= GetNewPar("MV_URUVWS","3.1")	//Versao 2.0 (antiga) ou Versao 3.1 (nova)    
    Local cAviso:=" "
    Local cWarning:=""            
    Local cWsCustId		:= GetNewPar("MV_URUSUCU","1")
    Local cWsUser			:= GetNewPar("MV_URUUSER","")
    Local cWsPass			:= GetNewPar("MV_URUPASW","")
    	
    Private 	cPerg		:= PadR("RFATC01", 10)
    
    Default nCall		:= 1	
    Default lAuto		:= .F.
    	
    If !Empty(cRUTEmi)
    	AAdd(aParam, cRUTEmi)
    	AAdd(aParam, nIdTipo)
    	AAdd(aParam, cSerDoc)
    	AAdd(aParam, nNumDoc)
    EndIf
    
    If Len(aParam) > 0
    	mv_par01 := aParam[1]
    	mv_par02 := aParam[2]
    	mv_par03 := aParam[3]
    	mv_par04 := aParam[4]
    Else
    	ValidPerg()
    	If !Pergunte(cPerg, .T.)
    		Return ""
    	EndIf
    EndIf
    	
    	
    _cRUTEmi := AllTrim(mv_par01)
    _nIdTipo := mv_par02
    _cSerDoc := AllTrim(mv_par03)
    _nNumDoc := mv_par04
    _cWsUser := cUser
    _cWsPass := cPass
    _cVer    := cVerWs
        
    If cWsVersao $ "2.0"
    	MsgInfo(STR0148)
    	lRet := .F.
    ElseIf  cWsVersao $ "3.1"                  
    	oWS3 := WSRondanetService():New()
    	oWS3:_URL 				:= GetNewPar("MV_IPWSRON","")
    	oWS3:crutEmisor 		:= Alltrim(SM0->M0_CGC)
    	oWS3:cusuario			:= cWsUser
    	oWS3:cpassword 			:= cWsPass
    	oWS3:nnumeroComprobante	:= _nNumDoc
    	oWS3:ntipoComprobante	:=_nIdTipo
    	oWS3:cserie	:=_cSerDoc
    
    	If oWS3:obtenerEstadoComprobanteDGI()//(cRUTEmi,usuario,senha, nIdTipo, cSerDoc, nNumDoc)      
    		lRet	:= .T.
    		oRet	:= XMLParser(oWS3:cReturn,'_',@cAviso,@cWarning)
    	Else
    		lRet	:= .F.
    		cSvcError 	:= GetWSCError()
    	  	If Left(cSvcError, 9) == "WSCERR048"
    	   		cSoapFCode 	:= AllTrim(SubStr(GetWSCError(3), 1, At(":", GetWSCError(3)) - 1))
    			cSoapFDescr := AllTrim(SubStr(GetWSCError(3), At(":", GetWSCError(3)) + 1, Len(GetWSCError(3))))
    	   		cMensagem 	:= Time() + " - Erro na consulta (WS3 - Método obtenergetEstadoComprobanteDGI:" + cSoapFDescr + " -> " + cSoapFCode
    	  	Else
    	   		cMensagem := Time() + " - " + "Sem comunicação com o webservice 2: " + If(oWS3:_URL <> Nil, oWS3:_URL, "")
    		EndIf
    	  	If Empty(cAviso) .And. Empty(cWarning)
    	  	   //	Aviso("TOTVS", cMensagem, {"OK"}, 3)
    	  	   ConOut(cMensagem)
    	  	Else
    	  		ConOut(cMensagem)
    	  	EndIf
    	EndIf
    	
        	If oRet <> Nil    	
       		If AT("CODIGO", oWS3:cReturn) > 0
        			cCodRec :=   oRet :_RESPUESTA_WS:_CODIGO:TEXT      // oRet:_ESTADO
        			cMotivo :=   oRet :_RESPUESTA_WS:_CODIGO:TEXT     // oRet:_MOTIVO
        			cDescri :=   oRet :_RESPUESTA_WS:_DESCRIPCION:TEXT
        		Else
    	    		cCodRec :=   oRet:_RESPUESTA_WS:_ESTADOCOMPROBANTE:_ESTADO:TEXT      // oRet:_ESTADO
        			cMotivo :=    oRet:_RESPUESTA_WS:_ESTADOCOMPROBANTE:_MOTIVO:TEXT     // oRet:_MOTIVO
        			cDescri :=   oRet:_RESPUESTA_WS:_ESTADOCOMPROBANTE:_DETALLE:TEXT   // oRet:_DETALHE	
        		EndiF
    	Else
        		If !lAvisos .And. !lAuto
    	    		MsgAlert("Não foi possível realizar a consulta (WS3)! ")
    	    	Else
    	    		ConOut("Não foi possível realizar a consulta (WS3)! ")
    	   	EndIf
            EndIf    
    EndIf
    If nCall == 1
    	cRet := cCodRec + " / " + cMotivo + " / " + cDescri
        	xRet := cRet
    Else
        AAdd(aRet, lRet) 
        AAdd(aRet, cCodRec)
        AAdd(aRet, cMotivo)
        AAdd(aRet, cDescri)	    
        xRet := {}
        xRet := AClone(aRet)	    
    EndIf
    	
    Return xRet


04. INFORMACIÓN ADICIONAL

Los antiguos puntos de entrada (RFATC01y FISA057xml) ahora pertenecen al RPO padrón, en que caso de requerir usar los RdMake's debe renombrar las funciones indicando estos 2 nuevos puntos (RFTC01y FIS057xml). Esto es válido apartir del release 12.1.33, pues, los RPOs ahora son separados en padrón y custom.



05. ASUNTOS RELACIONADOS

  • No aplica.