Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DATOS GENERALES


Producto

Solucoes_espanhol
SolucaoTOTVS Backoffice

Línea de producto: 

Linhas_totvs_espanhol
LinhaLínea Protheus

Segmento:

Segmentos_totvs_espanhol
SegmentoBackoffice

Módulo:SIGAFAT - Facturación
Función:
RutinaNombre TécnicoFecha
LOCXNFDocumentos fiscales19/07/2022
LOCXMEXFunciones de documentos fiscales localizadas para México20/07/2022
País:México
Ticket:13513153 | 14326293
Requisito/Story/Issue (informe el requisito vinculado):DMINA-14988, DMINA-15837


02. SITUACIÓN/REQUISITO

Al intentar generar una factura con complemento de Carta Porte desde la rutina automática MATA467N, manda log del campo de Precio Unitario (D2_PRCVEN) como inválido cuando se coloca en 0.


03. SOLUCIÓN

Modificación de rutinas para considerar Carta Porte desde ExecAuto:

...

Totvs custom tabs box
tabsPre-condiciones, Procedimiento, Paso 03, Paso 04
idspaso1,paso2
Totvs custom tabs box items
defaultyes
referenciapaso1
  1. Realizar un respaldo del repositorio del ambiente (archivo .rpo).
  2. Aplicar el parche que fue generado para la issue DMINA-14988.
  3. Crear una función de usuario para generar una factura de traslado con Carta Porte a través de ExecAuto de la rutina MATA467N (Ver ejemplo M467AUTO).
  4. Compilar la rutina y agregarla al módulo SIGAFAT, menú Actualizaciones | Facturación.
Totvs custom tabs box items
defaultno
referenciapaso2
  1. En el módulo de Facturación (SIGAFAT) ir al menú Actualizaciones | Facturación | Factura de Traslado Automática (M467AUTO).
  2. Generar la factura de Traslado con Carta Porte a través de ExecAuto.
  3. Verificar la correcta generación de la factura y de la Carta Porte.


04. INFORMACIÓN ADICIONAL


Bloco de código
languagedelphi
themeEclipse
titleM467AUTO - Función de usuario ejemplo para generar una factura de traslado con carta porte.
linenumberstrue
#include "Protheus.ch"

User Function M467Auto()
   Processa( { || GeneraNF() } , "", "Generando NF con carta porte..." )
Return

Static Function GeneraNF()
   Local aCab			:= {}
   Local aLinha			:= {}
   Local aItens			:= {}
   Local aCartaPorte	:= {}
   Local cSerie			:= "A  "
   Local cDoc			:= ""
   Local cCertFol		:= SuperGetMv("MV_CFDI_CS",,"")
   Local cProd			:= PadR("TST000000000037",20)

   Private lMsErroAuto := .F.

   // Consecutivo factura
   SX5->(DBSetOrder(1))
   SX5->(MsSeek(xFilial("SX5")+"01"+cSerie))
   cDoc := IIf( SX5->(Found()), PadR(Trim(X5Descri()),20) , StrZero(126,20,0) )

   // Encabezado de factura
   AAdd( aCab, { "F2_CLIENTE", "016082"						, Nil } )
   AAdd( aCab, { "F2_LOJA"   , "01"							, Nil } )
   AAdd( aCab, { "F2_SERIE"  , cSerie						, Nil } )
   AAdd( aCab, { "F2_DOC"    , cDoc							, Nil } )
   AAdd( aCab, { "F2_COND"   , "015"						, Nil } )
// AAdd( aCab, { "F2_CONUNI" , "2"							, Nil } )
   AAdd( aCab, { "F2_EMISSAO", dDataBase					, Nil } )
   AAdd( aCab, { "F2_EST"    , "QRO"						, Nil } )
   AAdd( aCab, { "F2_TIPO"   , "N"							, Nil } )
   AAdd( aCab, { "F2_ESPECIE", "NF   "						, Nil } )
   AAdd( aCab, { "F2_PREFIXO", "A"							, Nil } )
   AAdd( aCab, { "F2_MOEDA"  , 1							, Nil } )
   AAdd( aCab, { "F2_TXMOEDA", 1							, Nil } )
   AAdd( aCab, { "F2_FORMUL" , "S"							, Nil } )
   AAdd( aCab, { "F2_TIPODOC", "21"							, Nil } )
   AAdd( aCab, { "F2_USOCFDI", "P01"						, Nil } )
   AAdd( aCab, { "F2_TPCOMPL", "S"							, Nil } )
   AAdd( aCab, { "F2_APROFOL", "1"							, Nil } )
   AAdd( aCab, { "F2_CERTFOL", cCertFol						, Nil } )

   // Ítems de la factura
   aLinha := {}
   AAdd( aLinha, { "D2_COD"    , cProd						, Nil } )
   AAdd( aLinha, { "D2_UM"     , "UN"						, Nil } )
   AAdd( aLinha, { "D2_QUANT"  , 1							, Nil } )
// AAdd( aLinha, { "D2_PRCVEN" , 0							, Nil } )   // En documento tipo transferencia no informar este campo, si se envía en cero será rechazado
// AAdd( aLinha, { "D2_TOTAL"  , 0							, Nil } )   // Aplica el mismo criterio que precio unitario
   AAdd( aLinha, { "D2_PESO"   , 1							, Nil } )
   AAdd( aLinha, { "D2_TES"    , "518"						, Nil } )
   AAdd( aLinha, { "D2_ESPECIE", "NF   "					, Nil } )
   AAdd( aItens, aLinha)

   //********** Carta porte **********
   aCartaPorte := { Array(0), Array(2,0), Array(1,0), Array(1,0) }
   
   // Generales
   aAdd( aCartaPorte[1], {"A1X_INTERN", "N"} )
   aAdd( aCartaPorte[1], {"A1X_ENTSAL", "S"} )
   aAdd( aCartaPorte[1], {"A1X_TRANSP", "01"} )
   aAdd( aCartaPorte[1], {"A1X_PERSCT", "TPAF02"} )
   aAdd( aCartaPorte[1], {"A1X_PERMIS", "132579"} )
   aAdd( aCartaPorte[1], {"A1X_ASEGUR", "ASEMEX"} )
   aAdd( aCartaPorte[1], {"A1X_POLIZA", "246800"} )
   aAdd( aCartaPorte[1], {"A1X_VEHIC" , "00000001"} )

   // Ubicaciones
   aAdd( aCartaPorte[2][1], {"A1Y_TIPEST", "O"} )
   aAdd( aCartaPorte[2][1], {"A1Y_RFCORI", "XAXX010101000"} )
   aAdd( aCartaPorte[2][1], {"A1Y_NOMORI", "UBICACION ORIGEN"} )
   aAdd( aCartaPorte[2][1], {"A1Y_FECSAL", CtoD("12/07/2022")} )
   aAdd( aCartaPorte[2][1], {"A1Y_HRASAL", "12:00:00"} )
   aAdd( aCartaPorte[2][1], {"A1Y_CALORI", "DIRECCION ORIGEN"} )
   aAdd( aCartaPorte[2][1], {"A1Y_EXTORI", "1020"} )
   aAdd( aCartaPorte[2][1], {"A1Y_EDOORI", "QUE"} )
   aAdd( aCartaPorte[2][1], {"A1Y_CPORI" , "76000"} )
   aAdd( aCartaPorte[2][1], {"A1Y_COLORI", "0001"} )
   aAdd( aCartaPorte[2][1], {"A1Y_LOCORI", "01"} )
   aAdd( aCartaPorte[2][1], {"A1Y_MUNORI", "014"} )
   aAdd( aCartaPorte[2][1], {"A1Y_PAIORI", "MEX"} )
   
   aAdd( aCartaPorte[2][2], {"A1Y_TIPEST", "D"} )
   aAdd( aCartaPorte[2][2], {"A1Y_DISREC", 15} )
   aAdd( aCartaPorte[2][2], {"A1Y_RFCORI", "XAXX010101000"} )
   aAdd( aCartaPorte[2][2], {"A1Y_NOMORI", "UBICACION DESTINO"} )
   aAdd( aCartaPorte[2][2], {"A1Y_FECSAL", CtoD("12/07/2022")} )
   aAdd( aCartaPorte[2][2], {"A1Y_HRASAL", "16:00:00"} )
   aAdd( aCartaPorte[2][2], {"A1Y_CALORI", "DIRECCION DESTINO"} )
   aAdd( aCartaPorte[2][2], {"A1Y_EXTORI", "3004"} )
   aAdd( aCartaPorte[2][2], {"A1Y_EDOORI", "QUE"} )
   aAdd( aCartaPorte[2][2], {"A1Y_CPORI" , "76246"} )
   aAdd( aCartaPorte[2][2], {"A1Y_COLORI", "0001"} )
   aAdd( aCartaPorte[2][2], {"A1Y_MUNORI", "011"} )
   aAdd( aCartaPorte[2][2], {"A1Y_PAIORI", "MEX"} )

	// Operadores
   aAdd( aCartaPorte[3][1], {"A1Z_OPERAD", "000001"} )

   // Propietarios/Arrendadores
   aAdd( aCartaPorte[4][1], {"AE0_TIPO"  , "P"} )
   aAdd( aCartaPorte[4][1], {"AE0_PARTE" , "PT01"} )
   aAdd( aCartaPorte[4][1], {"AE0_TRANSP", "000001"} )

   // Rutina automática
   MSExecAuto( { |x,y,z,w| Mata467n(x,y,z,,,,w) }, aCab, aItens, 3, aCartaPorte )   //3-Incluir, 5-Excluir e 6-Cancelar

   If lMsErroAuto
   	  MsgStop("Error en la grabación de la factura con carta porte.")
   	  MostraErro()
   Else
   	  MsgAlert("Factura incluida con éxito.")
   EndIf

Return

...

Card documentos
InformacaoEsta solución aplica para ambiente con CFDI versión 3.3 o 4.0.
Titulo¡IMPORTANTE!


05. ASUNTOS RELACIONADOS

DT CFDI con Complemento Carta Porte versión 2.0 MEX

...