;** Sw_Cons3 *******************************************************************
;*  Programa p/ Consulta de Itens do Estoque ** C¢pia do Vendas                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/09/2013 por Bruno Carvalho
;Ultima Alteracao: 02/10/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao localizar o item - Removido [\Sistemas\...] 
;Ultima Alteracao: 10/10/2013 por Bruno Carvalho
;Motivo Alteracao: Alterado o nome do script para SW_CONS3
;                  COPIA exata da Rotina SW_CONS do Vendas, caso alguma modifica‡Æo nele, copiar para este. 
;Ultima Alteracao: 14/10/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo para pesquisar por referˆncia   
;Ultima Alteracao: 16/10/2013 por Bruno Carvalho
;Motivo Alteracao: Erro ao gravar variavel VSDGOPPESQ, onde modelo escolhido nÆo estava sendo salvo como string "C"
;Ultima Alteracao: 23/03/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Mostra_Dados_Item(), adicionado NCM
;Ultima Alteracao: 14/07/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado op‡Æo para pesquisar por NCM 
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Janela sem sombra
;Ultima Alteracao: 20/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste PrItem em branco error
;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: 22/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste ShowPopup
;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: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2()
;Ultima Alteracao: 05/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro empresa pedidos e compras                      
;Ultima Alteracao: 14/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ver_Memo() substitu¡do por Ler_Memo() -> Observacao2()
;Ultima Alteracao: 13/08/2018 por Bruno Carvalho
;Motivo Alteracao: Novo laoyut
;Ultima Alteracao: 06/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes pega preco #0434#
;Ultima Alteracao: 06/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 23/12/2019 por Bruno Carvalho
;Motivo Alteracao: Alterado proc Lista_Dialog() p/ Lista_Dialog_SWCONS3
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 29/06/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pesquisa tabela de preco e outros

;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONS_Pega_Valor_String(PARAM,POSICAO)
Private PARAM, RESULT   
             
RESULT = ""              
Switch
  Case PARAM = "Codigo do Item"     : If (IsAssigned(VSDGOPPESQ) And VSDGOPPESQ<>"5") Or (IsAssigned(oppesq) And oppesq<>"5")
                                         Then RESULT=SubStr(Array_Registro[POSICAO],33,10)
                                         Else RESULT=SubStr(Array_Registro[POSICAO],47,10)
                                      EndIf       
  Case PARAM = "Fornecedor"         : RESULT = SubStr(Array_Registro[POSICAO],44,20)
  Case PARAM = "Descricao"          : RESULT = SubStr(Array_Registro[POSICAO],01,30)

  Case PARAM = "Linha Array 2"      : RESULT = SuBStr(Array_Registro[POSICAO],01,64)                                                                                                                                                                                 
  Case PARAM = "Unidade"            : RESULT = SuBStr(Array_Registro[POSICAO],76,02)                                                                                                                                                                                 
  Case PARAM = "Preco do Item"      : RESULT = Rtrim(Ltrim(SubStr(Array_Registro[POSICAO],78,10)))
  Case PARAM = "Verifica_Array"     : RESULT = SubStr(Array_Registro[POSICAO],88,01)
EndSwitch
                  
Return RESULT      

EndProc ;SWCONS_Pega_Valor_String(

;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONS_Grava_Valor_String(PARAM,POSICAO,Vr)
Private PARAM, POSICAO, Vr,s 

s=Array_Registro[POSICAO] 
Switch
  Case PARAM = "Preco" : s=SWCONS_Pega_Valor_String("Linha Array 2",POSICAO)+
                           Format("W10.2,EIC",Vr)+" "+
                           SWCONS_Pega_Valor_String("Unidade",POSICAO)+
                           Format("W10.2"    ,Vr)+
                           SWCONS_Pega_Valor_String("Verifica_Array",POSICAO)
                                                 
                         Array_Registro[POSICAO]=s                       
                                                  
EndSwitch
                  
EndProc ;SWCONS_Grava_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[]
EndIf
        
st1=""
st2=""
st3=""
st4=""
st5=""
st6=""
st7=""
st8=""
st9=""

EndProc ;SWCONS_Limpa_Array_Registro()

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

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

DRIVE=substr(Upper(directory()),1,2)

DynArray Array_Registro[]

If Modo="Edicao" 
   Then SW_VSDGOPPESQ=VSDGOPPESQ
        SW_VSDGTXPESQ=VSDGTXPESQ
EndIf
       
oppesq=substr(VSDGOPPESQ,1,1)
Window Select JanelaItens
Switch
  Case oppesq="1" : Moveto [Descricao do Item]
                    OrderTable {Descricao do Item}
                    Home
                    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]
                            OrderTable {Codigo do Item}
                            Home
                            Locate IndexOrder by "codigo do item" Pattern VSDGTXPESQ
                    EndIf
  Case oppesq="3" : Moveto [Codigo Fornecedor]
                    OrderTable {cdforndescr}
                    Home
                    Locate IndexOrder by "cdforndescr" Pattern VSDGTXPESQ

  Case oppesq="4" : COD_BARRA2=False
                    Moveto [Codigo de Barras]
                    OrderTable {codigo de barras}
                    Home
                    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]
                    OrderTable {localdescr}
                    Home
                    Locate IndexOrder by "localdescr" Pattern VSDGTXPESQ

  Case oppesq="6" : Moveto [Descricao da Marca]
                    OrderTable {marcadescr}
                    Home
                    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" : Window Select JanelaItenCom
                    Moveto [CEST]
                    OrderTable {CEST}
                    Home
                    Locate IndexOrder by "CEST" Pattern VSDGTXPESQ

  Case oppesq="D" : Window Select JanelaItenCom
                    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
          itemok=true
          If oppesq="C" Or oppesq="D"  
             Then 
                  GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM 
                  If Not Retval Then itemok=false loop EndIf
             Else 
                  CopyToArray REG_ITEM
          EndIf
          while itemok
            switch 
              case sys_codigo_cliente="0385": ; aceitar inativo !
     
              otherwise                     :
               if REG_ITEM["Inativo"]="S" then itemok=false loop endif ; inativo
     
            endswitch
            
            if REG_ITEM["Tipo do Item"]="D" then itemok=false loop endif ; aplicacao direta
            if REG_ITEM["Tipo do Item"]="S"                         ; semiacabado 
               then 
                    if sys_Codigo_cliente<>"0377"
                       then itemok=false
                            loop 
                    endif    
            endif 

            wc=wc+1
            If oppesq<>"5"
               Then 
                    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," ")+" "
               Else 
                    Array_Registro[WC] = Completa(REG_ITEM["Localizacao"],13," ")+" "+
                                         Completa(SubStr(REG_ITEM["Descricao do Item"],1,30),30," ")+"  "+
                                         REG_ITEM["Codigo do Item"]+" "
            EndIf
            Array_Registro[WC]=Completa(Array_Registro[WC],64," ")+
                                spaces(10)+" "+
                                Format("W2",REG_ITEM["Unidade Interna"])+
                                Format("W10.2",0)+
                                Format("W1",REG_ITEM["Codigo da Grade"])

            quitloop
          Endwhile 
          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

        Switch
          case oppesq="?": 
          otherwise      : Window Select JanelaTbprIte
        EndSwitch
        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)

          for wc2 from 1 to 2
            Switch
              case oppesq="?": 
              otherwise      : Locate VSDGTABELA,citep
            EndSwitch
            If RetVal
               Then SWCONS_Grava_Valor_String("Preco",wc,[Preco Unitario]) 
                    quitloop             
               Else 
                    if wc2=1
                       then
                            citep2=citep
                            switch
                              Case Verifica_Array<>"" and SYS_CLIENTE_CONFEC<>"" : PegaCodigoRaiz(citep)
                              Case SYS_CLIENTE_CONFEC=""                         : PegaCodigoRaiz(citep)
                            endswitch
                            citep =PegaCodigoRaiz(citep)
                            if citep2<>citep
                               then loop
                            endif       
                    endif
                    quitloop              
            EndIf
          EndFor
        EndFor
EndIf
If DynArraySize(Array_Registro)=0
   Then Mensagem("Pesquisa sem Registro !")
        Return False
EndIf
Message("")
LimpAguarde()
Return True
EndProc ; (Seleciona)

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

Temp=True
TECLA    =""
MSG_CAMPO=""
If INICIO_DIALOG
   Then
        Switch
          Case Modo="Principal":
            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:
            If Not IsAssigNed(VSDGEMPRESA) Or IsBlank(VSDGEMPRESA) Or (Not OP_INSERT_ITEM)
               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
        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
        
        SD_ConsultaWinArray["HASFRAME" ] = False
        SD_ConsultaWinArray["HASSHADOW"]   =False

        Window SetAttributes SD_ConsultaJANELA From SD_ConsultaWinArray
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_cons.ini" From LINHAINI
                Release Vars LINHAINI           
        EndIf
EndIf

If Disparo="UPDATE" And Campo="TG_Registro"
   Then Temp=True   
        oppesq = substr(VSDGOPPESQ,1,1)
        Item   = SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Mostra_Estoque()
        Return Temp
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     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": 
          Temp=False
          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"))
          Observacao2()
     Case Evento["KeyCode"] =  -64 And Campo="TG_Registro": 
          Temp=False
          PrItem = SWCONS_Pega_Valor_String("Preco do Item",ControlValue("TG_Registro"))
          if isblank(Pritem)
             then pritem=0
             else pritem=numval(Pritem)
          endif
          Ver_Lista("CDPG")
     Case Evento["KeyCode"] =  -65 And Campo="TG_Registro":
          Temp=False
          Monta_Compras("Lista")
          Ver_Lista("COMPRAS")
     Case Evento["KeyCode"] =  -59:
          Temp=False
          If Campo="TG_OPPESQ"
             Then ShowPopup " Op‡”es " @ 03,24
                   "1-Descric„o             " : "Localizar pela descric„o do item             " : "1-Descric„o",
                   "9-Descri‡Æo complementar" : "Localizar pela descri‡„o complementar do Item" : "9-Descr.Complementar",
                   Separator, 
                   "6-Marca                 " : "Localizar pela descri‡Æo da marca            " : "6-Marca",
                   "8-Grupo                 " : "Localizar pela descri‡Æo do grupo            " : "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¢digo de barras      " : "Localizar pelo c¢digo de barras              " : "4-C¢d.Barras",
                   "A-Referˆncia            " : "Localizar pela referˆncia                    " : "A-Referˆncia",
                   "7-Observa‡äes           " : "Localizar pela observa‡äes do item           " : "7-Observa‡äes",
                   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
             Else If IsAssigned(CampoAnt) 
                     Then If CampoAnt="TG_TXPESQ"
                             Then Campo="TG_TXPESQ"
                          EndIf   
                  EndIf   
          EndIf
     Case Evento["KeyCode"] = 13 And
          Campo="TG_Registro" And Modo="Principal" And OP_PRECO_ITEM:
          Temp=False
          Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          MudaPreco()
     Case (Evento["KeyCode"] = -82 Or Evento["KeyCode"] = 13) And
          Campo="TG_Registro" And Modo<>"Principal" And OP_INSERT_ITEM:
          Temp=False
          SW_Item_Pesquisado=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          SWCONS_Limpa_Array_Registro("Cria Array")
          CancelDialog
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            ;* Ficha de Estoque
            Case Campo="I_Flag"        : 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"
                 If OP_INSERT_ITEM
                    Then If Modo<>"Principal" And IsBlank(PARAM_TABELA_PRECO)
                            Then Campo="TG_TABELA"
                            Else CancelDialog
                         EndIf   
                 EndIf
            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
                             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)

                                Switch
                                  Case SubStr(Tabela,1,4)="Orca"  : Moveto "OrcaC"
                                  Case SubStr(Tabela,1,3)="Ped"   : Moveto "PedidoC"
                                  Case SubStr(Tabela,1,6)="Fatura": Moveto "FaturaC"
                                  Case SubStr(Tabela,1,5)="Notac" : Moveto "NotaC"
                                  Case SubStr(Tabela,1,5)="Notae" : Moveto "NotaEC"
                                EndSwitch

                                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)

                                Switch
                                  Case SubStr(Tabela,1,4)="Orca"  : Moveto "OrcaC"
                                  Case SubStr(Tabela,1,3)="Ped"   : Moveto "PedidoC"
                                  Case SubStr(Tabela,1,6)="Fatura": Moveto "FaturaC"
                                  Case SubStr(Tabela,1,5)="Notac" : Moveto "NotaC"
                                  Case SubStr(Tabela,1,5)="Notae" : Moveto "NotaEC"
                                EndSwitch

                                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 RefreshDialog
                                        Campo="TG_Registro"
                                        Item=SWCONS_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                                        Mostra_Estoque()
                                EndIf
                        EndIf
                 EndSwitch
                 Moveto Tabela
          EndIf
   EndSwitch
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":
       MSG_CAMPO="Informe o valor a pesquisar (..)    F1=Consulta"
       If substr(VSDGOPPESQ,1,1)="5"
          Then tit="Localiza‡„o   Descri‡„o do Item               Item                Vr Venda Un"
          Else tit="Descri‡„o do Item               Item       Fornecedor             Vr Venda Un"                            
       EndIf
  Case Campo="TG_Registro":
       MSG_CAMPO=Format("W5",WCSW_NITENS)+" iten(s)                                                         "
       If Not OP_INSERT_ITEM
          Then TECLA="//Esc=Retornar  =Selecionar  F5=Obs  F6=CPgto  F7=Compras"
          Else TECLA="//Esc=Retornar  =Selecionar  F5=Obs  F6=CPgto  F7=Compras  Ins/Enter=Incluir"
       EndIf
EndSwitch
SelectControl Campo
RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
ResyncControl Campo
Return Temp
EndProc  ; (Sd_Dialog)

;*******************************************************************************
;* Rotina Observacao                                                           *
;*******************************************************************************
Proc Observacao2()
Private AUX_MSG,JANELA, WinArray6

Dynarray WinArray6[]
Window Handle Dialog to JANELA
Window GetAttributes JANELA To WinArray6
WinArray6["FLOATING"]=False
Window SetAttributes JANELA From WinArray6
        
Prompt " Esc=Cancelar"
Window Select JanelaItens
Moveto [Codigo do Item]
Locate IndexOrder by "Codigo do item" Pattern Item
If RetVal
   Then AUX_MSG = [Observacao]
   Else AUX_MSG="E"
EndIf

Window Select JANELA
WinArray6["FLOATING"]=True
Window SetAttributes JANELA From WinArray6
Echo Normal
Echo Off

Switch
  Case AUX_MSG<>"" And AUX_MSG<>"E" : 
       Ler_Memo("| "+Forn+" | "+Item+" | "+RTrim(Desc)+" |",06,02,15,80,AUX_MSG)
  Case AUX_MSG="E" :
       Mensagem("Item n„o localizado !")
EndSwitch
Release Vars AUX_MSG,JANELA, WinArray6

EndProc ;Observacao2()

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc Mostra_Estoque()
Private Indice,mes,ano,LinhaCab1,LinhaCab2,LinhaCab3,wc,
        Forn, Desc, Local, Vend, Saldo, UltCt, UltDt, Compl, Barra, Marca, Grupo,UltSai,
        FtConv, FtEmb,Unid, Famil, NCM

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

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   

Window Select JanelaItens
Moveto [Codigo do Item]
Locate IndexOrder by "Codigo do item" Pattern Item
;;;Locate 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

Window Select JanelaTbprIte
Moveto [Codigo da Tabela]
Locate VSDGTABELA,Item
If RetVal
   Then Vend=[Preco Unitario]
   Else Vend=BlankNum()
EndIf

Window Select JanelaSdEstq
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA,Item,ano,mes
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

Window Select JanelaEstqPrm
Locate VSDGEMPRESA,Item
If RetVal
   Then UltSai=[Data da Ultima Saida]
   Else UltSai=BlankDate()
EndIf

;--- Pedidos pendentes ---------------------------------------------------------
qtdpedidos=0
Monta_Pedidos("")

;--- Compras pendentes ---------------------------------------------------------
qtdcompras=0
Monta_Compras("")
;-------------------------------------------------------------------------------

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

st8=" (S) Saldo Atual"+Chr(179)+"   (P) Pedidos"+Chr(179)+"          =S-P"+Chr(179)+"   (C) Compras"+Chr(179)+"       =(S-P)+C"
st9=" "
If Int(Saldo)-Saldo<>0
   Then st9=st9+Format("W14.3,EIC",Saldo)
   Else st9=st9+Format("W14  ,EIC",Saldo)
EndIf
st9=st9+" "+Chr(179)
If Int(qtdpedidos)-qtdpedidos<>0
   Then st9=st9+Format("W13.3,EIC",qtdpedidos)
   Else st9=st9+Format("W13  ,EIC",qtdpedidos)
EndIf
st9=st9+" "+Chr(179)
If Int(Saldo-qtdpedidos)-(saldo-qtdpedidos)<>0
   Then st9=st9+Format("W13.3,EIC",saldo-qtdpedidos)
   Else st9=st9+Format("W13  ,EIC",saldo-qtdpedidos)
EndIf
st9=st9+" "+Chr(179)
If Int(qtdcompras)-qtdcompras<>0
   Then st9=st9+Format("W13.3,EIC",qtdcompras)
   Else st9=st9+Format("W13  ,EIC",qtdcompras)
EndIf
st9=st9+" "+Chr(179)
If Int((Saldo-qtdpedidos)+qtdcompras)-((saldo-qtdpedidos)+qtdcompras)<>0
   Then st9=st9+Format("W14.3,EIC",(saldo-qtdpedidos)+qtdcompras)
   Else st9=st9+Format("W14  ,EIC",(saldo-qtdpedidos)+qtdcompras)
EndIf

EndProc    ; (Mostra_Estoque)

;*******************************************************************************
;* Rotina p/ Montar CondPg p/ Grade                                            *
;*******************************************************************************
Proc Monta_CondPg()
Private wc

If IsAssigned(ArrayLista)
   Then Release Vars ArrayLista
EndIf
DynArray ArrayLista[]

Window Select JanelaTbprcpg
Moveto [Codigo da Tabela]
Locate VSDGTABELA
If RetVal
   Then wc=0
        While [Codigo da Tabela]=VSDGTABELA
          wc=wc+1
          If Search("A VISTA",[Descricao CondPagto])>0
             Then ArrayLista[wc]=Completa(" "+[Descricao CondPagto],27," ")+
                                 Format("W10.2,EIC",PrItem+NDecimal(((PrItem*[Taxa Financeira])/100),2))
             Else ArrayLista[wc]=Completa([Descricao CondPagto],27," ")+
                                 Format("W10.2,EIC",PrItem+NDecimal(((PrItem*[Taxa Financeira])/100),2))
          EndIf            
          Skip
          If Eot() Then Quitloop EndIf
        EndWhile
EndIf

EndProc    ; (Monta_CondPg)

;*******************************************************************************
;* Rotina p/ Montar Pedidos em aberto                                          *
;*******************************************************************************
Proc Monta_Pedidos(Tipo)
Private Tipo,wc,nped,pedok

Window Select JanelaPedidoI
Moveto [Codigo do Item]
OrderTable {Ind_itpd}
Locate IndexOrder by "Ind_itpd" Item  
If RetVal
   Then nped="???"
        While [Codigo do Item]=Item
          If [Numero do Pedido]<>nped
             Then nped =[Numero do Pedido]
                  pedok=False

                  Window Select JanelaPedidoC
                  Moveto [Numero do Pedido]
                  Locate nped
                  If RetVal
                     Then If [Codigo da Empresa  ]=VSDGEMPRESA and
                             [Situacao do Pedido ]="ABERTO"    and
                             ( Search("VEND",[Descricao da Destinacao])>0 Or 
                               Search("SIMPLES REMESSA ENTR",[Descricao da Destinacao])>0 )
                             Then pedok=True
                          EndIf
                  EndIf
                  Window Select JanelaPedidoI
          EndIf           
          If pedOK And [Quantidade]>[Quantidade Faturada]
             Then qtdpedidos=qtdpedidos+([Quantidade]-[Quantidade Faturada])
          EndIf
					Skip
					If EOT()
						 Then QuitLoop
          EndIf
          Locate IndexOrder by "Ind_itpd" Next Item   
				EndWhile
EndIf

EndProc    ; (Monta_Pedidos)

;*******************************************************************************
;* Rotina p/ Montar Compras em aberto                                          *
;*******************************************************************************
Proc Monta_Compras(Tipo)
Private Tipo,wc,nped,pedok,wc1,wc2,wc3,regoc

Switch
  Case Tipo="Lista":
    If IsAssigned(ArrayLista)
       Then Release Vars ArrayLista
    EndIf
    DynArray ArrayLista[]
    wc=0
EndSwitch

Window Select JanelaOcI
Moveto [Codigo do Item]
OrderTable {Ind_itcp}
Locate IndexOrder by "Ind_itcp" Item  
If RetVal
   Then nped="???"
        While [Codigo do Item]=Item
          If [Numero da OC]<>nped
             Then nped =[Numero da OC]
                  pedok=False

                  Window Select JanelaOcC
                  Moveto [Numero da OC]
                  Locate nped
                  If RetVal
                     Then If [Codigo da Empresa  ]=VSDGEMPRESA and
                             [Situacao da OC     ]="ABERTO"
                             Then pedok=True
                                  copytoarray regoc
                          EndIf
                  EndIf
                  Window Select JanelaOcI
          EndIf           
          If pedOK And [Quantidade]>[Quantidade Entregue]
             Then Switch
                    Case Tipo="Lista":
                      wc=wc+1
                      ArrayLista[wc]="   > "+
                                     AlinhM(StrVal( Year(regoc["Data de Entrega"])),4)+"/"+
                                     AlinhM(StrVal(Month(regoc["Data de Entrega"])),2)+"/"+
                                     AlinhM(StrVal(  Day(regoc["Data de Entrega"])),2)+" "+
                                     [Numero da OC]+" " 
                      If (Int([Quantidade]-[Quantidade Entregue])-([Quantidade]-[Quantidade Entregue]))<0
                         Then ArrayLista[wc]=ArrayLista[wc]+Format("W12.3,EIC",[Quantidade]-[Quantidade Entregue])
                         Else ArrayLista[wc]=ArrayLista[wc]+Format("W08  ,EIC",[Quantidade]-[Quantidade Entregue])
                      EndIf
                    OtherWise:
                      qtdcompras=qtdcompras+([Quantidade]-[Quantidade Entregue]) 
                  EndSwitch 
          EndIf
					Skip
					If EOT()
						 Then QuitLoop
          EndIf
          Locate IndexOrder by "Ind_itcp" Next Item   
				EndWhile
        If Tipo="Lista" And DynArraySize(ArrayLista)>0 
           Then 
                  wc3=0
                  For wc From 1  To DynArraySize(ArrayLista)
                    While SubStr(ArrayLista[wc],1,03)="   "
                      For wc2 From 1 to DynArraySize(ArrayLista)
                        If SubStr(ArrayLista[wc2],1,03)="   " And
                           (SubStr(ArrayLista[wc2],6,10)<SubStr(ArrayLista[wc],6,10) Or SubStr(ArrayLista[wc2],6,10)=SubStr(ArrayLista[wc],6,10))
                           Then wc1=wc2
                        EndIf  
                      EndFor
                      wc3=wc3+1
                      ArrayLista[wc1]=Format("W3",wc3)+SubStr(ArrayLista[wc1],4,50)
                    EndWhile
                  EndFor   
                  
                  For wc From 1  To DynArraySize(ArrayLista)
                    ArrayLista[wc]=SubStr(ArrayLista[wc],01,05)+
                                   SubStr(ArrayLista[wc],14,02)+"/"+
                                   SubStr(ArrayLista[wc],11,02)+"/"+
                                   SubStr(ArrayLista[wc],06,04)+
                                   SubStr(ArrayLista[wc],16,50)
                  EndFor   
                
        EndIf
EndIf

EndProc    ; (Monta_Compras)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Ver_Lista(Tipo)
Private Tipo, Titulo, Titulo2, LJ, AJ, nc, ArrayElement

Switch
  Case Tipo="CDPG":
    If DynArraySize(ArrayLista)=0
       Then Mensagem("Tabela sem Condi‡”es de Pagamento !")
            Return False
    EndIf
    
    AJ=DynArraySize(ArrayLista)
    If AJ>10
       Then AJ=10
       Else If AJ<3 Then AJ=3 EndIf
    EndIf
    
    LJ=39 nc=1
    Titulo ="Condi‡”es de pagamento"
    Titulo2="Condi‡Æo                         Valor"
;           12345678901234567890123456781234567890
  Case Tipo="COMPRAS":
    If DynArraySize(ArrayLista)=0
       Then Mensagem("Sem compras !")
            Return False
    EndIf
    
    AJ=DynArraySize(ArrayLista)
    If AJ>10
       Then AJ=10
       Else If AJ<3 Then AJ=3 EndIf
    EndIf
    
    LJ=39 nc=1
    Titulo ="Compras"
    Titulo2="       Entrega    N§ OC   Quantidade"
;             123> 12/12/1234 123456 123456789012
EndSwitch

ArrayElement=0
Showdialog Titulo Proc "Lista_Dialog_SWCONS"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ESC"
     @ 04,35 height AJ+3 width LJ+5

   @ 00,01 ?? Titulo2
   PaintCanvas Attribute 143 00, 01, 00, LJ

   PickDynArray @1,01 Height AJ width LJ
   Columns nc
   ArrayLista
   Tag "TG_LISTA"
   To ArrayElement
EndDialog
Return True
EndProc   ; (Ver_Lista)

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog Grade                                      *
;*******************************************************************************
Proc Lista_Dialog_SWCONS(Disparo,Campo,Evento,Elemento)
Private Disparo, Campo, Evento, Elemento

Temp=True
TECLA="=Mover  "
If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9 Or Evento["KeyCode"] = -15: Temp=False
      Case Evento["KeyCode"] = 27: CancelDialog
   EndSwitch
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Return Temp
EndProc ;Lista_Dialog_SWCONS()

;*******************************************************************************
;* Rotina de Entra Reajuste de Preco                                           *
;*******************************************************************************
Proc Muda(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento
TEMP=True
Switch
  Case Disparo="EVENT":
       If DynArraySize(Evento) >0
           Then Switch
                   Case Evento["Type"]="KEY":
                       Switch
                          Case Evento["KeyCode"] = 9:
                               TEMP=False
                          Case Evento["KeyCode"] = 27:
                               Switch
                                 Case Campo="Codigo1":
                                      CancelDialog
                               EndSwitch
                               TEMP=False
                          Case Evento["KeyCode"] = 13:
                          Switch
                             Case Campo="Codigo1":
                                COD1=ControlValue("Codigo1")
                                
                                Array_Registro[Indice]=SWCONS_Pega_Valor_String("Linha Array",Indice)+
                                                       Format("W10.2,EIC",COD1)+
                                                       Format("W10.2",COD1)
                                
                                TabelaAnt=Table()
                                Window Select JanelaTbprIte
                                CoEditKey
                                While True
                                  Moveto [Codigo da Tabela]
                                  Locate VSDGTABELA,Item
                                  If RetVal
                                     Then If Not IsLockRecord()
                                             Then If Format("W12.2,IEC",[Preco Unitario])<>Format("W12.2,IEC",COD1)
                                                     Then [Data Ultimo Reajuste]=Today()
                                                          If [Preco Unitario]>0
                                                             Then [Taxa Ultimo Reajuste]=NDecimal(((COD1*100)/[Preco Unitario]),2)-100
                                                          EndIf
                                                          [Preco Unitario      ]=COD1
                                                          UnLockRecord
                                                  EndIf
                                                  QuitLoop        
                                          EndIf
                                     Else End Down
                                          [Codigo da Tabela ]=VSDGTABELA
                                          [Lookup_Item      ]=Item
                                          If Not IsLockRecord()
                                             Then [Codigo do Item      ]=Item
                                                  [Data Ultimo Reajuste]=Today()
                                                  [Preco Unitario      ]=COD1
                                                  UnLockRecord
                                                  QuitLoop
                                          EndIf         
                                  EndIf
                                EndWhile
                                Do_It!
                                Moveto TabelaAnt
                                
                                COD1=""
                                CancelDialog
                          EndSwitch
                          TEMP=false
                      EndSwitch
               EndSwitch
        EndIf
EndSwitch
Return TEMP
EndProc

;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc MudaPreco()
Private indice

Indice=ControlValue("TG_Registro")

Showdialog "Altera pre‡o" Proc "Muda" @ 13,22 height 05 width 40

   Label  @ 1,01 "Novo valor:" for "Codigo1"
   Accept @ 1,14 Width 12 "$" Tag "Codigo1" to COD1

Enddialog
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
If Not IsAssigned(Param_ExibeCusto)    Then Param_ExibeCusto="S"     EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" 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
If Not IsAssigned(OP_INSERT_ITEM)      Then OP_INSERT_ITEM=False     EndIf
If Not IsAssigned(OP_PRECO_ITEM)       Then OP_PRECO_ITEM=False      EndIf

DynArray Array_Registro[]
INICIO_DIALOG=True
WCSW_NITENS=0           

Acha_Empresa=False
If SysMode()="Main"
   Then Modo="Principal"
        AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"

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

        If IsBlank(VSDGEMPRESA) Then VSDGEMPRESA=SYS_EMPRESA_DEFAULT EndIf

   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 Modo="Principal"
   Then
        JanelaItens   =AbrirTabela("\\Sistemas\\Estoque\\Itens","V",1,0,1,15)
        JanelaItenCom =AbrirTabela("\\Sistemas\\Estoque\\Iten_Com","V",1,0,1,15)
        JanelaSdEstq  =AbrirTabela("\\Sistemas\\Estoque\\SdEstq","V",1,0,1,15)
        JanelaEstqPrm =AbrirTabela("\\Sistemas\\Estoque\\EstqPrm","V",1,0,1,15)

        JanelaPedidoC =AbrirTabela("\\Sistemas\\Vendas\\PedidoC","V",1,0,1,15)
        JanelaPedidoI =AbrirTabela("\\Sistemas\\Vendas\\PedidoI","V",1,0,1,15)

        JanelaTbprIte =AbrirTabela("\\Sistemas\\Vendas\\TbprIte","V",1,0,1,15)
        JanelaTbprCpg =AbrirTabela("\\Sistemas\\Vendas\\TbprCpg","V",1,0,1,15)
        JanelaTbprCli =AbrirTabela("\\Sistemas\\Vendas\\TbprCli","V",1,0,1,15)
        JanelaTbprCit =AbrirTabela("\\Sistemas\\Vendas\\TbprCit","V",1,0,1,15)       

        JanelaOcC     =AbrirTabela("\\Sistemas\\Compras\\OcC","V",1,0,1,15)
        JanelaOcI     =AbrirTabela("\\Sistemas\\Compras\\OcI","V",1,0,1,15)
   Else
        JanelaItens   =AbrirTabela("\\Sistemas\\Estoque\\Itens","AddRO",1,0,1,15)
        JanelaItenCom =AbrirTabela("\\Sistemas\\Estoque\\Iten_Com","AddRO",1,0,1,15)
        JanelaSdEstq  =AbrirTabela("\\Sistemas\\Estoque\\SdEstq","AddRO",1,0,1,15)
        JanelaEstqPrm =AbrirTabela("\\Sistemas\\Estoque\\EstqPrm","AddRO",1,0,1,15)

        JanelaPedidoC =AbrirTabela("\\Sistemas\\Vendas\\PedidoC","AddRO",1,0,1,15)
        JanelaPedidoI =AbrirTabela("\\Sistemas\\Vendas\\PedidoI","AddRO",1,0,1,15)

        JanelaTbprIte =AbrirTabela("\\Sistemas\\Vendas\\TbprIte","AddRO",1,0,1,15)
        JanelaTbprCpg =AbrirTabela("\\Sistemas\\Vendas\\TbprCpg","AddRO",1,0,1,15)
        JanelaTbprCli =AbrirTabela("\\Sistemas\\Vendas\\TbprCli","AddRO",1,0,1,15)
        JanelaTbprCit =AbrirTabela("\\Sistemas\\Vendas\\TbprCit","AddRO",1,0,1,15)

        JanelaOcC     =AbrirTabela("\\Sistemas\\Compras\\OcC","AddRO",1,0,1,15)
        JanelaOcI     =AbrirTabela("\\Sistemas\\Compras\\OcI","AddRO",1,0,1,15)
EndIf

If OP_INSERT_ITEM
   Then Acha_Empresa=True
EndIf

tit=""

SW_CORBASEF=111
SW_CORBASET=096

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-Observa‡äes,8-Grupo,9-Descr.Complemen,A-Referˆncia,B-NCM,C-CEST,D-FCI,E-Familia"

Sw_Dialog="Inicial"
Sw_Item_Pesquisado=""
ShowDialog "Consulta de Itens" Proc "SD_Consulta"
 Trigger "OPEN","ARRIVE","UPDATE","CLOSE"
 Mouse "DOWN"
  Key "F1","ENTER","ESC","ClearArea","INS","F5","TAB","ReverseTab","F3","F6","F7",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140,
      -71,-80,-79,-72,-132,-118
      
 @ 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 9 width 80
   Columns 1
    Array_Registro
     Tag "TG_Registro"
      To ArrayElement
   
   @ 13,00 ?? st1
   @ 14,00 ?? st2
   @ 15,00 ?? st3 
   @ 16,00 ?? st4
   @ 17,00 ?? st5
   @ 18,00 ?? st6
   @ 19,00 ?? st7
   @ 20,00 ?? st8
   @ 21,00 ?? st9   

   PaintCanvas Attribute SW_CORBASEF 13, 00, 19, 79

   PaintCanvas Attribute SW_CORBASET 14, 00, 19, 05
   PaintCanvas Attribute SW_CORBASET 14, 23, 18, 29
   PaintCanvas Attribute SW_CORBASET 14, 52, 18, 58
   PaintCanvas Attribute SW_CORBASET 18, 40, 19, 42
   PaintCanvas Attribute SW_CORBASET 19, 40, 19, 42

   PaintCanvas Attribute  96 18, 22, 18, 23
   PaintCanvas Attribute 128 20, 00, 21, 79

   PaintCanvas Attribute 143 20, 02, 20, 02
   PaintCanvas Attribute 143 20, 21, 20, 21
   PaintCanvas Attribute 143 20, 43, 20, 43
   PaintCanvas Attribute 143 20, 45, 20, 45
   PaintCanvas Attribute 143 20, 51, 20, 51
   PaintCanvas Attribute 143 20, 71, 20, 71
   PaintCanvas Attribute 143 20, 73, 20, 73
   PaintCanvas Attribute 143 20, 76, 20, 76

   PaintCanvas Attribute 143 21, 01, 21, 15
   PaintCanvas Attribute 143 21, 17, 21, 30
   PaintCanvas Attribute 143 21, 32, 21, 45
   PaintCanvas Attribute 143 21, 47, 21, 60
   PaintCanvas Attribute 143 21, 62, 21, 76


;Ý(S) Saldo AtualÝ   (P) PedidosÝ          =S-PÝ   (C) ComprasÝ       =(S-P)+CÝ
;012345678901234567890123456789012345678901234567890123456789012345678901234567
   
   
EndDialog
If Modo="Principal"
   Then ClearAll
   Else Do_It!

        Window Select JanelaItens    ClearImage
        Window Select JanelaItenCom  ClearImage
        Window Select JanelaSdEstq   ClearImage
        Window Select JanelaEstqPrm  ClearImage

        Window Select JanelaPedidoC  ClearImage
        Window Select JanelaPedidoI  ClearImage
        Window Select JanelaTbprIte  ClearImage
        Window Select JanelaTbprCpg  ClearImage
        Window Select JanelaTbprCli  ClearImage
        Window Select JanelaTbprCit  ClearImage

        Window Select JanelaOcC      ClearImage
        Window Select JanelaOcI      ClearImage

        Echo Normal
        Echo Off

        Moveto Tabela
        CoEditKey
EndIf
Message("")
If Modo="Principal"
   Then Release Vars All
        Release Procs All
   Else Release Vars Array_Registro,Modo,
                     Item,Desc,Forn,Acha_Empresa,
                     WinArray5,Janela,Msg_Campo,Tecla, 
                     PrItem, sw_tabant,st1,st2.st3,st4,st5,st6,st7,st8,st9,ArrayLista, qtdpedidos, qtdcompras,
                     JanelaPedidoC,JanelaPedidoI,JanelaOcC,JanelaOcI,
                     JanelaItens,JanelaItenCom, JanelaSdEstq,JanelaEstqPrm,
                     JanelaTbprIte,JanelaTbprCpg,JanelaTbprCli,JanelaTbprCit 
             
        Release Procs Seleciona,SD_Consulta,Mostra_Estoque,Monta_Prompt,
                      Monta_CondPg, Monta_Compras, Monta_Pedidos, Ver_Lista, Lista_Dialog_SWCONS,
                      Muda, MudaPreco, 
                      SWCONS_Grava_Valor_String, SWCONS_Pega_Valor_String, SWCONS_Limpa_Array_Registro
EndIf
;123456789012345678901234567890 12345678901234567890 1234567890 999.999,99 XX
;12345678901234567890123456789012345678901234567890  1234567890 999.999,99 XX
;1234567890123 123456789012345678901234567890        1234567890 999.999,99 XX
