Duda
¿Cuál es el punto de entrada para agregar atributos opcionales en la factura electrónica?
Ambiente
Cross Segmentos - TOTVS BackOffice (Línea Protheus) - MI - Facturación (SIGAFAT) - A partir de la versión 12
Solución
Para poder enviar los atributos opcionales disponibles en las clases de los web services de The Factory HKA en los documentos facturas de venta, notas de débito o notas de crédito, existe el punto de entrada M486OWSCOL;
1. Verifique que cuenta con la rutina M486XFUNCO con una fecha igual o posterior al día 28/04/2020;
2. Compile el punto de entrada M486OWSCOL, el cual recibe los siguientes parámetros:
- Serie del documento.
- Folio del documento.
- Código del Cliente.
- Código de la Tienda.
- Objeto del XML (Contiene la estructura estándar del XML generado Protheus).
- Opción (Indica a qué nivel se agregarán los atributos opcionales: 1 = Nivel documento y 2 = Nivel ítem).
- Objeto con atributos del web services de The Factory HKA (Solo atributos de la clase FacturaGeneral).
Ejemplo del Punto de Entrada
#include 'protheus.ch'
User Function M486OWSCOL()
Local cSerieDoc := PARAMIXB[1] //Serie
Local cNumDoc := PARAMIXB[2] //Número de Documento
Local cCodCli := PARAMIXB[3] //Código de Cliente
Local cCodLoj := PARAMIXB[4] //Código de la Tienda
Local oXML := PARAMIXB[5] //Objeto del XML
Local nOpc := PARAMIXB[6] //1=Nivel documento 2=Nivel detalle
Local oWS := PARAMIXB[7] //Objeto de web services
Local nItem := Val(oXML:_CBC_ID:TEXT)
Local cCodProd := ""
Local cSDITem := ""
Local cFilSD := xFilial("SD2")
If nOpc == 1 //Encabezado
//F2_FILIAL+F2_DOC+F2_SERIE+F2_CLIENTE+F2_LOJA+F2_FORMUL+F2_TIPO (Índice 1)
//Clase oWSCliente
oWS:oWSCliente:cnombreComercial := "NOMBRE COMERCIAL PE"
//Clase oWSterminosEntrega
oWS:oWSterminosEntrega := Service_TerminosDeEntrega():New()
oWS:oWSterminosEntrega:ccostoTransporte:= "18.00"
ElseIf nOpc == 2 //Detalle del documento
cCodProd := Padr(oXML:_FE_ITEM:_CAC_SELLERSITEMIDENTIFICATION:_CBC_ID:TEXT,TamSX3("D2_COD")[1],' ')
cSDITem := Padl(oXML:_CBC_ID:TEXT,TamSX3("D2_ITEM")[1],'0')
dbSelectArea("SD2")
SD2->(dbSetOrder(3)) //D2_FILIAL + D2_DOC + D2_SERIE + D2_CLIENTE + D2_LOJA + D2_COD + D2_ITEM
If SD2->(dbSeek( cFilSD + cNumDoc + cSerieDoc + cCodCli + cCodLoj + cCodProd + cSDITem))
//Clase oWSextras (Factura_Detalle)
oWS:oWSextras := Service_ArrayOfExtras():New()
oWSExtDet := Service_Extras():NEW()
oWSExtDet:ccontrolInterno1 := "NO. SERIE"
oWSExtDet:cnombre := "1"
oWSExtDet:cpdf := "1"
oWSExtDet:cvalor := SD2->D2_NUMSERI
oWSExtDet:cxml := "1"
aAdd(oWS:oWSextras:oWSextras,oWSExtDet)
EndIf
EndIf
Return Nil
Nota: En el punto de entrada de ejemplo, se llenan atributos que son opcionales a nivel documento y nivel detalle; realizando la bifurcación mediante el parámetro Opción (PARAMIXB[6]).
IMPORTANTE:
- Si no se encuentran activados los atributos de una clase, es necesario hacerlo de la siguiente manera Service_TerminosDeEntrega():New() haciendo uso del método New.
- Se puede hacer uso de los nodos del XML estándar generado desde protheus, el cual es recibido en el parámetro Objeto del XML (PARAMIXB[5]).
- Hacer uso de la variable cEspecie para definir regla de negocio por tipo de documento (NF, NDC o NCC).
0 Comentarios