Árvore de páginas

Ponto-de-Entrada: OX001MF1 - Manipula informações de impostos
Abrangências: Microsiga Protheus 10
Versões: Todas
Compatível Países: Todos
Sistemas Operacionais: Todos
Compatível às Bases de Dados: Todos
Descrição:
O ponto de entrada OX001MF1 está localizado na rotina de Orçamento por Fases. Através deste ponto de entrada é possível manipular as informações referentes ao impostos, através do vetor a Orc.
Eventos

 /*

===============================================================================
###############################################################################
##+----------+------------+-------+-----------------------+------+----------+##
##|Função    | OFIXX001   | Autor |  Luis Delorme         | Data | 20/05/09 |##
##+----------+------------+-------+-----------------------+------+----------+##
##|Descrição | Orcamento de Pecas e Servicos                                |##
##+----------+--------------------------------------------------------------+##
##|Uso       | Veiculos                                                     |##
##+----------+--------------------------------------------------------------+##
###############################################################################
===============================================================================
*/
Function OX001EXEC(cAlias,nReg,nOpc)
//
Local nCntFor
// Variáveis de Posicionamento de Tela
Local aObjects := {}
Local aObjects1 := {}
Local aObjects2 := {}
Local aSizeAut := MsAdvSize(.t.)
// Variaveis da Enchoice
Local aCpos := {}
Local nModelo := 3
Local cTudoOk := ".t."
Local lF3 := .f.
Local lMemoria := .t.
Local lColumn := .f.
Local cATela := ""
Local lNoFolder := .t.
Local lProperty := .f.
Private aCpoEncS := {}
//################################################################
//# Especifica o espacamento entre os objetos principais da tela #
//################################################################
// Tela Superior - Enchoice do VS1 - Tamanho vertical fixo
AAdd( aObjects, { 0, 90, .T., .F. } )
// Tela Dois - Folder (Pecas e Servicos) - Tamanho vertical VARIAVEL
AAdd( aObjects, { 0, 40, .T., .T. } )
// Tela Tres - Listbox (Itens Relacionados) - Tamanho vertical fixo
AAdd( aObjects, { 0, 60, .T., .F. } )
//################################################################
//# Chama a função que calcula os posicionamentos dos objetos    #
//################################################################
aInfo := { aSizeAut[ 1 ], aSizeAut[ 2 ],aSizeAut[ 3 ] ,aSizeAut[ 4 ], 3, 3 } // Tamanho total da tela
aPosObj := MsObjSize( aInfo, aObjects ) // Monta objetos conforme especificacoes
//####################################
//# Campos de Informacoes adicionais #
//####################################
aOrc := {}
aAdd(aOrc,{'MaFisRet(,"NF_TOTAL") - MaFisRet(,"NF_DESCZF")',"Total",0,"VS1->VS1_VTOTNF"})
aAdd(aOrc,{'MaFisRet(,"NF_VALICM")',"ICMS Calculado",0,"VS1->VS1_ICMCAL"})
aAdd(aOrc,{'MaFisRet(,"NF_DESCONTO")',"Desconto",0,"VS1->VS1_VALDES"})
aAdd(aOrc,{'MaFisRet(,"NF_SEGURO")',"Seguro",0,"VS1->VS1_VALSEG"})
aAdd(aOrc,{'MaFisRet(,"NF_DESPESA")',"Despesa",0,"VS1->VS1_DESACE"})
aAdd(aOrc,{'MaFisRet(,"NF_FRETE")',"Frete",0,"VS1->VS1_VALFRE"})
// PONTO DE ENTRADA PARA ALTERACAO DO VETOR aOrc
If ExistBlock("OX001MF1")
ExecBlock("OX001MF1",.f.,.f.)
EndIf
//###################################################################################
//# Cria aHeader e aCols do Fiscal para efeito de compatibilidade com os MaFis      #
//###################################################################################
aHeader := {}
aAdd(aHeader,{STR0011,"TRB_COD","@!",TamSx3("B1_COD")[1],TamSx3("B1_COD")[2],"","","C","TRB",""})
aAdd(aHeader,{STR0012,"TRB_QUANT","@!",TamSx3("D2_QUANT")[1],TamSx3("D2_QUANT")[2],"","","N","TRB",""})
aAdd(aHeader,{STR0013,"TRB_PRCVEN","@!",TamSx3("D2_PRCVEN")[1],TamSx3("D2_PRCVEN")[2],"","","N","TRB",""})
aAdd(aHeader,{STR0014,"TRB_VALMERC","@!",TamSx3("D2_PRCVEN")[1],TamSx3("D2_PRCVEN")[2],"","","N","TRB",""})
aAdd(aHeader,{STR0015,"TRB_DESCON","@!",TamSx3("D2_DESCON")[1],TamSx3("D2_DESCON")[2],"","","N","TRB",""})
aAdd(aHeader,{STR0016,"TRB_CODTES","@!",TamSx3("D2_TES")[1],TamSx3("D2_TES")[2],"","","C","TRB",""})
aCols := {}
//###########################################################################
//# Cria variaveis de memória e arrays de configuração  da Enchoice do VS1  #
//###########################################################################
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("VS1")
// 
aCpoEncS  := {} // ARRAY DE CAMPOS DA ENCHOICE
aCpos  := {} // ARRAY DE CAMPOS DA ENCHOICE NAO EDITAVEIS
// lista de campos não editáveis
cVS1nEdit := "VS1_NUMORC,"
// lista de campos que não serão mostrados
cVS1nMostra := "VS1_FILIAL,VS1_NOMFOR,VS1_CHAINT,VS1_PROVEI,VS1_LOJAPR,VS1_ENDPRO,VS1_CIDPRO,VS1_ESTPRO,VS1_NOMPRO,VS1_MVFASE,"
cVS1nMostra += "VS1_VTOTNF,VS1_VPERDI,VS1_NROAPR,VS1_RETPEC,VS1_AUTENV,VS1_ARMFAB,VS1_TITNCC,VS1_STATUS,VS1_CARTEI,"
cVS1nMostra += "VS1_ENDCLI,VS1_CIDCLI,VS1_ESTCLI,VS1_DATORC,VS1_HORORC,VS1_FONCLI,VS1_NOMBCO,VS1_CENCUS,VS1_DESCCC,VS1_CODFRO,"
cVS1nMostra += "VS1_DESMAR,VS1_DESMOD,VS1_FABMOD,VS1_DESCOR,VS1_APOLIC,VS1_SINIST,VS1_CODMAR,VS1_VALDES,VS1_ICMCAL,VS1_DESCON,"
//
While !Eof().and.(x3_arquivo=="VS1")
// Monta o array com os campos que aparecerão na Enchoice
If X3USO(x3_usado).and.cNivel>=x3_nivel .and. !(Alltrim(x3_campo)+"," $ cVS1nMostra)
AADD(acpoEncS,x3_campo)
EndIf
// Monta as variáveis de memória de TODOS os campos
If Inclui .and.  Alltrim(x3_campo)!= "VS1_NUMORC"
&("M->"+x3_campo):= CriaVar(x3_campo)
Else
If x3_context == "V"
&("M->"+x3_campo):= CriaVar(x3_campo)
Else
&("M->"+x3_campo):= &("VS1->"+x3_campo)
EndIf
EndIf
// Monta o array com os campos não editáveis
If ( (x3_context != "V" .OR. (x3_context == "V" .AND. X3_VISUAL == "A"))  .or. x3_campo $ "VS1_GETKEY,VS1_OBSERV")
if !(Alltrim(x3_campo) $ cVS1nEdit) .and.  !(Alltrim(x3_campo)+"," $ cVS1nMostra)
if FECHA .and. cVS1Status == "F"
if VS1->(FieldPos("VS1_MENNOT")) > 0 .and. Alltrim(x3_campo)+"," $ "VS1_MENNOT,VS1_MENPAD,VS1_KILOME,"
aAdd(aCpos,X3_CAMPO)
endif
else
aAdd(aCpos,X3_CAMPO)
endif
endif
endif
DbSkip()
Enddo
// No momento da inclusão deve-se apagar qualquer referência 
// de memória que não tenha sido avaliada na montagem acima.
if INCLUI
M->VS1_NUMORC := ""
endif
//#########################################################################
//# Cria variaveis de memoria, aHeader e aCols da GetDados de Pecas (VS3) #
//#########################################################################
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("VS3")
//
// lista de campos não editáveis
cVS3nEdit := "VS3_CODINC,VS3_GRUINC,VS3_DESINC,VS3_SEQINC,"
// lista de campos que não serão mostrados
cVS3nMostra := "VS3_FILIAL,VS3_NUMORC,VS3_SEQUEN,VS3_ARMORI,VS3_MODVEI,VS3_VBAICM,VS3_ALIICM,VS3_ICMCAL,VS3_QTDRES,VS3_LOTECT,
cVS3nMostra += "VS3_NUMLOT,VS3_NUMSER,VS3_GRUKIT,VS3_LOCALI,VS3_CODKIT,VS3_NOTFAB,VS3_CONBAR,VS3_DTNFFB,VS3_PIPIFB,VS3_VIPIFB,
cVS3nMostra += "VS3_PICMFB,VS3_VICMFB,VS3_PICMSB,VS3_VICMSB,VS3_NUMIDE,VS3_ITESUB,VS3_BASPIS,VS3_BASCOF,VS3_VALPIS,VS3_VALCOF,"
cVS3nMostra += "VS3_ALQPIS,VS3_ALQCOF,"
// --------------------------------------------------------------------
// O trecho abaixo controla a aparição de campos dependentes de fatores
// --------------------------------------------------------------------
// Fator 1: Depois da fase de liberação de divergência os campos com as quantidades deverão aparecer
nPosA := At(cVS1Status,cFaseOrc)
nPos5 := At("5",cFaseOrc)
if nPosA <  nPos5 .or. nPos5 <= 0
cVS3nMostra += "VS3_QTDCON,VS3_QTDINI,"
endif
// Fator 2: Na fase de liberação de margem de lucro, deve-se mostrar a quantidade liberada (liberação parcial)
if VS1->VS1_STATUS != "2"
cVS3nMostra += "VS3_QTDLIB,"
endif
// Fator 3: A existência de inconveniente deve mostrar os campos necessários
if !lInconveniente
cVS3nMostra += "VS3_CODINC,VS3_GRUINC,VS3_DESINC,VS3_SEQINC,"
endif
//
nUsadoP:=0
//
// Cria Variaveis de Memoria e aHeader
aHeaderP:= {}
aAlterP := {}
//
While !Eof().And.(x3_arquivo=="VS3")
If  X3USO(x3_usado) .And. cNivel>=x3_nivel .and. !(Alltrim(x3_campo)+"," $ cVS3nMostra)
nUsadoP:=nUsadoP+1
Aadd(aHeaderP,{AllTrim(X3Titulo()),SX3->X3_CAMPO,SX3->X3_PICTURE,SX3->X3_TAMANHO,SX3->X3_DECIMAL,SX3->X3_VALID,;
SX3->X3_USADO,SX3->X3_TIPO,SX3->X3_F3,SX3->X3_CONTEXT,X3CBOX(),SX3->X3_RELACAO,".T."})
if x3_usado != "V" .and. (INCLUI .or. ALTERA)
if !(cVS1Status == "5" .and. FECHA)
if !(Alltrim(x3_campo)+"," $ cVS3nEdit)
aAdd(aAlterP,x3_campo)
endif
endif
endif
EndIf
DbSkip()
EndDo
Programa Fonte
OFIXX001
Sintaxe

OX001MF1 - Manipula informações de impostos ( [ ] )

Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
Array of Record
Retorno
    ()
Exemplos
/*ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜܱ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±±±ºPrograma  ³OX001MF1  ºAutor  ³Otavio Favarelli    º Data ³  15/06/10   º±±±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±±±ºDesc.     ³ P.E para manipulacao das informacoes referentes a impostos º±±±±º          ³ atraves do vetor aOrc.                                     º±±±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±±±ºUso       ³                                                            º±±±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß*/User Function OX001MF1()aAdd(aOrc,{'MaFisRet(,"NF_VALSOL")',"ICMS Ret.",0,"VS1->VS1_ICMRET"})/*Depois crie o campo VS1_ICMRET conforme a necessidade e coloque no valid dele o seguinte:MaFisRef("NF_VALSOL","VS100",M->VS1_ICMRET)apenas cuide para que na criação do campo ele não seja editável.*/Return .t.
Variáveis
Nome Tipo Escopo Pode Alterar descrição
Array of Record Global Não