Árvore de páginas

Versões comparadas

Chave

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

...

Informações
titleUsando a função xFisRetFCP

Função:

xFisRetFCP(cVerNFE, cAls, cCampo, cArred, nCasasDec)

Parâmetros:

VariávelTipoDescriçãoOpçõesExemploPadrão
cVerNFECVersão da NFE
xFisRetFCP("4.0")
cAlsCAlias da tabela
xFisRetFCP(,"CD2")
cCampoCCampo para consulta e retorno do valor
xFisRetFCP(,,"CD2_PFCP")
cArredCOpções de arredondamento1 - Não arredonda; 2 - Arredonda; 3 - TruncaxFisRetFCP(,,,"1")Utiliza o parâmetro MV_RNDICM. Se .T. irá arredondar, se .F. irá truncar.
nCasasDecNQuantidade de casas decimais
xFisRetFCP(,,,,2)2

Utilizando para retorno das tags:

TagExemplo de uso
vICMSOpvICMSDifxFisRetFCP('4.0','SFT','FT_ICMSDIF',"2")
vICMSOpxFisRetFCP('4.0','SFT','FT_VOPDIF',"2")
vFCPxFisRetFCP('4.0','CD2','CD2_VFCP',"2")
pFCPxFisRetFCP('4.0','CD2','CD2_PFCP',"2")
vBCFCPxFisRetFCP('4.0','CD2','CD2_BFCP',"2")
vICMSxFisRetFCP('4.0','CD2','CD2_VLTRIB',"2")
pDifxFisRetFCP('4.0','CD2','CD2_PICMDF',"2")
vBCxFisRetFCP('4.0','CD2','CD2_BC',"2")
pICMSxFisRetFCP('4.0','CD2','CD2_ALIQ',"2")

Importante:

O uso da função depende do pré-posicionamento nas tabelas ao qual se deseja passar o Alias.

Exemplo:

Para uso dos campos das tabelas CD2 ou SFT, deve estar posicionado no registro para consumo da função.

Código:

User function MeuTeste()

Local cDoc      := "000000007','000000005','000000006"
Local cSerie    := "199"
Local cCli      := "RJ0001"
Local cLoja     := "01"


//////INCLUSAO DE CAMPOS NA QUERY////////////
        
cField := "%"
If SD1->(FieldPos("D1_ICMSDIF")) > 0
    cField += ",D1_ICMSDIF"

EndIf

If SD1->(FieldPos("D1_FILORI")) > 0
    cField += ",D1_FILORI"
EndIf

If SD1->(FieldPos("D1_DESCZFR")) > 0
    cField += ",D1_DESCZFR"
EndIf

If SD1->(FieldPos("D1_DESCZFP")) > 0
    cField += ",D1_DESCZFP"
EndIf

If SD1->(FieldPos("D1_DESCZFC")) > 0
    cField += ",D1_DESCZFC"
EndIf
If SD1->(FieldPos("D1_GRPCST"))<>0 //Grupo de tributação de ipi
    cField  +=",D1_GRPCST"                  
EndIf

If SD1->( ColumnPos('D1_AFRMIMP') ) > 0 //Campo específico para despesa de importação
    cField  +=",D1_AFRMIMP"                 
EndIf           

If SD1->( ColumnPos('D1_VOPDIF') ) > 0
    cField  +=",D1_VOPDIF"                  
EndIf

cField += "%"

dbSelectArea("SD1")
dbSetOrder(1)   

    lQuery  := .T.
    cAliasSD1 := GetNextAlias()
    BeginSql Alias cAliasSD1            
            SELECT D1_FILIAL,D1_DOC,D1_SERIE,D1_FORNECE,D1_LOJA,D1_COD,D1_ITEM,D1_TES,D1_TIPO,D1_NFORI,D1_SERIORI,D1_ITEMORI,
            D1_CF,D1_QUANT,D1_TOTAL,D1_VALDESC,D1_VALFRE,D1_SEGURO,D1_DESPESA,D1_CODISS,D1_VALISS,D1_VALIPI,D1_ICMSRET,
            D1_VUNIT,D1_CLASFIS,D1_VALICM,D1_TIPO_NF,D1_PEDIDO,D1_ITEMPC,D1_VALIMP5,D1_VALIMP6,D1_BASEIRR,D1_VALIRR,D1_LOTECTL, 
            D1_NUMLOTE,D1_CUSTO,D1_ORIGLAN,D1_DESCICM,D1_II,D1_FORMUL,D1_VALPS3,D1_ORIGLAN,D1_VALCF3,D1_TESACLA,D1_IDENTB6,D1_PICM,D1_DESC  %Exp:cField%
            FROM %Table:SD1% SD1
            WHERE
            SD1.D1_FILIAL  = %xFilial:SD1% AND
            SD1.D1_SERIE   = %Exp:cSerie% AND
            SD1.D1_DOC     IN (%Exp:cDoc%) AND
            SD1.D1_FORNECE = %Exp:cCli% AND
            SD1.D1_LOJA    = %Exp:cLoja% AND
            SD1.%NotDel%
            ORDER BY D1_FILIAL,D1_DOC,D1_SERIE,D1_FORNECE,D1_LOJA,D1_ITEM,D1_COD
    EndSql


DbSelectArea("SF1")
DbSetOrder(1)

While !(cAliasSD1)->(Eof())

    //Posiciona novente na SF1 do documento que esta sendo processado               
    SF1->(MsSeek(xFilial("SF1")+(cAliasSD1)->(D1_DOC+D1_SERIE+D1_FORNECE+D1_LOJA+D1_TIPO)))
    
    DbSelectArea("SFT")
    DbSetOrder(1)
    SFT->(DbSeek(xFilial("SFT")+"E"+(cAliasSD1)->(D1_SERIE+D1_DOC+D1_FORNECE+D1_LOJA+PadR(D1_ITEM,TamSx3("FT_ITEM")[1])+D1_COD)))    
    
    CD2->(DbSetOrder(2))
    CD2->(MsSeek(xFilial("CD2")+"E"+SF1->F1_SERIE+SF1->F1_DOC+SF1->F1_FORNECE+SF1->F1_LOJA+PadR((cAliasSD1)->D1_ITEM,4)+(cAliasSD1)->D1_COD))
    
    While !CD2->(Eof()) .And. xFilial("CD2") == CD2->CD2_FILIAL .And.;
        "E" == CD2->CD2_TPMOV .And.;
        SF1->F1_SERIE == CD2->CD2_SERIE .And.;
        SF1->F1_DOC == CD2->CD2_DOC .And.;
        SF1->F1_FORNECE == IIF(!(cAliasSD1)->D1_TIPO $ "DB",CD2->CD2_CODFOR,CD2->CD2_CODCLI) .And.;
        SF1->F1_LOJA == IIF(!(cAliasSD1)->D1_TIPO $ "DB",CD2->CD2_LOJFOR,CD2->CD2_LOJCLI) .And.;                
        (cAliasSD1)->D1_ITEM == SubStr(CD2->CD2_ITEM,1,Len((cAliasSD1)->D1_ITEM)) .And.;
        (cAliasSD1)->D1_COD == CD2->CD2_CODPRO
        
        alert("Nota: "+(cAliasSD1)->D1_DOC+CRLF+;
            "Valor Base: "+cvaltochar(CD2->CD2_BC)+CRLF+;
            "% Diferimento: "+cvaltochar(CD2->CD2_PICMDF)+CRLF+;
            "% FECP: "+cvaltochar(CD2->CD2_PFCP)+CRLF+;
            "CD2_VLTRIB / vICMS : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_VLTRIB',"2"))+CRLF+;
            "CD2_BFCP / vBCFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_BFCP',"2"))+CRLF+;
            "CD2_PFCP / pFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_PFCP',"2"))+CRLF+;
            "CD2_VFCP / vFCP : "+cvaltochar(xFisRetFCP('4.0','CD2','CD2_VFCP',"2"))+CRLF+;
            "FT_VOPDIF / vICMSOp : "+cvaltochar(xFisRetFCP('4.0','SFT','FT_VOPDIF',"2"))+CRLF+;
            "FT_ICMSDIF / vICMSDif : "+cvaltochar(xFisRetFCP('4.0','SFT','FT_ICMSDIF',"2")))

        CD2->(DbSkip())
    Enddo   

    (cAliasSD1)->(DbSkip())
Enddo

Return

...