Histórico da Página
01. DADOS GERAIS
Produto: |
| ||||||||
---|---|---|---|---|---|---|---|---|---|
Linha de Produto: |
| ||||||||
Segmento: |
| ||||||||
Módulo: | SIGAFAT - Faturamento | ||||||||
Função: | MANFS2NFS - Geração de Documento Fiscal de Saída | ||||||||
Abrangências: | Microsiga Protheus 12 | ||||||||
Versões: | Microsiga Protheus 12 | ||||||||
Compatível Países: | Todos | ||||||||
Sistemas Operacionais: | Todos | ||||||||
Compatível com as Bases de Dados: | Todos | ||||||||
Nível de Acesso: | Nível 1 (Acesso Clientes) | ||||||||
Idiomas: | Todos |
02. DESCRIÇÃO
Função utilizada para a geração do Documento Fiscal de Saída a partir de um Documento Fiscal de Origem.
03. SINTAXE
MaNfs2Nfs( cSerOri, cNumORI, cClieFor, cLoja, cSerieNFS, lMostraCtb, lAglutCtb, lCtbOnLine, lCtbCusto, lReajusta, nCalAcrs, nArredPrcLis, lAtuSA7, lECF, bFilSD2, bSD2, bSF2, bTTS, aDocOri, aItemOri, aSF2, lNoFiscal, bFiscalSF2, bFiscalSD2, bFatSE1, cNumNFS )
04. PARÂMETROS
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
---|---|---|---|---|---|
cSerOri | Caractere | Série do Documento de Origem | Não | ||
cNumORI | Caractere | Número do Documento de Origem | Não | ||
cClieFor | Caractere | Cliente/Fornecedor do Documento de Origem | Não | ||
cLoja | Caractere | Loja do Cliente/Fornecedor do Documento de Origem | {} | Não | |
cSerieNFS | Caractere | Série do Documento a ser gerado | Sim | ||
lMostraCtb | Lógico | Mostra Lançamento Contábil | .F. | Não | |
lAglutCtb | Lógico | Aglutina Lançamento Contábil | .F. | Não | |
lCtbOnLine | Lógico | Contabiliza On-Line | .F. | Não | |
lCtbCusto | Lógico | Contabiliza Custo On-Line | .F. | Não | |
lReajusta | Lógico | Reajuste de Preço na Nota Fiscal | .F. | Não | |
nCalAcrs | Numérico | Tipo de Acréscimo Financeiro | 1 | Não | |
nArredPrcLis | Numérico | Tipo de Arredondamento | 1 | Não | |
lAtuSA7 | Lógico | Atualiza Amarração de Cliente x Produto | .F. | Não | |
lECF | Lógico | Cupom Fiscal | .F. | Não | |
bFilSD2 | Bloco de Código | Bloco de Código de Seleção do SD2 | {|| .T. } | Não | |
bSD2 | Bloco de Código | Bloco de Código a ser executado para o SD2 | {|| .T. } | Não | |
bSF2 | Bloco de Código | Bloco de Código a ser executado para o SF2 | {|| .T. } | Não | |
bTTS | Bloco de Código | Bloco de Código a ser executado no final da transação | {|| .T. } | Não | |
aDocOri | Array de registros | Array com os recnos do SF2 | {} | Não | |
aItemOri | Array de registros | Array com os Itens do SD2 | {} | Não | |
aSF2 | Array de registros | Array com os dados do SF2 | {} | Não | |
lNoFiscal | Lógico | Desabilita o Cálculo Fiscal, pois as informações já foram passadas nos campos da SF2 e SD2 | .F. | Não | |
bFiscalSF2 | Bloco de Código | Bloco de Código para tratamento do Fiscal - SF2 | Nil | Não | |
bFiscalSD2 | Bloco de Código | Bloco de Código para tratamento do Fiscal - SD2 | Nil | Não | |
bFatSE1 | Bloco de Código | Bloco de Código para tratamento do Fiscal - SE1 | {|| .T. } | Não | |
cNumNFS | Caractere | Número do Documento Fiscal | "" | Não |
05. RETORNO
cNF - Tipo: Caractere - Número do Documento de Saída
06. EXEMPLO 1
Bloco de código | ||
---|---|---|
| ||
#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 | ||
---|---|---|
| ||
//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. ASSUNTOS RELACIONADOS
...
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas