01. DATOS GENERALES
Producto | TOTVS Backoffice | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Línea de producto: | Línea Protheus | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Segmento: | Backoffice | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Módulo: | SIGAFAT - Facturación SIGAFIN - Financiero | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Función: |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
País: | México (MEX) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ticket: | 13194441 | 13133116 | 13225418 | 13306223 | 13315625 | 13399425 | 13420975 | 13846019 | 13901259 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Requisito/Story/Issue (informe el requisito vinculado): | DMINA-14654 (DMINA-14587 | DMINA-14678 | DMINA-14770 | DMINA-14787 | DMINA-14870 | DMINA-14942 | DMINA-15250 | DMINA-15317) |
02. SITUACIÓN/REQUISITO
Conforme a la actualización solicitada por el SAT para Comprobantes Fiscales Digitales por Internet (CFDI) versión 4.0 se realizan las siguientes entregas:
- A continuación dar clic aquí y siga el documento donde se detalla la configuración que se debe realizar para la generación de los Comprobantes Fiscales Digitales a través de Internet (CFDi) versión 4.0
- Dar clic aquí y siga el documento donde se detalla la configuración para cumplir con la obligación fiscal requerida por el SAT, de acuerdo al Anexo 20 de la Resolución de Miscelánea Fiscal vigente para la emisión del complemento de recepción de pagos incorporado en los Comprobantes Fiscales Digitales por Internet (CFDI) versión 4.0, donde se realiza el timbrado e impresión de los documentos generados.
- Conforme a la actualización realizada al Servicio de Cancelación de CFDI ante el SAT (reforma fiscal 2022), para solicitar la Cancelación de una Factura de Venta (NF), Nota de Débito al Cliente (NDC) o Nota de Crédito al Cliente (NCC) se debe informar el Motivo de Cancelación, uno de estos motivos es el 01 - Comprobante emitido con errores con relación, el cual aplica para cuando el Documento cuyo Comprobante Fiscal Digital por Internet (CFDI) contiene un error en la Clave del Producto, Valor Unitario, Descuento o cualquier otro dato, por lo que se debe reexpedir. En este caso, primero se sustituye el documento y cuando se solicita la cancelación, se incorpora el UUID del Documento que sustituye al cancelado.
Lo anterior implica que se debe generar un nuevo Documento cuando aún no se cancela el documento que será reemplazado, sin embargo, con el funcionamiento actual del sistema existen las siguientes limitantes que impiden realizar este proceso:
Si se requiere Cancelar una Factura de Venta (NF) para la cual se utilizó un Tipo de Entrada/Salida (TES) que afecta a stock, es decir, el campo Act. Stock (F4_ESTOQUE) con valor S - Si, no se puede generar la nueva Factura de Venta (NF) porque el stock sigue ocupado por la Factura de Venta (NF) que se pretende cancelar.
Este ultimo punto es lo descrito en este documento.
03. SOLUCIÓN
Se realizaron ajustes a las siguientes rutinas:
Cancelación de CFDI (FISA817):
En la función que Genera los archivos timbradocfdi.ini y timbrado.bat para consumo del WS de solicitud cancelación o consulta de status (ProcesoWS), se agrega un nuevo parámetro que indica si se ejecuta la cancelación automática. Se realizan ajustes para que cuando el usuario seleccione el motivo de cancelación 01 - Compr. Emitido c/errores c/relac. para un documento, este se anule dentro del sistema Protheus y no mande la solicitud de cancelación al SAT.
Se agrega una nueva función, F817CanMot(), que permite detonar la solicitud de cancelación para los documentos pendientes para la cancelación.
Dentro de la definición del menú de la rutina (MenuDef) se agrega una nueva opción llamada Solic. Canc. Pendientes, la cual ejecuta a la función F817CanMot().
Se agrega la función F817ValDoc() que valida si el documento ya fue informado como documento a sustituir para la cancelación.
Funciones generales de documentos fiscales (LOCXFUNA):
Se realizaron ajustes en la función que genera el nodo cfdi:CfdiRelacionados, fGetFolRel(), para que al leer el campo de UUID Relacs (F1_UUIDREL/F2_UUIDREL) cuando son varios UUID, se tome como separador el salto de línea y si se informó el documento a sustituir, es decir, se informaron los campos Serie Sust. (F1_SERMAN/F2_SERMAN) y No. Doc Sust (F1_DOCMAN/F2_DOCMAN), se genere un nodo adicional de cfdi:CfdiRelacionados, donde el atributo TipoRelacion sea 04, de Sustitución de los CFDI Previos, tomando el UUID del campo UUID Doc. (F3_CNATREC) de la tabla SF3 - Libros Fiscales.
Notas Fiscales (LOCXNF):
Se modificó la función de exclusión de Notas Fiscales, LocxDelNF(), para realizar llamado a la función que realiza el marcado del registro del documento (NF,NDC,NCC) cuando se Anulan los documentos, LxActSF3(), actualizando los campos Motivo Canc. (F3_MOTIVO), Status Cance (F3_STATUS), UUID Doc. (F3_CNATREC) y Nom. XML Anu (F3_CODNFE).
Se modificó la función que relaciona documentos desde la acción Doc Orig, LxDocOri(), para llenar el campo UUID Relacs (F1_UUID), utilizando el separador de salto de línea para cuando existe más de un UUID Relacionado (para que la funcionalidad para versión de CDFI 4.0 aplique como lo hace la versión de CFDI 3.3 y el ajuste aplica para la versión Factura de la acción Doc Orig)
Funciones Genéricas para Documentos Fiscales (LOCXNF2):
Se eliminan las funciones que validaban los datos del campo UUID Relacs, ValUUIDRel() y LxVldF3I(), ya que no se utilizarán porque se deja funcionalidad de llenado del campo F1_UUIDRE/F2_UUIDREL para versión CFDI 4.0 como lo hace para la versión CFDI 3.3.
Se modificó la función que valida el Tipo de Relación CFDI y Uso CFDI, ValRetSat(), para que en Factura de Venta (NF), Nota de Débito al Cliente (NDC) y Nota de Crédito al Cliente (NCC) no se permita informar el valor 04 en el campo Relacion CFD (F1_RELSAT/F2_RELSAT).
Funciones Genéricas para Documentos Fiscales para México (LOCXMEX):
En la función que agrega campos en el encabezado de Notas Fiscales para el país México, LxCposMex(), se activaron los campos Serie Sust. (F2_SERMAN) y No. Doc Sust (F2_DOCMAN) para Facturas de Venta (NF) y Nota de Débito al Cliente (NDC), se activaron los campos Serie Sust. (F1_SERMAN) y No. Doc Sust (F1_DOCMAN) para Nota de Crédito al Cliente (NCC), adicional se dejó activado el campo Relacion CFD (F2_UUIDREL) para Facturas de Venta (NF) y Nota de Débito al Cliente (NDC) para versión de CFDI 4.0.
Se creó la función que realiza el marcado del registro del documento (NF,NDC,NCC) cuando se Anulan los documentos (LxActSF3) pero no se realiza la solicitud de Cancelación al SAT, actualizando los campos Motivo Canc. (F3_MOTIVO), Status Cance (F3_STATUS), UUID Doc. (F3_CNATREC) y Nom. XML Anu (F3_CODNFE).
Se creó la función LxVDocSuc() para realizar las siguientes validaciones al informar los campos Serie Sust. (F1_SERMAN/F2_SERMAN) y No. Doc Sust (F1_DOCMAN/F2_DOCMAN):
- El Documento a Sustituir no puede estar relacionado a otro documento.
- El Documento a Sustituir debe ser de la misma especie del nuevo documento y estar como Anulado pero sin solicitud de cancelación ante el SAT (Campos F3_STATUS igual a 'S').
Timbrado CFDI (FISA800):
Se creó la función F800SolCan() para realizar la solicitud de Cancelación ante el SAT de los documentos que solo fueron anulados en Protheus (Campos F3_STATUS igual a 'S') pero no se realizó la solicitud de cancelación en el SAT con Motivo de Cancelación 01, informando al final del proceso el folio del nuevo documento que fue timbrado y el folio del documento que fue cancelado ante el SAT.
Funciones Genéricas para Documentos Fiscales (SIGACUS):
Se realizaron ajustes en la función F4NfOri() para que en el caso de la versión de CFDI 4.0 no se solicite llenar el campo Relacion CFD (F1_RELSAT) para cuando se ejecuta la acción Doc Orig al incluir una Nota de Crédito al Cliente (NCC), para la opción ítem, y al llenar el campo de UUID Relacs (F1_UUIDREL) no se llene con el UUID de la factura que se relaciona sin anteponer el Tipo de Relación.
Mantenimiento de Catálogos del SAT (FISA812):
En la función ValidF3I() que valida códigos de los catálogos del SAT, se considera el campo Relacion CFD (F1_RELSAT) de documentos de entrada, en validación actual para documentos de salida (F2_RELSAT) en donde se permite dejar vacío el campo.
Generación automática de facturas de venta (MATA468N):
Se modificaron varias funciones y se agregaron otras para el manejo de campos que ayudan al control de las cancelaciones y relación entre los documentos, cancelado y el que sustituye.
a468nFatura() - Generación de facturas: Agrega arreglo de facturas a generar (aFacs) como parámetro en la ejecución de las funciones a468nNotas() y a468nGera().
a468nGera() - Generación de la nota fiscal: Recibe por parámetro el arreglo de facturas a generar (aFacs) y lo envía a las funciones a468nGravF2() y a468nNotas().
a468nGravF2() - Graba registros en la tabla de documentos fiscales de salida SF2: Recibe por parámetro el arreglo de facturas a generar (aFacs) del cual toma los valores para grabar los campos Serie Sust. (F2_SERMAN) y No. Doc Sust (F2_DOCMAN).
a468nNotas() - Visualiza la lista de notas fiscales que serán generadas: Recibe por parámetro el arreglo de facturas a generar (aFacs).
Determina coordenadas y nuevos componentes de la ventana de facturas a generar, se agregan las columnas Serie Sust. (F2_SERMAN), No. Doc Sust (F2_DOCMAN) y UUID Relacs (F2_UUIDREL).
A468DblClic() - Permite editar algunas columnas de la ventana de facturas a generar: Si detecta doble clic en las columnas de Serie o Documento que Sustituye, ejecuta la función A468ChgRel().
A468ChgRel() - Edición de los campos Serie y Factura que sustituye: Visualiza ventana para editar la Serie y Factura que sustituye el nuevo documento.
A468ValRel() - Valida Serie/Folio del documento que se sustituye: Valida que el documento seleccionado esté cancelado en Protheus, pendiente de transmitir al SAT y que el folio fiscal correspondiente (UUID) no esté usado por otro documento.
Importante
Se enmarcan en color azul los ajustes a realizar en el archivo FATSMEX.INI, realizar un merge de los ajustes en caso de contar con personalizaciones:
//FATSMEX.INI V4.0 --- Modelo 2022
[XXX POSICIONAMENTOS]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
[XXX INICIALIZACION]
(PRE) SD2->(DbSetOrder(1))
(PRE) SB1->(DbSetOrder(1))
(PRE) SYA->(DbSetOrder(1))
(PRE) SC6->(DbSetOrder(1))
(PRE) SE4->(DbSetOrder(1))
(PRE) CTO->(DbSetOrder(1))
(PRE) SAH->(DbSetOrder(1))
(PRE) _aTotal[009] := SuperGetMV("MV_CFDICPG", .F., "")
(PRE) _aTotal[010] := FindFunction("zh_FechaHoraUTC") .And. !Empty(_aTotal[009])
(PRE) _aTotal[011] := FindFunction("LxFunaCaPo")
(PRE) _aTotal[094] := ""
(PRE) _aTotal[095] := ""
(PRE) _aTotal[033] := ""
(PRE) _aTotal[034] := ""
(PRE) _aTotal[035] := ""
(PRE) _aTotal[036] := 0
(PRE) _aTotal[037] := 0
(PRE) _aTotal[038] := 0
(PRE) _aTotal[075] := Alltrim(SM0->M0_NOMECOM)
(PRE) IIf(_aTotal[010],_aTotal[096] := zh_FechaHoraUTC(Alltrim(_aTotal[009]),Alltrim(SM0->M0_CEPENT),SF2->F2_EMISSAO,SF2->F2_HORA),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] := DtoS(SF2->F2_EMISSAO),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] := Left(_aTotal[096],4) + "-" + Substr(_aTotal[096],5,2)+ "-" + Right(_aTotal[096],2),"")
(PRE) IIf(!_aTotal[010],_aTotal[096] += "T" + SF2->F2_HORA,"")
(PRE) _aTotal[097] := {"SD2",""}
(PRE) _aTotal[098] := "|"
(PRE) _aTotal[099] := "||"
(PRE) _aTotal[100] := ""
(PRE) _aTotal[101] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION I, 5.2.7 Y 4.3.21"
(PRE) _aTotal[102] := "OPERACION DE CONFORMIDAD CON EL ART. 29 FRACCION I DE LIVA Y LO ESTIPULADO EN LAS RGCE 5.2.6. FRACCION II, 5.2.7 Y 4.3.21"
(PRE) _aTotal[103] := fSumBC(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA)
(PRE) _aTotal[104] := IIf(SF2->(ColumnPos("F2_TPCOMPL")) > 0 .And. AllTrim(SF2->F2_TPCOMPL)=="S",.T.,.F.)
(PRE) _aTotal[105] := ""
(PRE) _aTotal[106] := IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21",0,2)
(PRE) lCCCE := .F.
(PRE) cNodoCCE := ""
(PREREG) FsQuery(_aTotal[097],1,"D2_DOC='" + SF2->F2_DOC + "' AND D2_SERIE='" + SF2->F2_SERIE + "' AND D2_CLIENTE='" + SF2->F2_CLIENTE + "' AND D2_LOJA='" + SF2->F2_LOJA + "'","SD2->D2_DOC=SF2->F2_DOC .AND. SD2->D2_SERIE=SF2->F2_SERIE .AND. SD2->D2_CLIENTE=SF2->F2_CLIENTE .AND. SD2->D2_LOJA=SF2->F2_LOJA","D2_ITEM") .And. .T.
(PRE) fImptosD(SF2->F2_DOC,SF2->F2_SERIE,SF2->F2_CLIENTE,SF2->F2_LOJA,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),"SD2", SF2->F2_GLOBAL == "1",@(_aTotal[036]),_aTotal[104],@_aTotal[037], @_aTotal[038] )
[SD2 CADENAORIGINAL_SELLO]
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SA2->(MSSeek(xFilial("SA2")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PRE) If(AllTrim(SF2->F2_ESPECIE)<>"NDI",CTO->(MsSeek(xFilial("CTO")+Strzero(SF2->F2_MOEDA,2))) , .T.)
//////////////////////////////////////////////CADENA ORIGINAL//////////////////////////////////////////////
(PRE) cCadOrig := _aTotal[099]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cCadOriCCE := ""
//Cadena Original | Complemento de Comercio Exterior (Mercancias)
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_ITEM + SD2->D2_COD), (cCadOriCCE += Alltrim(SD2->D2_ITEM + SD2->D2_COD) + _aTotal[098],.T.),("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_CANADU)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), (cCadOriCCE += AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_VALADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. !Empty(Str(SD2->D2_USDADU)), (cCadOriCCE += Alltrim(Str(SD2->D2_USDADU,14,2)) + _aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", (cCadOriCCE += '1.0' +_aTotal[098],.T.), ("",,.T.))
(PREREG) IIf(lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="1", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[101] + _aTotal[098],.T.), IIf (lCCCE .And. SA1->A1_CONTRBE=="1" .And. SF2->F2_CONUNI=="2", (cCadOriCCE += 'IMMEX:' + ALLTRIM(SA1->A1_PFISICA) + ' ' + _aTotal[102] + _aTotal[098],.T.), ("",,.T.)))
///////////DATOS DE LA FACTURA/////////////////
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
//Version
(PRE) cCadOrig += "4.0" + _aTotal[098]
//Serie
(PRE) cCadOrig += Alltrim(SF2->F2_SERIE) + _aTotal[098]
//Folio
(PRE) cCadOrig += Alltrim(SF2->F2_DOC) + _aTotal[098]
//Fecha
(PRE) cCadOrig += Alltrim(_aTotal[096]) + _aTotal[098]
//FormaPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", IIf(SF2->F2_GLOBAL == '1',FormPagGlo(SF2->F2_DOC,SF2->F2_SERIE),IIf(Empty(AI0->AI0_MPAGO).Or. Alltrim(SE4->E4_MPAGSAT) == "PPD","99",Alltrim(AI0->AI0_MPAGO))) + _aTotal[098] )
//NoCertificado
(PRE) cCadOrig += Alltrim(SF2->F2_CERTFOL) + _aTotal[098]
//CondicionesDePago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + _aTotal[098] )
//Subtotal
(PRE) cCadOrig += Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->F2_VALMERC + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037]),14,_aTotal[106])) + _aTotal[098]
//Descuento
(PRE) cCadOrig += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", Alltrim(STR(SF2->F2_DESCONT,14,2)) + _aTotal[098]) )
//Moneda
(PRE) cCadOrig += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + _aTotal[098]
//TipoCambio
(PRE) cCadOrig += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",IIf(!(Alltrim(CTO->CTO_MOESAT) $ "MXN|XXX"), Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + _aTotal[098])
//Total
(PRE) cCadOrig += Alltrim(Str(IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, iif(GetSx3Cache("F2_VALBRUT","X3_DECIMAL")<= 2,SF2->F2_VALBRUT + _aTotal[103]- _aTotal[037],Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037])),14,_aTotal[106])) + _aTotal[098]
//TipoDeComprobante
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(ALLTRIM(SF2->F2_TIPODOC) == "21", "T", "I" ), "E") + _aTotal[098]
//Exportacion
(PRE) cCadOrig += IIf(lCCCE .And. Alltrim(SF2->F2_ESPECIE) == "NF","02", "01") + _aTotal[098]
//MetodoPago
(PRE) cCadOrig += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", Alltrim(SE4->E4_MPAGSAT) + _aTotal[098] )
//LugarExpedicion
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + _aTotal[098]
//////////////////////CFDI Relacionados//////////////////////////
(PREREG)!Empty(SF2->F2_RELSAT).Or. !Empty(SF2->F2_SERMAN).Or. !Empty(SF2->F2_DOCMAN)
(PRE) IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",fGetFolRel("S",.T.))
///////////DATOS DEL EMISOR///////////////////////
//Rfc
(PRE) cCadOrig += CFDCarEsp(AllTrim(SM0->M0_CGC),.F.) + _aTotal[098]
//Nombre
(PRE) cCadOrig += CFDCarEsp(_aTotal[075],.F.) + _aTotal[098]
//RegimenFiscal
(PRE) cCadOrig += CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + _aTotal[098]
//////////////////////DATOS DEL RECEPTOR//////////////////////////
(PRE) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PRE) SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA))
(PRE) SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS))
//Rfc
(PRE) (cCadOrig += IIf(!_aTotal[104] .And. (ALLTRIM(SF2->F2_TIPODOC) == "21" .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", CFDCarEsp(AllTrim(SA1->A1_CGC), .F.)) + _aTotal[098])
//Nombre
(PRE) (cCadOrig += IIf(SF2->F2_GLOBAL <> "1",CFDCarEsp(Alltrim(SA1->A1_NOME),.F.) + _aTotal[098],""), .T.)
//DomicilioFiscalReceptor
(PRE) (cCadOrig += IIf(SF2->F2_GLOBAL <> "1",CFDCarEsp(Alltrim(SA1->A1_CEP),.F.) + _aTotal[098],""), .T.)
//ResidenciaFiscal
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_RESIDE))), cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + _aTotal[098], "")
//NumRegIdTrib
(PRE) IIf(lCCCE .And. !Empty(CFDCarEsp(Alltrim(SF2->F2_IDTRIB))), cCadOrig += CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + _aTotal[098], "")
//RegimenFiscalReceptor
(PRE) (cCadOrig += IIf(SF2->F2_GLOBAL <> "1" .And. AI0->(ColumnPos("AI0_REGFIS")) > 0,CFDCarEsp(Alltrim(AI0->AI0_REGFIS),.F.) + _aTotal[098],""), .T.)
//UsoCFDI
(PRE) (cCadOrig += Alltrim(SF2->F2_USOCFDI) + _aTotal[098], .T.)
(PRE) (cCadOrig += fXMLFUN("CO",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)
(PRE) (cCadOrig += fXMLFUN("TI",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PRE) (cCadOrig += fXMLFUN("IL",.T., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
//Carta Porte
(PRE) IIf(_aTotal[011],(cCadOrig += LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.T.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.),"")
(POS) IIf(lCCCE, cCadOrig += "1.1" + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), cCadOrig += Alltrim(SF2->F2_TRASLA) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), cCadOrig += Alltrim(SF2->F2_TIPOPE) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), cCadOrig += Alltrim(SF2->F2_CVEPED) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_CERORI), cCadOrig += Alltrim(SF2->F2_CERORI) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), cCadOrig += Alltrim(SF2->F2_NUMCER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), cCadOrig += Alltrim(SF2->F2_EXPCONF) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), cCadOrig += Alltrim(SF2->F2_INCOTER) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), cCadOrig += Alltrim(SF2->F2_SUBDIV) + _aTotal[098], "")
(POS) IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), cCadOrig += CFDCarEsp(AllTrim(SF2->F2_OBSCE), .F.) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), cCadOrig += Alltrim(Str(SF2->F2_TCUSD)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), cCadOrig += Alltrim(Str(SF2->F2_TOTUSD,14,2)) + _aTotal[098], "")
//Emisor
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CEPENT), cCadOrig += CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(SM0->M0_CODMUN), cCadOrig += AllTrim(SM0->M0_CODMUN) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += "MEX" + _aTotal[098], "")
(POS) IIf(lCCCE , cCadOrig += AllTrim(SM0->M0_CEPENT) + _aTotal[098], "")
//Receptor Domicilio
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(AllTrim(SA1->A1_END)) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), cCadOrig += AllTrim(SA1->A1_NR_END) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), cCadOrig += AllTrim(SA1->A1_NROINT) + _aTotal[098], "")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), cCadOrig += CFDCarEsp(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))) + _aTotal[098],"")
(POS) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_MUN))), cCadOrig += CFDCarEsp(AllTrim(SA1->A1_MUN),.F.) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + _aTotal[098],"")
(POS) IIf(lCCCE, cCadOrig += AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + _aTotal[098], "")
(POS) IIf(lCCCE, cCadOrig += AllTrim(SA1->A1_CEP) + _aTotal[098], "")
(POS) cCadOrig += IIf(!Empty(cCadOriCCE), cCadOriCCE, "")
(POS) cCadOrig += _aTotal[098]
(POS) _aTotal[033] := cCadOrig
//SELLO
(POS) _aTotal[100] := EVPDigest(cCadOrig,5)
(POS) _aTotal[100] := PrivSignRSA(&(SuperGetMv("MV_CFDDIRS",,""))+SuperGetMv("MV_CFDARQS",,""),_aTotal[100],6,"assinatura")
(POS) _aTotal[100] := ENCODE64(_aTotal[100])
[XXX CABECERA]
Linha1 C 041 0 Chr(239) + Chr(187) + Chr(191) + '<?xml version="1.0" encoding="UTF-8"?>'
[XXX FACTURA]
//Certificado del SAT incluido para pruebas
(PRE) cCert := "MIIFyDCCA7CgAwIBAgIUMzAwMDEwMDAwMDA0MDAwMDI0NDMwDQYJKoZIhvcNAQEL"
(PRE) cCert += "BQAwggErMQ8wDQYDVQQDDAZBQyBVQVQxLjAsBgNVBAoMJVNFUlZJQ0lPIERFIEFE"
(PRE) cCert += "TUlOSVNUUkFDSU9OIFRSSUJVVEFSSUExGjAYBgNVBAsMEVNBVC1JRVMgQXV0aG9y"
(PRE) cCert += "aXR5MSgwJgYJKoZIhvcNAQkBFhlvc2Nhci5tYXJ0aW5lekBzYXQuZ29iLm14MR0w"
(PRE) cCert += "GwYDVQQJDBQzcmEgY2VycmFkYSBkZSBjYWRpejEOMAwGA1UEEQwFMDYzNzAxCzAJ"
(PRE) cCert += "BgNVBAYTAk1YMRkwFwYDVQQIDBBDSVVEQUQgREUgTUVYSUNPMREwDwYDVQQHDAhD"
(PRE) cCert += "T1lPQUNBTjERMA8GA1UELRMIMi41LjQuNDUxJTAjBgkqhkiG9w0BCQITFnJlc3Bv"
(PRE) cCert += "bnNhYmxlOiBBQ0RNQS1TQVQwHhcNMTkwNjE3MjA0MDUxWhcNMjMwNjE3MjA0MDUx"
(PRE) cCert += "WjCB7zEqMCgGA1UEAxMhWEVOT04gSU5EVVNUUklBTCBBUlRJQ0xFUyBTIERFIENW"
(PRE) cCert += "MSowKAYDVQQpEyFYRU5PTiBJTkRVU1RSSUFMIEFSVElDTEVTIFMgREUgQ1YxKjAo"
(PRE) cCert += "BgNVBAoTIVhFTk9OIElORFVTVFJJQUwgQVJUSUNMRVMgUyBERSBDVjElMCMGA1UE"
(PRE) cCert += "LRMcWElBMTkwMTI4SjYxIC8gS0FITzY0MTEwMUIzOTEeMBwGA1UEBRMVIC8gS0FI"
(PRE) cCert += "TzY0MTEwMUhOVExLUzA2MSIwIAYDVQQLExlYZW5vbiBJbmR1c3RyaWFsIEFydGlj"
(PRE) cCert += "bGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiJQ5YcSgjwsGf29+"
(PRE) cCert += "3go7VGdtMZCcH9wUpn46ZMAlFwUojnCPTvwJ3+cSwjqJnw8ahr3DuRwekvGR4BJA"
(PRE) cCert += "b5b9Xi8kyoiWtwcGOSWxO38Bp9J1e/BO9HMbQBPAtLDuG47oqnH8zWLOeaoYRJDp"
(PRE) cCert += "ARw4RX1ko2+9tbj0ntBtM7Vk1E8EWiA/h2Meq0LIv1+ySGTUrEW46FM01J5pzELv"
(PRE) cCert += "5XupBghuJxR5DG9fiOW7u3dR5s3tZoVLwA1KdjJtY0mmnfCwxg6i5AqhvY+FAI5D"
(PRE) cCert += "6CF6/lHA8PWg63WasvrhuIv70xCLjgPT/j00ZcPrLvBf1DefGVic980Ch/SDvC+M"
(PRE) cCert += "dJ1F5wIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG"
(PRE) cCert += "9w0BAQsFAAOCAgEACjfTPoKY2N5MxjmAMltd5XZCV1vgAwEtrIRYTodhE8R0Tp1Q"
(PRE) cCert += "anAXb0luPyBv5hIXWK4VqAI4fcTtP+n7kkrwfha6ErkPWFNJWJm8ZsMmby/3WgVo"
(PRE) cCert += "JkOFyRYQqr5Il3N6wMa5kiDBtDRbqB3iEXmvtrvjWSHyxAER+zo3jWGFlhBZ0nQN"
(PRE) cCert += "Rtjx8sPFihVc5TUH682HJiU4oWvT63Dnra8ncqiW/uCuY86crnUq0fW7Lw/3+PY5"
(PRE) cCert += "xXjNxR/Hh3sUPITfJrGaLWurD1J9npr9yGAJ6t9zrhhZnepIC0DUMc5+j4pg1DrO"
(PRE) cCert += "32jzwUOLQqErDizh84NoJCWwbg+US8wi3zD0ZKiDv7XsTNWAW2Ap2JkzykKHjFTZ"
(PRE) cCert += "iEm3uZOkJNfcu3o+kefr5HfXFT+iN9K5FUEhaQwgUeZBRJ8V5F6gmhz3d6ixVbiZ"
(PRE) cCert += "oFNhYR8e2k8gF9gGrVMrEbJGQrl+6+ZYQLFiauXeG7fu1svk19PuyredRJGnseJq"
(PRE) cCert += "yV4RzcRGhJA+cLnmpdDOTEhignnvnhEuY6HVRYYXhOTyeeluET7KRCxbJGqO7TdW"
(PRE) cCert += "gjrHL3HRbNE4NY5GAdOZuLaWxElG5ZVCHqtG0Nh7UQAhcz+EKyZBAewv5XuH0Oom"
(PRE) cCert += "ZXw6mM2mY2soL6z1224NusM8/BbJcYTQUlAEKblEChhGK1XlxiVOU2nc9KE="
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""
(PRE) If(AllTrim(SF2->F2_ESPECIE)=="NDI",SYA->(MsSeek(xFilial("SYA")+SA2->A2_PAIS)) , .T.)
(PRE) (SE4->(MSSeek(xFilial("SE4")+SF2->F2_COND)) , .T.)
(PRE) (AI0->(MSSeek(xFilial("AI0")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PRE) _aTotal[001] := '<cfdi:Comprobante'
(PRE) _aTotal[001] += ' xmlns:cfdi="http://www.sat.gob.mx/cfd/4"'
(PRE) _aTotal[001] += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
(PRE) _aTotal[001] += Iif(!lCCCE,' xmlns:cartaporte20="http://www.sat.gob.mx/CartaPorte20"','')
(PRE) _aTotal[001] += ' xmlns:implocal="http://www.sat.gob.mx/implocal"'
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales"' , "")
(PRE) _aTotal[001] += ' xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd '
(PRE) _aTotal[001] += IIF(lCCCE,'http://www.sat.gob.mx/ComercioExterior11 http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd ','http://www.sat.gob.mx/CartaPorte20 http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte20.xsd http://www.sat.gob.mx/implocal http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd')
(PRE) _aTotal[001] += IIf(lCCCE .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", ' http://www.sat.gob.mx/leyendasFiscales http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xsd"' , '"')
(PRE) _aTotal[001] += IIf(lCCCE, ' xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11"' , "")
(PRE) _aTotal[001] += ' Version="4.0"'
(PRE) _aTotal[001] += ' Serie="' + Alltrim(SF2->F2_SERIE) + '"'
(PRE) _aTotal[001] += ' Folio="' + Alltrim(SF2->F2_DOC) + '"'
(PRE) _aTotal[001] += ' Fecha="' + Alltrim(_aTotal[096]) + '"'
(PRE) _aTotal[001] += ' Sello="' + Alltrim(_aTotal[100]) + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' FormaPago="' + IIf(SF2->F2_GLOBAL == '1',FormPagGlo(SF2->F2_DOC,SF2->F2_SERIE),IIf(Empty(AI0->AI0_MPAGO) .Or. Alltrim(SE4->E4_MPAGSAT) == "PPD","99",Alltrim(AI0->AI0_MPAGO))) + '"' )
(PRE) _aTotal[001] += ' NoCertificado="' + Alltrim(SF2->F2_CERTFOL) + '"'
(PRE) _aTotal[001] += ' Certificado="' + cCert + '"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' CondicionesDePago="' + CFDCarEsp(Alltrim(SE4->E4_DESCRI)) + '"' )
(PRE) _aTotal[001] += ' SubTotal="' + Alltrim(STR(IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", 0, (SF2->F2_VALMERC + _aTotal[103] + SF2->F2_DESCONT) - _aTotal[036] - _aTotal[037] ),14,_aTotal[106])) + '"'
(PRE) _aTotal[001] += IIF(ALLTRIM(SF2->F2_TIPODOC) == "21", "", IIf( SF2->F2_DESCONT == 0, "", ' Descuento="' + Alltrim(STR(SF2->F2_DESCONT,14,2)) + '"' ))
(PRE) _aTotal[001] += ' Moneda="' + IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","XXX",Alltrim(CTO->CTO_MOESAT)) + '"'
(PRE) _aTotal[001] += IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21", "", ' TipoCambio="' + IIf(!(Alltrim(CTO->CTO_MOESAT) $ "MXN|XXX"), Alltrim(STR(SF2->F2_TXMOEDA,14,2)), "1") + '"')
(PRE) _aTotal[001] += ' Total="' + Alltrim(Str(IIf(Alltrim(SF2->F2_TIPODOC) == "21", 0, IIf(GetSx3Cache("F2_VALBRUT","X3_DECIMAL") <= 2,SF2->F2_VALBRUT + _aTotal[103] - _aTotal[037] - _aTotal[038] ,Round(SF2->F2_VALBRUT,2) + _aTotal[103] - _aTotal[037] - _aTotal[038])),14,_aTotal[106])) + '"'
(PRE) _aTotal[001] += ' TipoDeComprobante="' + IIf(Alltrim(SF2->F2_ESPECIE) == "NF",IIf(Alltrim(SF2->F2_TIPODOC) == "21", "T", "I"), "E") + '"'
(PRE) _aTotal[001] += ' Exportacion="'+IIf(lCCCE .And. Alltrim(SF2->F2_ESPECIE) == "NF","02","01")+'"'
(PRE) _aTotal[001] += IIf(Alltrim(SF2->F2_TIPODOC) == "21", "", ' MetodoPago="' + Alltrim(SE4->E4_MPAGSAT) + '"' )
(PRE) _aTotal[001] += ' LugarExpedicion="' + CFDCarEsp(AllTrim(SM0->M0_CEPENT)) + '"'
(PRE) _aTotal[001] += '>'
(PREREG) _aTotal[001]
(POS) cNodoCCE := IIf(lCCCE, ' <cce11:ComercioExterior' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Version="1.1"' , "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TRASLA), ' MotivoTraslado="' + Alltrim(SF2->F2_TRASLA) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_TIPOPE), ' TipoOperacion="' + Alltrim(SF2->F2_TIPOPE) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CVEPED), ' ClaveDePedimento="' + Alltrim(SF2->F2_CVEPED) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_CERORI), ' CertificadoOrigen="' + Alltrim(SF2->F2_CERORI) +'"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_NUMCER), ' NumCertificadoOrigen="' + Alltrim(SF2->F2_NUMCER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_EXPCONF), ' NumeroExportadorConfiable="' + Alltrim(SF2->F2_EXPCONF) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_INCOTER), ' Incoterm="' + Alltrim(SF2->F2_INCOTER) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(SF2->F2_SUBDIV), ' Subdivision="' + Alltrim(SF2->F2_SUBDIV) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. SF2->(ColumnPos("F2_OBSCE")) > 0 .And. !Empty(SF2->F2_OBSCE), ' Observaciones="' + CFDCarEsp(AllTrim(SF2->F2_OBSCE), .T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TCUSD)), ' TipoCambioUSD="' + Alltrim(Str(SF2->F2_TCUSD)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(Str(SF2->F2_TOTUSD)), ' TotalUSD="' + Alltrim(Str(SF2->F2_TOTUSD,14,2)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) _aTotal[094] := cNodoCCE
[XXX CFDIREL]
(PREREG) !Empty(SF2->F2_RELSAT).Or. !Empty(SF2->F2_SERMAN).Or. !Empty(SF2->F2_DOCMAN)
(PREREG) (_aTotal[001] := IIf(_aTotal[104] .And. Alltrim(SF2->F2_TIPODOC) == "21","",fGetFolRel("S")))
(PREREG) _aTotal[001]
[XXX EMISOR]
(PRE) (_aTotal[001] := ' <cfdi:Emisor' , .T.)
(PRE) (_aTotal[001] += ' Rfc="' + CFDCarEsp(AllTrim(SM0->M0_CGC))+ '"' , .T.)
(PRE) (_aTotal[001] += ' Nombre="' + CFDCarEsp(_aTotal[075],.T.) + '"' , .T.)
(PRE) (_aTotal[001] += ' RegimenFiscal="' + CFDCarEsp(Alltrim(SM0->M0_DSCCNA)) + '"' , .T.)
(PRE) (_aTotal[001] += '/>' , .T.)
(PRE) (_aTotal[001] := _aTotal[001] , .T.)
(PREREG) _aTotal[001]
[XXX RECEPTOR_CLIENTE]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""
(PREREG) AllTrim(SF2->F2_ESPECIE) <> "NDI"
(PREREG) (SA1->(MSSeek(xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA)) , .T.)
(PREREG) (SYA->(MsSeek(xFilial("SYA")+SA1->A1_PAIS)) , .T.)
(PREREG) (_aTotal[001] := ' <cfdi:Receptor' , .T.)
(PREREG) (_aTotal[001] += ' Rfc="' + CFDCarEsp(IIf(!_aTotal[104] .And.(Alltrim(SF2->F2_TIPODOC) == "21" .Or. SF2->F2_GLOBAL == "1"), "XAXX010101000", Alltrim(SA1->A1_CGC))) + '"' , .T.)
(PREREG) (_aTotal[001] += IIf(SF2->F2_GLOBAL <> "1",' Nombre="' + CFDCarEsp(Alltrim(SA1->A1_NOME),.T.) + '"',"") , .T.)
(PREREG) (_aTotal[001] += ' DomicilioFiscalReceptor="' + Alltrim(SA1->A1_CEP) + '"' , .T.)
(PREREG) (_aTotal[001] += Iif(AI0->(ColumnPos("AI0_REGFIS")) > 0,' RegimenFiscalReceptor="' + Alltrim(AI0->AI0_REGFIS) + '"',""), .T.)
(PREREG) (_aTotal[001] += ' UsoCFDI="' + Alltrim(SF2->F2_USOCFDI) + '"' , .T.)
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB)))), (_aTotal[001] += ' NumRegIdTrib="' + CFDCarEsp(AllTrim(AllTrim(SF2->F2_IDTRIB))) + '"' , .T.), "")
(PREREG) IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(AllTrim(SF2->F2_RESIDE)))), (_aTotal[001] += ' ResidenciaFiscal="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SF2->F2_RESIDE,"YA_CCESAT")) + '"' , .T.), "")
(PREREG) (_aTotal[001] += '/>' ,.T.)
(PREREG) (_aTotal[001] := _aTotal[001] , .T.)
(PREREG) _aTotal[001]
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Emisor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SM0->M0_ENDCOB)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(CFDCarEsp(AllTrim(SM0->M0_CEPENT)))), ' Colonia="' + CFDCarEsp(AllTrim(ObtColSAT("S015",AllTrim(SM0->M0_CODZOSE)+ALLTRIM(SM0->M0_CEPENT),1,9,1,4))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SM0->M0_CEPENT))), ' Municipio="' + CFDCarEsp(AllTrim(SM0->M0_CODMUN)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(ObtColSAT("S004",AllTrim(SM0->M0_CEPENT),1,5,6,3))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim("MEX") + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SM0->M0_CEPENT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Emisor>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Receptor' , "")
(POS) cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' <cce11:Domicilio' , "")
(POS) cNodoCCE += IIf(lCCCE, ' Calle="' + CFDCarEsp(AllTrim(SA1->A1_END)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NR_END)), ' NumeroExterior="' + AllTrim(SA1->A1_NR_END) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_NROINT)), ' NumeroInterior="' + AllTrim(SA1->A1_NROINT) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(CFDCarEsp(AllTrim(SA1->A1_BAIRRO))), ' Colonia="' + CFDCarEsp(AllTrim(SA1->A1_BAIRRO)) + '"', "")
(POS) cNodoCCE += IIf(lCCCE .And. !Empty(AllTrim(SA1->A1_MUN)), ' Municipio="' + CFDCarEsp(AllTrim(SA1->A1_MUN),.T.) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Estado="' + CFDCarEsp(Alltrim(Posicione("SX5",1,xFilial("SX5")+"12"+SA1->A1_EST,"X5_DESCRI"))) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' Pais="' + AllTrim(Posicione("SYA",1,xFilial("SYA")+SA1->A1_PAIS,"YA_CCESAT")) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, ' CodigoPostal="' + AllTrim(SA1->A1_CEP) + '"', "")
(POS) cNodoCCE += IIf(lCCCE, '/>' + ( chr(13)+chr(10) ), "")
(POS) cNodoCCE += IIf(lCCCE, ' </cce11:Receptor>' + ( chr(13)+chr(10) ), "")
(POS) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) _aTotal[094] += cNodoCCE
[SD2 CONCEPTO]
(PRE) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.)
(PRE) cNodoCCE := ""
(PRE) DbGoTop()
(PREREG) (cNodoCCE += IIf(lCCCE, ' <cce11:Mercancia' , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE , ' NoIdentificacion="' + Alltrim(SD2->D2_ITEM + SD2->D2_COD) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' FraccionArancelaria="' + Alltrim(SD2->D2_FRACCA) + Alltrim(SD2->D2_NICO) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_CANADU)), ' CantidadAduana="' + Alltrim(Str(SD2->D2_CANADU)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(SD2->D2_FRACCA), ' UnidadAduana="' + AllTrim(ObtColSAT("S014",AllTrim(SD2->D2_FRACCA),1,8,9,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE .And. !Empty(Str(SD2->D2_VALADU)), ' ValorUnitarioAduana="' + Alltrim(Str(SD2->D2_VALADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' ValorDolares="' + Alltrim(Str(SD2->D2_USDADU,14,2)) + '"', ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, '>' + ( chr(13)+chr(10) ) , ""),.T.)
(PREREG) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancia>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:Mercancias>' + ( chr(13)+chr(10) ), ""),.T.)
(POS) (cNodoCCE += IIf(lCCCE, ' </cce11:ComercioExterior>' , ""),.T.)
(POS) _aTotal[094] += cNodoCCE
(POS) (_aTotal[034] := fXMLFUN("CO",.F., IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),.T.)
[XXX CONCEPTOS]
(POS) FsQuery(_aTotal[097],2)
(PREREG) (_aTotal[001] := _aTotal[034] ,.T.)
(PREREG) _aTotal[001]
[XXX IMPUESTOS]
(PREREG) (_aTotal[002] := fXMLFUN("TI",.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.)),.T.)
(PREREG) _aTotal[002]
//IMPUESTOS LOCALES//
(PRE) (_aTotal[095] := fXMLFUN("IL",.F.),.T.)
[XXX COMPLEMENT]
(PREREG) IIf(_aTotal[011],_aTotal[105] := LxFunaCaPo(SF2->F2_FILIAL,SF2->F2_DOC,SF2->F2_SERIE,.F.,IIf(ALLTRIM(SF2->F2_TIPODOC) == "21",.T.,.F.),_aTotal[104]),"")
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]), ' <cfdi:Complemento', ""), .T.)
(PREREG) (_aTotal[001] += IIF(!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095] ) .Or. !Empty(_aTotal[105]),'>',""),.T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.T.,.F.,4))
[XXX COMERCIOEX]
(PREREG) (_aTotal[001] := _aTotal[094],.T.)
(PREREG) _aTotal[001]
[XXX CARTAPORTE]
(PREREG) (_aTotal[001] := _aTotal[105],.T.)
(PREREG) _aTotal[001]
[XXX IMPUESTOLOC]
(PREREG) (_aTotal[001] := _aTotal[095],.T.)
(PREREG) _aTotal[001]
[XXX LEYENDASFIS]
(PREREG) lCCCE := IIf(SuperGetMV("MV_CFDIEXP",.F.,.F.) .And. !Empty(SF2->F2_TIPOPE), .T., .F.) .And. SF2->(FieldPos("F2_CONUNI")) > 0
(PREREG) lCCCE
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , ' <leyendasFisc:LeyendasFiscales version="1.0" >'+ ( chr(13)+chr(10) ), ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF" , ' <leyendasFisc:Leyenda textoLeyenda=', ""), .T.)
(PREREG) (_aTotal[001] += IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="1" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF", '"IMMEX:'+ AllTrim(SA1->A1_PFISICA) +' ' + _aTotal[101] +'" />', IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. SF2->F2_CONUNI=="2" .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",'"IMMEX:'+ AllTrim(SA1->A1_PFISICA) + ' ' + _aTotal[102] +'" />',"")), .T.)
(PREREG) _aTotal[001]
(PREREG) (_aTotal[001] := IIF((!EMPTY(_aTotal[094] ) .or. !EMPTY(_aTotal[095])) .And. !EMPTY(SF2->F2_CONUNI) .And. SA1->A1_CONTRBE == "1" .And. Alltrim(SF2->F2_ESPECIE) == "NF",' </leyendasFisc:LeyendasFiscales>', ""), .T.)
(PREREG) _aTotal[001]
[XXX COMPLEMENT]
(PREREG) (_aTotal[001] := IIF(!EMPTY(_aTotal[094]) .or. !EMPTY(_aTotal[095]) .or. !EMPTY(_aTotal[105]),' </cfdi:Complemento>',""), .T.)
(PREREG) _aTotal[001]
COMPLEMENT C 021 0 ENCODEUTF8(XMLConv("",,,"cfdi:Complemento",.F.,.T.,4))
//[XXX CAD_ORIG]
//(PREREG) _aTotal[033]
[XXX FACTURA]
(PRE) _aTotal[095] := &(GetNewPar("MV_CFDNAF2","Lower(AllTrim(SF2->F2_ESPECIE)) + '_' + Lower(AllTrim(SF2->F2_SERIE)) + '_' + Lower(AllTrim(SF2->F2_DOC)) + '.xml'"))
(ARQ) _aTotal[095]
FACTURA C 019 0 ENCODEUTF8(XMLConv("",,,"cfdi:Comprobante",.F.,.T.,0))
Realizar un respaldo del repositorio del ambiente (archivo .rpo).
Aplicar el parche que fue generado para la issue DMINA-14654.
Desde el módulo Configurador (SIGACFG) realizar las configuraciones al Diccionario de Datos de acuerdo a lo definido en la sección 04. INFORMACIÓN ADICIONAL.
Cancelación ante SAT de Factura de Venta (NF) con Motivo de Cancelación 01 - Comprobante emitido con errores con relación:
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturaciones (MAT467N)
- Incluir y Timbrar el CFDI de una Factura de Venta (NF).
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Cancelación CFDI (FISA817)
- En los parámetros para visualizar la Factura, indicando en la pregunta ¿Tipo de Documento? con la opción Factura.
- Seleccionar la Factura de Venta (NF) que fue creada y timbrada previamente, ejecutar la acción Act. Status.
- Validar que la Factura sea Cancelable con o sin aceptación.
- Seleccionar de nueva cuenta la Factura de Venta (NF), y ejecutar la acción Cancelar.
- En la pantalla "Motivo baja" informar en el campo Motivo cancelación la opción 01 - Compr. Emitido c/errores c/relac., presionar Confirmar.
- Confirmar que se realice la anulación de la Factura, teniendo en cuenta que la solicitud de Cancelación ante el SAT no será realizada.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Facturaciones (MAT467N)
- Incluir una nueva Factura de Venta (NF).
- En el encabezado informar en los campos Serie Sust. (F2_SERMAN) y Núm. Doc. Sust. (F2_DOCMAN) la Factura que fue anulada en Protheus pero no fue Cancelada ante el SAT.
- Presionar Confirmar para guardar la Factura.
- Confirmar la generación y timbrado del Comprobante Fiscal Digital por Internet (CFDI), validar que se haya timbrado la nueva Factura y que se haya Cancelado ante el SAT la Factura a la que se sustituye.
Cancelación ante SAT de Nota de Débito al Cliente (NDC) con Motivo de Cancelación 01 - Comprobante emitido con errores con relación:
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito (MAT465N)
- Incluir y Timbrar el CFDI de una Nota de Débito al Cliente (NDC).
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Cancelación CFDI (FISA817)
- En los parámetros para visualizar la Nota de Débito, indicando en la pregunta ¿Tipo de Documento? con la opción Nota de Débito.
- Seleccionar la Nota de Débito al cliente (NDC) que fue creada y timbrada previamente, ejecutar la acción Act. Status.
- Validar que la Nota de Crédito sea Cancelable con o sin aceptación.
- Seleccionar de nueva cuenta la Nota de Débito (NF), y ejecutar la acción Cancelar.
- En la pantalla "Motivo baja" informar en el campo Motivo cancelación la opción 01 - Compr. Emitido c/errores c/relac., presionar Confirmar.
- Confirmar que se realice la anulación de la Nota de Débito, teniendo en cuenta que la solicitud de Cancelación ante el SAT no será realizada.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito (MAT465N)
- Incluir una nueva Nota de Débito (NDC).
- En el encabezado:
- Informar el campo Relación CFD (F2_RELSAT) con valor 02 - NOTA DE DÉBITO DE LOS DOCUMENTOS RELACIONADOS.
- Informar en los campos Serie Sust. (F2_SERMAN) y Núm. Doc. Sust. (F2_DOCMAN) la Nota de Débito que fue anulada en Protheus pero no fue Cancelada ante el SAT.
- El campo UUIDRelacs (F2_UUIDREL) se deben informar de manera manual los UUID de las Facturas de Venta a las que afecta la Nota de Débito Si se van a relacionar más de un UUID es necesario hacer salto de línea por UUID.
- Presionar Confirmar para guardar la Nota de Débito.
- Confirmar la generación y timbrado del Comprobante Fiscal Digital por Internet (CFDI), validar que se haya timbrado la nueva Nota de Débito y que se haya Cancelado ante el SAT la Nota de Débito a la que se sustituye.
Cancelación ante SAT de Nota de Crédito al Cliente (NCC) con Motivo de Cancelación 01 - Comprobante emitido con errores con relación:
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito (MAT465N)
- Incluir y Timbrar el CFDI de una Nota de Crédito al Cliente (NDC).
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Cancelación CFDI (FISA817)
- En los parámetros para visualizar la Nota de Crédito, indicando en la pregunta ¿Tipo de Documento? con la opción Nota de Crédito.
- Seleccionar la Nota de Crédito al cliente (NCC) que fue creada y timbrada previamente, ejecutar la acción Act. Status.
- Validar que la Nota de Crédito sea Cancelable con o sin aceptación.
- Seleccionar de nueva cuenta la Nota de Crédito (NCC), y ejecutar la acción Cancelar.
- En la pantalla "Motivo baja" informar en el campo Motivo cancelación la opción 01 - Compr. Emitido c/errores c/relac., presionar Confirmar.
- Confirmar que se realice la anulación de la Nota de Débito, teniendo en cuenta que la solicitud de Cancelación ante el SAT no será realizada.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generac. de Notas de Crédito y Débito (MAT465N)
- Incluir una nueva Nota de Crédito (NCC).
- En el encabezado:
- Informar el campo Relación CFD (F1_RELSAT) con valor 01 - NOTAS DE CRÉDITO DE DOCUMENTOS RELACIONADOS o 03 - DEVOLUCIÓN DE MERCANCÍAS SOBRE FACTURAS O TRASLADOS PREVIOS.
- Informar en los campos Serie Sust. (F1_SERMAN) y Núm. Doc. Sust. (F1_DOCMAN) la Nota de Crédito que fue anulada en Protheus pero no fue Cancelada ante el SAT.
- El campo UUIDRelacs (F1_UUIDREL) se deben informar los UUID de las Facturas de Venta a las que afecta la Nota de Crédito. Si se van a relacionar más de un UUID es necesario hacer salto de línea por UUID (Está acción se realiza de manera automática, usar la acción Doc Orig que se encuentra en Otras acciones)
- Presionar Confirmar para guardar la Nota de Crédito.
- Confirmar la generación y timbrado del Comprobante Fiscal Digital por Internet (CFDI), validar que se haya timbrado la nueva Nota de Crédito y que se haya Cancelado ante el SAT la Nota de Crédito a la que se sustituye.
Cancelación ante el SAT de Factura de Venta (NF) generada desde Pedido de Venta, con Motivo de Cancelación 01 - Comprobante emitido con errores con relación:
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Pedidos | Pedidos de Venta (MATA410).
- Incluir un nuevo pedido con uno o más productos. El campo Doc. Gener. (C5_DOCGER) debe indicar 1 - Factura.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Pedidos | Liberación de Pedidos de Venta (MATA440).
- Seleccionar el pedido registrado y hacer clic en la opción Aprobar, Confirmar liberación.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Pedidos | Liberación de Crédito y Stock (MATA456).
- Seleccionar cada ítem del pedido registrado y hacer clic en la opción Manual, confirmar liberación haciendo clic en el botón Ok.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generación de Notas (MATA468N).
- En la pregunta ¿Generación por ?, seleccionar Pedidos.
- Proporcionar los parámetros del proceso.
- Marcar los ítems del Pedido de Venta registrado. En Otras acciones, dar clic en Genera Fact.
- Hacer doble clic sobre la columna Serie y proporcionar la Serie (F2_SERIE) a utilizar.
- A continuación, hacer clic en el botón Ok y confirmar la generación y timbrado del CFDI correspondiente.
- Verificar que el timbrado del CFDI sea satisfactorio. La impresión (generación de PDF) es opcional.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Cancelación CFDI (FISA817)
- En los parámetros, indicar en la pregunta ¿Tipo de Documento? la opción Factura.
- Seleccionar la Factura (NF) que fue creada y timbrada previamente, ejecutar la acción Act. Status.
- Validar que la Factura sea Cancelable con o sin aceptación.
- Seleccionar de nueva cuenta la Factura (NF), ejecutar la acción Cancelar.
- En la pantalla "Motivo baja" informar en el campo Motivo cancelación la opción 01 - Compr. Emitido c/errores c/relac., presionar Confirmar.
- Confirmar que se realice la anulación de la Factura, teniendo en cuenta que la solicitud de Cancelación ante el SAT no será realizada.
- Responder afirmativamente al mensaje ¿Dejar pedido aprobado?.
- Visualizar resultado del proceso:
- En caso de ser necesario, se deberá volver a Liberar el Pedido y/o los Ítems por Crédito/Stock, pasos previos 3 a 6.
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Generación de Notas (MAT468N)
- En la pregunta ¿Generación por ?, seleccionar Pedidos.
- Proporcionar los parámetros del proceso.
- Marcar los ítems del Pedido de Venta registrado. En Otras acciones, dar clic en Genera Fact.
- Hacer doble clic sobre la columna Serie y proporcionar la Serie (F2_SERIE) a utilizar.
- Hacer doble clic sobre alguna de las columnas Serie Sust. o No. Doc Sust:
- Se mostrará una ventana donde se registrará el documento a sustituir
- Utilizar la consulta estándar para seleccionar el documento cancelado previamente:
- Confirmar la generación de la factura:
- Confirmar la generación y timbrado del CFDI correspondiente.
- Posterior al timbrado del CFDI también se procesa la cancelación del CFDI relacionado.
- Verificar que tanto el timbrado como la transmisión de cancelación de los CFDI correspondientes sean satisfactorios.
Consideraciones adicionales al cancelar documentos com motivo 01 - Comprobantes Emitidos c/errores c/relac.
Para el caso en el que se realice la creación de una Factura para sustituir a otra que fue anulada en Protheus con motivo 01 - Comprobantes Emitidos c/errores c/relac., pero por algún inconveniente y durante el proceso de transmisión se presente error en la solicitud de cancelación de la factura anulada con motivo 01, como se muestra en el siguiente ejemplo:
Se deberá seguir el siguiente procedimiento para realizar nuevamente la solicitud de cancelación de la factura ante el SAT:
- En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Cancelación CFDI (FISA817)
- En los parámetros, indicar en la pregunta ¿Tipo de Documento? la opción Factura.
- Ir al menú Otras acciones | Solic. Canc. Pendientes, donde se podrá informar los parámetros ¿Serie? y ¿Número de Documento? del cual se realizara nuevamente la solicitud de cancelación ante el SAT:
En la pregunta ¿Serie? se podrá ingresar a consultar y seleccionar el documento que se encuentra pendiente por anular ante el SAT. - Dar clic en OK para realizar nuevamente la solicitud de cancelación.
- Verificar la respuesta para la solicitud de cancelación.
Nota: Este proceso se podrá realizar un número de veces que el usuario requiera hasta que se obtenga una respuesta satisfactoria a la solicitud de cancelación.
04. INFORMACIÓN ADICIONAL
Preguntas en el archivo SX1 - Preguntas
Grupo: F817CAN
Orden | Título | Tipo | Tamaño | Decimal | Objeto | Consulta estándar |
---|---|---|---|---|---|---|
01 | ¿Serie? | C | 3 | 0 | Get | DOCSUS |
02 | ¿Número de documento? | C | 20 | 0 | Get |
Consulta Estándar en el archivo SXB – Consulta Estándar:
Consulta: DOCSUS
Alias | Tipo | Secuencia | Columna | Descripción | Contenido |
DOCSUS | 1 | 01 | DB | Documento Sustituye | SF3 |
DOCSUS | 2 | 01 | 05 | Serie Fact. + Factur | |
DOCSUS | 4 | 01 | 01 | Serie | F3_SERIE |
DOCSUS | 4 | 01 | 02 | Número Documento | F3_NFISCAL |
DOCSUS | 4 | 01 | 03 | Cliente | F3_CLIEFOR |
DOCSUS | 4 | 01 | 04 | Tienda | F3_LOJA |
DOCSUS | 4 | 01 | 05 | UUID | F3_CNATREC |
DOCSUS | 5 | 01 | SF3->F3_SERIE | ||
DOCSUS | 5 | 02 | SF3->F3_NFISCAL | ||
DOCSUS | 6 | 01 | F3_TIPOMOV == "V" .And. F3_STATUS == "S" .And. F3_ESPECIE == cEspecie |
Configurar los siguientes campos en la tabla SF1 - Encabezado de Fact. de Entrada:
Atributo | Contenido |
---|---|
Campo | F1_SERMAN |
Tipo | C - Caracter |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Grupo de Campos | 094 - Id de Control dos doc.fiscales |
Tit. Español | Serie Sust. |
Desc. Español | Serie del Doc. Sustituye |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | Si |
Help | Indica la Serie del Documento que sustituye a un documento que será cancelado ante el SAT. Al informarse este campo será generado en automático un nodo cfdi:CfdiRelacionados donde el atributo TipoRelacion sea 04 (Sustitución de los CFDI Previos). |
Atributo | Contenido |
---|---|
Campo | F1_DOCMAN |
Tipo | C - Caracter |
Tamaño | 20 |
Decimal | 0 |
Formato | @! |
Val. Sistema | LxVDocSus(M->F1_SERMAN, M->F1_DOCMAN) |
Contexto | Real |
Propiedad | Modificar |
Grupo de Campos | 018 - Documento de entrada/salida |
Tit. Español | No. Doc Sust |
Desc. Español | No. de Doc. Sustituye |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica la Número del Documento que sustituye a un documento que será cancelado ante el SAT. Al informarse este campo será generado en automático un nodo cfdi:CfdiRelacionados donde el atributo TipoRelacion sea 04 (Sustitución de los CFDI Previos). |
Configurar los siguientes campos en la tabla SF2 - Encabezado de Fact. de Salida:
Atributo | Contenido |
---|---|
Campo | F2_SERMAN |
Tipo | C - Caracter |
Tamaño | 3 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Grupo de Campos | 094 - Id de Control dos doc.fiscales |
Tit. Español | Serie Sust. |
Desc. Español | Serie del Doc. Sustituye |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica la Serie del Documento que sustituye a un documento que será cancelado ante el SAT. Al informarse este campo será generado en automático un nodo cfdi:CfdiRelacionados donde el atributo TipoRelacion sea 04 (Sustitución de los CFDI Previos). |
Atributo | Contenido |
---|---|
Campo | F2_DOCMAN |
Tipo | C - Caracter |
Tamaño | 20 |
Decimal | 0 |
Formato | @! |
Val. Sistema | LxVDocSus(M->F2_SERMAN, M->F2_DOCMAN) |
Contexto | Real |
Propiedad | Modificar |
Tit. Español | No. Doc Sust |
Desc. Español | No. de Doc. Sustituye |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica la Número del Documento que sustituye a un documento que será cancelado ante el SAT. Al informarse este campo será generado en automático un nodo cfdi:CfdiRelacionados donde el atributo TipoRelacion sea 04. |
Configurar los siguientes campos en la tabla SF3 - Libros Fiscales:
Atributo | Contenido |
Campo | F3_STATUS |
Tipo | C - Caracter |
Tamaño | 1 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Tit. Español | Status Cance |
Desc. Español | Status de Cancelación SAT |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica si el documento fue a Anulado en Protheus y está pendiente de solicitud de Cancelación ante el SAT. ('S' es Si y vacío es No). |
Atributo | Contenido |
Campo | F3_CODNFE |
Tipo | C - Caracter |
Tamaño | 35 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Tit. Español | Nom. XML Anu |
Desc. Español | Nombre de XML Anulado |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica el nombre del archivo XML del documento que fue a Anulado en Protheus y está pendiente de solicitud de Cancelación ante el SAT. |
Atributo | Contenido |
Campo | F3_MOTIVO |
Tipo | C - Caracter |
Tamaño | 2 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Tit. Español | Motivo Canc. |
Desc. Español | Motivo de Cancelación |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica el motivo de Cancelación del documento fiscal de acuerdo al catálogo de Motivos de cancelación definido por el SAT. |
Atributo | Contenido |
Campo | F3_CNATREC |
Tipo | C - Caracter |
Tamaño | 36 |
Decimal | 0 |
Formato | @! |
Contexto | Real |
Propiedad | Modificar |
Tit. Español | UUID Doc. |
Desc. Español | UUID Doc. Anulado |
Obligatorio | No |
Usado | Si |
Exhibe en Browse | No |
Help | Indica el UUID del documento fiscal que fue anulado pero que se tiene pendiente la Solicitud de Cancelación ante el SAT. |
05. ASUNTOS RELACIONADOS
- Facturación Electrónica para México de Comprobantes Fiscales Digitales por Internet (CFDI) Versión 4.0
- Facilitador para Facturas de Traslado con Carta Porte
- Facilitador de generación de Facturas de Traslado con Carta Porte
- Transmisión de documento con Complemento de Carta Porte por concepto MaterialPeligroso
- Cancelación de CFDI con Complemento de Recepción de Pago versión 4.0
- documento_tecnico
- base_conocimiento
- protheus
- mi
- mercado_internacional
- mexico
- mex
- totvs_backoffice
- 13194441
- 13133116
- 13225418
- 13306223
- 13315625
- 13399425
- 13420975
- dmina_14587
- dmina_14678
- dmina_14770
- dmina_14787
- dmina_14870
- dmina_14942
- sigafat
- facturacion
- sigafin
- financiero
- facturacion_electronica_4_0
- cfdi_4_0
- cancelacion_cfdi_4_0
- complemento_recepcion_pago_version_2_0
- dmina_14654
- 13846019
- dmina_15250
- 13901259
- dmina_15317