01. DATOS GENERALES
Producto | TOTVS Backoffice | ||||
---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||
Segmento: | Backoffice | ||||
Módulo: | SIGAFAT - Facturación | ||||
Función: |
| ||||
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.
- Aplicar el parche generado para la issue DMICNS-15544.
- Configurar en el módulo de facturación (SIGAFAT>>Actualizaciones | Archivos ).
- Una condición de pago con baja automática.
- Un cliente.
- Un producto.
- Una TES de salida y de entrada.
- 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).
- En el área superior de la pantalla se encuentran los campos que compondrán el encabezado de la factura, informar:
- 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.
- En la pantalla de parámetros se deben complementar las preguntas:
- ¿Tipo de e-Fact?:
- Salida (e-Facturas / Etickets)
- Entrada (Notas de Crédito de e-Factura / eTicket)
- ¿Filtra? :
- 1-No Transmitidas
- 2-Transmitidas
- 3-Rechazadas
- 4-Sin Filtro
- ¿Serie?: Según se definieron en el control de Numeración.
- ¿Fecha inicial?: Informe el rango de fechas.
- ¿Fecha Final?: Informe el rango de fechas.
- ¿Tipo de e-Fact?:
- 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 |
| ||||||||||||||||||
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 |
| ||||||||||||||||||
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) - aRet: Array de retorno (nCall <> 1) |
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.