01. DATOS GENERALES

Producto:

TOTVS Backoffice

Línea de producto:

Línea Protheus

Segmento:

Backoffice

Módulo:

SIGAFAT - Facturación

Función:

MAPVLNFS - Generación de documento de salida a partir de ítems de Pedido(s) de venta

Alcances:

Microsiga Protheus 12

Versiones:

Microsiga Protheus 12

Compatible países:

Todos

Sistemas operativos:

Todos

Compatible con las bases de datos:

Todos

Nivel de acceso:

Nivel 1 (Acceso Clientes)

Idiomas:

Todos

02. DESCRIPCIÓN

Función utilizada para la generación del Documento fiscal de salida a partir de ítems del Pedido de venta.

IMPORTANTE

La función MaPvlNfs no es responsable por validar los bloqueos de los ítems liberados (SC9). De esta manera, la personalización se vuelve responsable por la verificación de los bloqueos de Stock (C9_BLEST) y Crédito (C9_BLCRED), de acuerdo con la regla de negocio implementada por el desarrollador.

03. SINTAXIS

MaPvlNfs( < aPvlNfs >, < cSerieNFS >, [ lMostraCtb ], [ lAglutCtb ], [ lCtbOnLine ], [ lCtbCusto ], [ lReajuste ], [ nCalAcrs ], [ nArredPrcLis ], [ lAtuSA7 ],  [ lECF ], [ cEmbExp ], [ bAtuFin ], [ bAtuPGerNF ], [ bAtuPvl ], [ bFatSE1 ], [ dDataMoe ], [ lJunta ] )

04. PARÁMETROS

Nombre

Tipo

Descripción

Estándar

Obligatorio

Referencia

aPvlNfs

Array

Array con los ítems que se generarán



cSerieNFS

Carácter

Serie de la factura



lMostraCtb

Lógico

Muestra asiento contable


No


lAglutCtb

Lógico

Agrupa asiento contable


No


lCtbOnLine

Lógico

Contabiliza on-line


No


lCtbCusto

Lógico

Contabiliza costo on-line


No


lReajuste

Lógico

Reajuste de preció en la factura


No


nCalAcrs

Numérico

Tipo de aumento financiero


No


nArredPrcLis

Numérico

Tipo de redondeo


No


lAtuSA7

Lógico

Actualiza vínculo Cliente vs. Producto


No


lECF

Lógico

Comprobante fiscal


No


cEmbExp

Carácter

Número de embarque de exportación


No


bAtuFin

Bloque de código

Bloque de código para complemento de actualización de los títulos financieros


No


bAtuPGerNF

Bloque de código

Bloque de código para complemento de actualización de los datos después de la generación de la factura

{||}

No


bAtuPvl

Bloque de código

Bloque de código de actualización del Pedido de venta antes de la generación de la factura

{||}

No


bFatSE1

Bloque de código

Bloque de código para indicar si el valor del Título por cobrar se grabará en el campo F2_VALFAT cuando el parámetro MV_TMSMFAT esté con el valor igual a "2".

{|| .T. }

No


dDataMoe

Fecha

Fecha de la cotización para la conversión de los valores de la moneda del Pedido de venta a la moneda fuerte

dDatabase

No


lJunta

Lógico

Agrupa pedidos iguales

.F.

No


05. DEVOLUCIÓN

cNumNFS - Tipo: Caractere - Número do Documento Fiscal de Saída

06. EJEMPLO

#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

User Function MyPVLNFS()

    Local aPvlDocS := {}
    Local nPrcVen := 0
    Local cC5Num  := "pcpAO9"
    Local cSerie  := "001"
    Local cEmbExp := ""
    Local cDoc    := ""

    PREPARE ENVIRONMENT EMPRESA "T1" SUCURSAL "D MG 01 " MÓDULO "FAT" TABLES "SF2","SD2","SA1","SA2","SB1","SB2","SF4","SED","SE1"

    SC5->(DbSetOrder(1))
    SC5->(MsSeek(xFilial("SC5")+cC5Num))

    SC6->(dbSetOrder(1))
    SC6->(MsSeek(xFilial("SC6")+SC5->C5_NUM))

    //Es necesario cargar el grupo de preguntas MT460A, si no se ejecuta con los valores estándar.
    Pregunta("MT460A",.F.)

    // Obtener los datos de cada ítem del pedido de ventas liberado para generar el Documento de salida
    While SC6->(!Eof() .And. C6_FILIAL == xFilial("SC6")) .And. SC6->C6_NUM == SC5->C5_NUM

        SC9->(DbSetOrder(1))
        SC9->(MsSeek(xFilial("SC9")+SC6->(C6_NUM+C6_ITEM))) //SUCURSAL+NÚMERO+ÍTEM

        SE4->(DbSetOrder(1))
        SE4->(MsSeek(xFilial("SE4")+SC5->C5_CONDPAG) )  //SUCURSAL+CONDICIÓN PAGO

        SB1->(DbSetOrder(1))
        SB1->(MsSeek(xFilial("SB1")+SC6->C6_PRODUTO))    //SUCURSAL+PRODUCTO

        SB2->(DbSetOrder(1))
        SB2->(MsSeek(xFilial("SB2")+SC6->(C6_PRODUTO+C6_LOCAL))) //SUCURSAL+PRODUCTO+LOCAL

        SF4->(DbSetOrder(1))
        SF4->(MsSeek(xFilial("SF4")+SC6->C6_TES))   //SUCURSAL+TES

        nPrcVen := SC9->C9_PRCVEN
        If ( SC5->C5_MOEDA <> 1 )
            nPrcVen := xMoeda(nPrcVen,SC5->C5_MOEDA,1,dDataBase)
        EndIf

		If AllTrim(SC9->C9_BLEST) == "" .And. AllTrim(SC9->C9_BLCRED) == ""
        	AAdd(aPvlDocS,{ SC9->C9_PEDIDO,;
                        	SC9->C9_ITEM,;
                        	SC9->C9_SEQUEN,;
                        	SC9->C9_QTDLIB,;
                        	nPrcVen,;
                        	SC9->C9_PRODUTO,;
                        	.F.,;
                        	SC9->(RecNo()),;
                        	SC5->(RecNo()),;
                        	SC6->(RecNo()),;
                        	SE4->(RecNo()),;
                        	SB1->(RecNo()),;
                        	SB2->(RecNo()),;
                        	SF4->(RecNo())})
		EndIf

        SC6->(DbSkip())
    EndDo

	SetFunName("MATA461")
    
    cDoc := MaPvlNfs(  /*aPvlNfs*/         aPvlDocS,;  // 01 - Array con los ítems que se generarán
                       /*cSerieNFS*/       cSerie,;    // 02 - Serie de la factura
                       /*lMostraCtb*/      .F.,;       // 03 - Muestra asiento contable
                       /*lAglutCtb*/       .F.,;       // 04 - Agrupa asiento contable
                       /*lCtbOnLine*/      .F.,;       // 05 - Contabiliza on-line
                       /*lCtbCusto*/       .T.,;       // 06 - Contabiliza costo on-line
                       /*lReajuste*/       .F.,;       // 07 - Reajuste de precio en la factura
                       /*nCalAcrs*/        0,;         // 08 - Tipo de aumento financiero
                       /*nArredPrcLis*/    0,;         // 09 - Tipo de redondeo
                       /*lAtuSA7*/         .T.,;       // 10 - Actualiza vínculo Cliente vs. Producto
                       /*lECF*/            .F.,;       // 11 - Comprobante fiscal
                       /*cEmbExp*/         cEmbExp,;   // 12 - Número del embarque de exportación
                       /*bAtuFin*/         {||},;      // 13 - Bloque de código para complemento de actualización de los títulos financieros
                       /*bAtuPGerNF*/      {||},;      // 14 - Bloque de código para complemento de actualización de los datos después de la generación de la factura
                       /*bAtuPvl*/         {||},;      // 15 - Bloque de código de actualización del Pedido de venta antes de la generación de la factura
                       /*bFatSE1*/         {|| .T. },; // 16 - Bloque de código para indicar si el valor del Título por cobrar se grabará en el campo F2_VALFAT cuando el parámetro MV_TMSMFAT esté con el valor igual a "2".
                       /*dDataMoe*/        dDatabase,; // 17 - Fecha de la cotización para conversión de los valores de la Moneda del Pedido de venta a la Moneda fuerte
                       /*lJunta*/          .F.)        // 18 - Agrupa pedidos iguales
    
    If !Empty(cDoc)
        Conout("Documento de salida: " + cSerie + "-" + cDoc + ", generado con éxito.")
    EndIf

    RESET ENVIRONMENT

Return .T.

07. OTRAS INFORMACIONES

Para la Generación del Título y Formulario GNRE, la pantalla de preguntas de la rutina Generación de documento de salida (MATA460A) debe estar cumplimentada como "" en las preguntas de Generación de Título y de Formulario de ICMS Propio, y el parámetro MV_GNRENF debe estar cumplimentado con el contenido  .T. (Verdadero), cuando se utilice la función MaPvlNfs() para que la pantalla de la GNRE/DIFAL no se ejecute.

Importante

La función MaPvlNfs genera un único Documento de salida con todos los ítems informados en el array aPvlNfs, de esta manera, si fuera necesario generar más de un documento de salida, la función debe llamarse más de una vez con el array aPvlNfs incluyendo los ítems referentes a cada factura que se generará. 

08. ASUNTOS RELACIONADOS