;** Sw_Cons ********************************************************************
;*  Programa p/ Consulta de Itens do Estoque                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/11/2001 por Douglas Rodrigues
;Ultima Alteracao: 15/05/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes EOF()
;Ultima Alteracao: 23/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle Mouse
;Ultima Alteracao: 29/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pesquisa Codigo do Item
;Ultima Alteracao: 28/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Formatacao Preco
;Ultima Alteracao: 09/06/2010 por Cleber Alves            
;Motivo Alteracao: Ajustes erro Mostra_Estoque_Cotacao()
;Ultima Alteracao: 12/07/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡„o para Descri‡„o Complementar do Item
;Ultima Alteracao: 18/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Abertura de tabenas no inicio
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 20/01/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo para Ordem de Data de Compra "Decrescente"
;Ultima Alteracao: 12/04/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Funcao no Modo Principal (Imp. Relacao de Notas por Fornecedor)
;Ultima Alteracao: 30/05/2011 por Bruno Carvalho
;Motivo Alteracao: Alterado layout para exibir informa‡äes do item
;Ultima Alteracao: 17/10/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CodFonecedor 
;Ultima Alteracao: 30/11/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Edita_Memo()  ->  Ver_Memo()  
;Ultima Alteracao: 20/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monstra_Estoque() ao Carregar
;Ultima Alteracao: 14/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add "Codigo de Barras" na viualiza‡Æo das informa‡äes do item
;Ultima Alteracao: 10/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes locate por indice tabela itens no campo codigo do item
;Ultima Alteracao: 12/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes salvar .ini
;Ultima Alteracao: 25/09/2013 por Bruno Carvalho         
;Motivo Alteracao: Ajustes IndexOrder quando "descricao" 
;Ultima Alteracao: 25/09/2013 por Bruno Carvalho         
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 04/12/2013 por Bruno Carvalho
;Motivo Alteracao: Add PARAM_TODAS_COMPRAS onde ser  possivel conferir todas as compras em aberto
;Ultima Alteracao: 20/12/2013 por Andrey Fillipe/Bruno Carvalho
;Motivo Alteracao: Inclusao fator de conversao
;Ultima Alteracao: 08/01/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado Sys_Codigo_Cliente p/ PARAM_TODAS_COMPRAS
;Ultima Alteracao: 25/02/2014 por Kamila Gomes
;Motivo Alteracao: Adicionado Sys_Codigo_Cliente p/ PARAM_TODAS_COMPRAS para 0294
;Ultima Alteracao: 28/03/2014 por Bruno Carvalho  
;Motivo Alteracao: Ajustes Mostra_Dados_Item() onde foi alterado p/ Fator de Conversao e PrCompraUnitario
;Ultima Alteracao: 31/03/2014 por Bruno Carvalho  
;Motivo Alteracao: Ajustes Mostra_Dados_Item()
;Ultima Alteracao: 10/06/2014 por Andrey/Bruno  
;Motivo Alteracao: Ajustes Mostra_Dados_Item() FatC=BlankNum(), PrComp=BlankNum(), PrUnit=BlankNum()
;Ultima Alteracao: 19/08/2014 por Bruno Carvalho  
;Motivo Alteracao: Adicionado "P_SW" e ajustado p/ exibir compras de mˆs fechado conforme parƒmetro
;Ultima Alteracao: 21/08/2014 por Bruno Carvalho  
;Motivo Alteracao: Ajustes Mostra_Dados_Item()
;Ultima Alteracao: 12/11/2014 por Anivel/Andrey  
;Motivo Alteracao: Adicionado Proc ConvertStrNum(str)
;Ultima Alteracao: 17/12/2014 por Andrey/Bruno
;Motivo Alteracao: Ajustes Mostra_Dados_Item(), Corrigido quando for cotacao, estava aparecendo zerado 
;Ultima Alteracao: 23/01/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes Mostra_Dados_Item(), valores default recebendo BlankNum() passaram a receber ""
;Ultima Alteracao: 23/03/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Mostra_Dados_Item(), adicionado NCM
;Ultima Alteracao: 23/04/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Detalhes do item, mostra a data de Entrada da compra
;Ultima Alteracao: 14/07/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado op‡Æo para pesquisar por NCM 
;Ultima Alteracao: 27/10/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado CST ICMS, ALIQUOTA, VENDAGEM e CUSTO MEDIO
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Janela sem sombra
;Ultima Alteracao: 19/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" p/ o campo [Vendagem]
;Ultima Alteracao: 07/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste visualiza‡Æo          
;Ultima Alteracao: 08/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado Verifica_Item() p/ processar conforme cosultas j  implementado no COMPRAS
;Ultima Alteracao: 07/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes Ordena_DynArray() p/ alinhar a sequˆncia a 3 d¡gitos
;Ultima Alteracao: 10/06/2016 por por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes adicionaitemarray + desconto
;Ultima Alteracao: 13/06/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado busca por CEST, FCI e Familia e controle DynArray(Array_Registro) -> Array(Array_Registro) no ShowDialog 
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes Transfere_DynArray_Array() quando Array nÆo tiver valor
;Ultima Alteracao: 04/07/2016 por Bruno Carvalho
;Motivo Alteracao: Registros a serem exibidos por ordem Descrescente ao chamar a proc Ordena_DynArray() inicialmente
;Ultima Alteracao: 07/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustado soma de saldo para quando tiver EMPRESA_ALMOXARIFADO p/ #0294# e Unidade X:
;Ultima Alteracao: 18/07/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado verifica‡Æo de estoque de almoxarifado -> Verifica_Almoxarifado()
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajuste Verifica_Item()
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()
;Ultima Alteracao: 29/08/2017 por por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F6 imprimir
;Ultima Alteracao: 14/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ver_Memo() substitu¡do por Ler_Memo() -> Observacao()
;Ultima Alteracao: 13/08/2018 por Bruno Carvalho
;Motivo Alteracao: Novo laoyut
;Ultima Alteracao: 30/03/2019 por por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes informacoes adicionais compras
;Ultima Alteracao: 02/04/2019 por por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes numero documento compras

;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONS_Pega_Valor_String(PARAM,POSICAO)
Private PARAM, RESULT   
             
RESULT = ""              
Switch
  Case PARAM = "Codigo do Item"     : RESULT = SubStr(Array_Registro[POSICAO],33,10)       
  Case PARAM = "Fornecedor"         : RESULT = SubStr(Array_Registro[POSICAO],44,13)
  Case PARAM = "Descricao"          : RESULT = SubStr(Array_Registro[POSICAO],01,30)
  Case PARAM = "Verifica_Array"     : RESULT = SubStr(Array_Registro[POSICAO],80,01)                                                                                                                                                                                 
EndSwitch
                  
Return RESULT      

EndProc ;SWCONS_Pega_Valor_String(

;*******************************************************************************
;* Rotina para limpar array e variaveis com informa‡Æo dos itens               *
;*******************************************************************************
Proc SWCONS_Limpa_Array_Registro(PARAM)

If PARAM="Cria Array"              
   Then WCSW_NITENS=0
        DynArray Array_Registro[]
        ft1=""
        ft2=""
EndIf
        
st1=""
st2=""
st3=""
st4=""
st5=""
st6=""
st7=""

EndProc ;SWCONS_Limpa_Array_Registro()

;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona()
Private wc,oppesq,msg

Aguarde("Aguarde, Selecionando Registros")
Message("Procurando...")

DynArray Array_Registro[]  

If Modo<>"Principal"
   Then SW_VSDGOPPESQ=VSDGOPPESQ
        SW_VSDGTXPESQ=VSDGTXPESQ
EndIf

oppesq=substr(VSDGOPPESQ,1,1)
Moveto "Itens"
Switch
  Case oppesq="1" : Moveto [Descricao do Item]
                    Locate IndexOrder by "descricao" Pattern VSDGTXPESQ
  Case oppesq="2" : If Search("..",VSDGTXPESQ)=0
                       Then Moveto [Codigo do Item]
                            Locate VSDGTXPESQ
                       Else Moveto [Codigo do Item]
                            Locate IndexOrder by "codigo do item" Pattern VSDGTXPESQ
                    EndIf
  Case oppesq="3" : Moveto [Codigo Fornecedor]
                    Locate IndexOrder by "cdforndescr" Pattern VSDGTXPESQ
  Case oppesq="4" : COD_BARRA2=False
                    Moveto [Codigo de Barras]
                    Locate IndexOrder by "codigo de barras" Pattern VSDGTXPESQ
                    If Not RetVal
                       Then COD_BARRA2=True
                            If Codigo_Barras2(VSDGTXPESQ,"")
                               Then Moveto [Codigo do Item]
                                    Locate CODIGO_BARRA2
                            EndIf         
                    EndIf   
  Case oppesq="5" : Moveto [Localizacao]
                    Locate IndexOrder by "localdescr" Pattern VSDGTXPESQ
  Case oppesq="6" : Moveto [Descricao da Marca]
                    Locate IndexOrder by "marcadescr" Pattern VSDGTXPESQ
  Case oppesq="7" : Moveto [Descricao do Item]
                    {Image} {OrderTable} Enter {Descricao}
                    Moveto [Observacao]
                    Locate Pattern VSDGTXPESQ
  Case oppesq="8" : Moveto [Descricao do Grupo]
                    OrderTable {grupodescr}
                    Home
                    Locate IndexOrder by "grupodescr" Pattern VSDGTXPESQ
  Case oppesq="9" : Moveto [Descricao Complementar]
                    Locate IndexOrder by "descrcompl" Pattern VSDGTXPESQ
  Case oppesq="A" : Moveto [Referencia]
                    OrderTable {Referencia}
                    Home
                    Locate IndexOrder by "Referencia" Pattern VSDGTXPESQ  
  Case oppesq="B" : Moveto [NCM]
                    OrderTable {NCM}
                    Home
                    Locate IndexOrder by "NCM" Pattern VSDGTXPESQ
  Case oppesq="C" : Moveto "Iten_Com"
                    Moveto [CEST]
                    OrderTable {CEST}
                    Home
                    Locate IndexOrder by "CEST" Pattern VSDGTXPESQ
  Case oppesq="D" : Moveto "Iten_Com"
                    Moveto [FCI]
                    OrderTable {FCI}
                    Home
                    Locate IndexOrder by "FCI" Pattern VSDGTXPESQ
  Case oppesq="E" : Moveto [Descricao da Familia]
                    OrderTable {familiadescr}
                    Home
                    Locate IndexOrder by "familiadescr" Pattern VSDGTXPESQ                                                                                                                                       
EndSwitch

wc=0
WCSW_NITENS=wc
If RetVal
   Then primeira_tentativa=Recno()
        While True
          Consulta = False
          CODIGO_ITEM=[Codigo do Item]   
          GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
          If Not ReTval
             Then Mensagem("Item "+CODIGO_ITEM+" n„o localizado no cadastro de itens!")
                  QuitLoop     
          EndIf
          Consulta = True
          If REG_ITEM["Inativo"]<>"S"
             Then wc=wc+1
                  Array_Registro[WC] = Completa(SubStr(REG_ITEM["Descricao do Item"],1,30),30," ")+"  "+
                                       REG_ITEM["Codigo do Item"]+" "+
                                       Completa(SubStr(REG_ITEM["Codigo Fornecedor"],1,20),20," ")+" "
          EndIf
          Skip
          If EOT()
             Then If oppesq="7"
                     Then QuitLoop
                     Else Home
                  EndIf
          EndIf
          Switch
            Case oppesq="1" : Locate IndexOrder by "descricao" Next Pattern VSDGTXPESQ
            Case oppesq="2" : If Search("..",VSDGTXPESQ)=0
                                 Then Locate Next VSDGTXPESQ
                                 Else Locate IndexOrder by "codigo do item" Next Pattern VSDGTXPESQ
                              EndIf
            Case oppesq="3" : Locate IndexOrder by "cdforndescr" Next Pattern VSDGTXPESQ
            Case oppesq="4" : If IsAssigned(COD_BARRA2) And COD_BARRA2=True
                                 Then QuitLoop
                                 Else Locate IndexOrder by "codigo de barras" Next Pattern VSDGTXPESQ
                              EndIf
            Case oppesq="5" : Locate IndexOrder by "localdescr"   Next Pattern VSDGTXPESQ
            Case oppesq="6" : Locate IndexOrder by "marcadescr"   Next Pattern VSDGTXPESQ
            Case oppesq="7" : Locate Next Pattern VSDGTXPESQ
            Case oppesq="8" : Locate IndexOrder by "grupodescr"   Next Pattern VSDGTXPESQ
            Case oppesq="9" : Locate IndexOrder by "descrcompl"   Next Pattern VSDGTXPESQ
            Case oppesq="A" : Locate IndexOrder by "Referencia"   Next Pattern VSDGTXPESQ
            Case oppesq="B" : Locate IndexOrder by "NCM"          Next Pattern VSDGTXPESQ
            Case oppesq="C" : Locate IndexOrder by "CEST"         Next Pattern VSDGTXPESQ
            Case oppesq="D" : Locate IndexOrder by "FCI"          Next Pattern VSDGTXPESQ
            Case oppesq="E" : Locate IndexOrder by "familiadescr" Next Pattern VSDGTXPESQ
          EndSwitch
          If Not RetVal Then QuitLoop EndIf
          If Recno()=primeira_tentativa Then QuitLoop Endif
          If wc=1000
             Then MSG = "Sr. USUARIO. // //"
                  MSG = MSG +"MEMORIA INSUFICIENTE. (DOS/EMS)//"
                  MSG = MSG +"Somente parte da Pesquisa ser  mostrado.//"
                  MSG = MSG +"Caso queira continuar com a pesquisa,   //"
                  MSG = MSG +"preencha com mais informa‡”es o campo   //"
                  MSG = MSG +"para diminuir o numero de itens.          "
                  Mensagem(MSG)
                  QuitLoop
          EndIf
        EndWhile
        WCSW_NITENS=wc

        Moveto "\\Sistemas\\Vendas\\TbprIte"
        Moveto [Codigo da Tabela]
        For wc from 1 to DynArraySize(Array_Registro)
          citep = SWCONS_Pega_Valor_String("Codigo do Item",WC)
          Verifica_Array = SWCONS_Pega_Valor_String("Verifica_Array",WC)         
          If Verifica_Array<>" "
             Then citep=PegaCodigoRaiz(citep)
          EndIf
          Locate VSDGTABELA,citep
          If RetVal
             Then Array_Registro[WC] = Array_Registro[WC]+Format("W10.2,EIC",[Preco Unitario])+" "+
                                       Format("W2",REG_ITEM["Unidade Interna"])
             Else Array_Registro[WC] = Array_Registro[WC]+Format("W10.2,EIC",0)+" "+
                                       Format("W2",REG_ITEM["Unidade Interna"])
          EndIf
        EndFor
EndIf                         
If DynArraySize(Array_Registro)=0
   Then Mensagem("Pesquisa sem Registro !")
        Return False
EndIf
Message("")
LimpAguarde()
Return True
EndProc ; (Seleciona)

;*******************************************************************************
;* Rotina para Mostrar fator de conversao                                      *
;*******************************************************************************
Proc ConvertStrNum(str)
Private aux, c

str=LTrim(RTrim(str))
aux=""
For c From 1 To Len(str)
  Switch
    Case SubStr(str,c,1)= "," : aux=aux+"."
    Case SubStr(str,c,1)<>"." : aux=aux+SubStr(str,c,1)
  EndSwitch
EndFor

If aux<>"" 
   Then Return Numval(aux) 
   Else Return 0 
EndIf

EndProc ;(ConvertStrNum)

;*******************************************************************************
;* Rotina para Mostrar fator de conversao                                      *
;*******************************************************************************
Proc Mostra_Dados_Item(PARAM) 
Private PARAM,QtdC,Qtd,UndE,UndI,AUX_PR,AUX, Descto,InfAidc

QtdC   = blanknum()
Qtd    = blanknum()
UndE   = ""
UndI   = ""
FatC   = ""
PrComp = blanknum()
PrUnit = blanknum()
Descto = blanknum()
InfAidc= ""

If PARAM="Valido"
   Then Switch
          Case DynArraySize(Array_RegCot)>0 : AUX_CONTADOR = 4
          Case ArraySize(Array_RegCot)>0    : AUX_CONTADOR = 0 
        EndSwitch     
        NumLanc = SubStr(Array_RegCot[ControlValue("TG_REGCOT")],80+AUX_CONTADOR,6)
        SeqItem = NumVal(Ltrim(Rtrim(SubStr(Array_RegCot[ControlValue("TG_REGCOT")],75+AUX_CONTADOR,5))))
        
        PrUnit = ConvertStrNum(SubStr(Array_RegCot[ControlValue("TG_REGCOT")],66+AUX_CONTADOR,09))
        FatC   = ConvertStrNum(SubStr(Array_RegCot[ControlValue("TG_REGCOT")],101+AUX_CONTADOR,12))
        Descto = ConvertStrNum(SubStr(Array_RegCot[ControlValue("TG_REGCOT")],113+AUX_CONTADOR,12))
        InfAdic= SubStr(Array_RegCot[ControlValue("TG_REGCOT")],125+AUX_CONTADOR,20)
        
        If FatC>0
           Then PrComp = PrUnit/FatC
           Else PrComp = PrUnit 
        EndIf
        
        If Type(NumVal(FatC)) = "N"
           Then If FatC > 0
                   Then FatC = Format("W12.2,EIC",FatC)
                   Else FatC = Completa("",12," ")
                EndIf
           Else FatC = Completa("",12," ")        
        Endif   
                                                          
        QtdC = SubStr(Array_RegCot[ControlValue("TG_REGCOT")],89+AUX_CONTADOR,12)
        Qtd  = SubStr(Array_RegCot[ControlValue("TG_REGCOT")],53+AUX_CONTADOR,09)
        UndE = SubStr(Array_RegCot[ControlValue("TG_REGCOT")],63+AUX_CONTADOR,3)
        UndI = SubStr(Array_RegCot[ControlValue("TG_REGCOT")],86+AUX_CONTADOR,3)
        
;1          2    7                          45      53        63  6       75   80    86  9         101         113         125
;99/99/9999 9999 123456789012345678901234567 1234567 999.999,9 XX 99.999,9912345999999UI QC3456789012FC3456789012D23456789012XXXXXXXXXXXXXXXXXXXX
        
EndIf   

ft1="Fator ConversÆo  QtdConvertida   Pr.Unit rio     Desconto InfAdicional"
ft2=FatC                      +"/"+Format("W2",UndI)+" "+
    Format("W11.2,EIC",QtdC  )+"/"+Format("W2",UndI)+" "+
    Format("W10.2,EIC",PrComp)+"/"+Format("W2",UndI)+" "+
    Format("W09.2,EIC",Descto)+"/"+Format("W2",UndE)+" "+         
    Format("W20,AL",infAdic  )                                     

;      Quantidade     Pr.Unit rio  Fator ConversÆo
;9.999.999,999/XX 9.999.999.99/XX  XX/9.999.999,999  

EndProc ;Mostra_Dados_Item() 

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Consulta(Disparo,Campo,Evento,Elemento)

Temp=True
TECLA    =""
MSG_CAMPO=""

If INICIO_DIALOG
   Then
        Switch
          Case Sw_Dialog="Inicial":
            If Not IsAssigNed(VSDGEMPRESA) Or IsBlank(VSDGEMPRESA)
               Then Campo="TG_EMPRESA"
                    Acha_Empresa=False
               Else If Not IsAssigNed(VSDGTABELA) Or IsBlank(VSDGTABELA)
                       Then Campo="TG_TABELA"
                       Else If Not IsAssigNed(VSDGOPPESQ) Or IsBlank(VSDGOPPESQ)
                               Then Campo="TG_OPPESQ"
                               Else Campo="TG_TXPESQ"
                            EndIf
                    EndIf
            EndIf
          OtherWise: Campo="TG_REGCOT"
        EndSwitch
          
        INICIO_DIALOG=False
EndIf

If Disparo="OPEN"
   Then ;AoCriarShowDialog()
        ;TiraSombraShowDialog()
                       
        Dynarray SD_ConsultaWinArray[]
        Window Handle Dialog To SD_ConsultaJANELA
        Window GetAttributes SD_ConsultaJANELA To SD_ConsultaWinArray
        
        switch
          Case Sw_Dialog="Inicial": SD_ConsultaWinArray["HASFRAME" ] = False
      
        endswitch
        SD_ConsultaWinArray["HASSHADOW"]   =False
        Window SetAttributes SD_ConsultaJANELA From SD_ConsultaWinArray
      
        If Campo="TG_REGCOT"
            Then If IsAssigned(Array_RegCot[ControlValue("TG_REGCOT")])
                   Then Mostra_Dados_Item("Valido")
                   Else Mostra_Dados_Item("")    
                EndIf   
        EndIf    
EndIf

If Disparo="CLOSE"
   Then SWCONS_Limpa_Array_Registro("Cria Array")

        If Not IsBlank(VSDGEMPRESA) And
           Not IsBlank(VSDGTABELA) And
           Not IsBlank(VSDGOPPESQ)
           Then
                LINHAINI =            GravaExpressao("[Variaveis sw_cons - principal]","T","")
                LINHAINI = LINHAINI + GravaExpressao("VSDGEMPRESA","S",VSDGEMPRESA)        
                LINHAINI = LINHAINI + GravaExpressao("VSDGTABELA" ,"S",VSDGTABELA)        
                
                If Substr(VSDGOPPESQ,1,1)="A" Or
                   Substr(VSDGOPPESQ,1,1)="B" Or
                   Substr(VSDGOPPESQ,1,1)="C" Or
                   Substr(VSDGOPPESQ,1,1)="D" Or
                   Substr(VSDGOPPESQ,1,1)="E"   
                   Then LINHAINI = LINHAINI + GravaExpressao("VSDGOPPESQ" ,"S",SubStr(VSDGOPPESQ,1,1))
                   Else LINHAINI = LINHAINI + GravaExpressao("VSDGOPPESQ" ,"N",SubStr(VSDGOPPESQ,1,1))
                EndIf   
                FileWrite PrivDir()+"sw_conse.ini" From LINHAINI
                Release Vars LINHAINI           
        EndIf

EndIf

If Disparo="UPDATE"  
   Then Temp=True
        Switch
          Case Campo="TG_Registro" : Item   = SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                                     Mostra_Estoque()
          Case Campo="TG_REGCOT"   : Mostra_Dados_Item("Valido")
        EndSwitch
        Return Temp
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -33 And Modo="Principal":
          Echo Normal
          Echo Off
          ShowPopup " Fun‡”es " CENTERED
          "F6  ~I~mprimir                        " : " Imprime rela‡„o de notas por fornecedor               " : "F6",
          "F7  ~O~rdenar Registros               " : " Ordenar registros conforme escolha                    " : "F7",
          "F8  O~r~ganiza Crescente/Decrescente  " : " Organiza registros por ordem crescente ou decrescente " : "F8",
          Separator,
          "~C~ancelar                            " : " Cancelar a Opera‡„o                                   " : "CANCELAR"
          EndMenu                                                                                 
          To MenuVar
          Echo Off
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf
 
          If MenuVar="F7" 
             Then Echo Normal
                  Echo Off
                  ShowPopup " Ordem " CENTERED
                    "Ordem de C~o~digo          " : " Ordena por C¢digo do Fornecedor    " : "Ordem_Cod",
                    "Ordem ~A~lfab‚tica         " : " Ordena por Ordem Alfabetica        " : "Ordem_Alf",
                    "Ordem ~D~ata de Compra     " : " Ordena por Ordem de Data de Compra " : "Ordem_Dat", 
                    "Ordem de ~P~re‡o de Compra " : " Ordena por Pre‡o de Compra         " : "Ordem_Pre",
                    Separator,
                    "~C~ancelar                 " : " Cancelar a Opera‡„o                " : "Cancelar"
                  EndMenu
                  To MenuVar
                  Echo off

                  If MenuVar="Cancelar" or MenuVar="Esc"
                     Then Return
                  EndIf
                   
                  RegOrdena = MenuVar
                  Switch
                    Case RegOrdena="Ordem_Cod" : Ordena_DynArray(Array_RegCot,12,04,"S","D") 
                    Case RegOrdena="Ordem_Alf" : Ordena_DynArray(Array_RegCot,17,27,"S","D")          
                    Case RegOrdena="Ordem_Dat" : Ordena_DynArray(Array_RegCot,01,10,"D","D")
                    Case RegOrdena="Ordem_Pre" : Ordena_DynArray(Array_RegCot,66,09,"N,09.2","D")
                  EndSwitch      
                  RefreshDialog
          EndIf            
          
          If MenuVar="F8" 
             Then Echo Normal
                  Echo Off
                  ShowPopup " Organizar por Ordem " CENTERED
                    "Organizar por Ordem ~C~rescente    " : " Organiza registro por ordem crescente    " : "Ordem_Cre",
                    "Organizar por Ordem ~D~ecrescente  " : " Organiza registro por ordem decrescente  " : "Ordem_Dec",
                    Separator,
                    "~C~ancelar                         " : " Cancelar a Opera‡„o                      " : "Cancelar"
                  EndMenu
                  To MenuVar
                  Echo off

                  If MenuVar="Cancelar" or MenuVar="Esc"
                     Then Return
                  EndIF

                  RegOrganiza = MenuVar
                  If Not IsAssigned(RegOrdena) Then RegOrdena="Ordem_Dat" EndIf
                  Switch
                    Case RegOrganiza="Ordem_Cre" : RegOrganiza="S"
                    Case RegOrganiza="Ordem_Dec" : RegOrganiza="D"  
                  EndSwitch
                                         
                  Switch
                    Case RegOrdena="Ordem_Cod" : Ordena_DynArray(Array_RegCot,12,04,"S",RegOrganiza) 
                    Case RegOrdena="Ordem_Alf" : Ordena_DynArray(Array_RegCot,17,27,"S",RegOrganiza)
                    Case RegOrdena="Ordem_Dat" : Ordena_DynArray(Array_RegCot,01,10,"D",RegOrganiza)
                    Case RegOrdena="Ordem_Pre" : Ordena_DynArray(Array_RegCot,66,09,"N,09.2",RegOrganiza)
                  EndSwitch      
                  RefreshDialog
          EndIf   
          
          If MenuVar="F6" 
             Then
                  If Campo="TG_REGCOT" And (DynArraySize(Array_RegCot)>0 Or ArraySize(Array_RegCot)>0)
                     Then If DynArraySize(Array_RegCot)>0 
                             Then CODIGO_DEST=SubStr(Array_RegCot[ControlValue("TG_REGCOT")],16,4)
                             Else If ArraySize(Array_RegCot)>0 
                                     Then CODIGO_DEST=SubStr(Array_RegCot[ControlValue("TG_REGCOT")],12,4)
                                  EndIf
                          EndIf
                     Else Mensagem("Sem nota pra imprimir !")
                          Return  
                  EndIf
    
                  Echo Normal
                  Echo Off
                  ShowPopup " Impress„o " CENTERED
                    "~T~odos os Fornecedores       " : " Imprime Rela‡„o de Notas dos Fornecedor            " : "TODOSF",
                    "~S~elecionado Apenas          " : " Imprime Rela‡„o de Notas do Fornecedor Selecionado " : "APENASF",
                    "~C~ancelar                    " : " Cancelar a Opera‡„o                                " : "Cancelar" 
                  EndMenu
                  To MenuVar
                  Echo off
               
                  If MenuVar="Cancelar" or MenuVar="Esc"
                     Then Return
                  EndIF
                  Do_It!
    
                  If MenuVar="TODOSF"  Then VSDGDESTINAT=""          EndIf
                  If MenuVar="APENASF" Then VSDGDESTINAT=CODIGO_DEST EndIf 
                  
                  Play "RM_0281a" 
          EndIF 

     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] =  -63 And Campo="TG_Registro":
          Forn   = SWCONS_Pega_Valor_String("Fornecedor",ControlValue("TG_Registro"))
          Item   = SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          Desc   = SWCONS_Pega_Valor_String("Descricao",ControlValue("TG_Registro"))
          Observacao()
     Case Evento["KeyCode"] =  -59:
          Temp=False
          If Campo="TG_OPPESQ"
             Then ShowPopup " Op‡”es " @ 03,27
                   "1-Descric„o         " : "Localizar pela Descric„o do Item             " : "1-Descric„o",
                   "9-Descr.Complementar" : "Localizar pela Descri‡„o Complementar do Item" : "9-Descr.Complementar",
                   Separator,
                   "6-Marca             " : "Localizar pela Marca                         " : "6-Marca",
                   "8-Grupo             " : "Localizar pelo Crupo                         " : "8-Grupo",
                   "E-Familia           " : "Localizar pela Familia                       " : "E-Familia",
                   Separator,
                   "2-C¢digo            " : "Localizar pelo C¢digo do Item                " : "2-C¢digo",
                   "3-C¢d.Fornecedor    " : "Localizar pelo C¢digo do Item do Fornecedor  " : "3-C¢d.Fornecedor",
                   "4-C¢d.Barras        " : "Localizar pelo C¢digo de Barras              " : "4-C¢d.Barras",
                   "7-C¢d.Origem (Obs)  " : "Localizar pelo C¢digo Origem (Observa‡„o)    " : "7-C¢d.Origem",
                   "A-Referˆncia        " : "Localizar pela Referˆncia                    " : "A-Referˆncia",
                   Separator,
                   "5-Localiza‡„o       " : "Localizar pela Localiza‡„o                   " : "5-Localiza‡„o",
                   Separator,
                   "B-NCM               " : "Localizar pelo NCM                           " : "B-NCM",
                   "C-CEST              " : "Localizar pelo CEST                          " : "C-CEST",
                   "D-FCI               " : "Localizar pelo FCI                           " : "D-FCI"
                  EndMenu
               To VSDGOPPESQ
                  If Not RetVal
                     Then VSDGOPPESQ=""
                     Else Campo="TG_TXPESQ"
                  EndIf
                  RefreshDialog                                                
          EndIf
          If Campo="TG_EMPRESA" Or
             Campo="TG_TABELA"
             Then If Modo="Principal"
                     Then Dialog_F1()
                     Else Dynarray WinArray5[]
                          Window Handle Dialog to JANELA
                          Window GetAttributes JANELA To WinArray5
                          WinArray5["FLOATING"]=False
                          Window SetAttributes JANELA From WinArray5
                          If Campo="TG_EMPRESA"
                             Then Moveto "FaturaC"
                                  Moveto [Codigo da Empresa]
                          EndIf
                          If Campo="TG_TABELA"
                             Then Moveto "FaturaC"
                                  Moveto [Codigo da Tabela]
                          EndIf
                          ConsultaF1()

                          Window Select JANELA
                          WinArray5["FLOATING"]=True
                          Window SetAttributes JANELA From WinArray5

                          echo Normal
                          echo off

                          If Campo="TG_EMPRESA"
                             Then VSDGEMPRESA  = [Codigo da Empresa ]
                          EndIf
                          If Campo="TG_TABELA"
                             Then VSDGTABELA  = [Codigo da Tabela ]
                          EndIf
                          Moveto Tabela
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -82 And Campo="TG_Registro" And Modo<>"Principal" And OP_INSERT_ITEM:
          SW_Item_Pesquisado=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          CancelDialog                                                            

     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            ;* Ficha de Estoque
            Case Campo="TG_REGCOT"     : CancelDialog

            ;* Filtro
            Case Campo="TG_EMPRESA"    : CancelDialog
            Case Campo="TG_TABELA"     :
                 If OP_INSERT_ITEM
                    Then CancelDialog
                    Else Campo="TG_EMPRESA"
                 EndIf
            Case Campo="TG_OPPESQ"     : Campo="TG_TABELA"
            Case Campo="TG_TXPESQ"     : Campo="TG_OPPESQ"
            Case Campo="TG_Registro"   : Campo="TG_TXPESQ"
                 SWCONS_Limpa_Array_Registro("Cria Array")
          EndSwitch
     Case Evento["KeyCode"] =  13: 
          Temp=False
          If Modo="Principal"
            Then If Campo="TG_TXPESQ"
                    Then VSDGTXPESQ=Ltrim(Rtrim(ControlValue("TG_TXPESQ")))
                         If Not IsBlank(VSDGTXPESQ)
                            Then If SubStr(VSDGOPPESQ,1,1)="2" And Len(VSDGTXPESQ)<10
                                    Then If Search("..",VSDGTXPESQ)=0
                                            Then VSDGTXPESQ=AlinhM(VSDGTXPESQ,10)
                                         EndIf
                                 EndIf
                                 RefreshDialog
                                 If Seleciona()
                                    Then RefreshDialog
                                         Campo="TG_Registro"
                                         Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                                         Mostra_Estoque()
                                 EndIf
                         EndIf
                    Else
                      If Checa_TAG()
                         Then Switch
                                ;*Filtro
                                Case Campo="TG_EMPRESA":
                                     If Not IsBlank(VSDGEMPRESA)
                                        Then Campo="TG_TABELA"
                                     EndIf
                                Case Campo="TG_TABELA":
                                     If Not IsBlank(VSDGTABELA)
                                        Then If VSDGTBATIVA="N"
                                                Then Mensagem("Tabela inativa !")
                                                Else Campo="TG_OPPESQ"
                                             EndIf
                                     EndIf
                                Case Campo="TG_OPPESQ" :
                                     VSDGOPPESQ=LTrim(RTrim(ControlValue("TG_OPPESQ")))
                                     If Not IsBlank(VSDGOPPESQ)
                                        Then Campo="TG_TXPESQ"
                                     EndIf
                                Case Campo="TG_Registro":
                                     Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                                     Mostra_Estoque_Cotacao()
                              EndSwitch
                      EndIf
                 EndIf
            Else Switch
                   ;*Filtro
                   Case Campo="TG_EMPRESA":
                        VSDGEMPRESA=Ltrim(Rtrim(ControlValue("TG_EMPRESA")))
                        If Not IsBlank(VSDGEMPRESA)
                           Then VSDGEMPRESA=AlinhM(VSDGEMPRESA,4)
                                Moveto "FaturaC"
                                Moveto [Codigo da Empresa]
                                Ativa_Lookup()
                                Moveto [Codigo da Empresa]
                                Locate VSDGEMPRESA
                                If Not RetVal
                                   Then Mensagem("Empresa Invalida !")
                                   Else Campo="TG_TABELA"
                                EndIf
                                KeyPress "ESC"
                        EndIf
                   Case Campo="TG_TABELA":
                        VSDGTABELA=Ltrim(Rtrim(ControlValue("TG_TABELA")))
                        If Not IsBlank(VSDGTABELA)
                           Then VSDGTABELA=AlinhM(VSDGTABELA,5)
                                Moveto "FaturaC"
                                Moveto [Codigo da Tabela]
                                Ativa_Lookup()
                                Moveto [Codigo da Tabela]
                                Locate VSDGTABELA
                                If Not RetVal
                                   Then Mensagem("Tabela de Pre‡o Invalida !")
                                   Else If Not IsBlank(VSDGTABELA)
                                           Then VSDGTBATIVA=[Ativa]
                                                If VSDGTBATIVA="N"
                                                   Then Mensagem("Tabela inativa !")
                                                   Else Campo="TG_OPPESQ"
                                                EndIf
                                        EndIf
                                EndIf
                                KeyPress "ESC"
                        EndIf
                   Case Campo="TG_OPPESQ" :
                        VSDGOPPESQ=ControlValue("TG_OPPESQ")
                        If Not IsBlank(VSDGOPPESQ)
                           Then Campo="TG_TXPESQ"
                        EndIf
                   Case Campo="TG_TXPESQ":
                        VSDGTXPESQ=Ltrim(Rtrim(ControlValue("TG_TXPESQ")))
                        If Not IsBlank(VSDGTXPESQ)
                           Then If SubStr(VSDGOPPESQ,1,1)="2" And Len(VSDGTXPESQ)<10
                                   Then If Search("..",VSDGTXPESQ)=0
                                            Then VSDGTXPESQ=AlinhM(VSDGTXPESQ,10)
                                        EndIf
                                EndIf
                                RefreshDialog
                                If Seleciona()
                                   Then Campo="TG_Registro"
                                EndIf
                        EndIf
                   Case Campo="TG_Registro":
                        Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                        Mostra_Estoque_Cotacao()
                 EndSwitch

                 If Modo="Edicao"
                    Then Moveto Tabela
                 EndIf
          EndIf
   EndSwitch
EndIf

If Disparo="SELECT" And Campo="TG_Registro"
   Then Temp=False
        Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Mostra_Estoque_Cotacao()
        If Modo="Edicao"
           Then Moveto Tabela
        EndIf
EndIf

Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o Codigo da Empresa"
  Case Campo="TG_TABELA":
       MSG_CAMPO="Informe a Tabela de Pre‡o"
  Case Campo="TG_OPPESQ":
       MSG_CAMPO="Informe a op‡„o de pesquisa"
       TECLA="F1=Consulta  "
  Case Campo="TG_TXPESQ":
       If Substr(VSDGOPPESQ,1,1)="A"
          Then MSG_CAMPO="Informe o c¢digo do cliente, [F1]Consultar tabela"
          Else MSG_CAMPO="Informe o valor a pesquisar (..)"
       EnDIf    
  Case Campo="TG_Registro":
       MSG_CAMPO=Format("W5",WCSW_NITENS)+" iten(s)                                                         "
       If Not OP_INSERT_ITEM
          Then TECLA="//Esc=Retornar  Enter=Detalhes  =Selecionar F5=Obs"
          Else TECLA="//Esc=Retornar  Enter=Detalhes  =Selecionar F5=Obs  Ins=Incluir"
       EndIf       
  Case Campo="TG_REGCOT":
       MSG_CAMPO=Format("W5",WCSW_NDOCTS)+" Docto(s)                                                        "
       If Modo="Principal"
          Then TECLA="Alt+F=Fun‡”es"   
       EndIf
EndSwitch

SelectControl Campo
RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
ResyncControl Campo
Return Temp
EndProc  ; (Sd_Dialog)

;*******************************************************************************
;* Rotina Observacao                                                           *
;*******************************************************************************
Proc Observacao()
Private AUX_MSG,REG_ITEM

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate IndexOrder by "codigo do item" Pattern Item
If RetVal
   Then AUX_MSG = [Observacao]
        If AUX_MSG<>""
           Then Ler_Memo("| "+Forn+" | "+Item+" | "+RTrim(Desc)+" |",05,02,15,80,AUX_MSG)
        EndIf
   Else Mensagem("Item n„o localizado !")
EndIf
Release Vars AUX_MSG,REG_ITEM

EndProc  ; (Observacao)

;*******************************************************************************
;* Rotina para Mostrar Estoque                                                 *
;*******************************************************************************
Proc Mostra_Estoque()
Private Indice,Forn, Desc, Local, Vend, Saldo, UltCt, UltDt, estmin, ptrepos, estmax,
        Compl, Barra, Marca, Grupo, UltSai, NCM,iteminativo,cst,vendagem,Depart,Aliq
      
GetRecord "\\Sistemas\\Estoque\\Iten_Com" Item To REG_ITEMCOMP
If RetVal
   Then vendagem = REG_ITEMCOMP["Vendagem"]
        fci      = REG_ITEMCOMP["FCI"]
        cest     = REG_ITEMCOMP["CEST"]
   Else vendagem = "?"
        fci      = "?" 
        cest     = "?"
EndIf   
Release Vars REG_ITEMCOMP
      
Indice=ControlValue("TG_Registro")
ano=AlinhM(StrVal(Year(Today())),04)
mes=AlinhM(StrVal(Month(Today())),02)

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate IndexOrder by "codigo do item" Pattern Item
If RetVal
   Then Forn  =[Codigo Fornecedor     ]
        Desc  =[Descricao do Item     ]  
        Local =[Localizacao           ]
        Compl =[Descricao Complementar]
        Barra =[Codigo de Barras      ]
        Marca =[Descricao da Marca    ]
        Famil =[Descricao da Familia  ]
        Grupo =[Descricao do Grupo    ]
        Unid  =[Unidade Interna       ]
        Aliq  =Rtrim(Ltrim(Format("W6.2,EIC",[Aliquota de ICMS])))
        Pesolq=RTrim(Ltrim(Format("W11.3,EIC",[Peso Liquido])))
        If (Int([Fator de Conversao])-[Fator de Conversao])<>0
           Then FtConv=RTrim([Unidade Entrada])+"/"+LTrim(Format("W11.3,EIC",[Fator de Conversao]))
           Else FtConv=RTrim([Unidade Entrada])+"/"+LTrim(Format("W11  ,EIC",[Fator de Conversao]))
        EndIf   
        If (Int([Fator Conversao Embalagem])-[Fator Conversao Embalagem])<>0
           Then FtEmb =RTrim([Unidade Embalagem])+"/"+LTrim(Format("W11.3,EIC",[Fator Conversao Embalagem]))
           Else FtEmb =RTrim([Unidade Embalagem])+"/"+LTrim(Format("W11  ,EIC",[Fator Conversao Embalagem]))
        EndIf 
        NCM        = [NCM]  
        iteminativo= [Inativo]
        Depart     = SubStr([Descricao do Departamento],1,13)
        cst        = [Tipo Tributacao]
        If Aliq<>""
           Then cst = cst + "/" + Aliq
           Else Aliq = ""
                cst = cst
        EndIf        
   Else Aliq = ""
        Forn  ="?"
        Desc  ="?"
        Local ="?"
        Compl ="?"
        Barra ="?"
        Marca ="?"
        Famil ="?"
        Grupo ="?"
        Unid  ="?"
        Pesolq="?"
        FtConv="?"
        FtEmb ="?"
        NCM   ="?"
        iteminativo="??"
        cst   ="?"
        Depart="?"
EndIf
        
Moveto "\\Sistemas\\Vendas\\TbprIte"
Moveto [Codigo da Tabela]
Locate VSDGTABELA,Item
If RetVal
   Then Vend=[Preco Unitario]
   Else Vend=BlankNum()
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,Item,anosw,messw
If RetVal
   Then Saldo=[Saldo Atual           ]
        UltCt=[Preco de Custo        ]
        UltDt=[Data do Preco de Custo]
   Else Saldo=BlankNum()
        UltCt=BlankNum()
        UltDt=BlankDate()
EndIf

Verifica_Almoxarifado(VSDGEMPRESA,Today())
If EMPRESA_ALMOXARIFADO <> "" And VSDGEMPRESA="0001"
   Then Moveto [Codigo da Empresa]
        Locate EMPRESA_ALMOXARIFADO,Item,ano,mes
        If RetVal
           Then Saldo=Saldo+[Saldo Atual]
        EndIf
EndIf

Moveto "\\Sistemas\\Estoque\\Estqprm"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,Item
If RetVal
   Then estmin =[Estoque Minimo        ]
        estmax =[Estoque Maximo        ]
        ptrepos=[Ponto de Reposicao    ]
        UltSai =[Data da Ultima Saida  ] 
   Else estmin =BlankNum()
        estmax =BlankNum()
        ptrepos=BlankNum()
        UltSai =BlankDate()
EndIf


st1=SubStr(Compl,01,80)
st2=Completa("  CST% "+format("W16",cst)   ,23," ")+ Completa("FtCompr "+FtConv,31," ")+   Completa(  "Marca " +Marca,26," ")
st3=Completa("   NCM "+format("W16",ncm)   ,23," ")+ Completa("FtEmbal "+FtEmb ,29," ")+   Completa("Familia " +Famil,26," ")
st4=Completa("  CEST "+format("W16",cest)  ,23," ")+ Completa("PesoLiq "+Pesolq,31," ")+   Completa(  "Grupo " +Grupo,26," ")
st5=Completa("éltSai "+format("D13",UltSai),23," ")+ Completa("CBarras "+Barra ,31," ")+   Completa(  "Local " +Local,26," ")         
st6=Completa("éltEnt "+format("D13",UltDt) ,22," ")+Completa("Vendagem "+Vendagem ,31," ")+Completa( "Depart "+Depart,26," ")

st7=""
If Param_ExibeCusto<>"N" And UltCt>0
   Then st7=st7+" ao ct "+LTrim(Format("W12.5,EIC",UltCt))
EndIf
st7=Completa(st7,40," ")
if iteminativo="S"
   then st7=st7+Format("W40,AR","[ *** ITEM INATIVADO *** ]")
   else st7=st7+"FCI "+fci
endif

EndProc ;Mostra_Estoque() 

;*******************************************************************************
;* Rotina para Montar Valor                                                    *
;*******************************************************************************
Proc Monta_Valor_Lista(Vr)
Private Vr,Virgula, Ponto

If IsBlank(Vr) 
   Then Return Vr 
EndIf

Virgula = Search(".",Vr)
If Virgula > 0 
   Then While True
          Vr = SubStr(Vr,1,Virgula-1)+SubStr(Vr,Virgula+1,Len(Vr))
          Virgula = Search(".",Vr)
          If Virgula = 0
             Then QuitLoop
          EndIf
        EndWhile   
EndIf

Ponto = Search(",",Vr)
If Ponto >0 
   Then Vr = SubStr(Vr,1,Ponto-1)+"."+SubStr(Vr,Ponto+1,Len(Vr)) 
EndIf  

Return Vr             
EndProc ;Monta_Valor_Lista() 

;*******************************************************************************
;* Rotina para Ordenar Array Dinƒmico                                          *
;*******************************************************************************
Proc Ordena_DynArray(NomeArray,PosI,PosF,TipoArray,Ordem) 
Private Pos,PosI,PosF,TipoArray,NomeArray,Ordem,Faz_Rotina,VrA,VrB,IndiceA,IndiceB,Num_TM,Alinhamento 

;**** Rotina para Ordenar Array ************************************
; NomeArray  = Nome do Array que ser  ordenado
; PosI       = A Posi‡Æo inicial do array para ordena‡Æo do dado 
; PosF       = A Posi‡Æo final do array para ordena‡Æo do dado

; Se o TipoArray foi "N" Numerico, e quiser passar um formato a ser exibido no array, como por exemplo:
; "N,12.2"  -> Passando entÆo o tipo do Array "N" concatenado com uma virgula para separar o tamanho do
; campo numerico, e suas casas decimais, caso tenha!

; TipoArray  = Se ‚ do tipo "S","N","D" ->String, Numerico ou Data
; Ordem      = "C" ou "D" -> Crescente ou Decrescente
  
Alinhamento = True
If DynArraySize(NomeArray) = 0 And ArraySize(NomeArray) > 0
   Then Release Vars ArrayA
        Array ArrayA[ArraySize(NomeArray)]
        For i From 1 To ArraySize(NomeArray)
          ArrayA[i]=NomeArray[i]+Format("W3",AlinhM(StrVal(i),3))
        Endfor
        Release Vars NomeArray
        DynArray NomeArray[]
        
        For i From 1 To ArraySize(ArrayA)
          NomeArray[i]=ArrayA[i]
        Endfor
        Release Vars ArrayA
        Alinhamento = False
EndIf   
         
If TipoArray="" Then TipoArray="S" EndIf

If Search("N",TipoArray)>0
   Then Num_TM = Search(",",TipoArray)
        If Num_TM >0
           Then Num_TM = SubStr(TipoArray,Num_TM+1,Len(TipoArray))
           Else Num_TM = "12.2"  
        EndIf
        TipoArray="N"
EndIf

Release Vars ArrayA, ArrayB
DynArray ArrayA[]
DynArray ArrayB[]

For i From 1 To DynArraySize(NomeArray)
  If IsAssigned(RegOrdena) And Alinhamento
     Then ArrayA[i]=SubStr(NomeArray[i],5,Len(NomeArray[i])-6)+Format("W3",AlinhM(StrVal(i),3))
     Else ArrayA[i]=NomeArray[i]+Format("W3",AlinhM(StrVal(i),3))
  EndIf   
EndFor
                                                                    
For wre From 1 To DynArraySize(ArrayA)
  IndiceA = AlinhM(Ltrim(Rtrim(SubStr(ArrayA[wre],Len(ArrayA[wre])-2,Len(ArrayA[wre])))),3)
  Pos     = Ltrim(Rtrim(SubStr(ArrayA[wre],PosI,PosF)))
  Switch
    Case TipoArray="D" : 
         If Pos<>""
            Then If Len(Pos)=9
                    Then Pos = "0" + Pos
                 EndIf    
                 Pos = DateVal(SubStr(Pos,1,2)+"."+SubStr(Pos,4,2)+"."+SubStr(Pos,7,4))
         EndIf        
         Pos = DateVal(Pos)
  EndSwitch
  ArrayB[wre]=IndiceA+StrVal(Pos)
Endfor         
        
For wre From 1 To DynArraySize(ArrayB)

  If Not IsAssigned(ArrayB[wre+1])
     Then QuitLoop
  EndIf
  VrA = SubStr(ArrayB[wre],4,Len(ArrayB[wre]))
  VrB = SubStr(ArrayB[wre+1],4,Len(ArrayB[wre+1]))     
  
  Switch
    Case TipoArray="D" : VrA = DateVal(VrA)
                         VrB = DateVal(VrB)
    Case TipoArray="N" : VrA = Monta_Valor_Lista(Vra)
                         VrB = Monta_Valor_Lista(Vrb)
                         VrA = NumVal(VrA)
                         VrB = NumVal(VrB)      
  EndSwitch
  
  Faz_Rotina=False
  If Ordem = "D"
     Then If VrA < VrB
             Then Faz_Rotina=True
          EndIf
     Else If VrA > VrB
             Then Faz_Rotina=True
          EndIf
  EndIf

                                                                      
  Switch
    Case TipoArray="D"  : VrA = StrVal(VrA)
                          VrB = StrVal(VrB)
    Case TipoArray="N"  : VrA = Format("W"+Num_TM+",EIC",VrA)
                          VrB = Format("W"+Num_TM+",EIC",VrB)     
  EndSwitch

  If Faz_Rotina
     Then Auxiliar      = SubStr(ArrayB[wre+1],1,3)+VrB
          ArrayB[wre+1] = SubStr(ArrayB[wre],1,3)+VrA
          ArrayB[wre]   = Auxiliar
          If wre<>1
             Then CONT = WRE
                  While True
                    VrA = SubStr(ArrayB[CONT],4,Len(ArrayB[CONT]))
                    VrB = SubStr(ArrayB[CONT-1],4,Len(ArrayB[CONT-1]))
          
                    Switch
                      Case TipoArray="D" : VrA = DateVal(VrA)
                                           VrB = DateVal(VrB)
                      Case TipoArray="N" : VrA = Monta_Valor_Lista(Vra)
                                           VrB = Monta_Valor_Lista(Vrb)
                                           VrA = NumVal(VrA)
                                           VrB = NumVal(VrB)       
                    EndSwitch
                    
                    Faz_Rotina=False
                    If Ordem = "D"
                       Then If VrB < VrA
                               Then Faz_Rotina=True
                            EndIf
                       Else If VrB > VrA
                               Then Faz_Rotina=True
                            EndIf
                    EndIf
                    
                    Switch
                      Case TipoArray="D"  : VrA = StrVal(VrA)
                                            VrB = StrVal(VrB)
                      Case TipoArray="N"  : VrA = Format("W"+Num_TM+",EIC",VrA)
                                            VrB = Format("W"+Num_TM+",EIC",VrB)     
                    EndSwitch
                    
                    If Faz_Rotina
                      Then Auxiliar       = SubStr(ArrayB[CONT-1],1,3)+VrB
                           ArrayB[CONT-1] = SubStr(ArrayB[CONT],1,3)+VrA
                           ArrayB[CONT]   = Auxiliar    
                    EndIf
                    CONT = CONT - 1
                    If CONT = 1 Then QuitLoop EndIf
                  EndWhile
          EndIf   
  EndIf
EndFor

For i From 1 To DynArraySize(ArrayB)
  Vr  = SubStr(ArrayB[i],4,Len(ArrayB[i])) 
  If TipoArray="D" 
     Then Switch
            Case Len(Vr)=9  : ArrayB[i]=SubStr(ArrayB[i],1,3)+SubStr(Vr,1,1)+"/"+SubStr(Vr,3,2)+"/"+SubStr(Vr,6,4)
            Case Len(Vr)=10 : ArrayB[i]=SubStr(ArrayB[i],1,3)+SubStr(Vr,1,2)+"/"+SubStr(Vr,4,2)+"/"+SubStr(Vr,7,4)
          EndSwitch   
  EndIf     
  
  For ii From 1 To DynArraySize(ArrayA)
    IndiceA = Ltrim(Rtrim(SubStr(ArrayA[ii],Len(ArrayA[ii])-2,Len(ArrayA[ii]))))
    IndiceB = Ltrim(Rtrim(SubStr(ArrayB[i],1,3)))

    If TipoArray="N" 
      Then Vr = Monta_Valor_Lista(Vr)
           Vr = NumVal(Vr)
           Vr = Format("W"+Num_TM+",EIC",Vr) 
    EndIf
    
    If IndiceB=IndiceA
       Then ArrayB[i] = AlinhM(StrVal(i),3) + " " +SubStr(ArrayA[ii],1,PosI-1)+Completa(Vr,PosF," ")+
                        SubStr(ArrayA[ii],PosI+PosF,Len(ArrayA[ii]))
            QuitLoop
    EndIf
  EndFor        
    
  If Len(LTrim(RTrim(SubStr(ArrayB[i],5,10))))=9 And TipoArray="D" 
     Then ArrayB[i]=SubStr(ArrayB[i],1,4)+Completa("0"+LTrim(Rtrim(SubStr(ArrayB[i],5,10))),10," ")+SubStr(ArrayB[i],15,Len(ArrayB[i]))
  EndIf   
  
  ;---- Altera "." para "/" na data --------------------------------------------
  If TipoArray="D" 
     Then AUX_DATA = SubStr(ArrayB[i],5,10)
          AUX_DATA = SubStr(AUX_DATA,1,2)+"/"+SubStr(AUX_DATA,4,2)+"/"+SubStr(AUX_DATA,7,4)
          ArrayB[i]= SubStr(ArrayB[i],1,4)+AUX_DATA+SubStr(ArrayB[i],15,Len(ArrayB[i]))
  EndIf
  NomeArray[i]=StrVal(ArrayB[i])
EndFor
Release Vars ArrayA
Release Vars ArrayB

If Not Alinhamento
   Then Transfere_DynArray_Array(NomeArray)
EndIf   

EndProc ;Ordena_DynArray

;*******************************************************************************
;* Rotina para Verificar Item - Mˆs Aberto e/ou Fechado                        *
;*******************************************************************************
proc Verifica_Item()
private ntable, s, i, MM, AAAA, dtini, dtfim, dir_trab

LimpaRodape(0)
Aguarde("Verificando compras")

ntable=table()

dtfim=today()
dtini=today()

for i from 1 to PARAM_NMES_CONSULTA
  dtini=Primeiro_Dia_Data(Primeiro_Dia_Data(dtini)-1)
endfor
if dtini=dtfim then dtini=blankdate() endif

MM     =month(dtfim)
AAAA   = year(dtfim)

i  = 0
while true
  switch
    case i=0 : Dir_Trab= ""
    
    otherwise: Dir_Trab="Fechames\\"+AlinhM(StrVal(AAAA),4)+"_"+AlinhM(StrVal(MM),2)+"\\"
  endswitch

  If DirExists("\\Sistemas\\Estoque\\"+Dir_Trab)>0 And IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
     Then 
          Aguarde("Verificando compras "+Dir_Trab)

          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEc" Enter
          Moveto [Numero do Lancamento     ] CheckPlus Example "lancto"
          Moveto [Numero do Documento      ] CheckPlus 
          Moveto [Data de Entrada          ] CheckPlus 
          Moveto [Codigo                   ] CheckPlus
          Moveto [Razao Social             ] CheckPlus
          Moveto [Tipo de Operacao         ] CheckPlus 
          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEi" Enter
          Moveto [Numero do Lancamento     ] Example "lancto"
          Moveto [Sequencia do Lancamento  ] CheckPlus
          Moveto [Codigo do Item           ] CheckPlus TypeIn "~item"
          Moveto [Quantidade               ] CheckPlus
          Moveto [Preco Unitario           ] CheckPlus
          Moveto [Unidade Entrada          ] CheckPlus
          Moveto [Unidade Interna          ] CheckPlus
          Moveto [Quantidade Convertida    ] CheckPlus
          Moveto [Fator de Conversao       ] CheckPlus 
          Moveto [Valor Desconto Total     ] CheckPlus 
          Moveto [Informacoes_Adicionais   ] CheckPlus 
          Do_It!
          
          if not isempty("Answer")
             then
                  Sort "Answer" on "Data de Entrada" D, "Numero do Lancamento"
                  Scan
                    wi=wi+1
                    Array_RegCot2[wi]=adicionaitemarray("COMPRAS")
                    
                    If wi>=999
                       Then MSG = "Sr. USUARIO. // //"
                            MSG = MSG +"MEMORIA INSUFICIENTE. (DOS/EMS)//"
                            MSG = MSG +"Somente parte das registros serÆo mostrados."
                            Mensagem(MSG)
                            QuitLoop
                    EndIf
                  Endscan
          EndIf
          Moveto "Answer"                                  ClearImage
          Moveto "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" ClearImage
          Moveto "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" ClearImage
  EndIf   

  If wi>=999
    Then quitloop
  EndIf

  if i=PARAM_NMES_CONSULTA then quitloop endif

  i =i+1

  MM=MM-1
  if MM=0 then MM=12 AAAA=AAAA-1 endif
  
endwhile
LimpaRodape(0)

endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc adicionaitemarray(tipo)
private s

s=""
switch
  case tipo="COMPRAS": s=S+Format("D13",[Data de Entrada])+" " 

  case tipo="COTACAO": s=S+Format("D13",[Data de Compra ])+" "
  
endswitch
switch
  case tipo="COMPRAS": 
                       s=S+Completa([Codigo],5," ")+Completa(Substr([Razao Social],1,27),28," ")
                       s=S+Format("W07,AR",[Numero do Documento])+" "
                       s=S+Format("W09.1,EIC",[Quantidade])+" "
                       s=S+Completa([Unidade Entrada],3," ")
                       s=S+Format("W09.2,EIC",[Preco Unitario])
                       s=S+Format("W5",[Sequencia do Lancamento])  

  case tipo="COTACAO": 
                       s=S+Completa([Codigo],5," ")+Completa(Substr([Razao Social],1,27),28," ")
                       s=S+Format("W07,AR",[Numero do Documento])+" "
                       s=S+Format("W09.1,EIC",[Quantidade])+" "
                       s=S+Completa([Unidade Entrada],3," ")
                       s=S+Format("W09.2,EIC",[Valor Unitario])
                       s=S+Format("W5",0)
  
endswitch
s=S+Format("W6",[Numero do Lancamento])
s=S+Completa([Unidade Interna],3," ")
switch
  case tipo="COMPRAS": s=S+Format("W12.3,EIC",[Quantidade Convertida]) 

  case tipo="COTACAO": s=S+Format("W12.3,EIC",[Quantidade]*[Fator de Conversao])
  
endswitch
s=S+Format("W12.3,EIC",[Fator de Conversao])
switch
  case tipo="COMPRAS": s=S+Format("W12.2,EIC",[Valor Desconto Total]/[Quantidade]) 
                       s=S+Format("W20,AL",substr([Informacoes_Adicionais],1,20))

  case tipo="COTACAO": s=S+Format("W12.2,EIC",0)
                       s=S+Format("W20,AL","")
  
endswitch
return s

endproc

;*******************************************************************************
;*                                                                             *
;*******************************************************************************
Proc Transfere_DynArray_Array(NomeArray)
Private NomeArray

If DynArraySize(NomeArray)=0
   Then Array Array_RegCot[1]
        Array_RegCot[1]=""
   Else Array Array_RegCot[DynArraySize(NomeArray)]
        For i From 1 To DynArraySize(NomeArray)
          Array_RegCot[i] = SubStr(NomeArray[i],5,Len(NomeArray[i]))
        Endfor      
EndIf

EndProc

;*******************************************************************************
;* Rotina para Mostrar Estoque . Cota‡Æo                                       *
;*******************************************************************************
Proc Mostra_Estoque_Cotacao()
Private Indice,LinhaCab1,LinhaCab2,LinhaCab3,LinhaCab4,wc,
        Forn, Desc, Local, Vend, Saldo, UltCt, UltDt, estmin, ptrepos, estmax,
        Compl, Barra, Marca, Grupo, UltSai, CtoMedio

ROTINA="MOSTRA_ESTOQUE"
Indice=ControlValue("TG_Registro")
ano=AlinhM(StrVal(Year(Today())),04)
mes=AlinhM(StrVal(Month(Today())),02)

Moveto "\\Sistemas\\Estoque\\Itens"
Moveto [Codigo do Item]
Locate IndexOrder by "codigo do item" Pattern Item
If RetVal
   Then Forn    = [Codigo Fornecedor]
        Desc    = [Descricao do Item]
        Local   = [Localizacao]
        Compl   = [Descricao Complementar]
        Barra   = [Codigo de Barras]
        Marca   = [Descricao da Marca]
        Grupo   = [Descricao do Grupo]
        Familia = [Descricao da Familia]
        ft1     = "" 
        ft2     = "" 
   Else Forn    = "?"
        Desc    = "?"
        Local   = "?"      
        Compl   = "?"
        Barra   = "?"
        Marca   = "?"
        Grupo   = "?"
        Familia = "?"
        ft1     = "?"
        ft2     = "?"
EndIf

Moveto "\\Sistemas\\Vendas\\TbprIte"
Moveto [Codigo da Tabela]
Locate VSDGTABELA,Item
If RetVal
   Then Vend=[Preco Unitario]
   Else Vend=BlankNum()
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,Item,anosw,messw
If RetVal
   Then Saldo    = [Saldo Atual           ]
        UltCt    = [Preco de Custo        ]
        UltDt    = [Data do Preco de Custo]
        CtoMedio = NDecimal([Custo Total Atual]/[Saldo Atual],5)
   Else Saldo    = BlankNum()
        UltCt    = BlankNum()
        UltDt    = BlankDate()
        CtoMedio = BlankNum()
EndIf
                       
Verifica_Almoxarifado(VSDGEMPRESA,Today())                       
If EMPRESA_ALMOXARIFADO <> "" And VSDGEMPRESA="0001"
   Then Moveto [Codigo da Empresa]
        Locate EMPRESA_ALMOXARIFADO,Item,ano,mes
        If RetVal
           Then Saldo=Saldo+[Saldo Atual]
        EndIf
EndIf              
                                                               
Moveto "\\Sistemas\\Estoque\\Estqprm"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,Item
If RetVal
   Then estmin =[Estoque Minimo        ]
        estmax =[Estoque Maximo        ]
        ptrepos=[Ponto de Reposicao    ]
        UltSai =[Data da Ultima Saida  ] 
   Else estmin =BlankNum()
        estmax =BlankNum()
        ptrepos=BlankNum()
        UltSai =BlankDate()
EndIf

LinhaCab1="        Item:                                Localiza‡„o:                   "
LinhaCab2="   Descricao:                                Estq.M¡nimo:                   "
LinhaCab3=" Item Fornec:                                Estq.M ximo:                   "
LinhaCab5=" Pre‡o Venda:                                Ponto Repos:                   "
LinhaCab4=" Dt.Entrada Fornecedor                       N§Docto      Qtde Un  PrCompra"

If IsAssigned(Array_RegCot)  Then Release Vars Array_RegCot  EndIf
If IsAssigned(Array_RegCot2) Then Release Vars Array_RegCot  EndIf

DynArray Array_RegCot[]
DynArray Array_RegCot2[]

Wi=0        
              
Carrega_Parametros()                      
For i From 1 To 2
  If PARAM_TODAS_COMPRAS
     Then i=2
     Else If i=2 Then QuitLoop EndIf
  EndIf   
  Switch
    Case i=1 : Moveto "\\Sistemas\\Estoque\\Cotacao"
               Moveto [Codigo do Item]
               Locate Item
               If RetVal
                  Then While [Codigo do Item]=Item
                             Wi=Wi+1
                             Array_RegCot2[wi]=adicionaitemarray("COTACAO")
                             
                             Skip
                             If EOT() Then QuitLoop EndIf
                             Locate Next Item
                      EndWhile
               EndIf
    Case i=2 : Verifica_Item()                    
  EndSwitch         
EndFor  
Release Vars RegOrdena
Ordena_DynArray(Array_RegCot2,01,10,"D","C")

Seq = 0
For i From 1 To DynArraySize(Array_RegCot2)
  If IsBlank(Array_RegCot2[i]) Then Loop EndIf
  If Substr(Array_RegCot2[i],1,1)=" "
     Then DIA = "0"+Substr(Array_RegCot2[i],2,1)
     Else DIA = Substr(Array_RegCot2[i],1,2)
  EndIf
  Data1 = DateVal(Substr(Array_RegCot2[i],4,2)+"/"+DIA+"/"+Substr(Array_RegCot2[i],7,4))
  While True
    For v From 1 To DynArraySize(Array_RegCot2)
      If Not IsBlank(Array_RegCot2[v]) 
         Then If Substr(Array_RegCot2[i],1,1)=" "
                 Then DIA = "0"+Substr(Array_RegCot2[i],2,1)
                 Else DIA = Substr(Array_RegCot2[i],1,2) 
              EndIf
              Data2 = DateVal(Substr(Array_RegCot2[v],4,2)+"/"+DIA+"/"+Substr(Array_RegCot2[v],7,4))
              If Data2 >= Data1     
                 Then ii=v
              EndIf   
      EndIf
    EndFor
    Seq = Seq + 1
    Array_RegCot[Seq] = Array_RegCot2[ii]
    Array_RegCot2[ii]="" 
    If IsBlank(Array_RegCot2[i]) Then QuitLoop EndIf
  EndWhile
EndFor

WCSW_NDOCTS=DynArraySize(Array_RegCot2)
Message("")
LimpAguarde()

Transfere_DynArray_Array(Array_RegCot)
Sw_Dialog = "Estoque"
INICIO_DIALOG=True
Showdialog "Dados da Ficha "+messw+"/"+anosw Proc "SD_Consulta"
  Trigger "OPEN","ARRIVE","UPDATE"
  Mouse "Down"
  Key "ENTER","ESC","TAB","ReverseTab","F6",-33
     @ 01,0 height 22 width 80

   @ 00,01 ?? LinhaCab1
   @ 01,01 ?? LinhaCab2
   @ 02,01 ?? LinhaCab3
   @ 03,01 ?? LinhaCab5
   @ 07,00 ?? LinhaCab4

   @ 00,15 ?? Item
   @ 02,15 ?? Forn
   @ 01,15 ?? Desc
   @ 03,15 ?? LTrim(Format("W12.2,EIC",Vend))
   @ 00,59 ?? Local
   @ 01,59 ?? LTrim(Format("W12.2,EIC",estmin))
   @ 03,59 ?? LTrim(Format("W12.2,EIC",ptrepos))
   @ 02,59 ?? LTrim(Format("W12.2,EIC",estmax))

   PaintCanvas Attribute 111 00, 15, 00, 44

   PaintCanvas Attribute 111 00, 59, 00, 73
   PaintCanvas Attribute 111 01, 15, 01, 44
   PaintCanvas Attribute 111 01, 59, 01, 73
   PaintCanvas Attribute 111 02, 15, 02, 44
   PaintCanvas Attribute 111 02, 59, 02, 73
   PaintCanvas Attribute 111 03, 15, 03, 44
   PaintCanvas Attribute 111 03, 59, 03, 73

   Frame Single From 04,01 to 06,23
   @ 04,09 ?? " Atual "
   @ 05,02 ?? "Saldo"
   @ 05,08 ?? LTrim(Format("W12.3,EIC",Saldo))
   PaintCanvas Attribute 111 05, 08, 05, 22

   Frame Single From 04,24 to 06,76
   @ 04,36 ?? " Ultima Altera‡„o de Custo " ;16
   @ 05,25 ?? "Atual"
   @ 05,43 ?? "Data"
   @ 05,59 ?? "Medio"
   @ 05,31 ?? LTrim(Format("W12.5,EIC",UltCt))
   @ 05,48 ?? LTrim(Format("D13",UltDt))
   @ 05,65 ?? LTrim(Format("W12.5,EIC",CtoMedio))
   PaintCanvas Attribute 111 05, 31, 05, 41
   PaintCanvas Attribute 111 05, 48, 05, 57
   PaintCanvas Attribute 111 05, 65, 05, 75

;  Frame Single From 17,00 to 17,77

   @ 18,00 ?? ft1
   @ 19,00 ?? ft2
   
   PaintCanvas Attribute  96 18, 00, 18, 77
   PaintCanvas Attribute 111 19, 00, 19, 77

   PaintCanvas Attribute 143 07, 00, 07, 77
   PickArray @8,00 Height 10 width 77
    Columns 1
     Array_RegCot
      Tag "TG_REGCOT"
       To ArrayElement2

EndDialog
Mouse Show              

EndProc    ; Mostra_Estoque_Cotacao()

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()

VSDGDTINI           = BlankDate()
VSDGDTFIM           = BlankDate()
PARAM_TODAS_COMPRAS = False
MOSTRAR_MES_FECHADO = False

GetRecord "\\Sistemas\\Estoque\\P_SW" VSDGEMPRESA To REG_SW
If RetVal 
   Then If REG_SW["Mostra_Compras"]="S"
           Then PARAM_TODAS_COMPRAS = True
        EndIf
        
        If REG_SW["Numero_Mes_Data_Pesquisa"]>0
           Then MOSTRAR_MES_FECHADO = True
        EndIf
                                 
        PARAM_NMES_CONSULTA = REG_SW["Numero_Mes_Data_Pesquisa"]
EndIf

Release Vars REG_SW

EndProc ;Carrega_Parametros()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Vendas\\Bib_Bal"
SYS_VALOR()
If Not IsAssigned(Param_ExibeCusto)    Then Param_ExibeCusto="S"     EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf

DynArray Array_Registro[]
INICIO_DIALOG=True
WCSW_NITENS=0
WCSW_NDOCTS=0
                
Acha_Empresa=False
If SysMode()="Main"
   Then Modo="Principal"
        AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"

        LeiaINI(PrivDir()+"sw_conse.ini","VSDGEMPRESA.S.null,VSDGTABELA.S.null,VSDGOPPESQ.S.1")       

        If IsBlank(VSDGEMPRESA) Then VSDGEMPRESA=SYS_EMPRESA_DEFAULT EndIf

        View NOWINDOW "\\Sistemas\\Vendas\\TbprIte"
        View NOWINDOW "\\Sistemas\\Estoque\\Itens"
        View NOWINDOW "\\Sistemas\\Estoque\\Iten_Com"
        View NOWINDOW "\\Sistemas\\Estoque\\Estqprm"
        View NOWINDOW "\\Sistemas\\Estoque\\SdEstq"

        View NOWINDOW "\\Sistemas\\Estoque\\NotaEc"
        View NOWINDOW "\\Sistemas\\Estoque\\NotaEi"
         
        View NOWINDOW "\\Sistemas\\Estoque\\Cotacao"
        
        Moveto [Data de Compra]
        OrderTable {Ind_cot01}
        
   Else Modo="Edicao"
        Tabela=Table()

        If Not IsAssigned(SW_VSDGOPPESQ) Then SW_VSDGOPPESQ="" EndIf
        If Not IsAssigned(SW_VSDGTXPESQ) Then SW_VSDGTXPESQ="" EndIf

        VSDGOPPESQ=SW_VSDGOPPESQ
        VSDGTXPESQ=SW_VSDGTXPESQ

EndIf
If not IsAssigned(OP_INSERT_ITEM)
   Then OP_INSERT_ITEM=False
EndIf

If OP_INSERT_ITEM
   Then Acha_Empresa=True
EndIf

SWCONS_Limpa_Array_Registro("")

AUX="1-Descric„o,2-C¢digo,3-C¢d.Fornecedor,4-C¢d.Barras,5-Localiza‡„o,6-Marca,7-C¢d.Origem,8-Grupo,9-Descr.Complemen,A-Referˆncia,B-NCM,C-CEST,D-FCI,E-Familia"

SW_CORBASEF=111
SW_CORBASET=096

tit="Descri‡„o do Item               Item       Fornecedor             Vr Venda Un"
anosw=AlinhM(StrVal(Year(Today())),04)
messw=AlinhM(StrVal(Month(Today())),02)
      
Sw_Dialog="Inicial"
Sw_Item_Pesquisado=""
ShowDialog "Consulta de Itens" Proc "SD_Consulta"
Trigger "OPEN","ARRIVE","UPDATE","CLOSE","SELECT"
Mouse "DOWN"
Key "F1","ENTER","ESC","ClearArea","INS","F5","TAB","ReverseTab","F3",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  


 @ 01,00   Height 24 Width 82

  @ 00,00 ?? Format("W80,AC","[ Consulta de Itens ]")

  Label  @ 01,-1 "Empresa"  For "TG_EMPRESA"
  Accept @ 02,00 Width 08 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA

  Label  @ 01,08 "Tabela"  For "TG_TABELA"
  Accept @ 02,08 Width 09 "A5"  Picture "!*!" Tag "TG_TABELA" To VSDGTABELA

  Label  @ 01,17 "Op‡„o pesquisa"  For "TG_OPPESQ"
  Accept @ 02,17 Width 21 "A17"  Picture AUX Tag "TG_OPPESQ" To VSDGOPPESQ

  Label  @ 01,38 "Valor a pesquisar" For "TG_TXPESQ"
  Accept @ 02,38 Width 42 "A35"  Picture "!*!" Tag "TG_TXPESQ" To VSDGTXPESQ

  @ 03,00 ?? tit
  PaintCanvas Attribute SW_CORBASET 03, 00, 03, 79

  PickDynArray @4,-1 Height 11 width 80
  Columns 1
    Array_Registro
     Tag "TG_Registro"
      To ArrayElement

   @ 15,00 ?? st1
   @ 16,00 ?? st2
   @ 17,00 ?? st3 
   @ 18,00 ?? st4
   @ 19,00 ?? st5
   @ 20,00 ?? st6
   @ 21,00 ?? st7
   
   PaintCanvas Attribute SW_CORBASEF 15, 00, 21, 79

   PaintCanvas Attribute SW_CORBASET 16, 00, 21, 05
   PaintCanvas Attribute SW_CORBASET 16, 23, 20, 29
   PaintCanvas Attribute SW_CORBASET 16, 52, 20, 58
   PaintCanvas Attribute SW_CORBASET 20, 40, 21, 42
   PaintCanvas Attribute SW_CORBASET 21, 40, 21, 42

   PaintCanvas Attribute  96 20, 22, 20, 23
   
EndDialog
Mouse Show

Message("")
Release Vars Array_Registro,Modo,
             Item,Desc,Forn,Acha_Empresa,
             WinArray5,Janela,Msg_Campo,Tecla,
             Anosw,Messw            
             
Release Procs Seleciona, ConvertStrNum, Mostra_Dados_Item, SD_Consulta,
              Observacao, Mostra_Estoque, Ordena_DynArray, Verifica_Item,
              adicionaitemarray, Mostra_Estoque_Cotacao, Carrega_Parametros,
              SWCONS_Limpa_Array_Registro,SWCONS_Pega_Valor_String
