Árvore de páginas

Versões comparadas

Chave

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

...

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(4)
   
   // 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], Array(2) )
   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], Array(1) )
   aAdd( aCartaPorte[3][1], {"A1Z_OPERAD", "000001"} )

   // Propietarios/Arrendadores
   aAdd( aCartaPorte[4], Array(1) )
   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

Informações
titleImportante


Considerar los siguientes criterios sobre los datos para la factura de tipo Traslado y para la Carta Porte:

Los campos considerados en el ejemplo son los esenciales para la aceptación de la factura así como para la generación del CFDI.

Encabezado de la factura

  • En el ejemplo se muestra la forma estándar de obtener el consecutivo de documento de acuerdo a la serie. El sistema realiza la actualización para el próximo consecutivo.

Ítems de la factura

  • El Precio Unitario (D2_PRCVEN) y el Valor Total (D2_TOTAL), no deben ser incluidos. Se se envían en cero, se rechaza la factura.
  • El Peso (D2_PESO) debe ser enviado con un valor mayor a 0.

Carta Porte

  • El arreglo debe tener 4 elementos principales, del 2 al 4 deben ser sub-arreglos.
  • Si no se requiere alguno de los elementos, por ejemplo el 4to, Propietarios/Arrendatarios, el elemento se debe definir aunque no es necesario incluir el sub-arreglo.

Todos los campos se validan con las mismas reglas que en la captura manual, incluso aquellos que no son obligatorios. Para detalles, consulte el documento técnico cuyo enlace se encuentra la sección 05. Asuntos relacionados. 



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

...