Totvs custom tabs box items |
---|
default | yes |
---|
referencia | paso01 |
---|
| Nombre de la Variable | Valor Ejemplo |
---|
MV_PATH814 | C:\Catalogos_csv\ | MV_F3HNUM |
| MV_CFDI_AM | T | MV_CFDSMAR | GetClientDir() Cuando se usa en versión web se debe crear un carpeta en alguna ubicación con permisos de lectura y escritura; y se debe informar la ruta ejemplo "C:\temp\". Adicional en dicha ruta debe esta el certificado y la carpeta SIFENWS. | MV_CFDI_PA | SIFENWS | MV_CFDDOCS | GetSrvProfString('startpath','')+'\cfd\facturas\' | MV_CFDI_PX | certificado.pfx | MV_CFDICVE | 12345678a | MV_IDCONEN | 1 | MV_IDCSC | 0001 | MV_CSC | ABCD0000000000000000000000000000 | MV_CFDUSO | 1 | MV_RELACNT | [email protected] | MV_TIPTRAN | S | MV_ASYNLOT | 50 | MV_TIPCON | 1=Persona Física ,2=Persona Jurídica | MV_IMPKUDE | 1= Imprime facturas autorizadas 2= Imprime facturas transmitidas y autorizadas |
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso02 |
---|
| - Archivos de Catálogos.
- Una vez configurado el parámetro MV_PATH814 con una ruta local, deberá colocar los archivos .csv anexos a esta solución en el archivo CatalogosFact.zip. En este archivo se encuentran los catálogos en formato csv los cuales serán tomados por la rutina Carga de Catálogos para generar sus registros en Protheus.
- Certificado digital.
- El certificado digital informado en el parámetro MV_CFDI_PX, deberá ser colocado dentro de la ruta informada en el parámetro MV_CFDSMAR.
- Archivo .exe (SIFENWS.EXE) para realizar consumo de los servicios web del SIFEN
- El archivo SIFENWS.EXE se puede descargar del siguiente enlace https://suporte.totvs.com/portal/p/10098/download?e=1083727 una vez descargado el archivo:
- Localizar el archivo descargado, y descomprimir.
- Ubique la carpeta "Paraguay" dentro se encuentra el comprimido SIFENWS descomprima no mover ninguno de los elementos.
- El nombre del archivo(ejecutable) deberá ser colocado en el parámetro MV_CFDI_PA (SIFENWS), el archivo deberá ser colocado en la ruta informada en el parámetro MV_CFDSMAR.
- Dentro de la ruta '\Protheus_data\system\', deberá crear los siguientes directorios:
- "\facturas\"
- Dentro de la ruta '\Protheus_data\system\facturas\', deberá crear los siguientes directorios:
- "\autorizados\" - Almacena las facturas autorizadas por el SIFEN.
- "\canceladas\" - Almacena los documentos cancelados. Los documentos cancelados son documentos que fueron enviados y autorizados por el SIFEN, pero que después fueron cancelados.
- "\inutilizadas\" - Almacena los documentos inutilizados. Los documentos inutilizados son documentos que no fueron transmitidos al SIFEN, pero que fueron reportados como "cancelados" sin ser aprobados previamente.
- Para el uso en versión web se debe tener actualizado WEBAGENT y configurar correctamente de acuerdo a la documentación.
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso03 |
---|
| - Catálogos.
En el módulo de Facturación, ingresar a la rutina Definición de Catálogos "Actualizaciones | Archivos| Definición de Catálogos". La primera vez detonará la carga de los archivos csv al Protheus. Es importante realice este paso después de configurar todos los parámetros , pues las configuraciones siguientes dependen de la correcta carga de la información de catálogos al sistema Protheus. Catálogos. View file |
---|
name | Catalogos.zip |
---|
height | 250 |
---|
|
Código | Descripción |
---|
S001 | Tipo de Régimen | S002 | Unidad de Medida | S003 | Departamento | S004 | Monedas | S005 | Países | S006 | Catálogo de actividad económica | S007 | Catálogo de afectación | S008 | Catálogo de categoría ISC | S009 | Catálogo de tasas ISC | S010 | Condiciones | S011 | Catálogo de Regímenes Aduaneros | S012 | Referencia Geográfica | S013 | Tipos de Pago | S014 | Denominación Tarjeta | S015 | Documento Electrónico | S016 | Tipo de transacción | S017 | Catálogo de Impuesto Afectado | S018 | Tipo Documento de Identidad | S019 | Indicador de Presencia | S020 | Doc Identidad VEN/TRA | S021 | Motivo de Emisión NC | S022 | Motivo de Emisión RE | S023 | Catálogo de Respon. Emisión | S024 | Catálogo de Vehículos | S025 | Catálogo de Tipo de Combustible | S026 | Catálogo de Mod. de Transporte | S027 | Catálogo Respon. del Flete | S028 | Catálogo de Doc. Impreso | S029 | Tipos de Operación | S030 | Dirección del Emisor | S031 | Distrito | S032 | Procesamiento Pago |
- En el módulo de Facturación, ingresar a la rutina Mantenimiento de Catálogos "Actualizaciones | Archivos | Mantenimiento de Catálogos". Ingresar al catálogo S030 - DIRECCIÓN DEL EMISOR, informar los datos correspondientes a la dirección del emisor.
- Ejemplo:
- RUC correspondiente al emisor.
- Número - Correspondiente al informado antes el SIFEN.
- Tipo Régimen - Régimen del emisor de acuerdo al catálogo S001.
- Departamento - Correspondiente al RUC informado y de acuerdo al catálogo S003.
- Distrito - Correspondiente al RUC informado y de acuerdo al catálogo S031.
- Ciudad - Correspondiente al RUC informado y de acuerdo al catálogo S012.
Dentro del módulo configurador en la configuración de la empresa verificar la siguiente configuración se encuentre registrada: - Datos generales
- Nombre comercial.
- Teléfono
- RUC (CNPJ o CPF).
- Dirección Fiscal/Entrega
- Dirección Fiscal/Entrega
- Barrio
- Ciudad Fiscal Entrega
- CP Fiscal/Entrega
- Adicionales
- Actividad económica - Correspondiente al RUC informado y de acuerdo al catálogo S006.
Para los siguientes registros será necesario informar los siguientes campos para el correcto llenado de los archivos xml. - Clientes - (SIGAFIS | Actualizaciones | Archivos| Clientes)
- A1_TIPDOC - Tipo de documento.
- A1_NUM - Número de casa.
- A1_DEPTO - Código departamento de acuerdo a la SET.
- A1_DISTR - Código de distrito de acuerdo a la SET.
- A1_CIUDAD - Código de ciudad de acuerdo a la SET.
- A1_PESSOA - Persona Física/Jurídica
- A1_CGC - RUC.
- A1_NIF - Número de identificación Fiscal
- A1_NOME - Nombre del cliente.
- A1_NREDUZ - Nombre de fantasía.
- A1_END - Dirección del cliente.
- A1_TEL - Teléfono del cliente.
- A1_EMAIL - Correo del cliente.
- A1_COD - Código interno del cliente.
- Países - (SIGACOM | Actualizaciones | Archivo Importaciones| Países)
- YA_CODERP - Cod. ERP. Clave de país de acuerdo al catálogo de países.
- Monedas - (SIGACTB | Actualizaciones | Archivos| Monedas Contables)
- CTO_MOESAT - Moneda SAT. Clave de moneda de acuerdo al catálogo monedas.
- Unidades de medida - (SIGAFIS | Actualizaciones | Archivos| Unidades de Medida).
- AH_COD_CO - Ori Cert Cód. Clave de unidad de medida de acuerdo al catálogo de unidades de medida.
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | paso04 |
---|
| Pago de Contado - En el módulo de Facturación, ingresar a la rutina Facturación "Actualizaciones | Facturación | Facturación".
- Registrar una factura, informar los campos necesarios en la factura para generar correctamente el archivo xml.
- Tipo NF (F2_TIPONF).
- Tipo Transacción (F2_TPTRANS).
- Seleccionar una condición de pago que realice baja automática. (E4_BXTITAV = 1)
- Confirmar el documento.
- Una vez finalizado se mostrará una ventana para informar las formas de pago del documento, estas son obligatorias para la correcta generación del documento xml. (Deberán contemplar el valor completo del documento para que sea válido)
- Para la correcta generación deberán ser informados los campos de acuerdo al tipo de pago.
- Tipo de pago
- Pago con Tarjetas.
- Tipo Tarjeta
- Código de autorización de operación.
- Número de Tarjeta (Últimos 4 dígitos).
- Pago con cheque.
- Banco emisor.
- Número de cheque.
- Monto de pago
- Forma de procesamiento de pago
- En caso no haber registrado la formas de pago al confirmar el documento será posible registrarlas seleccionando el documento y en "Otras acciones" seleccionar la opción "Registro pagos."
- Una vez registradas las formas de pago confirmar.
Pago a plazo - En el módulo de Facturación, ingresar a la rutina Facturación "Actualizaciones | Facturación | Facturación".
- Registrar una factura, informar los campos necesarios en la factura para generar correctamente el archivo xml.
- Tipo NF (F2_TIPONF).
- Tipo Transacción (F2_TPTRANS).
- Seleccionar una condición de pago que NO realice baja automática y genere pago con plazo. (Ejemplo: E4_BXTITAV = 2 y E4_COND = 30)
- Confirmar el documento.
Pago en cuota - En el módulo de Facturación, ingresar a la rutina Facturación "Actualizaciones | Facturación | Facturación".
- Registrar una factura, informar los campos necesarios en la factura para generar correctamente el archivo xml.
- Tipo NF (F2_TIPONF).
- Tipo Transacción (F2_TPTRANS).
- Seleccionar una condición de pago que NO realice baja automática y genere cuotas. (Ejemplo: E4_BXTITAV = 2 y E4_COND = 30,60,90)
- Confirmar el documento.
|
Totvs custom tabs box items |
---|
default | no |
---|
referencia | 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. |
Totvs custom tabs box items |
---|
default | no |
---|
referencia | 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 ejemplo 1 del Punto de Entrada (M486PESXML), siguiente ejemplo sirve para reemplazar todo el XML y será necesario utilizar una función similar a QueryItemsla función de usuario QryItem() , que realiza una consulta SQL (Query) para obtener los datos correspondientes a los ítems ítems, se encuentra al final del ejemplo. |
Ejemplos de uso: Bloco de código |
---|
language | xmlactionscript3 |
---|
theme | RDark |
---|
title | Ejemplo 1M486PESXML |
---|
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 := QueryItemsu_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 |
Bloco de código |
---|
language | xml |
---|
theme | RDark |
---|
title | Ejemplo 2 |
---|
collapse | true |
---|
| User Function M486PESXML()
Local cFilial := PARAMIXB[1] //Sucursal
Local cSerie := PARAMIXB[2] //Serie
Local cCliente := PARAMIXB[3] //Cliente
Local cLoja := PARAMIXB[4] //Loja
Local cDoc := PARAMIXB[5] //Número de Documento
Local cEspecie := PARAMIXB[6] //Especie del Documento
Local cXml := PARAMIXB[7] //XML
//Modificación del XML
Return cXml |
Bloco de código |
---|
language | xml |
---|
theme | RDark |
---|
title | QueryItems() |
---|
linenumbers | true |
---|
collapse | true |
---|
| /*/{Protheus.doc} QueryItems
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
/*/{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.
/*/
StaticUser Function QueryItemsQryItem(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 ejemplo 1 del Punto de Entrada (M486PEEXML), siguiente ejemplo sirve para reemplazar todo el XML y será necesario utilizar una función similar a QueryItemsla función de usuario QryItem() , que realiza una consulta SQL (Query) para obtener los datos correspondientes a los ítems í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 M486PEEXMLUser Function M486PEEXML()
Local cFilial Local cFilial := PARAMIXB PARAMIXB[1]
Local cSerie Local cSerie := PARAMIXB PARAMIXB[2]
Local cCliente Local cCliente := PARAMIXB PARAMIXB[3]
Local cLoja Local cLoja := PARAMIXB PARAMIXB[4]
Local cDoc Local cDoc := PARAMIXB PARAMIXB[5]
Local cEspecie Local cEspecie := PARAMIXB PARAMIXB[6]
Local cXml 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 := QueryItemsu_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 |
Bloco de código |
---|
language | xml |
---|
theme | RDark |
---|
title | Ejemplo 2 |
---|
collapse | true |
---|
| User Function M486PESXML()
Local cFilial := PARAMIXB[1] //Sucursal
Local cSerie := PARAMIXB[2] //Serie
Local cCliente := PARAMIXB[3] //Cliente
Local cLoja := PARAMIXB[4] //Loja
Local cDoc := PARAMIXB[5] //Número de Documento
Local cEspecie := PARAMIXB[6] //Especie del Documento
Local cXml := PARAMIXB[7] //XML
//Modificación del XML
Return cXml |
Bloco de código |
---|
language | xml |
---|
theme | RDark |
---|
title | QueryItems() |
---|
linenumbers | true |
---|
collapse | true |
---|
| LOJA,"1") + cSalto
cXml += ' </gCamDEAsoc>' + cSalto
cXml += ' </DE>' + cSalto
cXml += '</rDE>' + cSalto
RestArea(aSF)
RestArea(aArea)
Return cXml
/*/{Protheus.doc} QueryItems
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.
/*/
StaticUser Function QueryItemsQryItem(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. |
|
|