Árvore de páginas

Versões comparadas

Chave

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

...

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.

...