Histórico da Página
...
Bloco de código | ||
---|---|---|
| ||
#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. |
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas