;** Sw_ConsR *******************************************************************
;*  Programa p/ Consulta de Itens para Requisi‡Æo                              *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 07/05/2012 por Bruno Carvalho
;Ultima Alteracao: 03/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste AutoLib Modo="Principal"
;Ultima Alteracao: 10/01/2013 por Bruno Carvalho
;Motivo Alteracao: Reorganizado AutoLib Modo="Principal" ap¢s vari vel MODO ser setada
;Ultima Alteracao: 14/07/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado op‡Æo para pesquisar por NCM 
;Ultima Alteracao: 30/09/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado "Codigo da Empresa Destino" - > "Codigo"
;Ultima Alteracao: 02/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Incluido "I" no [Tipo de Operacao] para fornecer registros quando for requisi‡äes de Industrializa‡Æo
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Janela sem sombra
;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: 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: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc

;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONSR_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 = "Verifica_Array"     : RESULT = SubStr(Array_Registro[POSICAO],80,01)
  Case PARAM = "Linha Array"        : RESULT = SuBStr(Array_Registro[POSICAO],01,64)                                                                                                                                                                                 
EndSwitch
                  
Return RESULT      

EndProc ;SWCONSR_Pega_Valor_String(

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

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

EndProc ;SWCONSR_Limpa_Array_Registro()

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

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]
                    OrderTable {Descricao do Item}
                    Home
                    Locate IndexOrder by "descricao do item" 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 [NCM]
                    OrderTable {NCM}
                    Home
                    Locate IndexOrder by "NCM" Pattern VSDGTXPESQ                                        
EndSwitch

wc=0
VR_CUSTO=0
WCSW_NITENS=wc

If RetVal
   Then primeira_tentativa=Recno()
        While True
          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" And
             REG_ITEM["Tipo do Item"]<>"S"
             Then 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],79," ")+Completa(REG_ITEM["Codigo da Grade"],1," ")
          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" 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 "NCM"        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               
        
        MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
        ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

        If [RqCabeca->Tipo de Movimento]="S" And
           [RqCabeca->Tipo de Operacao ]="T"
           Then COD_EMPRESA=[RqCabeca->Codigo]
           Else COD_EMPRESA=[RqCabeca->Codigo da Empresa]
        EndIf   
        
        For wc from 1 to DynArraySize(Array_Registro)
          citep = SWCONSR_Pega_Valor_String("Codigo do Item",WC)
          Verifica_Array = SWCONSR_Pega_Valor_String("Verifica_Array",WC)     
          If Verifica_Array<>" "
             Then citep=PegaCodigoRaiz(citep)
          EndIf
          Saldo = 0
          Moveto "SdEstq"
          Verifica_Almoxarifado(VSDGEMPRESA,Today())
          If EMPRESA_ALMOXARIFADO <> "" And VSDGEMPRESA="0001"
             Then Moveto [Codigo da Empresa]
                  Locate EMPRESA_ALMOXARIFADO,citep,ANO,MES
                  If RetVal
                     Then Saldo=[Saldo Atual]
                  EndIf
          EndIf
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA,citep,ANO,MES
          If RetVal
             Then Saldo = Saldo + [Saldo Atual]
                  VR_CUSTO=[Custo Total Atual]/Saldo
                  If VR_CUSTO=0 Or IsBlank(VR_CUSTO)
                     Then VR_CUSTO=[Ultimo Custo Atual]
                  EndIf
                  If [RqCabeca->Tipo de Operacao ]="P" Or
                     [RqCabeca->Tipo de Operacao ]="I" Or
                     [RqCabeca->Tipo de Operacao ]="E" Or
                     [RqCabeca->Tipo de Operacao ]="R"
                     Then VR_CUSTO=[Preco de Custo]
                  EndIf
                  
                  Array_Registro[WC] = SWCONSR_Pega_Valor_String("Linha Array",WC)+Format("W10.2,EIC",VR_CUSTO)+
                                               Format("W2",REG_ITEM["Unidade Interna"])+Format("W10.2",VR_CUSTO)     
             Else Array_Registro[WC] = SWCONSR_Pega_Valor_String("Linha Array",WC)+Format("W10.2,EIC",0)       +" "+
                                               Format("W2",REG_ITEM["Unidade Interna"])+Format("W10.2",0)     
          EndIf
        EndFor     
EndIf

Vend = VR_CUSTO

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)

Temp=True
TECLA    =""
MSG_CAMPO=""
If INICIO_DIALOG
   Then If Not IsAssigNed(VSDGEMPRESA) Or IsBlank(VSDGEMPRESA) Or (Not OP_INSERT_ITEM)
           Then Campo="TG_EMPRESA"
                Acha_Empresa=False
           Else If Not IsAssigNed(VSDGOPPESQ) Or IsBlank(VSDGOPPESQ)
                   Then Campo="TG_OPPESQ"
                   Else Campo="TG_TXPESQ"
                EndIf
        EndIf
        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 SWCONSR_Limpa_Array_Registro("Cria Array")
EndIf

If Disparo="UPDATE" And Campo="TG_Registro"
   Then Temp=True   
        oppesq = substr(VSDGOPPESQ,1,1)
        Item   = SWCONSR_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 = SWCONSR_Pega_Valor_String("Fornecedor",ControlValue("TG_Registro"))
          Item = SWCONSR_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          Desc = SWCONSR_Pega_Valor_String("Descricao",ControlValue("TG_Registro"))
          Observacao2()
     Case Evento["KeyCode"] =  -59:
          Temp=False
          If Campo="TG_OPPESQ"
             Then ShowPopup " Op‡”es " @ 09,27
                   "1-Descric„o         " : "Localizar pela Descric„o do Item             " : "1-Descric„o",
                   "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",
                   "5-Localiza‡„o       " : "Localizar pela Localiza‡„o                   " : "5-Localiza‡„o",
                   "6-Marca             " : "Localizar pela Marca                         " : "6-Marca",
                   "7-C¢d.Origem (Obs)  " : "Localizar pelo C¢digo Origem (Observa‡„o)    " : "7-C¢d.Origem",
                   "8-Grupo             " : "Localizar pelo C¢digo Origem (Observa‡„o)    " : "8-Grupo",
                   "9-Descr.Complementar" : "Localizar pela Descri‡„o Complementar do Item" : "9-Descr.Complementar",                   
                   "A-NCM               " : "Localizar pelo NCM                           " : "A-NCM"
                  EndMenu
                   To VSDGOPPESQ
                  If Not RetVal
                     Then VSDGOPPESQ=""
                     Else Campo="TG_TXPESQ"
                  EndIf
                  RefreshDialog
          EndIf
          If Campo="TG_EMPRESA"
             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
                                  Switch
                                    Case SubStr(Tabela,1,4)="Orca"  : Moveto "OrcaC"
                                    Case SubStr(Tabela,1,6)="Fatura": Moveto "FaturaC"
                                    Case SubStr(Tabela,1,5)="Notae" : Moveto "NotaEC"
                                  EndSwitch
                                  Moveto [Codigo da Empresa]
                          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
                          Moveto Tabela
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -82 Or Evento["KeyCode"] = 13) And
          Campo="TG_Registro" And Modo<>"Principal" And OP_INSERT_ITEM:
          SW_Item_Pesquisado = SWCONSR_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          AcceptDialog
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            ;* Ficha de Estoque
            Case Campo="I_Flag"        : CancelDialog

            ;* Filtro
            Case Campo="TG_EMPRESA"    : CancelDialog
            Case Campo="TG_OPPESQ"     : 
                 If OP_INSERT_ITEM
                    Then CancelDialog
                    Else Campo="TG_EMPRESA"
                 EndIf
            Case Campo="TG_TXPESQ"     : Campo="TG_OPPESQ"
            Case Campo="TG_Registro"   : Campo="TG_TXPESQ"
                 SWCONSR_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 = SWCONSR_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_OPPESQ"
                                     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,6)="Fatura": Moveto "FaturaC"
                                  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_OPPESQ"
                                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 = SWCONSR_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_OPPESQ":
       MSG_CAMPO="Informe a op‡„o de pesquisa"
       TECLA="F1=Consulta  "
  Case Campo="TG_TXPESQ":
       MSG_CAMPO="Informe o valor a pesquisar (..)"
       If substr(VSDGOPPESQ,1,1)="5"                                                    
          Then tit="Localiza‡„o   Descri‡„o do Item               Item               Vr Compra Un"
          Else tit="Descri‡„o do Item               Item       Fornecedor            Vr Compra 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"
          Else TECLA="//Esc=Retornar  =Selecionar  Ins/Enter=Incluir  F5=Obs"
       EndIf
EndSwitch
SelectControl Campo
RefreshDialog
Monta_Prompt(MSG_CAMPO,TECLA)
ResyncControl Campo
Return Temp
EndProc  ; (Sd_Dialog)

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

GetRecord "\\Sistemas\\Estoque\\Itens" Item To REG_ITEM
If RetVal
   Then AUX_MSG = REG_ITEM["Observacao"]
        If AUX_MSG<>""
           Then Ler_Memo("| "+Forn+" | "+Item+" | "+RTrim(Desc)+" |",06,02,15,80,AUX_MSG)
        EndIf
   Else Mensagem("Item n„o localizado !")
EndIf
Release Vars AUX_MSG,REG_ITEM

EndProc  ; (Observacao)

;*******************************************************************************
;* 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, Saldo

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   

Moveto "Itens"
Moveto [Codigo do 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

Moveto "SdEstq"
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

Moveto "EstqPrm"
Locate VSDGEMPRESA,Item
If RetVal
   Then UltSai=[Data da Ultima Saida]
   Else 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

st8=Completa(" Saldo "+Ltrim(format("W15.3,EIC",Saldo)),22," ")

EndProc    ; (Mostra_Estoque)

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
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_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

Open_Tabelas=True
Acha_Empresa=False
If SysMode()="Main"
   Then Modo="Principal"
        Mensagem("Processo n„o pode ser iniciado no modo principal!")
        Return        
   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 AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
        SYS_VALOR()
Endif

If not IsAssigned(OP_INSERT_ITEM)
   Then OP_INSERT_ITEM=False
EndIf

If OP_INSERT_ITEM
   Then Acha_Empresa=True
EndIf

SWCONSR_Limpa_Array_Registro("")

tit=""

SW_CORBASEF=111
SW_CORBASET=096

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-NCM"

VSDGTABELA=""
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",
      -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,80 "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 10 width 80
   Columns 1
    Array_Registro
     Tag "TG_Registro"
      To ArrayElement
   
   @ 14,00 ?? st1
   @ 15,00 ?? st2
   @ 16,00 ?? st3 
   @ 17,00 ?? st4
   @ 18,00 ?? st5
   @ 19,00 ?? st6
   @ 20,00 ?? st7
   @ 21,00 ?? st8
   
   PaintCanvas Attribute SW_CORBASEF 14, 00, 21, 79

   PaintCanvas Attribute SW_CORBASET 15, 00, 21, 05
   PaintCanvas Attribute SW_CORBASET 15, 23, 20, 29
   PaintCanvas Attribute SW_CORBASET 15, 52, 19, 58
   PaintCanvas Attribute SW_CORBASET 19, 22, 19, 23
   PaintCanvas Attribute SW_CORBASET 20, 40, 21, 42
   PaintCanvas Attribute SW_CORBASET 21, 40, 21, 42

   PaintCanvas Attribute  96 20, 22, 20, 23
   
   PaintCanvas Attribute 128 21, 00, 21, 79
   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   
   
EndDialog

If Not RetVal
   Then CONSULTA_F5=False
   Else CONSULTA_F5=True
EndIf 
                
If Modo="Principal"
   Then ClearAll
;;;;;  Else CoEditKey
EndIf
Message("")

If Modo="Principal"
   Then Release Vars Param_ExibeCusto
EndIf

Release Vars Array_Registro,Modo,
             Item,Desc,Forn,Acha_Empresa,
             WinArray5,Janela,Msg_Campo,Tecla, Open_Tabelas,
             CondPg, PrItem, sw_tabant
Release Procs Seleciona,SD_Consulta,Mostra_Estoque,Monta_Prompt,
              Monta_CondPg, Seleciona_CondPg, CondPg_Dialog,SWCONSR_Limpa_Array_Registro,SWCONSR_Pega_Valor_String
