Á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"

USERUser Function MyNFS2NFSMyPVLNFS()

    Local aCabsaPvlDocS 	:=	 {}	
    Local aItens	nPrcVen :=	{}	
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  0
    Local cC5Num  := "pcpAO9"
    Local cSerie  := "001"
    Local cEmbExp := ""

    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "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))

    // Obter os dados de cada item do pedido de vendas liberado para gerar o Documento de Saida
    While SC6->(!Eof() .And. C6_FILIAL == xFilial("SC6")) .And.;
            SC6->C6_NUM == SC5->C5_NUM

        (OPC) ³
//³   SC9->(DbSetOrder(1))
    [n] Conteudo posicional do campo        SC9->(MsSeek(xFilial("SC9")+SC6->(C6_NUM+C6_ITEM))) //FILIAL+NUMERO+ITEM

             ) ³
//³SE4->(DbSetOrder(1))
       Somente é necessario se não houver um documento de SE4->(MsSeek(xFilial("SE4")+SC5->C5_CONDPAG) )  //FILIAL+CONDICAO PAGTO

    ³
//³    SB1->(DbSetOrder(1))
   origem.     SB1->(MsSeek(xFilial("SB1")+SC6->C6_PRODUTO))    //FILIAL+PRODUTO

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

        SF4->(DbSetOrder(1))
             ³
//³ExpAN: Calculo Fiscal        SF4->(MsSeek(xFilial("SF4")+SC6->C6_TES))   //FILIAL+TES

        nPrcVen := SC9->C9_PRCVEN
        If ( SC5->C5_MOEDA <> 1    (OPC) ³
//³       Desabilita o calculo fiscal pois asnPrcVen informacoes ja    ³
//³       foram passadas nos campos do SD2 e SF2.:= xMoeda(nPrcVen,SC5->C5_MOEDA,1,dDataBase)
        EndIf

            AAdd(aPvlDocS,{ SC9->C9_PEDIDO,;
    ³
//³ExpAO: Codigo do cliente de Entrega para calculo dos impostos³
//³ExpAP: Codigo da loja de Entrega para calculo dos impostos   ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
cNF := MaNfs2Nfs(/*cSerOri*/ SC9->C9_ITEM,;
            SC9->C9_SEQUEN,;
            ""SC9->C9_QTDLIB,;
        //Serie do Documento de OrigemnPrcVen,;
    			/*cNumORI*/         ""SC9->C9_PRODUTO,;
         //Numero do Documento de Origem .F.,;
            SC9->(RecNo()),;
    /*cClieFor*/        ""SC5->(RecNo()),;
        //Cliente/Fornecedor do documento do origem SC6->(RecNo()),;
            SE4->(RecNo()),;
    /*cLoja*/           ""SB1->(RecNo()),;
        //Loja do Documento de origem SB2->(RecNo()),;
            SF4->(RecNo())})

    /*cSerieNFS*/    SC6->(DbSkip())
   cSerie,; EndDo
   //Serie do Documento a ser gerado
      
    cNota := MaPvlNfs(  /*aPvlNfs*/         aPvlDocS,;  /*lMostraCtb*/ 01 - Array com  NIL,; os itens a serem gerados
      //Mostra Lct.Contabil (OPC)
                /*lAglutCtbcSerieNFS*/       NILcSerie,;    // 02  //Aglutina Lct.Contabil (OPC)
- Série da Nota Fiscal
                        /*lCtbOnLinelMostraCtb*/      NIL.F.,;       //Contabiliza 03 On-Line (OPC) Mostra Lançamento Contábil
                        /*lCtbCustolAglutCtb*/       NIL.F.,;       //Contabiliza Custo04 On-Line (OPC) Aglutina Lançamento Contábil
                        /*lReajustalCtbOnLine*/       NIL.F.,;       // 05 - Contabiliza On-Line
   //Reajuste de preco na nota fiscal (OPC)
                /*nCalAcrslCtbCusto*/        NIL.T.,;       //Tipo 06 de- AcrescimoContabiliza Financeiro (OPC)
Custo On-Line
                        /*nArredPrcLislReajuste*/    NIL   .F.,;       //Tipo de Arredondamento (OPC)
         07 - Reajuste de preço na Nota Fiscal
        /*lAtuSA7*/         NIL,;       /*nCalAcrs*/Atualiza Amarracao Cliente x Produto (OPC)
       0,;         /*lECF*/ 08 - Tipo de Acréscimo Financeiro
      NIL,;       //Cupom Fiscal (OPC)
         /*nArredPrcLis*/       /*bFilSD2*/0,;         // NIL,;09 - Tipo de Arredondamento
   //CodeBlock de Selecao do SD2 (OPC)
                /*bSD2lAtuSA7*/            NIL.T.,;       //CodeBlock a10 ser- executadoAtualiza paraAmarração oCliente SD2x (OPC)Produto
                        /*bSF2lECF*/            .F.,;      NIL,; // 11 - Cupom Fiscal
  //CodeBlock a ser executado para o SF2 (OPC)
                /*bTTScEmbExp*/         cEmbExp,;   NIL,;// 12 - Número do Embarque de //CodeBlockExportação
 a ser executado no final da transacao (OPC)
                /*aDocOribAtuFin*/         aDocOri,;   //Array com os Recnos do SF2 (OPC)
                /*aItemOri*/ {||},;      // 13 - Bloco de Código para complemento de atualização dos títulos financeiros
          aItens,;    //Array com os itens do SD2 (OPC)
    /*bAtuPGerNF*/      {||},;      /*aSF2*/            aCabs,;     //Array com os dados do SF2 (OPC)
/ 14 - Bloco de Código para complemento de atualização dos dados após a geração da Nota Fiscal
                        /*lNoFiscalbAtuPvl*/         .F.{||},;       //Calculo Fiscal15 - Desabilita o calculo fiscal pois as informacoes ja foram passadas nos campos do SD2 e SF2 (OPC)
 Bloco de Código de atualização do Pedido de Venda antes da geração da Nota Fiscal
                        /*bFiscalSF2bFatSE1*/      bFiscalSF2   {|| .T. },; //CodeBlock 16 - Bloco de Código para tratamento indicar se o valor do fiscal - SF2 (OPC)
                /*bFiscalSD2*/ Título a Receber será gravado no campo F2_VALFAT quando o parâmetro MV_TMSMFAT estiver com o valor igual a "2".
          bFiscalSD2,;//CodeBlock para tratamento do fiscal - SD2 (OPC)
       /*dDataMoe*/        dDatabase,; /*bFatSE1*/ 17 - Data da cotação para conversão  NIL,;       //CodeBlock para tratamento do fiscal - SE1 (OPC)
dos valores da Moeda do Pedido de Venda para a Moeda Forte
                        /*cNumNFSlJunta*/         cDoc .F.)        //Numero 18 do- documentoAglutina fiscalPedido (OPC)

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

    RESET ENVIRONMENT

Return .T.

...