Totvs custom tabs box items |
---|
default | yesno |
---|
referencia | paso1 | paso05 |
---|
| - En el módulo de Facturación, ingresar a la rutina Generac. de Notas de Crédito y Débito "Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito".
- Registrar una nota de crédito, informar los campos necesarios en la factura para generar correctamente el archivo xml.
- Tipo Nota C (F1_TIPREF) - Motivo de la emisión de la nota de crédito.
- Dentro de "Otras acciones | Doc Orig" seleccionar el documento al que corresponde la nota de crédito.
- Confirmar el documento.
Nota: Las notas de crédito deben tener un documento asociado. Campos D1_NFORI, D1_SERIORI informados. |
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso06 |
---|
| - En el módulo de Facturación, ingresar a la rutina Generac. de Notas de Crédito y Débito "Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito".
- Registrar una nota de débito, informar los campos necesarios en la factura para generar correctamente el archivo xml.
- Tipo Nota D (F2_TIPREF).
- Al registrar la nota de débito deberán ser informados los campos del documento al cual se encuentra asociada.
- Confirmar el documento.
Nota: Las notas de crédito deben tener un documento asociado. Campos D2_NFORI, D2_SERIORI informados. | Clave | Nombre | Modo | PYME |
---|
F3H | Configuración de Catálogos | C | S | F3I | Información de Catálogos | C | S | F7L | Pagos contado Factura Electrónica | E | S
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso2 | paso07 |
---|
| En el módulo de Facturación, ingresar a la rutina Pedidos de venta "Actualizaciones | Pedidos | Pedidos de venta". - Registrar un pedido que genere un remito e informar los datos necesarios en el pedido para generar correctamente el archivo xml.
- Transp. (C5_TRANSP)
- Doc Gener. (C5_DOCGER) = 2 - Remisión
- Vehic. Trans. (C5_VEICULO)
- Motivo (C5_MODTRAD)
- Tipo NF (C5_TIPONF)
- Tipo Transac. (C5_TPTRANS)
- Incoterms (C5_INCOTER)
- Fec. Ini. Tras. (C5_FECDSE)
- Fch. Fin Tras. (C5_FECHDE)
- Resp. Flete (C5_TPRESFL)
- Confirmar el documento.
En el módulo de Facturación, ingresar a la rutina Generac de remito "Actualizaciones | Form. De Remisión | Generac de remito". Realizar la generación del remito usando el pedido antes generado.
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso08 |
---|
| - En el módulo de Facturación, ingresar a la rutina Documentos Electrónicos "Actualizaciones | Facturación | Documentos Electrónicos".
- Seleccionar los parámetros de acuerdo a los documentos que serán visualizados/procesados.
- ¿Tipo documento? - Seleccionar el tipo de documento.
- Factura
- Nota Débito
- Nota Crédito
- Remisión
- ¿Serie? - Seleccionar la serie de los documentos.
- ¿Estatus? - Estatus de los documentos.
- 1 - No transmitida.
- 2 - Recibido.
- 3 - Esperando procesamiento.
- 4 - Documento Rechazado.
- 5 - Documento Autorizado.
- ¿Fecha Inicial? - Fecha inicial del rango para los documentos.
- ¿Fecha Final? - Fecha final del rango para los documentos.
Transmisión Seleccionar los parámetros para visualizar los documentos no transmitidos o rechazados. Ejemplo: - ¿Tipo documento? - "Factura"
- ¿Serie? - "A"
- ¿Estatus? - "1" o "4"
- ¿Fecha Inicial? - 01/03/2021
- ¿Fecha Final? - 31/03/2021
Se visualizarán los documentos que no han sido transmitidos o procesados, dependiendo del parámetro "Estatus". - Seleccionar "Transmitir".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán transmitidos. Informar la serie del documento y el rango de los documentos a transmitir.
- ¿Serie de la Factura? - "A01"
- ¿Factura Inicial? - "0010010000001"
- ¿Factura Final? - "0010010000001"
- Una vez finalizado el proceso se mostrará un mensaje.
- En caso de haber tenido errores durante la transmisión se mostrará un mensaje indicándolo.
- Indicar "Si" en la pregunta "¿Desea visualizar el log del proceso?".
- Se mostrará un informe con los errores que ocurrieron durante el proceso.
- En caso de haber realizado de manera correcta la transmisión se mostrará un mensaje indicándolo.
- Indicar "Si" en la pregunta "¿Desea visualizar log de Transmisión?".
- Se mostrará un informe con los documentos autorizados.
- El documento será actualizado y ahora será visible al seleccionar el estatus "5 - Documento Autorizado"
Cancelación Seleccionar los parámetros para visualizar los documentos Autorizados. Ejemplo: - ¿Tipo documento? - "Factura"
- ¿Serie? - "A"
- ¿Estatus? - "5"
- ¿Fecha Inicial? - 01/03/2021
- ¿Fecha Final? - 31/03/2021
- Seleccionar "Otras acciones | Anulación Fac. Electrónica".
- Se mostrará una barra de progreso.
- Una vez finalizado el proceso se mostrará un mensaje.
- En caso de haber tenido errores durante la transmisión se mostrará un mensaje indicándolo.
- Indicar "Si" en la pregunta "¿Desea visualizar el log del proceso?".
- Se mostrará un informe con los errores que ocurrieron durante el proceso.
- En caso de haber realizado de manera correcta la transmisión se mostrará un mensaje indicándolo.
- Indicar "Si" en la pregunta "¿Desea visualizar log de Transmisión?".
- Se mostrará un informe con los documentos autorizados.
Imprimir PDF Sin la existencia del parámetro MV_IMPKUDE. Ejemplo 1 - Documento Autorizado. NOTA: Al no existir el parámetro se toma el valor default de 1. Por lo que solo se pueden imprimir documentos autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000001"
- ¿Documento Final? - "0010010000001"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- Se mostrará una barra de progreso.
- Una vez finalizado el proceso se podrán consultar los documento en la ruta informada en el parámetro MV_CFDDOCS en la carpeta llamada "Autorizados" o en la ruta informada en el parámetro "Ruta copia PDF".
Ejemplo 2 - Documento No Autorizado. NOTA: Al no existir el parámetro se toma el valor default de 1. Por lo que solo se pueden imprimir documentos autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000002"
- ¿Documento Final? - "0010010000002"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- No se mostrara ningún mensaje, solo no se realizara el proceso.
- Al consultar la ruta informada en el parámetro MV_CFDDOCS en la carpeta llamada "Autorizados" o en la ruta informada en el parámetro "Ruta copia PDF", no existira ningún documento generado.
Configuración del parámetro MV_IMPKUDE = 1 Ejemplo 1 - Documento Autorizado. NOTA: Al estar configurado el valor del parámetro en 1, solo se pueden imprimir documentos autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000001"
- ¿Documento Final? - "0010010000001"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- Se mostrará una barra de progreso.
- Una vez finalizado el proceso se podrán consultar los documento en la ruta informada en el parámetro MV_CFDDOCS en la carpeta llamada "Autorizados" o en la ruta informada en el parámetro "Ruta copia PDF".
Ejemplo 2 - Documento No Autorizado. NOTA: Al estar configurado el valor del parámetro en 1, solo se pueden imprimir documentos autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000002"
- ¿Documento Final? - "0010010000002"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- No se mostrara ningún mensaje, solo no se realizara el proceso.
- Al consultar la ruta informada en el parámetro MV_CFDDOCS en la carpeta llamada "Autorizados" o en la ruta informada en el parámetro "Ruta copia PDF", no existira ningún documento generado.
Configuración del parámetro MV_IMPKUDE = 2 Ejemplo 1 - Documento Autorizado. NOTA: Al estar configurado el valor del parámetro en 2, se pueden imprimir documentos que ya han sido transmitidos y están en espera de ser autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000001"
- ¿Documento Final? - "0010010000001"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- Se mostrará una barra de progreso.
- Una vez finalizado el proceso se podrán consultar los documento en la ruta informada en el parámetro MV_CFDDOCS en la carpeta llamada "Autorizados" o en la ruta informada en el parámetro "Ruta copia PDF".
Ejemplo 2 - Documento Transmitido aun No Autorizado. NOTA: Al estar configurado el valor del parámetro en 2, se pueden imprimir documentos que ya han sido transmitidos y están en espera de ser autorizados. - Seleccionar "Imprimir PDF".
- Se mostrará una venta de parámetros, informar los datos de acuerdo a los documentos que serán generados los PDF. Informar la serie del documento y el rango de los documentos autorizados de los que se generara el PDF.
- ¿Serie de documento? - "A01"
- ¿Documento Inicial? - "0010010000002"
- ¿Documento Final? - "0010010000002"
- ¿Formato? - PDF
- Ruta copia PDF - C:\prueba\
- Se mostrará una barra de progreso.
- Una vez finalizado el proceso se podrán consultar los documento en la ruta informada en el parámetro MV_CFDDOCS o en la ruta informada en el parámetro "Ruta copia PDF"..
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso09 |
---|
| En caso de que se necesite modificar el XML para documentos de salida (NF, NDC, RFN) existe el punto de entrada M486PESXML habilitado para realizar esta operación. Aviso |
---|
| El siguiente ejemplo sirve para reemplazar todo el XML y será necesario utilizar la función de usuario QryItem() , que realiza una consulta SQL (Query) para obtener los datos correspondientes a los ítems, se encuentra al final del ejemplo. |
Ejemplos de uso: Bloco de código |
---|
language | actionscript3 |
---|
theme | RDark |
---|
title | M486PESXML |
---|
linenumbers | true |
---|
collapse | true |
---|
| User Function M486PESXML()
Local cFilial := PARAMIXB[1]
Local cSerie := PARAMIXB[2]
Local cCliente := PARAMIXB[3]
Local cLoja := PARAMIXB[4]
Local cDoc := PARAMIXB[5]
Local cEspecie := PARAMIXB[6]
Local cXml := ""
Local cSalto := chr(13) + chr(10)
Local cPicture := "999999999999999.9999"
Local cID := ""
Local cSecCod := ""
Local cdDVId := ""
Local cFeEmiDE := ""
Local cNumCasa := ""
Local cDepEmi := ""
Local cDisEmi := ""
Local cCiuEmi := ""
Local cIniTras := ""
Local cFinTras := ""
Local aTotales := {0,0,0,0,0,0,0,0,0,0,0,0,0}
Local aDesc := {0,0}
Local lProd := SuperGetMV("MV_CFDI_AM",,"") == "P"
Local cEmail := SuperGetMV("MV_RELACNT",,"")
Local cAliasTmp := ""
Local aArea := GetArea()
Local aSF := {}
DbSelectArea("SF2")
aSF := GetArea()
DbSetOrder(1)//F2_FILIAL+F2_DOC+F2_SERIE+F2_CLIENTE+F2_LOJA+F2_FORMUL+F2_TIPO
lOK := DbSeek(xFilial("SF2")+cDoc+cSerie+cCliente+cLoja)
cSecCod := M486SecCod(Time(),SF2->F2_EMISSAO)
cID := IIF(AllTrim(SF2->F2_ESPECIE)=="NF",M486GENCDC("01",SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1),Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1),SUBSTR(SF2->F2_DOC,1,3),SUBSTR(SF2->F2_DOC,4,3),RIGHT(SF2->F2_DOC,7),"1",SF2->F2_EMISSAO,"1",cSecCod,SF2->F2_ESPECIE),"")
cID := IIF(AllTrim(SF2->F2_ESPECIE)=="NDC",M486GENCDC("06",SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1),Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1),SUBSTR(SF2->F2_DOC,1,3),SUBSTR(SF2->F2_DOC,4,3),RIGHT(SF2->F2_DOC,7),"1",SF2->F2_EMISSAO,"1",cSecCod,SF2->F2_ESPECIE),cID)
cID := IIF(AllTrim(SF2->F2_ESPECIE)=="RFN",M486GENCDC("07",SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1),Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1),SUBSTR(SF2->F2_DOC,1,3),SUBSTR(SF2->F2_DOC,4,3),RIGHT(SF2->F2_DOC,7),"1",SF2->F2_EMISSAO,"1",cSecCod,SF2->F2_ESPECIE),cID)
cdDVId := AllTrim(STR(CalcMod11(SUBSTR(cID,1,43))))
cFeEmiDE := SUBSTR(DTOS(SF2->F2_EMISSAO),0,4) + "-" + SUBSTR(DTOS(SF2->F2_EMISSAO),5,2) + "-" + SUBSTR(DTOS(SF2->F2_EMISSAO),7,2) + "T" + SF2->F2_HORA
cNumCasa := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 11,6)
cNumCasa := Iif(Empty(cNumCasa), "0", cNumCasa )
cDepEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 18,2)
cDisEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 20,3)
cCiuEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 23,4)
cXml := '<rDE' + cSalto
cXml += ' xmlns="http://ekuatia.set.gov.py/sifen/xsd" ' + cSalto
cXml += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' + cSalto
cXml += ' xsi:schemaLocation="http://ekuatia.set.gov.py/sifen/xsd/ siRecepDE_v150.xsd">' + cSalto
cXml += ' <dVerFor>150</dVerFor>' + cSalto
cXml += ' <DE Id="' + cID + '">' + cSalto
cXml += ' <dDVId>' + cdDVId + '</dDVId>' + cSalto
cXml += ' <dFecFirma></dFecFirma> ' + cSalto
cXml += ' <dSisFact>1</dSisFact>' + cSalto
cXml += ' <gOpeDE>' + cSalto
cXml += ' <iTipEmi>1</iTipEmi>' + cSalto
cXml += ' <dDesTipEmi>Normal</dDesTipEmi>' +cSalto
cXml += ' <dCodSeg>' + SUBSTR(cID,35,9) + '</dCodSeg>' + cSalto
cXml += ' </gOpeDE>' + cSalto
cXml += ' <gTimb>' + cSalto
If AllTrim(SF2->F2_ESPECIE) == "NF"
cXml += ' <iTiDE>1</iTiDE>' + cSalto
cXml += ' <dDesTiDE>Factura electrónica</dDesTiDE>' + cSalto
ElseIf AllTrim(SF2->F2_ESPECIE) == "NDC"
cXml += ' <iTiDE>6</iTiDE>' + cSalto
cXml += ' <dDesTiDE>Nota de débito electrónica</dDesTiDE>' + cSalto
Else
cXml += ' <iTiDE>7</iTiDE>' + cSalto
cXml += ' <dDesTiDE>Nota de remisión electrónica</dDesTiDE>' + cSalto
EndIf
cXml += ' <dNumTim>'+ AllTrim(SF2->F2_NUMTIM) +'</dNumTim>' + cSalto
cXml += ' <dEst>' + SUBSTR(SF2->F2_DOC,1,3) + '</dEst>' + cSalto
cXml += ' <dPunExp>' + SUBSTR(SF2->F2_DOC,4,3) + '</dPunExp>' + cSalto
cXml += ' <dNumDoc>' + RIGHT(SF2->F2_DOC,7) + '</dNumDoc>' + cSalto
cXml += ' <dSerieNum>' + AllTrim(SF2->F2_SERIE2) + '</dSerieNum>' + cSalto
cXml += ' <dFeIniT>' +FecIniTimb(SF2->F2_SERIE, SF2->F2_ESPECIE) + '</dFeIniT>' + cSalto
cXml += ' </gTimb>' + cSalto
cXml += ' <gDatGralOpe>' + cSalto
cXml += ' <dFeEmiDE>' + cFeEmiDE + '</dFeEmiDE>' + cSalto
// Campos inherentes a la operación comercial (D010-D099)
If AllTrim(SF2->F2_ESPECIE) <> "RFN"
CTO->(DbSetOrder(1)) //CTO_FILIAL+CTO_MOEDA
CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2)))
cXml += M486IMPPAR(AllTrim(SF2->F2_ESPECIE),SF2->F2_DOC,SF2->F2_SERIE, SF2->F2_CLIENTE,SF2->F2_LOJA, CTO->CTO_MOESAT, AllTrim(SF2->F2_TPTRANS),SF2->F2_TXMOEDA) + cSalto
EndIf
//EMISOR
cXml += ' <gEmis>' + cSalto
cXml += ' <dRucEm>' + SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1)+'</dRucEm>' + cSalto
cXml += ' <dDVEmi>' + Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1) + '</dDVEmi>' + cSalto
cXml += ' <iTipCont>1</iTipCont>' + cSalto
cXml += ' <cTipReg>'+ ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 17,1) +'</cTipReg>' + cSalto
If lProd
cXml += ' <dNomEmi>'+ AllTrim(SM0->M0_NOME) + '</dNomEmi>' + cSalto
Else
cXml += ' <dNomEmi>'+ "DE generado en ambiente de prueba - sin valor comercial ni fiscal" + '</dNomEmi>' + cSalto
EndIf
cXml += ' <dNomFanEmi>'+ AllTrim(SM0->M0_NOMECOM) + '</dNomFanEmi>' + cSalto
cXml += ' <dDirEmi>'+ AllTrim(SM0->M0_ENDENT) + '</dDirEmi>' + cSalto
cXml += ' <dNumCas>' + cNumCasa + '</dNumCas>' + cSalto
cXml += ' <cDepEmi>' + cDepEmi+ '</cDepEmi>' + cSalto
cXml += ' <dDesDepEmi>' + AllTrim(ObtColSAT("S003",cDepEmi, 1, 2, 3,28)) + '</dDesDepEmi>' + cSalto
cXml += ' <cDisEmi>' + AllTrim(cDisEmi) + '</cDisEmi>' + cSalto
cXml += ' <dDesDisEmi>' + AllTrim(ObtColSAT("S031",cDisEmi, 1, 3, 4,30))+ '</dDesDisEmi>' + cSalto
cXml += ' <cCiuEmi>' + AllTrim(cCiuEmi) + '</cCiuEmi>' + cSalto
cXml += ' <dDesCiuEmi>' + AllTrim(ObtColSAT("S012",cCiuEmi, 48, 4, 52,30))+ '</dDesCiuEmi>' + cSalto
If !Empty(SM0->M0_TEL)
cXml += ' <dTelEmi>' + AllTrim(SM0->M0_TEL) + '</dTelEmi>' + cSalto
EndIf
cXml += ' <dEmailE>' + cEmail + '</dEmailE>' + cSalto //Quitar
cXml += ' <gActEco>' + cSalto
cXml += ' <cActEco>' + AllTrim(SM0->M0_DSCCNA) + '</cActEco>' + cSalto
cXml += ' <dDesActEco>'+ ObtColSAT("S006",SUBSTR(SM0->M0_DSCCNA,1,6) , 2, 5, 7,166)+'</dDesActEco>' + cSalto
cXml += ' </gActEco>' + cSalto
cXml += ' </gEmis>' + cSalto
//RECEPTOR
SA1->(DbSetOrder(1))
SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))
SYA->(DbSetOrder(1))
SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
cXml += ' <gDatRec>' + cSalto
cXml += ' <iNatRec>1</iNatRec>' + cSalto
cXml += ' <iTiOpe>1</iTiOpe>' + cSalto
cXml += ' <cPaisRec>' + SYA->YA_CODERP + '</cPaisRec>' + cSalto
cXml += ' <dDesPaisRe>'+ ObtColSAT("S005",SYA->YA_CODERP, 1, 3, 4,52)+'</dDesPaisRe>' +cSalto
If !Empty(SA1->A1_CGC)
cXml += ' <iTiContRec>' + IIF(SA1->A1_PESSOA $ "F","1","2") + '</iTiContRec>' + cSalto
cXml += ' <dRucRec>' + SUBSTR(SA1->A1_CGC,1,RAT("-",SA1->A1_CGC)-1) + '</dRucRec>' + cSalto
cXml += ' <dDVRec>' + Substr(SA1->A1_CGC,RAT("-",SA1->A1_CGC)+ 1,1) + '</dDVRec>' + cSalto
Else
cXml += ' <iTipIDRec>' + AllTrim(SA1->A1_TIPDOC) + '</iTipIDRec>' + cSalto
cXml += ' <dDTipIDRec>' + ObtColSAT("S018", SA1->A1_TIPDOC, 1, 1, 2,41) + '</dDTipIDRec>' + cSalto
cXml += ' <dNumIDRec>' + IIF(AllTrim(SA1->A1_TIPDOC)=="5","0",ALLTRIM(SA1->A1_NIF)) + '</dNumIDRec>' +cSalto
EndIf
cXml += ' <dNomRec>' + AllTrim(SA1->A1_NOME)+ '</dNomRec>' + cSalto
cXml += ' <dNomFanRec>' + AllTrim(SA1->A1_NREDUZ)+ '</dNomFanRec>' + cSalto
cXml += ' <dDirRec>' + AllTrim(SA1->A1_END) + '</dDirRec>' + cSalto
cXml += ' <dNumCasRec>' + AllTrim(SA1->A1_NUM) + '</dNumCasRec>' + cSalto
cXml += ' <cDepRec>' + SA1->A1_DEPTO + '</cDepRec>' + cSalto
cXml += ' <dDesDepRec>' + AllTrim(ObtColSAT("S003",SA1->A1_DEPTO, 1, 2, 3,28)) +'</dDesDepRec>' + cSalto
cXml += ' <cDisRec>' + SA1->A1_DISTR+ '</cDisRec>' + cSalto
cXml += ' <dDesDisRec>'+ AllTrim(ObtColSAT("S031",SA1->A1_DISTR, 1, 3, 4,30)) + '</dDesDisRec>' + cSalto
cXml += ' <cCiuRec>' + AllTrim(SA1->A1_CIUDAD) + '</cCiuRec>' + cSalto
cXml += ' <dDesCiuRec>' + AllTrim(ObtColSAT("S012",SA1->A1_CIUDAD, 48, 4, 52,30)) + '</dDesCiuRec>' + cSalto
If !Empty(SA1->A1_TEL)
cXml += ' <dTelRec>' + AllTrim(SA1->A1_TEL) + '</dTelRec>' + cSalto
EndIf
If !Empty(SA1->A1_EMAIL)
cXml += ' <dEmailRec>' + SA1->A1_EMAIL + '</dEmailRec>' + cSalto
EndIf
cXml += ' <dCodCliente>' + AllTrim(SA1->A1_COD) + '</dCodCliente>' + cSalto
cXml += ' </gDatRec>' + cSalto
cXml += ' </gDatGralOpe>' + cSalto
//TIPO DE PRESENCIA
cXml += ' <gDtipDE>' + cSalto
If AllTrim(SF2->F2_ESPECIE)=="NF"
cXml += ' <gCamFE>' + cSalto
cXml += ' <iIndPres>' + AllTrim(SF2->F2_TIPONF) + '</iIndPres>' + cSalto
cXml += ' <dDesIndPres>'+ ObtColSAT("S019",SF2->F2_TIPONF, 1, 1, 2,30)+'</dDesIndPres>' + cSalto
cXml += ' </gCamFE>' + cSalto
// CONDICIONES DE PAGO
cXml += M486CONDPAG(SF2->F2_FILIAL, SF2->F2_DOC,SF2->F2_SERIE, SF2->F2_CLIENTE,SF2->F2_LOJA,SF2->F2_ESPECIE,SF2->F2_COND,SF2->F2_MOEDA,SF2->F2_TXMOEDA) + cSalto
ElseIf AllTrim(SF2->F2_ESPECIE)=="NDC"
cXml += ' <gCamNCDE>' + cSalto
cXml += ' <iMotEmi>' + AllTrim(SF2->F2_TIPREF) + '</iMotEmi>' + cSalto
cXml += ' <dDesMotEmi>'+ ObtColSAT("S021",SF2->F2_TIPREF, 1, 1, 2,30)+'</dDesMotEmi>' + cSalto
cXml += ' </gCamNCDE>' + cSalto
ElseIf AllTrim(SF2->F2_ESPECIE)=="RFN"
cXml += ' <gCamNRE>' + cSalto
cXml += ' <iMotEmiNR>' + AllTrim(SF2->F2_MOTEMIR) + '</iMotEmiNR>' + cSalto
cXml += ' <dDesMotEmiNR>'+ ObtColSAT("S022",SF2->F2_MOTEMIR, 1, 2, 3,60)+'</dDesMotEmiNR>' + cSalto
cXml += ' <iRespEmiNR>1</iRespEmiNR>'+ cSalto
cXml += ' <dDesRespEmiNR>Emisor de la factura</dDesRespEmiNR>' + cSalto
If AllTrim(SF2->F2_MOTEMIR) == "1"
cXml += ' <dFecEm>' + SUBSTR(DTOS(SF2->F2_FECHSE),0,4) + "-" + SUBSTR(DTOS(SF2->F2_FECHSE),5,2) + "-" + SUBSTR(DTOS(SF2->F2_FECHSE),7,2) + '</dFecEm>' + cSalto
EndIf
cXml += ' </gCamNRE>' + cSalto
EndIf
cAliasTmp := u_QryItem("SD2", "D2_COD, D2_QUANT, D2_TES, D2_ITEM, SD2.R_E_C_N_O_", "D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'", "D2_ITEM")
While (cAliasTmp)->(!EOF())
cXml += ' <gCamItem>' + cSalto
cXml += ' <dCodInt>' + Alltrim((cAliasTmp)->B1_COD) + '</dCodInt>' + cSalto
cXml += ' <dDesProSer>' + AllTrim((cAliasTmp)->B1_DESC) + '</dDesProSer>' + cSalto
cXml += ' <cUniMed>' + AllTrim((cAliasTmp)->AH_COD_CO) + '</cUniMed>' + cSalto
cXml += ' <dDesUniMed>' + ObtColSAT("S002",(cAliasTmp)->AH_COD_CO, 1, 3, 29,6) + '</dDesUniMed>' + cSalto
cXml += ' <dCantProSer>' + AllTrim(TRANSFORM((cAliasTmp)->D2_QUANT,"9999999999.9999") )+ '</dCantProSer>' + cSalto
If AllTrim(SF2->F2_ESPECIE) <> "RFN"
If (cAliasTmp)->R_E_C_N_O_ > 0
SD2->(dbgoto((cAliasTmp)->R_E_C_N_O_))
EndIf
cXml += M486IMPDPAR(AllTrim(SF2->F2_ESPECIE),SF2->F2_DOC,SF2->F2_SERIE, SF2->F2_CLIENTE,SF2->F2_LOJA, (cAliasTmp)->D2_TES,(cAliasTmp)->D2_ITEM,(cAliasTmp)->D2_COD,@aDesc,@aTotales) + cSalto
EndIf
cXml += ' </gCamItem>' + cSalto
(cAliasTmp)->(dbSkip())
End
(cAliasTmp)->(dbcloseArea())
//Nodos de Guia de Remisión
If AllTrim(SF2->F2_ESPECIE) == "RFN"
DbSelectArea("DA3")
DA3->(DbSetOrder(1)) //DA3_FILIAL+DA3_COD
If DA3->(DbSeek(xFilial("DA3") + SF2->F2_VEICULO))
cXml += ' <gTransp>' + cSalto
cXml += ' <iTipTrans>' + AllTrim(DA3->DA3_TIPTR2) + '</iTipTrans>' + cSalto
If AllTrim(AllTrim(DA3->DA3_FROVEI)) == "1"
cXml += ' <dDesTipTrans>Propio</dDesTipTrans>' + cSalto
Else
cXml += ' <dDesTipTrans>Tercero</dDesTipTrans>' + cSalto
EndIf
cXml += ' <iModTrans>' + AllTrim(DA3->DA3_TIPTR2) + '</iModTrans>' + cSalto
cXml += ' <dDesModTrans>' + AllTrim(ObtColSAT("S026", AllTrim(DA3->DA3_TIPTR2), 1, 1, 2,10)) + '</dDesModTrans>' + cSalto
cXml += ' <iRespFlete>' + AllTrim(SF2->F2_TPRESFL) + '</iRespFlete>' + cSalto
cXml += ' <cCondNeg>' + AllTrim(SF2->F2_INCOTER) + '</cCondNeg>' + cSalto
cIniTras := SUBSTR(DTOS(SF2->F2_FECDSE),0,4) + "-" + SUBSTR(DTOS(SF2->F2_FECDSE),5,2) + "-" + SUBSTR(DTOS(SF2->F2_FECDSE),7,2)
cXml += ' <dIniTras>' + cIniTras + '</dIniTras>' + cSalto
cFinTras := SUBSTR(DTOS(SF2->F2_FECHSE),0,4) + "-" + SUBSTR(DTOS(SF2->F2_FECHSE),5,2) + "-" + SUBSTR(DTOS(SF2->F2_FECHSE),7,2)
cXml += ' <dFinTras>' + cFinTras + '</dFinTras>' + cSalto
cXml += ' <gCamSal>' + cSalto
cXml += ' <dDirLocSal>' + AllTrim(SM0->M0_ENDENT) + '</dDirLocSal>' + cSalto
cXml += ' <dNumCasSal>' + cNumCasa + '</dNumCasSal>' + cSalto
If !Empty(SM0->M0_COMPENT)
cXml += ' <dComp1Sal>' + AllTrim(SM0->M0_COMPENT) + '</dComp1Sal>' + cSalto
EndIf
cXml += ' <cDepSal>' + cDepEmi + '</cDepSal>' + cSalto
cXml += ' <dDesDepSal>' + AllTrim(ObtColSAT("S003",cDepEmi, 1, 2, 3,28)) + '</dDesDepSal>' + cSalto
cXml += ' <cDisSal>' + AllTrim(cDisEmi) + '</cDisSal>' + cSalto
cXml += ' <dDesDisSal>' + AllTrim(ObtColSAT("S031",cDisEmi, 1, 3, 4,30)) + '</dDesDisSal>' +cSalto
cXml += ' <cCiuSal>' + AllTrim(cCiuEmi) + '</cCiuSal>' + cSalto
cXml += ' <dDesCiuSal>' + AllTrim(ObtColSAT("S012",cCiuEmi, 48, 4, 52,30)) + '</dDesCiuSal>' + cSalto
cXml += ' </gCamSal>' + cSalto
cXml += ' <gCamEnt>' + cSalto
cXml += ' <dDirLocEnt>' + AllTrim(SA1->A1_END) + '</dDirLocEnt>' + cSalto
cXml += ' <dNumCasEnt>' + AllTrim(SA1->A1_NUM) + '</dNumCasEnt>' + cSalto
cXml += ' <cDepEnt>' + AllTrim(SA1->A1_DEPTO) + '</cDepEnt>' + cSalto
cXml += ' <dDesDepEnt>' + Alltrim(ObtColSAT("S003",SA1->A1_DEPTO, 1, 2, 3,28)) + '</dDesDepEnt>' + cSalto
cXml += ' <cDisEnt>' + AllTrim(SA1->A1_DISTR) + '</cDisEnt>' +cSalto
cXml += ' <dDesDisEnt>' + AllTrim(ObtColSAT("S031",SA1->A1_DISTR, 1, 3, 4,30)) + '</dDesDisEnt>' + cSalto
cXml += ' <cCiuEnt>' + AllTrim(SA1->A1_CIUDAD) + '</cCiuEnt>' + cSalto
cXml += ' <dDesCiuEnt>' + AllTrim(ObtColSAT("S012",SA1->A1_CIUDAD, 48, 4, 52,30)) + '</dDesCiuEnt>' + cSalto
If !Empty(SA1->A1_TEL)
cXml += ' <dTelEnt>' + AllTrim(SA1->A1_TEL) + '</dTelEnt>' + cSalto
EndIf
cXml += ' </gCamEnt>' + cSalto
cXml += ' <gVehTras>' + cSalto
cXml += ' <dTiVehTras>' + Alltrim(ObtColSAT("S026", AllTrim(DA3->DA3_TIPTR2), 1, 1, 2,10)) + '</dTiVehTras>' + cSalto
cXml += ' <dMarVeh>' + AllTrim(DA3->DA3_DESC) + '</dMarVeh>' +cSalto
cXml += ' <dTipIdenVeh>' + AllTrim(DA3->DA3_TIPID) + '</dTipIdenVeh>' + cSalto
If AllTrim(DA3->DA3_TIPID) == "1"
cXml += ' <dNroIDVeh>' + AllTrim(DA3->DA3_CHASSI) + '</dNroIDVeh>' + cSalto
Else
cXml += ' <dNroMatVeh>' + AllTrim(DA3->DA3_PLACA) + '</dNroMatVeh>' + cSalto
EndIf
If AllTrim(DA3->DA3_TIPTR2) == "3"
cXml += ' <dNroVuelo>' + AllTrim(SF2->F2_RASTR) + '</dNroVuelo>' + cSalto
EndIf
cXml += ' </gVehTras>' + cSalto
DbSelectArea("SA4")
SA4->(DbSetOrder(1)) //A4_FILIAL+A4_COD
If SA4->(MsSeek(xFilial("SA4") + SF2->F2_TRANSP))
cXml += ' <gCamTrans>' + cSalto
cXml += ' <iNatTrans>' + AllTrim(SA4->A4_TIPCON) + '</iNatTrans>' + cSalto
cXml += ' <dNomTrans>' + AllTrim(SA4->A4_NOME) + '</dNomTrans>' + cSalto
If AllTrim(SA4->A4_TIPCON) == "1"
cXml += ' <dRucTrans>' + SUBSTR(SA4->A4_CGC,1,RAT("-",SA4->A4_CGC)-1) + '</dRucTrans>' + cSalto
cXml += ' <dDVTrans>' + SUBSTR(SA4->A4_CGC,RAT("-",SA4->A4_CGC)+ 1,1) + '</dDVTrans>' + cSalto
Else
cXml += ' <iTipIDTrans>' + Alltrim(SA4->A4_TIPID) + '</iTipIDTrans>' + cSalto
cXml += ' <dDTipIDTrans>' + Alltrim(ObtColSAT("S018", ALLTRIM(SA4->A4_TIPID), 1, 1, 2,41)) + '</dDTipIDTrans>' + cSalto
cXml += ' <dNumIDTrans>' + AllTrim(SA4->A4_CGC) + '</dNumIDTrans>' + cSalto
EndIf
cXml += ' <dNumIDChof>' + AllTrim(SA4->A4_CGC) + '</dNumIDChof>' + cSalto
cXml += ' <dNomChof>' + AllTrim(SA4->A4_NOME) + '</dNomChof>' + cSalto
cXml += ' </gCamTrans>' + cSalto
EndIf
cXml += ' </gTransp>' + cSalto
EndIf
EndIf
cXml += ' </gDtipDE>' + cSalto
If AllTrim(SF2->F2_ESPECIE) <> "RFN"
aTotales := M486SUBTOT(AllTrim(SF2->F2_ESPECIE),SF2->F2_DOC,SF2->F2_SERIE, SF2->F2_CLIENTE,SF2->F2_LOJA)
cXml += ' <gTotSub>' + cSalto
cXml += ' <dSubExe>'+ AllTrim(TRANSFORM(aTotales[1],cPicture))+'</dSubExe>' + cSalto
cXml += ' <dSubExo>'+ AllTrim(TRANSFORM(aTotales[2],cPicture))+'</dSubExo>' + cSalto
cXml += ' <dSub5>'+ AllTrim(TRANSFORM(aTotales[3],cPicture))+'</dSub5>' + cSalto
cXml += ' <dSub10>'+ AllTrim(TRANSFORM(aTotales[4],cPicture))+'</dSub10>' + cSalto
cXml += ' <dTotOpe>'+ AllTrim(TRANSFORM(aTotales[5],cPicture))+'</dTotOpe>' + cSalto
cXml += ' <dTotDesc>'+ AllTrim(TRANSFORM(aDesc[1],cPicture))+'</dTotDesc>' + cSalto
cXml += ' <dTotDescGlotem>'+ AllTrim(TRANSFORM(aTotales[6],cPicture))+'</dTotDescGlotem>' + cSalto
cXml += ' <dTotAntItem>0</dTotAntItem>' + cSalto
cXml += ' <dTotAnt>0</dTotAnt>' + cSalto
cXml += ' <dPorcDescTotal>0</dPorcDescTotal>' + cSalto
cXml += ' <dDescTotal>'+ AllTrim(TRANSFORM(aDesc[1],cPicture))+'</dDescTotal>' + cSalto
cXml += ' <dAnticipo>0</dAnticipo>' + cSalto
cXml += ' <dRedon>0.0</dRedon>' + cSalto
cXml += ' <dTotGralOpe>'+ AllTrim(TRANSFORM(SF2->F2_VALBRUT,cPicture))+'</dTotGralOpe>' + cSalto
cXml += ' <dIVA5>'+ AllTrim(TRANSFORM(aTotales[7],cPicture))+'</dIVA5>' + cSalto
cXml += ' <dIVA10>'+ AllTrim(TRANSFORM(aTotales[8],cPicture))+'</dIVA10>' + cSalto
cXml += ' <dTotIVA>'+ AllTrim(TRANSFORM(aTotales[9],cPicture))+'</dTotIVA>' + cSalto
cXml += ' <dBaseGrav5>'+ AllTrim(TRANSFORM(aTotales[10],cPicture))+'</dBaseGrav5>' + cSalto
cXml += ' <dBaseGrav10>'+ AllTrim(TRANSFORM(aTotales[11],cPicture))+'</dBaseGrav10>' + cSalto
cXml += ' <dTBasGraIVA>'+ AllTrim(TRANSFORM(aTotales[12],cPicture))+'</dTBasGraIVA>' + cSalto
If AllTrim(STR(SF2->F2_MOEDA)) <> "1"
cXml += ' <dTotalGs>'+ AllTrim(TRANSFORM(SF2->F2_VALBRUT*SF2->F2_TXMOEDA,cPicture))+'</dTotalGs>' + cSalto
EndIf
cXml += ' </gTotSub>' +cSalto
EndIf
//DOCUMENTO ASOCIADO
If AllTrim(SF2->F2_ESPECIE)=="NDC"
cXml += ' <gCamDEAsoc>' + cSalto
cXml += M486ASOC(SF2->F2_ESPECIE,SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA,"1")
cXml += ' </gCamDEAsoc>' + cSalto
EndIf
cXml += ' </DE>' + cSalto
cXml += '</rDE>' + cSalto
RestArea(aSF)
RestArea(aArea)
Return cXml
/*/{Protheus.doc} QryItem Genera un query para obetener los datos correspondientes a los items.
@param cAlias, caracter, Alias de la tabla.
@param cCpos, caracter, Campos a ser usados en el query.
@param cWhere, caracter, Condición a ser usada en el query.
@param cOrder, caracter, Campo a ser usado en el orden,
@return cAliasTmp, Alias de la tabla temporal.
/*/
User Function QryItem(cAlias, cCpos, cWhere, cOrder)
Local cQuery := ""
Local cAliasTmp := getNextAlias()
cQuery := "Select "
cQuery += cCpos
cQuery += " ,B1_COD, B1_DESC, B1_UM, AH_COD_CO"
cQuery += " from "+RetSqlName(cAlias)+ " " + cAlias + " "
cQuery += " Left Join " +RetSqlName("SB1")+ " SB1 ON " + IIf(cAlias == "SD2","D2_COD","D1_COD") + " = B1_COD AND B1_FILIAL = '" + xFilial("SB1") + "'"
cQuery += " Left Join " +RetSqlName("SAH")+ " SAH ON B1_UM = AH_UNIMED AND AH_FILIAL = '" + xFilial("SAH") + "'"
cQuery += " Where "
cQuery += cWhere
cQuery += " AND " + cAlias + ".D_E_L_E_T_ = ''"
cQuery += " AND SB1.D_E_L_E_T_ = ''"
cQuery += " AND SAH.D_E_L_E_T_ = ''"
If !Empty(cOrder)
cQuery += " ORDER BY "+ SqlOrder(cOrder)
EndIf
cQuery := ChangeQuery(cQuery)
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
(cAliasTmp)->(dbGoTop())
Return cAliasTmp |
La información retornada en la variable cXml deberá contener el xml que será guardado para ser transmitido. |
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso10 |
---|
| En caso de que se necesite modificar el xml para documentos de entrada (NCC) existe el punto de entrada M486PEEXML habilitado para realizar esta operación. Aviso |
---|
| El siguiente ejemplo sirve para reemplazar todo el XML y será necesario utilizar la función de usuario QryItem() , que realiza una consulta SQL (Query) para obtener los datos correspondientes a los ítems, se encuentra al final del ejemplo. |
Ejemplos de uso: Bloco de código |
---|
language | actionscript3 |
---|
theme | RDark |
---|
title | M486PEEXML |
---|
linenumbers | true |
---|
collapse | true |
---|
| User Function M486PEEXML()
Local cFilial := PARAMIXB[1]
Local cSerie := PARAMIXB[2]
Local cCliente := PARAMIXB[3]
Local cLoja := PARAMIXB[4]
Local cDoc := PARAMIXB[5]
Local cEspecie := PARAMIXB[6]
Local cXml := ""
Local cSalto := chr(13) + chr(10)
Local cPicture := "999999999999999.9999"
Local cID := ""
Local cSecCod := ""
Local cdDVId := ""
Local cFeEmiDE := ""
Local cNumCasa := ""
Local cDepEmi := ""
Local cDisEmi := ""
Local cCiuEmi := ""
Local aTotales := {0,0,0,0,0,0,0,0,0,0,0,0,0}
Local aDesc := {0,0}
Local lProd := SuperGetMV("MV_CFDI_AM",,"") == "P"
Local cEmail := SuperGetMV("MV_RELACNT",,"")
Local cAliasTmp := ""
Local aArea := GetArea()
Local aSF := {}
DbSelectArea("SF1")
aSF := GetArea()
DbSetOrder(1)//F1_FILIAL+F1_DOC+F1_SERIE+F1_FORNECE+F1_LOJA+F1_TIPO
DbSeek(xFilial("SF1")+cDoc+cSerie+cCliente+cLoja)
cSecCod := M486SecCod(Time(),SF1->F1_EMISSAO)
cID := M486GENCDC("05",SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1),Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1),SUBSTR(SF1->F1_DOC,1,3),SUBSTR(SF1->F1_DOC,4,3),SUBSTR(SF1->F1_DOC,7),"1",SF1->F1_EMISSAO,"1",cSecCod,SF1->F1_ESPECIE)
cdDVId := AllTrim(STR(CalcMod11(SUBSTR(cID,1,43))))
cFeEmiDE := SUBSTR(DTOS(SF1->F1_EMISSAO),0,4) + "-" + SUBSTR(DTOS(SF1->F1_EMISSAO),5,2) + "-" + SUBSTR(DTOS(SF1->F1_EMISSAO),7,2) + "T" + SF1->F1_HORA
cNumCasa := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 11,6)
cNumCasa := Iif(Empty(cNumCasa), "0", cNumCasa )
cDepEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 18,2)
cDisEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 20,3)
cCiuEmi := ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 23,4)
cXml := '<rDE' + cSalto
cXml += ' xmlns="http://ekuatia.set.gov.py/sifen/xsd" ' + cSalto
cXml += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' + cSalto
cXml += ' xsi:schemaLocation="http://ekuatia.set.gov.py/sifen/xsd/ siRecepDE_v150.xsd">' + cSalto
cXml += ' <dVerFor>150</dVerFor>' + cSalto
cXml += ' <DE Id="' + cID + '">' + cSalto
cXml += ' <dDVId>' + cdDVId + '</dDVId>' + cSalto
cXml += ' <dFecFirma></dFecFirma> ' + cSalto
cXml += ' <dSisFact>1</dSisFact>' + cSalto
cXml += ' <gOpeDE>' + cSalto
cXml += ' <iTipEmi>1</iTipEmi>' + cSalto
cXml += ' <dDesTipEmi>Normal</dDesTipEmi>' +cSalto
cXml += ' <dCodSeg>' + SUBSTR(cID,35,9) + '</dCodSeg>' + cSalto
cXml += ' </gOpeDE>' + cSalto
cXml += ' <gTimb>' + cSalto
cXml += ' <iTiDE>5</iTiDE>' + cSalto
cXml += ' <dDesTiDE>Nota de crédito electrónica</dDesTiDE>' + cSalto
cXml += ' <dNumTim>'+ AllTrim(SF1->F1_NUMTIM) +'</dNumTim>' + cSalto
cXml += ' <dEst>' + SUBSTR(SF1->F1_DOC,1,3) + '</dEst>' + cSalto
cXml += ' <dPunExp>' + SUBSTR(SF1->F1_DOC,4,3) + '</dPunExp>' + cSalto
cXml += ' <dNumDoc>' + RIGHT(SF1->F1_DOC,7) + '</dNumDoc>' + cSalto
cXml += ' <dSerieNum>' + AllTrim(SF1->F1_SERIE2) + '</dSerieNum>' + cSalto
cXml += ' <dFeIniT>' + FecIniTimb(SF1->F1_SERIE, SF1->F1_ESPECIE) + '</dFeIniT>' + cSalto
cXml += ' </gTimb>' + cSalto
cXml += ' <gDatGralOpe>' + cSalto
cXml += ' <dFeEmiDE>' + cFeEmiDE + '</dFeEmiDE>' + cSalto
// Campos inherentes a la operación comercial (D010-D099)
CTO->(DbSetOrder(1)) //CTO_FILIAL+CTO_MOEDA
CTO->(MsSeek(xFilial("CTO")+Strzero(SF1->F1_MOEDA,2)))
cXml += M486IMPPAR(ALLTRIM(SF1->F1_ESPECIE),SF1->F1_DOC,SF1->F1_SERIE, SF1->F1_FORNECE,SF1->F1_LOJA, CTO->CTO_MOESAT,"","") + cSalto
//EMISOR
cXml += ' <gEmis>' + cSalto
cXml += ' <dRucEm>' + SUBSTR(SM0->M0_CGC,1,RAT("-",SM0->M0_CGC)-1)+'</dRucEm>' + cSalto
cXml += ' <dDVEmi>' + Substr(SM0->M0_CGC,RAT("-",SM0->M0_CGC)+ 1,1) + '</dDVEmi>' + cSalto
cXml += ' <iTipCont>1</iTipCont>' + cSalto
cXml += ' <cTipReg>'+ ObtColSAT("S030",SUBSTR(SM0->M0_CGC,1,10) , 1, 10, 17,1) +'</cTipReg>' + cSalto
If lProd
cXml += ' <dNomEmi>'+ AllTrim(SM0->M0_NOME) + '</dNomEmi>' + cSalto
Else
cXml += ' <dNomEmi>'+ "DE generado en ambiente de prueba - sin valor comercial ni fiscal" + '</dNomEmi>' + cSalto
EndIf
cXml += ' <dNomFanEmi>'+ AllTrim(SM0->M0_NOMECOM) + '</dNomFanEmi>' + cSalto
cXml += ' <dDirEmi>'+ AllTrim(SM0->M0_ENDENT) + '</dDirEmi>' + cSalto
cXml += ' <dNumCas>' + cNumCasa + '</dNumCas>' + cSalto
cXml += ' <cDepEmi>' + cDepEmi+ '</cDepEmi>' + cSalto
cXml += ' <dDesDepEmi>' + AllTrim(ObtColSAT("S003",cDepEmi, 1, 2, 3,28)) + '</dDesDepEmi>' + cSalto
cXml += ' <cDisEmi>' + AllTrim(cDisEmi) + '</cDisEmi>' + cSalto
cXml += ' <dDesDisEmi>' + AllTrim(ObtColSAT("S031",cDisEmi, 1, 3, 4,30))+ '</dDesDisEmi>' + cSalto
cXml += ' <cCiuEmi>' + AllTrim(cCiuEmi) + '</cCiuEmi>' + cSalto
cXml += ' <dDesCiuEmi>' + AllTrim(ObtColSAT("S012",cCiuEmi, 48, 4, 52,30))+ '</dDesCiuEmi>' + cSalto
If !Empty(SM0->M0_TEL)
cXml += ' <dTelEmi>' + AllTrim(SM0->M0_TEL) + '</dTelEmi>' + cSalto
EndIf
cXml += ' <dEmailE>' + cEmail + '</dEmailE>' + cSalto //Quitar
cXml += ' <gActEco>' + cSalto
cXml += ' <cActEco>' + AllTrim(SM0->M0_DSCCNA) + '</cActEco>' + cSalto
cXml += ' <dDesActEco>'+ ObtColSAT("S006",SUBSTR(SM0->M0_DSCCNA,1,6) , 2, 5, 7,166)+'</dDesActEco>' + cSalto
cXml += ' </gActEco>' + cSalto
cXml += ' </gEmis>' + cSalto
//RECEPTOR
SA1->(DbSetOrder(1))
SA1->(MSSeek(xFilial("SA1")+SF1->F1_FORNECE+SF1->F1_LOJA))
SYA->(DbSetOrder(1))
SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
cXml += ' <gDatRec>' + cSalto
cXml += ' <iNatRec>1</iNatRec>' + cSalto
cXml += ' <iTiOpe>1</iTiOpe>' + cSalto
cXml += ' <cPaisRec>' + SYA->YA_CODERP + '</cPaisRec>' + cSalto
cXml += ' <dDesPaisRe>'+ ObtColSAT("S005",SYA->YA_CODERP, 1, 3, 4,52)+'</dDesPaisRe>' +cSalto
If !Empty(SA1->A1_CGC)
cXml += ' <iTiContRec>' + IIF(SA1->A1_PESSOA $ "F","1","2") + '</iTiContRec>' + cSalto
cXml += ' <dRucRec>' + SUBSTR(SA1->A1_CGC,1,RAT("-",SA1->A1_CGC)-1) + '</dRucRec>' + cSalto
cXml += ' <dDVRec>' + Substr(SA1->A1_CGC,RAT("-",SA1->A1_CGC)+ 1,1) + '</dDVRec>' + cSalto
Else
cXml += ' <iTipIDRec>' + AllTrim(SA1->A1_TIPDOC) + '</iTipIDRec>' + cSalto
cXml += ' <dDTipIDRec>' + ObtColSAT("S018", SA1->A1_TIPDOC, 1, 1, 2,41) + '</dDTipIDRec>' + cSalto
cXml += ' <dNumIDRec>' + IIF(AllTrim(SA1->A1_TIPDOC)=="5","0",ALLTRIM(SA1->A1_NIF)) + '</dNumIDRec>' +cSalto
EndIf
cXml += ' <dNomRec>' + AllTrim(SA1->A1_NOME)+ '</dNomRec>' + cSalto
cXml += ' <dNomFanRec>' + AllTrim(SA1->A1_NREDUZ)+ '</dNomFanRec>' + cSalto
cXml += ' <dDirRec>' + AllTrim(SA1->A1_END) + '</dDirRec>' + cSalto
cXml += ' <dNumCasRec>' + AllTrim(SA1->A1_NUM) + '</dNumCasRec>' + cSalto
cXml += ' <cDepRec>' + SA1->A1_DEPTO + '</cDepRec>' + cSalto
cXml += ' <dDesDepRec>' + AllTrim(ObtColSAT("S003",SA1->A1_DEPTO, 1, 2, 3,28)) +'</dDesDepRec>' + cSalto
cXml += ' <cDisRec>' + SA1->A1_DISTR+ '</cDisRec>' + cSalto
cXml += ' <dDesDisRec>'+ AllTrim(ObtColSAT("S031",SA1->A1_DISTR, 1, 3, 4,30)) + '</dDesDisRec>' + cSalto
cXml += ' <cCiuRec>' + AllTrim(SA1->A1_CIUDAD) + '</cCiuRec>' + cSalto
cXml += ' <dDesCiuRec>' + AllTrim(ObtColSAT("S012",SA1->A1_CIUDAD, 48, 4, 52,30)) + '</dDesCiuRec>' + cSalto
If !Empty(SA1->A1_TEL)
cXml += ' <dTelRec>' + AllTrim(SA1->A1_TEL) + '</dTelRec>' + cSalto
EndIf
If !Empty(SA1->A1_EMAIL)
cXml += ' <dEmailRec>' + SA1->A1_EMAIL + '</dEmailRec>' + cSalto
EndIf
cXml += ' <dCodCliente>' + AllTrim(SA1->A1_COD) + '</dCodCliente>' + cSalto
cXml += ' </gDatRec>' + cSalto
cXml += ' </gDatGralOpe>' + cSalto
//TIPO DE PRESENCIA
cXml += ' <gDtipDE>' + cSalto
cXml += ' <gCamNCDE>' + cSalto
cXml += ' <iMotEmi>' + AllTrim(SF1->F1_TIPREF) + '</iMotEmi>' + cSalto
cXml += ' <dDesMotEmi>'+ ObtColSAT("S021",SF1->F1_TIPREF, 1, 1, 2,30)+'</dDesMotEmi>' + cSalto
cXml += ' </gCamNCDE>' + cSalto
cAliasTmp := u_QryItem("SD1", "D1_COD, D1_QUANT, D1_TES, D1_ITEM, SD1.R_E_C_N_O_", "D1_DOC='" + SF1->F1_DOC + "' AND D1_SERIE='" + SF1->F1_SERIE + "' AND D1_FORNECE='" + SF1->F1_FORNECE + "' AND D1_LOJA='" + SF1->F1_LOJA + "'", "D1_ITEM")
While (cAliasTmp)->(!EOF())
cXml += ' <gCamItem>' + cSalto
cXml += ' <dCodInt>' + Alltrim((cAliasTmp)->B1_COD) + '</dCodInt>' + cSalto
cXml += ' <dDesProSer>' + AllTrim((cAliasTmp)->B1_DESC) + '</dDesProSer>' + cSalto
cXml += ' <cUniMed>' + AllTrim((cAliasTmp)->AH_COD_CO) + '</cUniMed>' + cSalto
cXml += ' <dDesUniMed>' + ObtColSAT("S002",(cAliasTmp)->AH_COD_CO, 1, 3, 29,6) + '</dDesUniMed>' + cSalto
cXml += ' <dCantProSer>' + AllTrim(TRANSFORM((cAliasTmp)->D1_QUANT,"9999999999.9999") )+ '</dCantProSer>' + cSalto
If (cAliasTmp)->R_E_C_N_O_ > 0
SD2->(dbgoto((cAliasTmp)->R_E_C_N_O_))
EndIf
cXml += M486IMPDPAR(ALLTRIM(SF1->F1_ESPECIE),SF1->F1_DOC,SF1->F1_SERIE, SF1->F1_FORNECE,SF1->F1_LOJA, (cAliasTmp)->D1_TES,(cAliasTmp)->D1_ITEM,(cAliasTmp)->D1_COD,@aDesc) + cSalto
cXml += ' </gCamItem>' + cSalto
(cAliasTmp)->(dbSkip())
End
(cAliasTmp)->(dbcloseArea())
cXml += ' </gDtipDE>' + cSalto
aTotales := M486SUBTOT(ALLTRIM(SF1->F1_ESPECIE),SF1->F1_DOC,SF1->F1_SERIE, SF1->F1_FORNECE,SF1->F1_LOJA)
cXml += ' <gTotSub>' + cSalto
cXml += ' <dSubExe>'+ AllTrim(TRANSFORM(aTotales[1],cPicture))+'</dSubExe>' + cSalto
cXml += ' <dSubExo>'+ AllTrim(TRANSFORM(aTotales[2],cPicture))+'</dSubExo>' + cSalto
cXml += ' <dSub5>'+ AllTrim(TRANSFORM(aTotales[3],cPicture))+'</dSub5>' + cSalto
cXml += ' <dSub10>'+ AllTrim(TRANSFORM(aTotales[4],cPicture))+'</dSub10>' + cSalto
cXml += ' <dTotOpe>'+ AllTrim(TRANSFORM(aTotales[5],cPicture))+'</dTotOpe>' + cSalto
cXml += ' <dTotDesc>'+ AllTrim(TRANSFORM(aDesc[1],cPicture))+'</dTotDesc>' + cSalto
cXml += ' <dTotDescGlotem>'+ AllTrim(TRANSFORM(aTotales[6],cPicture))+'</dTotDescGlotem>' + cSalto
cXml += ' <dTotAntItem>0</dTotAntItem>' + cSalto
cXml += ' <dTotAnt>0</dTotAnt>' + cSalto
cXml += ' <dPorcDescTotal>0</dPorcDescTotal>' + cSalto
cXml += ' <dDescTotal>'+ AllTrim(TRANSFORM(aDesc[1],cPicture))+'</dDescTotal>' + cSalto
cXml += ' <dAnticipo>0</dAnticipo>' + cSalto
cXml += ' <dRedon>0.0</dRedon>' + cSalto
cXml += ' <dTotGralOpe>'+ AllTrim(TRANSFORM(SF1->F1_VALBRUT,cPicture))+'</dTotGralOpe>' + cSalto
cXml += ' <dIVA5>'+ AllTrim(TRANSFORM(aTotales[7],cPicture))+'</dIVA5>' + cSalto
cXml += ' <dIVA10>'+ AllTrim(TRANSFORM(aTotales[8],cPicture))+'</dIVA10>' + cSalto
cXml += ' <dTotIVA>'+ AllTrim(TRANSFORM(aTotales[9],cPicture))+'</dTotIVA>' + cSalto
cXml += ' <dBaseGrav5>'+ AllTrim(TRANSFORM(aTotales[10],cPicture))+'</dBaseGrav5>' + cSalto
cXml += ' <dBaseGrav10>'+ AllTrim(TRANSFORM(aTotales[11],cPicture))+'</dBaseGrav10>' + cSalto
cXml += ' <dTBasGraIVA>'+ AllTrim(TRANSFORM(aTotales[12],cPicture))+'</dTBasGraIVA>' + cSalto
If AllTrim(STR(SF1->F1_MOEDA)) <> "1"
cXml += ' <dTotalGs>'+ AllTrim(TRANSFORM(SF1->F1_VALBRUT*SF1->F1_TXMOEDA,cPicture))+'</dTotalGs>' + cSalto
EndIf
cXml += ' </gTotSub>' +cSalto
//DOCUMENTO ASOCIADO
cXml += ' <gCamDEAsoc>' + cSalto
cXml += M486ASOC(SF1->F1_ESPECIE,SF1->F1_DOC,SF1->F1_SERIE,SF1->F1_FORNECE,SF1->F1_LOJA,"1") + cSalto
cXml += ' </gCamDEAsoc>' + cSalto
cXml += ' </DE>' + cSalto
cXml += '</rDE>' + cSalto
RestArea(aSF)
RestArea(aArea)
Return cXml
/*/{Protheus.doc} QryItem Genera un query para obetener los datos correspondientes a los items.
@param cAlias, caracter, Alias de la tabla.
@param cCpos, caracter, Campos a ser usados en el query.
@param cWhere, caracter, Condición a ser usada en el query.
@param cOrder, caracter, Campo a ser usado en el orden,
@return cAliasTmp, Alias de la tabla temporal.
/*/
User Function QryItem(cAlias, cCpos, cWhere, cOrder)
Local cQuery := ""
Local cAliasTmp := getNextAlias()
cQuery := "Select "
cQuery += cCpos
cQuery += " ,B1_COD, B1_DESC, B1_UM, AH_COD_CO"
cQuery += " from "+RetSqlName(cAlias)+ " " + cAlias + " "
cQuery += " Left Join " +RetSqlName("SB1")+ " SB1 ON " + IIf(cAlias == "SD2","D2_COD","D1_COD") + " = B1_COD AND B1_FILIAL = '" + xFilial("SB1") + "'"
cQuery += " Left Join " +RetSqlName("SAH")+ " SAH ON B1_UM = AH_UNIMED AND AH_FILIAL = '" + xFilial("SAH") + "'"
cQuery += " Where "
cQuery += cWhere
cQuery += " AND " + cAlias + ".D_E_L_E_T_ = ''"
cQuery += " AND SB1.D_E_L_E_T_ = ''"
cQuery += " AND SAH.D_E_L_E_T_ = ''"
If !Empty(cOrder)
cQuery += " ORDER BY "+ SqlOrder(cOrder)
EndIf
cQuery := ChangeQuery(cQuery)
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasTmp,.T.,.T.)
(cAliasTmp)->(dbGoTop())
Return cAliasTmp |
La información retornada en la variable cXml deberá contener el xml que será guardado para ser transmitido. |
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso11 |
---|
| PE - M486PDFGEN Descripción: | M486PDFGEN.- Generación personalizada de Impresión Gráfica de Documentos | Ubicación: | Actualizaciones / Facturación / Transmisión Electrónica. | Eventos: | Imprimir PDF. | Programa Fuente: | MATA486.PRW | Función: | MenuDef | Parámetros: | Posición | Tipo | Descripción |
---|
N/A | N/A | N/A |
| Retorno: | N/A |
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso12 |
---|
| IMPRESION DEL KUDE - PARÁMETRO MV_IMPKUDE (EJEMPLO) Parámetro | Descripción | Tipo | Valores | Default |
---|
MV_IMPKUDE | Configuración de la impresión del KUDE antes de obtener la autorización. | Numérico | 1 = Imprime solo facturas validadas. 2 = Imprime facturas validadas y facturas transmitidas. | 1 = Imprime solo facturas validadas. |
|
|