Árvore de páginas

Versões comparadas

Chave

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

...

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

06. EXEMPLO 1

Bloco de código
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"

USER Function MyNFS2NFS()

Local aCabs 	:=	{}	
Local aItens	:=	{}	
Local aStruSF2 	:= 	{}	
Local aStruSD2 	:= 	{}	
Local nX		:=	1	
Local aDocOri	:=	{}
Local bFiscalSF2:= {|| .T.}
Local bFiscalSD2:= {|| .T.}
Local cNF       := ""	
Local cDoc 	   	:= ""
Local cSerie    := "A  "
Local cTipoNF   := "N"
Local cCliente  := "000001"
Local cLoja     := "01"
Local cProd     := "IPI1"
Local cTES      := "802"
Local cCondPgto := "001"

PRIVATE lMsErroAuto := .F.	

PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FAT" TABLES "SF2","SD2","SA1","SA2","SB1","SB2","SF4","SED","SE1"

aStruSF2 	:= 	SF2->(dbStruct())		

//Montagem do cabeçalho do Documento Fiscal	
nF2FILIAL 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_FILIAL"})	
nF2TIPO 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_TIPO"})	
nF2DOC 		:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_DOC"})	
nF2SERIE 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_SERIE"})	
nF2EMISSAO 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_EMISSAO"})	
nF2CLIENTE 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_CLIENTE"})
nF2LOJA 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_LOJA"})
nF2CLIENT   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_CLIENT"})
nF2LOJENT 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_LOJENT"})
nF2TIPOCLI  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_TIPOCLI"})
nF2COND 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_COND"})	
nF2DTDIGIT 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_DTDIGIT"})	
nF2EST 		:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_EST"})
nF2UFORIG   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_UFORIG"})
nF2UFDEST   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_UFDEST"})	
nF2VALMERC 	:= Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_VALMERC"})

For nX := 1 To Len(aStruSF2)
    If aStruSF2[nX][2] $ "C/M"
        Aadd(aCabs,"")
    ElseIf aStruSF2[nX][2] == "N"
        Aadd(aCabs,0)
    ElseIf aStruSF2[nX][2] == "D"
        Aadd(aCabs,CtoD("  /  /  "))
    ElseIf aStruSF2[nX][2] == "L"
        Aadd(aCabs,.F.)
    EndIf
Next nX

dbSelectArea("SA1")
dbSetOrder(1)
dbSeek(xFilial("SA1") + cCliente + cLoja)

aCabs[nF2FILIAL]	:= xFilial("SF2")
aCabs[nF2TIPO]		:= cTipoNF
aCabs[nF2DOC]		:= cDoc
aCabs[nF2SERIE]		:= cSerie
aCabs[nF2EMISSAO]	:= dDataBase
aCabs[nF2CLIENTE]	:= SA1->A1_COD
aCabs[nF2LOJA]		:= SA1->A1_LOJA
aCabs[nF2CLIENT]	:= SA1->A1_COD
aCabs[nF2LOJENT]	:= SA1->A1_LOJA
aCabs[nF2TIPOCLI]   := SA1->A1_TIPO
aCabs[nF2COND]		:= cCondPgto
aCabs[nF2DTDIGIT]	:= dDataBase
aCabs[nF2EST]		:= SA1->A1_EST
aCabs[nF2UFORIG]	:= SA1->A1_EST
aCabs[nF2UFDEST]	:= SA1->A1_EST
aCabs[nF2VALMERC]	:= 1000

aStruSD2 	:= 	SD2->(dbStruct())

//Montagem dos itens do Documento Fiscal
nD2FILIAL 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_FILIAL"})
nD2DOC 		:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_DOC"})
nD2SERIE 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_SERIE"})
nD2CLIENTE 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_CLIENTE"})
nD2LOJA 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_LOJA"})
nD2EMISSAO 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_EMISSAO"})
nD2TIPO 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TIPO"})
nD2ITEM 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_ITEM"})
nD2CF 		:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_CF"})
nD2COD 		:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_COD"})
nD2UM 		:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_UM"})
nD2QUANT 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_QUANT"})
nD2PRCVEN 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_PRCVEN"})
nD2PRUNIT 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_PRUNIT"})
nD2TOTAL 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TOTAL"})
nD2LOCAL 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_LOCAL"})
nD2TES	 	:= Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TES"})

aAdd(aItens, {})
nPos := Len(aItens)

For nX := 1 To Len(aStruSD2)
    If	aStruSD2[nX][2]$"C/M"
        aAdd(aItens[nPos],"")
    ElseIf aStruSD2[nX][2]=="D"
        aAdd(aItens[nPos],CToD(""))
    ElseIf aStruSD2[nX][2]=="N"
        aAdd(aItens[nPos],0)
    ElseIf aStruSD2[nX][2]=="L"
        aAdd(aItens[nPos],.T.)
    EndIf
Next nX

For nX := 1 to Len(aItens)
    AADD(aDocOri,0)
Next

dbSelectArea("SF4")
dbSetOrder(1)
dbSeek(xFilial("SF4") + cTES)

dbSelectArea("SB1")
dbSetOrder(1)
dbSeek(xFilial("SB1") + cProd)

aItens[Len(aItens),nD2FILIAL]	:=	xFilial("SD2")
aItens[Len(aItens),nD2DOC]		:=	cDoc
aItens[Len(aItens),nD2SERIE]	:=	cSerie
aItens[Len(aItens),nD2CLIENTE]	:=	SA1->A1_COD
aItens[Len(aItens),nD2LOJA]		:=	SA1->A1_LOJA
aItens[Len(aItens),nD2EMISSAO]	:=	dDataBase
aItens[Len(aItens),nD2TIPO]		:=	cTipoNF
aItens[Len(aItens),nD2ITEM]		:=	"01"
aItens[Len(aItens),nD2CF]		:=	SF4->F4_CF
aItens[Len(aItens),nD2COD]		:=	SB1->B1_COD
aItens[Len(aItens),nD2UM]		:=	SB1->B1_UM
aItens[Len(aItens),nD2QUANT]	:=	1
aItens[Len(aItens),nD2PRCVEN]	:=	1000
aItens[Len(aItens),nD2TOTAL]	:=	1000
aItens[Len(aItens),nD2PRUNIT]   :=  1000
aItens[Len(aItens),nD2LOCAL]	:=	SB1->B1_LOCPAD
aItens[Len(aItens),nD2TES]		:=	SF4->F4_CODIGO

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿	
//³Parametros da funcao automatica:                             ³
//³ExpC1: Serie do Documento de Origem                          ³
//³ExpC2: Numero do Documento de Origem                         ³
//³ExpC3: Cliente/Fornecedor do documento do origem             ³
//³ExpC4: Loja do Documento de origem                           ³
//³ExpC5: Serie do Documento a ser gerado                       ³
//³ExpL6: Mostra Lct.Contabil                             (OPC) ³
//³ExpL7: Aglutina Lct.Contabil                           (OPC) ³
//³ExpL8: Contabiliza On-Line                             (OPC) ³
//³ExpL9: Contabiliza Custo On-Line                       (OPC) ³
//³ExpLA: Reajuste de preco na nota fiscal                (OPC) ³
//³ExpNB: Tipo de Acrescimo Financeiro                    (OPC) ³
//³ExpNC: Tipo de Arredondamento                          (OPC) ³
//³ExpLD: Atualiza Amarracao Cliente x Produto            (OPC) ³
//³ExplE: Cupom Fiscal                                    (OPC) ³
//³ExpBF: CodeBlock de Selecao do SD2                     (OPC) ³
//³       Parametros do codeblock                               ³
//³       ExpC1: Alias do arquivo SD2                           ³
//³       ExpC2: Alias do arquivo SF4                           ³
//³ExpBG: CodeBlock a ser executado para o SD2            (OPC) ³
//³       Parametros do codeblock                               ³
//³       ExpN1:[1] Apos a copia do item do documento de saida  ³
//³             [2] Apos a checagem da atualizacoes anteriores  ³
//³       ExpA2:Array com o conteudo dos campos do SD2          ³
//³       ExpC3:Alias do SD2                              (OPC) ³
//³       ExpC4:Alias do SF4                              (OPC) ³
//³       ExpC5:Alias do SB1                              (OPC) ³
//³ExpBH: CodeBlock a ser executado para o SF2            (OPC) ³
//³       ExpN1:[1] Apos a copia do item do documento de saida  ³
//³             [2] Apos a checagem da atualizacoes anteriores  ³
//³ExpBI: CodeBlock a ser executado no final da transacao (OPC) ³
//³ExpAJ: Array com os Recnos do SF2                      (OPC) ³
//³       Deve possuir o mesmo tamanho da ExpAl           (OPC) ³
//³ExpAL: Array com os itens do SD2                       (OPC) ³
//³       [1] Item do SD2                                 (OPC) ³
//³       [2] Conteudo dos campos na ordem da estrutura   (OPC) ³
//³ExpAM: Array com os dados do SF2                       (OPC) ³
//³       [n] Conteudo posicional do campo                    ) ³
//³       Somente é necessario se não houver um documento de    ³
//³       origem.                                               ³
//³ExpAN: Calculo Fiscal                                  (OPC) ³
//³       Desabilita o calculo fiscal pois as informacoes ja    ³
//³       foram passadas nos campos do SD2 e SF2.               ³
//³ExpAO: Codigo do cliente de Entrega para calculo dos impostos³
//³ExpAP: Codigo da loja de Entrega para calculo dos impostos   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
cNF := MaNfs2Nfs(/*cSerOri*/        "",;        //Serie do Documento de Origem
    			/*cNumORI*/         "",;        //Numero do Documento de Origem
                /*cClieFor*/        "",;        //Cliente/Fornecedor do documento do origem
                /*cLoja*/           "",;        //Loja do Documento de origem
                /*cSerieNFS*/       cSerie,;    //Serie do Documento a ser gerado
                /*lMostraCtb*/      NIL,;       //Mostra Lct.Contabil (OPC)
                /*lAglutCtb*/       NIL,;       //Aglutina Lct.Contabil (OPC)
                /*lCtbOnLine*/      NIL,;       //Contabiliza On-Line (OPC)
                /*lCtbCusto*/       NIL,;       //Contabiliza Custo On-Line (OPC)
                /*lReajusta*/       NIL,;       //Reajuste de preco na nota fiscal (OPC)
                /*nCalAcrs*/        NIL,;       //Tipo de Acrescimo Financeiro (OPC)
                /*nArredPrcLis*/    NIL,;       //Tipo de Arredondamento (OPC)
                /*lAtuSA7*/         NIL,;       //Atualiza Amarracao Cliente x Produto (OPC)
                /*lECF*/            NIL,;       //Cupom Fiscal (OPC)
                /*bFilSD2*/         NIL,;       //CodeBlock de Selecao do SD2 (OPC)
                /*bSD2*/            NIL,;       //CodeBlock a ser executado para o SD2 (OPC)
                /*bSF2*/            NIL,;       //CodeBlock a ser executado para o SF2 (OPC)
                /*bTTS*/            NIL,;       //CodeBlock a ser executado no final da transacao (OPC)
                /*aDocOri*/         aDocOri,;   //Array com os Recnos do SF2 (OPC)
                /*aItemOri*/        aItens,;    //Array com os itens do SD2 (OPC)
                /*aSF2*/            aCabs,;     //Array com os dados do SF2 (OPC)
                /*lNoFiscal*/       .F.,;       //Calculo Fiscal - Desabilita o calculo fiscal pois as informacoes ja foram passadas nos campos do SD2 e SF2 (OPC)
                /*bFiscalSF2*/      bFiscalSF2,;//CodeBlock para tratamento do fiscal - SF2 (OPC)
                /*bFiscalSD2*/      bFiscalSD2,;//CodeBlock para tratamento do fiscal - SD2 (OPC)
                /*bFatSE1*/         NIL,;       //CodeBlock para tratamento do fiscal - SE1 (OPC)
                /*cNumNFS*/         cDoc)       //Numero do documento fiscal (OPC)

If !Empty(cNF)
    Conout("Nota Fiscal: " + cNF + ", gerada com sucesso!!!")
EndIf

RESET ENVIRONMENT

Return .T.

07. 

...

EXEMPLO 2 

Bloco de código
linenumberstrue
//Informando TES com poder de terceiro//

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

USER Function MyNFS2NFS()

    Local aCabs     := {}
    Local aItens    := {}
    Local aStruSF2  := {}
    Local aStruSD2  := {}
    Local aDocOri   := {}
    Local nItemNF   := 1
    Local nX        := 1
    Local bFiscalSF2:= {|| .T.}
    Local bFiscalSD2:= {|| .T.}
    Local cNF       := "" 
    Local cDoc      := "" 
    Local cSerie    := "1  "
    Local cTipoNf   := "B "
    Local nTotNF    := 9100
    Local cForn     := "0001  " 
    Local cLoja     := "01" 
    Local cCondPg   := "000"
    Local cTes      := "502"
    Local cDocD     := "FAT007"
    Local cDocAt    := "FAT009"
    Local cFiltro   := ""

    //-- Variáveis utilizadas para o controle de erro da rotina automática
    Private lMsErroAuto     := .F.
    Private lAutoErrNoFile  := .T.

    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FAT" TABLES "SF2","SD2","SA2","SA2","SB1","SB2","SF4","SED","SE1"

    DbSelectArea('SA2')
    SA2->(DbSetOrder(1))
    IF !SA2->(DbSeek(xFilial("SA2") + cForn + cLoja  ))
        MsgInfo("SA2 NAO ENCONTRADO")
    ENDIF
    //MONTAGEM DA ESTRUTURA DO ARRAY CABECALHO
    aStruSF2    :=  SF2->(dbStruct())

    //Montagem do cabeçalho do Documento Fiscal 
    nF2FILIAL   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_FILIAL"})
    nF2TIPO     := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_TIPO"})
    nF2DOC      := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_DOC"})
    nF2SERIE    := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_SERIE"})
    nF2EMISSAO  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_EMISSAO"})
    nF2CLIENTE  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_CLIENTE"})
    nF2LOJA     := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_LOJA"})
    nF2CLIENT   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_CLIENT"})
    nF2LOJENT   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_LOJENT"})
    nF2TIPOCLI  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_TIPOCLI"})
    nF2COND     := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_COND"})
    nF2DTDIGIT  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_DTDIGIT"})
    nF2EST      := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_EST"})
    nF2UFORIG   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_UFORIG"})
    nF2UFDEST   := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_UFDEST"})
    nF2VALMERC  := Ascan(aStruSF2,{|x| AllTrim(x[1]) == "F2_VALMERC"})
    
    For nX := 1 To Len(aStruSF2)
        If aStruSF2[nX][2] $ "C/M"
            Aadd(aCabs,"")
        ElseIf aStruSF2[nX][2] == "N"
            Aadd(aCabs,0)
        ElseIf aStruSF2[nX][2] == "D"
            Aadd(aCabs,CtoD("  /  /  "))
        ElseIf aStruSF2[nX][2] == "L"
            Aadd(aCabs,.F.)
        EndIf
    Next nX

    aCabs[nF2FILIAL]    := xFilial("SF2")
    aCabs[nF2TIPO]      := cTipoNf
    aCabs[nF2DOC]       := cDoc
    aCabs[nF2SERIE]     := cSerie
    aCabs[nF2EMISSAO]   := DATE()
    aCabs[nF2CLIENTE]   := SA2->A2_COD
    aCabs[nF2LOJA]      := SA2->A2_LOJA
    aCabs[nF2CLIENT]    := SA2->A2_COD
    aCabs[nF2LOJENT]    := SA2->A2_LOJA
    aCabs[nF2TIPOCLI]   := SA2->A2_TIPO
    aCabs[nF2COND]      := cCondPg
    aCabs[nF2DTDIGIT]   := DATE()
    aCabs[nF2EST]       := "SP"
    aCabs[nF2UFORIG]    := "SP"
    aCabs[nF2UFDEST]    := "SP"
    aCabs[nF2VALMERC]   := nTotNF

    //MONTAGEM DA ESTRUTURA DO ARRAY DOS ITENS  
    aStruSD2    :=  SD2->(dbStruct())
    nD2FILIAL   := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_FILIAL"})
    nD2DOC      := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_DOC"})
    nD2SERIE    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_SERIE"})
    nD2CLIENTE  := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_CLIENTE"})
    nD2LOJA     := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_LOJA"})
    nD2EMISSAO  := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_EMISSAO"})
    nD2TIPO     := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TIPO"})
    nD2ITEM     := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_ITEM"})
    nD2CF       := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_CF"})
    nD2COD      := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_COD"})
    nD2UM       := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_UM"})
    nD2QUANT    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_QUANT"})
    nD2PRCVEN   := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_PRCVEN"})
    nD2PRUNIT   := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_PRUNIT"})
    nD2TOTAL    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TOTAL"})
    nD2LOCAL    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_LOCAL"})
    nD2TES      := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_TES"})
    //ADD INFORMACOES ORIGEM
    nD2Pedido   := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_PEDIDO"})
    nD2NfOri    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_NFORI"})
    nD2SeOri    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_SERIORI"})
    nD2ItOri    := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_ITEMORI"})
    nD2IdB6     := Ascan(aStruSD2,{|x| AllTrim(x[1]) == "D2_IDENTB6"})
        
   
    SD1->(DbgoTop())
    SD1->(DbSetOrder(4))
    cFiltro :=  "SD1->D1_FILIAL         == '" +xFilial("SD1")+ "'"   
    cFiltro+="  .And. SD1->D1_DOC  >= '"+cDocD+"'"
    cFiltro+="  .And. SD1->D1_DOC  <= '"+cDocAt+"'"

    SD1->(DbSetFilter({|| &cFiltro}, cFiltro))
    SD1->(DbGotop())
    
    
    While (!SD1->(EOF()))

        aAdd(aItens, {})
        For nX := 1 To Len(aStruSD2)
            If  aStruSD2[nX][2]$"C/M"
                aAdd(aItens[nItemNF],"")
            ElseIf aStruSD2[nX][2]=="D"
                aAdd(aItens[nItemNF],CToD(""))
            ElseIf aStruSD2[nX][2]=="N"
                aAdd(aItens[nItemNF],0)
            ElseIf aStruSD2[nX][2]=="L"
                aAdd(aItens[nItemNF],.T.)
            EndIf
        Next nX

        AADD(aDocOri,0)
        
        aItens[nItemNF,nD2FILIAL]       :=  SD1->D1_FILIAL
        aItens[nItemNF,nD2DOC]          :=  cDoc
        aItens[nItemNF,nD2SERIE]        :=  cSerie
        aItens[nItemNF,nD2CLIENTE]      :=  SA2->A2_COD
        aItens[nItemNF,nD2LOJA]         :=  SA2->A2_LOJA
        aItens[nItemNF,nD2EMISSAO]      :=  DATE()
        aItens[nItemNF,nD2TIPO]         :=  cTipoNf
        aItens[nItemNF,nD2ITEM]         :=  PadR(STRZERO(nItemNF,3),GetSx3Cache("D2_SERIE","X3_TAMANHO"))
        aItens[nItemNF,nD2CF]           :=  SD1->D1_CF
        aItens[nItemNF,nD2COD]          :=  SD1->D1_COD
        aItens[nItemNF,nD2UM]           :=  SD1->D1_UM
        aItens[nItemNF,nD2QUANT]        :=  SD1->D1_QUANT
        aItens[nItemNF,nD2PRCVEN]       :=  SD1->D1_VUNIT
        aItens[nItemNF,nD2TOTAL]        :=  SD1->D1_TOTAL
        aItens[nItemNF,nD2PRUNIT]       :=  SD1->D1_VUNIT
        aItens[nItemNF,nD2LOCAL]        :=  SD1->D1_LOCAL
        aItens[nItemNF,nD2TES]          :=  cTes
        aItens[nItemNF,nD2Pedido]       :=  SD1->D1_PEDIDO
        //ADD INFORMACOES ORIGEM
        aItens[nItemNF,nD2NfOri]        :=  SD1->D1_DOC
        aItens[nItemNF,nD2SeOri]        :=  SD1->D1_SERIE
        aItens[nItemNF,nD2ItOri]        :=  SD1->D1_ITEM
        aItens[nItemNF,nD2IdB6]         :=  SD1->D1_IDENTB6
        SD1->(DbSkip())
        nItemNF++
    END 

    cNF := MaNfs2Nfs(/*cSerOri*/      ""  ,;        //Serie do Documento de Origem
                /*cNumORI*/         "",;        //Numero do Documento de Origem
                /*cClieFor*/        cForn,;        //Cliente/Fornecedor do documento do origem
                /*cLoja*/           cLoja,;        //Loja do Documento de origem
                /*cSerieNFS*/       cSerie,;    //Serie do Documento a ser gerado
                /*lMostraCtb*/      NIL,;       //Mostra Lct.Contabil (OPC)
                /*lAglutCtb*/       NIL,;       //Aglutina Lct.Contabil (OPC)
                /*lCtbOnLine*/      NIL,;       //Contabiliza On-Line (OPC)
                /*lCtbCusto*/       NIL,;       //Contabiliza Custo On-Line (OPC)
                /*lReajusta*/       NIL,;       //Reajuste de preco na nota fiscal (OPC)
                /*nCalAcrs*/        NIL,;       //Tipo de Acrescimo Financeiro (OPC)
                /*nArredPrcLis*/    NIL,;       //Tipo de Arredondamento (OPC)
                /*lAtuSA7*/         NIL,;       //Atualiza Amarracao Cliente x Produto (OPC)
                /*lECF*/            NIL,;       //Cupom Fiscal (OPC)
                /*bFilSD2*/         NIL,;       //CodeBlock de Selecao do SD2 (OPC)
                /*bSD2*/            NIL,;       //CodeBlock a ser executado para o SD2 (OPC)
                /*bSF2*/            NIL,;       //CodeBlock a ser executado para o SF2 (OPC)
                /*bTTS*/            NIL,;       //CodeBlock a ser executado no final da transacao (OPC)
                /*aDocOri*/         aDocOri,;   //Array com os Recnos do SF2 (OPC)
                /*aItemOri*/        aItens,;    //Array com os itens do SD2 (OPC)
                /*aSF2*/            aCabs,;     //Array com os dados do SF2 (OPC)
                /*lNoFiscal*/       .F.,;       //Calculo Fiscal - Desabilita o calculo fiscal pois as informacoes ja foram passadas nos campos do SD2 e SF2 (OPC)
                /*bFiscalSF2*/      bFiscalSF2,;//CodeBlock para tratamento do fiscal - SF2 (OPC)
                /*bFiscalSD2*/      bFiscalSD2,;//CodeBlock para tratamento do fiscal - SD2 (OPC)
                /*bFatSE1*/         NIL,;       //CodeBlock para tratamento do fiscal - SE1 (OPC)
                /*cNumNFS*/         cDoc)       //Numero do documento fiscal (OPC)

    If !Empty(cNF)
        Conout("Nota Fiscal: " + cNF + ", gerada com sucesso!!!")
    EndIf

    RESET ENVIRONMENT

Return .T.

08. DEMAIS INFORMAÇÕES

Não há.

09

...

Não há.

...

ASSUNTOS RELACIONADOS

...