;** Sw_Cons2 *******************************************************************
;*  Programa p/ Consulta de Itens do Estoque                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 22/06/2015 por Andrey Fillipe
;Ultima Alteracao: 26/06/2015 por Kamila Gomes
;Motivo Alteracao: Implementa‡Æo da inclusÆo dos itens
;Ultima Alteracao: 30/06/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes exibi‡Æo dos dados dos itens, altera‡Æo de unidade Fiscal
;Ultima Alteracao: 16/07/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Show_dialog edi‡Æo de dados
;Ultima Alteracao: 29/07/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes Show_dialog edi‡Æo de dados e Ultima entrada  
;Ultima Alteracao: 27/10/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado VENDAGEM
;Ultima Alteracao: 01/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste Janela sem sombra
;Ultima Alteracao: 19/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" p/ o campo [Vendagem]
;Ultima Alteracao: 08/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes e inclusao visualiza‡Æo compras e vendas
;Ultima Alteracao: 09/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout saldo/pedidos/ordem de compra         
;Ultima Alteracao: 15/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajsutes Coedi‡Æo a pressionar F8 p/ incluir item na compra
;Ultima Alteracao: 22/06/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado ConvertStrNum() e ajsutado "Preco_item" p/ ser convertido em valor v lido
;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: 05/08/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustes na op‡Æo de consulta "F6" para ajustar a quantidade e pre‡o j  lan‡ados na consulta e vice-versa 
;Ultima Alteracao: 05/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro empresa pedidos e compras                      
;Ultima Alteracao: 15/08/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes nas posi‡äes da DescItem p/ 30, 8.1 p/ quantidade e 9.2 p/ pre‡o unitario -> Op‡Æo de consulta "F6"   
;Ultima Alteracao: 16/03/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo F9 p/ carregamento da imagem do produto
;Ultima Alteracao: 07/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item da imagem
;Ultima Alteracao: 13/08/2018 por Bruno Carvalho
;Motivo Alteracao: Novo laoyut
;Ultima Alteracao: 12/09/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes na formata‡Æo da quantidade quando ultrapassam 3 digitos -> SWCONS2_QTD
;Ultima Alteracao: 06/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes obs item
;Ultima Alteracao: 14/03/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir embalagem

;*******************************************************************************
;* Rotina para pegar valor da string                                           *
;*******************************************************************************
Proc SWCONS2_Pega_Valor_String(PARAM,POSICAO)
Private PARAM, RESULT, PosI, SWCONS2_QTD
             
RESULT = ""              
Switch
  Case PARAM = "Codigo do Item"     : RESULT = SubStr(Array_Registro[POSICAO],79,10)
  Case PARAM = "Descricao"          : RESULT = SubStr(Array_Registro[POSICAO],01,30)
  Case PARAM = "Preco do Item"      : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],69,9)))
  Case PARAM = "Quantidade"         : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],60,8)))
  Case PARAM = "Quantidade2"        : SWCONS2_QTD = Ltrim(SubStr(Array_Registro[POSICAO],59,7))
                                      PosI = Search(".",SWCONS2_QTD)
                                      If PosI>0
                                        Then SWCONS2_QTD = SubStr(SWCONS2_QTD,1,PosI-1)+SubStr(SWCONS2_QTD,PosI+1,Len(SWCONS2_QTD))
                                      EndIf  
                                      RESULT = NumVal(SWCONS2_QTD+"."+Ltrim(SubStr(Array_Registro[POSICAO],67,1)))
  Case PARAM = "Unidade"            : RESULT = Ltrim(Rtrim(SubStr(Array_Registro[POSICAO],56,2)))                    
EndSwitch

Return RESULT    

EndProc ;SWCONS2_Pega_Valor_String()

;*******************************************************************************
;* Rotina para limpar array e variaveis com informa‡Æo dos itens               *
;*******************************************************************************
Proc SWCONS2_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=""
st10=""

EndProc ;SWCONS2_Limpa_Array_Registro()
                            
;*******************************************************************************
;* Rotina para Selecionar Registros                                            *
;*******************************************************************************
Proc Seleciona()

{Ask} {\\Sistemas\\Estoque\\Unidades}
Moveto [Sigla da Unidade    ] Check 
Moveto [Descricao da Unidade] Check
Do_It!

Monta_Opcoes("Unidade","F1_Temp")

Moveto "Answer" ClearImage
Moveto "\\Sistemas\\Estoque\\Unidades" ClearImage

{Ask} TypeIn "\\Sistemas\\Estoque\\Itens" Enter
Moveto [Codigo do Item   ] Example TypeIn "CodItem"  
Moveto [Codigo Fornecedor] Check
Moveto [Descricao do Item] Check
Moveto [Inativo          ] TypeIn "Not S"
Moveto [Tipo do Item     ] TypeIn "T"          
{Ask} TypeIn "\\Sistemas\\Estoque\\Cotacao" Enter Check
Moveto [Codigo do Item   ] Example TypeIn "CodItem"
Moveto [Codigo           ] TypeIn "~CODIGO"
Do_It!

View "Answer"
Moveto [Codigo do Item]
WC=0
Scan
    WC=WC+1
    Array_Registro[WC] = Completa(Ltrim(SubStr([Descricao do Item],1,30)),33," ")+" "+   
                         Completa([Codigo Fornecedor],21," ")+
                         Completa([Unidade Entrada],03," ")+" "+
                         Format("W8.1,EIC",0)+" "+   ;11.3
                         Format("W9.2,EIC",0)+" "+   ;10.2
                         Completa([Codigo do Item],10," ")
    If WC=999 Then QuitLoop EndIf
EndScan

;----- Ajustando Quantidade e Pre‡o Unit rio na Consulta "F6" ------------------
Moveto "\\Sistemas\\Compras\\OCI"
Moveto [Numero da OC]
Locate OC
If ReTval
   Then While [Numero da OC]=OC
          AUX_ITEM = [Codigo do Item]
          For i From 1 To DynArraySize(Array_Registro) 
            If AUX_ITEM = SWCONS2_Pega_Valor_String("Codigo do Item",i)
               Then Array_Registro[i] = SubStr(Array_Registro[i],1,59)+Format("W8.1,EIC",[Quantidade])+" "+
                                        Format("W9.2,EIC",[Preco Unitario])+" "+
                                        SubStr(Array_Registro[i],79,Len(Array_Registro[i]))
                    QuitLoop
            EndIf
          EndFor
          Skip
          If Eot() Then QuitLoop EndIf
        EndWhile
EndIf       

If WC>=999                             
   Then MSG = "Sr. USUARIO. // //"
        MSG = MSG +"MEMORIA INSUFICIENTE. (DOS/EMS)//"
        MSG = MSG +"Somente parte dos Itens ser  mostrado."
        Mensagem(MSG)
EndIf

Moveto "Answer"                       ClearImage
Moveto "\\Sistemas\\Estoque\\Cotacao" ClearImage
Moveto "\\Sistemas\\Estoque\\Itens"   ClearImage

WCSW_NITENS = WC

If DynArraySize(Array_Registro)=0
   Then Mensagem("Pesquisa sem Registro !")
        Return False
EndIf

LimpAguarde()
Return True
                     
EndProc                    

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc Mostra_Estoque()
Private mes,ano,
        Desc,Barra,Compl,UnidInt,
        vendagem,
        TpDocto,NDocto,DtComp,Qtd,UnEnt,PrUnit,ftco,UnInt,
        VrUnit_Ult_Cot,Data_Ult_Cot,
        Saldo,UltCt,         
        REG_ITEMCOMP, REG_ITEM, REG_COTACAO, REG_SDESTQ, REG_ALMOXARIFADO,        
        Forn, Desc, Local, Vend, Saldo, UltCt, UltDt, Compl, Barra, Marca, Grupo,
        FtConv, FtEmb,Unid, Famil, NCM, iteminativo,cst,vendagem,Depart,Aliq
        

ano=AlinhM(StrVal(Year(Today())),04)
mes=AlinhM(StrVal(Month(Today())),02)

Desc           = "?"
UnidInt        = "?" 
Barra          = "?"
Compl          = "?"
Aliq           = "?"
Forn           = "?"
Desc           = "?"
Local          = "?"
Compl          = "?"
Barra          = "?"
Marca          = "?"
Famil          = "?"
Grupo          = "?"
Unid           = "?"
Pesolq         = "?"
FtConv         = "?"
FtEmb          = "?"
NCM            = "?"
iteminativo    = "?"
cst            = "?"
Depart         = "?"

vendagem       = "?"
fci            = "?" 
cest           = "?"

TpDocto        = ""
NDocto         = ""
DtComp         = BlankDate()
Qtd            = BlankNum()
UnEnt          = ""
PrUnit         = BlankNum()
ftco           = BlankNum()
UnInt          = ""

VrUnit_Ult_Cot = BlankNum()
Data_Ult_Cot   = BlankDate()

Saldo          = BlankNum()
UltCt          = BlankNum()

GetRecord "\\Sistemas\\Estoque\\Itens"    Item To REG_ITEM
If RetVal
   Then Desc     = REG_ITEM["Descricao do Item"     ]
        Barra    = REG_ITEM["Codigo de Barras"      ]
        Compl    = REG_ITEM["Descricao Complementar"]
        UnidInt  = REG_ITEM["Unidade Interna"       ]
        Forn     = REG_ITEM["Codigo Fornecedor"     ]
        Desc     = REG_ITEM["Descricao do Item"     ]  
        Local    = REG_ITEM["Localizacao"           ]
        Compl    = REG_ITEM["Descricao Complementar"]
        Barra    = REG_ITEM["Codigo de Barras"      ]
        Marca    = REG_ITEM["Descricao da Marca"    ]
        Famil    = REG_ITEM["Descricao da Familia"  ]
        Grupo    = REG_ITEM["Descricao do Grupo"    ]
        Aliq     = Rtrim(Ltrim(Format("W6.2,EIC",REG_ITEM["Aliquota de ICMS"])))
        Pesolq   = RTrim(Ltrim(Format("W11.3,EIC",REG_ITEM["Peso Liquido"])))

        If (Int(REG_ITEM["Fator de Conversao"])-REG_ITEM["Fator de Conversao"])<>0
           Then FtConv=RTrim(REG_ITEM["Unidade Entrada"])+"/"+LTrim(Format("W11.3,EIC",REG_ITEM["Fator de Conversao"]))
           Else FtConv=RTrim(REG_ITEM["Unidade Entrada"])+"/"+LTrim(Format("W11  ,EIC",REG_ITEM["Fator de Conversao"]))
        EndIf   

        If (Int(REG_ITEM["Fator Conversao Embalagem"])-REG_ITEM["Fator Conversao Embalagem"])<>0
           Then FtEmb =RTrim(REG_ITEM["Unidade Embalagem"])+"/"+LTrim(Format("W11.3,EIC",REG_ITEM["Fator Conversao Embalagem"]))
           Else FtEmb =RTrim(REG_ITEM["Unidade Embalagem"])+"/"+LTrim(Format("W11  ,EIC",REG_ITEM["Fator Conversao Embalagem"]))
        EndIf 

        NCM        = REG_ITEM["NCM"]  
        iteminativo= REG_ITEM["Inativo"]
        Depart     = SubStr(REG_ITEM["Descricao do Departamento"],1,13)
        cst        = REG_ITEM["Tipo Tributacao"]
        If Aliq<>""
           Then cst = cst + "/" + Aliq
           Else Aliq = ""
                cst = cst
        EndIf
EndIf

GetRecord "\\Sistemas\\Estoque\\Iten_Com" Item To REG_ITEMCOMP
If RetVal
   Then vendagem = REG_ITEMCOMP["Vendagem"]
        fci      = REG_ITEMCOMP["FCI"]
        cest     = REG_ITEMCOMP["CEST"]
EndIf   

GetRecord "\\Sistemas\\Estoque\\Cotacao"  Item, CODIGO To REG_COTACAO
If RetVal
   Then TpDocto        = REG_COTACAO["Tipo do Documento"         ]
        NDocto         = REG_COTACAO["Numero do Documento"       ]
        DtComp         = REG_COTACAO["Data de Compra"            ]
        Qtd            = REG_COTACAO["Quantidade"                ]
        UnEnt          = REG_COTACAO["Unidade Entrada"           ]
        PrUnit         = REG_COTACAO["Valor Unitario"            ]
        ftco           = REG_COTACAO["Fator de Conversao"        ]
        UnInt          = REG_COTACAO["Unidade Interna"           ]
        
        VrUnit_Ult_Cot = REG_COTACAO["Vr_Unit_Ult_Cotacao"       ]
        Data_Ult_Cot   = REG_COTACAO["Data_Ult_Cotacao"          ]
EndIf

GetRecord "\\Sistemas\\Estoque\\SdEstq"  VSDGEMPRESA,Item,ano,mes To REG_SDESTQ
If RetVal
   Then Saldo=REG_SDESTQ["Saldo Atual"   ]
        UltCt=REG_SDESTQ["Preco de Custo"]
EndIf

Verifica_Almoxarifado(VSDGEMPRESA,Today())
If EMPRESA_ALMOXARIFADO <> "" And VSDGEMPRESA="0001"
   Then GetRecord "\\Sistemas\\Estoque\\SdEstq"  EMPRESA_ALMOXARIFADO,Item,ano,mes To REG_ALMOXARIFADO
        If RetVal
           Then Saldo = Saldo + REG_ALMOXARIFADO["Saldo Atual"]        
        EndIf
        Release Vars REG_ALMOXARIFADO
EndIf

st1=Completa(SubStr(Desc,1,30),30," ")+"  "+
    Item+Completa(" ",19," ")+ 
    Format("W16.2,EIC",PrUnit)
   
st2=SubStr(Compl,01,73)

st3=Completa("CBarras "+SubStr(Barra,1,13),24," ")+
    Completa("FtConver " +FtConv,19," ")+
    Completa("Embalagem "+FtEmb ,19," ")+
    "Vendagem "+Completa(vendagem,7," ")                

"+Chr(179)+"
st7="Docto/"+Format("W5,AL",TpDocto)+Chr(179)+" Entrada  "+Chr(179)+"   Qtde/"+UnEnt+""+Chr(179)+" Pr.Unitar"+Chr(179)+"Ft.Convers"+Chr(179)+"Ultima Cota‡Æo"
                                                                                                      ; FtConv/XX
    ;1234/123456789|99/99/9999|99.999,999|99.999,99|9.999,9/XX|99/99/9999 99.999,99

st8=Format("W11",NDocto)+Chr(179)+          
    format("W10,AR",Format("D13",DtComp))+Chr(179)
    
If Int(Qtd)-Qtd<>0
   then st8=st8+Format("W10.3,EIC",Qtd)+Chr(179) 
   else st8=st8+Format("W10  ,EIC",Qtd)+Chr(179) 
endif

st8=st8+ Format("W10.2,EIC",PrUnit)+Chr(179)

If Int(ftco)-ftco<>0
   then st8=st8+Format("W07.1,EIC",ftco)+"/"+UnInt+Chr(179)  
   else st8=st8+Format("W07  ,EIC",ftco)+"/"+UnInt+Chr(179)  
endif
st8=st8+Format("D13",Data_Ult_Cot)+" "+LTrim(Format("W10.2,EIC",VrUnit_Ult_Cot))

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

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

st9="Saldo Atual"+Chr(179)+"   Pedidos"+Chr(179)+"      =S-P"+Chr(179)+"   Compras"+Chr(179)+"  =(S-P)+C"+Chr(179)+"       Custo  "
st10=""
If Int(Saldo)-Saldo<>0
   Then st10=st10+Format("W11.3,EIC",Saldo)
   Else st10=st10+Format("W11  ,EIC",Saldo)
EndIf
st10=st10+Chr(179)
If Int(qtdpedidos)-qtdpedidos<>0
   Then st10=st10+Format("W10.3,EIC",qtdpedidos)
   Else st10=st10+Format("W10  ,EIC",qtdpedidos)
EndIf
st10=st10+Chr(179)
If Int(Saldo-qtdpedidos)-(saldo-qtdpedidos)<>0
   Then st10=st10+Format("W10.3,EIC",saldo-qtdpedidos)
   Else st10=st10+Format("W10  ,EIC",saldo-qtdpedidos)
EndIf
st10=st10+Chr(179)
If Int(qtdcompras)-qtdcompras<>0
   Then st10=st10+Format("W10.3,EIC",qtdcompras)
   Else st10=st10+Format("W10  ,EIC",qtdcompras)
EndIf
st10=st10+Chr(179)
If Int((Saldo-qtdpedidos)+qtdcompras)-((saldo-qtdpedidos)+qtdcompras)<>0
   Then st10=st10+Format("W10.3,EIC",(saldo-qtdpedidos)+qtdcompras)
   Else st10=st10+Format("W10  ,EIC",(saldo-qtdpedidos)+qtdcompras)
EndIf
st10=st10+Chr(179)
st10=st10+Format("W12.2,EIC",UltCt)+"  <=[ "+UnInt+" ]"

EndProc    ; (Mostra_Estoque)


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

Moveto "\\Sistemas\\Vendas\\PedidoI"
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

                  getrecord "\\Sistemas\\Vendas\\PedidoC" nped to regpedidoc
                  If RetVal
                     Then If regpedidoc["Codigo da Empresa"  ]=VSDGEMPRESA and
                             regpedidoc["Situacao do Pedido" ]="ABERTO"    and
                             ( Search("VEND",regpedidoc["Descricao da Destinacao"])>0 Or 
                               Search("SIMPLES REMESSA ENTR",regpedidoc["Descricao da Destinacao"])>0 )
                             Then pedok=True
                          EndIf
                  EndIf
          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,nped,pedok,regocc

Moveto "\\Sistemas\\Compras\\OCI"
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

                  getrecord "\\Sistemas\\Compras\\OCC" nped to regocc
                  If RetVal
                     Then If regocc["Codigo da Empresa"  ]=VSDGEMPRESA and
                             regocc["Situacao da OC"     ]="ABERTO"
                             Then pedok=True
                          EndIf
                  EndIf
          EndIf           
          If [Numero da OC]<>OC and pedOK And [Quantidade]>[Quantidade Entregue]
             Then qtdcompras=qtdcompras+(([Quantidade]-[Quantidade Entregue])*[Fator de Conversao]) 
          EndIf
					Skip
					If EOT()
						 Then QuitLoop
          EndIf
          Locate IndexOrder by "Ind_itcp" Next Item   
				EndWhile
EndIf

EndProc    ; (Monta_Compras)

;*******************************************************************************
;* Rotina de Entra Reajuste de Preco                                           *
;*******************************************************************************
Proc SD_Consulta1(Disparo,Campo,Evento,Elemento)
Private Disparo,Campo,Evento,Elemento,REGISTRO

Temp=True
TECLA="Esc=Retornar  "
MSGCAMPO=""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
           If Campo="I_UN_Item" 
             Then Seleciona_Opcoes("Unidade","F1_Temp")
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="I_Quantidade"     : CancelDialog
            Case Campo="I_UN_Item"        : Campo="I_Quantidade"
            Case Campo="I_Preco_Unitario" : Campo="I_UN_Item"     


          EndSwitch
     Case Evento["KeyCode"] = 13:      
          Temp=False
          Switch
            Case Campo="I_Quantidade"        : Campo="I_UN_Item"
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
            
            Case Campo="I_UN_Item"           :    
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 If Not IsBlank(VSD_I_UN_Item)
                    Then GetRecord "\\Sistemas\\Estoque\\Unidades" VSD_I_UN_Item To CODUN
                         If RetVal
                            Then VSD_I_UN_Item  = CODUN["Sigla da Unidade"]
                                 Campo          = "I_Preco_Unitario"
                            Else Mensagem("Unidade n„o Cadastrada !")
                                 VSD_I_UN_Item  = ""
                         EndIf   
                    Else Campo = "I_Preco_Unitario"     
                 EndIf
            
            Case Campo="I_Preco_Unitario"    : 
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")                                                
                 REGISTRO = Completa(SubStr(Array_Registro[Indice],1,54),55," ")
                 If Not IsBlank(VSD_I_UN_Item)
                    Then REGISTRO = REGISTRO+Completa(VSD_I_UN_Item,4," ")
                    Else REGISTRO = REGISTRO+SubStr(Array_Registro[Indice],56,04)
                 EndIf
                 If Not IsBlank(VSD_I_Quantidade)
                    Then REGISTRO = REGISTRO+Format("W8.1,EIC",VSD_I_Quantidade)+" "
                    Else REGISTRO = REGISTRO+SWCONS2_Pega_Valor_String("Quantidade",Indice)
                 EndIf   
                 
                 If Not IsBlank(VSD_I_Preco_Unitario)
                    Then REGISTRO = REGISTRO+Format("W9.2,EIC",VSD_I_Preco_Unitario)+" "
                    Else REGISTRO = REGISTRO+SWCONS2_Pega_Valor_String("Preco do Item",Indice)
                 EndIf
        
                 REGISTRO = REGISTRO+SWCONS2_Pega_Valor_String("Codigo do Item",Indice)
                 Array_Registro[Indice] = REGISTRO
                 
                 If VSD_I_Quantidade<>BlankNum() Or VSD_I_Preco_Unitario<>BlankNum()
                   Then Array_Registro[Indice] = SubStr(Array_Registro[Indice],1,59)+Format("W8.1,EIC",VSD_I_Quantidade)+" "+
                                                 Format("W9.2,EIC",VSD_I_Preco_Unitario)+" "+
                                                 SubStr(Array_Registro[Indice],79,Len(Array_Registro[Indice]))
                 EndIf
                 AcceptDialog
          EndSwitch
          RefreshDialog
   EndSwitch
EndIf

SelectControl Campo

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog

Return Temp
EndProc

;*******************************************************************************
;* Rotina Principal De Reajuste de Preco                                       *
;*******************************************************************************
Proc MudaPreco()
Private QTD,PRECO

Indice = ControlValue("TG_Registro")
QTD   = SWCONS2_Pega_Valor_String("Quantidade",Indice)
PRECO = SWCONS2_Pega_Valor_String("Preco do Item",Indice)
If QTD=""
   Then QTD = BlankNum()
   Else QTD = Format("W8.3",SWCONS2_Pega_Valor_String("Quantidade",Indice))
        PosI = Search(".",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        PosI = Search(",",QTD)
        If PosI>0
           Then QTD = SubStr(QTD,1,PosI-1)+"."+SubStr(QTD,PosI+1,Len(QTD))
        EndIf
        QTD = NumVal(QTD)    
EndIf   
If PRECO=""
   Then PRECO = BlankNum()
   Else PRECO = Format("W9.2",SWCONS2_Pega_Valor_String("Preco do Item",Indice))
        PosI = Search(".",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PosI = Search(",",PRECO)
        If PosI>0
           Then PRECO = SubStr(PRECO,1,PosI-1)+"."+SubStr(PRECO,PosI+1,Len(PRECO))
        EndIf
        PRECO = NumVal(PRECO)
EndIf

VSD_I_Quantidade     = QTD 
VSD_I_UN_Item        = Rtrim(SubStr(Array_Registro[Indice],56,04))
VSD_I_Preco_Unitario = PRECO

Showdialog "Informe os Valores" Proc "SD_Consulta1" 
  Trigger "OPEN","ARRIVE","UPDATE","CLOSE"
  Key "ENTER","ESC","INS","F8","F9","F1"
   @ 10,20 height 06 width 36

   Label  @ 01,00 "Quantidade" For "I_Quantidade"
   Accept @ 02,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   
   Label  @ 01,15 "UN" For "I_UN_Item"
   Accept @ 02,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   
   Label  @ 01,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 02,21 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario

Enddialog

EndProc

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

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

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

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

Temp=True
TECLA    =""
MSGCAMPO=""

If INICIO_DIALOG
   Then Campo="TG_Registro"
        INICIO_DIALOG=False 
        Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Mostra_Estoque()
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 SWCONS2_Limpa_Array_Registro("Cria Array")
EndIf

If Disparo="UPDATE" And Campo="TG_Registro"
   Then Temp=True
        Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
        Mostra_Estoque()
        Return Temp
EndIf

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   If Evento["KeyCode"] = -33 
      Then If Campo="TG_Registro"
              Then Echo Normal
                   Echo Off                                                
                   ShowPopup " Fun‡”es " CENTERED
                   "[F3] ~C~ompras                  "  : " Compras                     " : "F3",
                   "[F4] ~V~endas                   "  : " Vendas                      " : "F4",
                   "[F5] ~O~bserva‡äes do Item      "  : " Observa‡äes do Item         " : "F5",
                   "[F6] ~C~onsulta                 "  : " Consulta Itens              " : "F6",
                   "[F8] ~I~ncluir                  "  : " Incluir                     " : "F8",
                   "[F9] ~C~arregar Imagem          "  : " Carregar a Imagem do Produto" : "F9",
                   Separator,
                   "~C~ancelar                      " : " Cancelar a Opera‡„o          " : "CANCELAR"
                   EndMenu
                   To MenuVar
                   Echo Off
                  
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                      Then Temp=False
                      Else Switch
                             Case MenuVar = "F3" : Evento["KeyCode"] = -61
                             Case MenuVar = "F4" : Evento["KeyCode"] = -62
                             Case MenuVar = "F6" : Evento["KeyCode"] = -64
                             Case MenuVar = "F8" : Evento["KeyCode"] = -66
                             Case MenuVar = "F9" : Evento["KeyCode"] = -67
                           EndSwitch  
                   EndIf
           EndIf    
    EndIf
    Switch
     Case Evento["KeyCode"] = 9 Or Evento["KeyCode"] = -15:
          Temp=False 
     Case Evento["KeyCode"] =  -67 And Campo="TG_Registro":
          Temp=False
          If PARAM_IMAGEM
            Then 
                 Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
                 GetRecord "\\Sistemas\\Estoque\\Iten_eco" item To REG_ITENECO
                 If RetVal
                    Then If REG_ITENECO["Link_Imagem"] = ""
                            Then Mensagem("Caminho da imagem ‚ inv lido!")
                            Else IMAGEPATH = REG_ITENECO["Link_Imagem"] 
                                 ExecVise("EXE c:\\vise\\ImageGlass\\ImageGlass.exe "+IMAGEPATH) 
                         EndIf   
                    Else Mensagem("N„o foi localizado imagem do produto "+item+"!")
                 EndIf 
            Else Mensagem("Op‡„o n„o liberada !//Verificar com o Suporte Vise !")     
          EndIf                  
     Case Evento["KeyCode"] = -66:
          MSG="Deseja realmente Incluir os itens ?"
          If Not ConfGeral(MSG)
             Then Return
             Else CoeditKey
                  
                  ;---- Inclui, atualizando os itens da lista de consulta "F6" ------
                  For i From 1 To DynArraySize(Array_Registro) 
                    AUX_ITEM = SWCONS2_Pega_Valor_String("Codigo do Item",i)
                    Moveto [Codigo do Item]
                    OrderTable {Ind_itcp}
                    Locate IndexOrder by "Ind_itcp" AUX_ITEM,OC
                    If RetVal
                       Then Del 
                    EndIf
                  EndFor                 
                  
                  For i From 1 to DynArraySize(Array_Registro)
                    Item=SWCONS2_Pega_Valor_String("Codigo do Item",i) 
                    Quant_item = SWCONS2_Pega_Valor_String("Quantidade2",i)
                    Preco_item = ConvertStrNum(SWCONS2_Pega_Valor_String("Preco do Item",i))
                    Un_item    = SWCONS2_Pega_Valor_String("Unidade",i)
                    CHAVEI=1
                    If Quant_item <> 0.000
                       Then 
                            Moveto "\\Sistemas\\Estoque\\Cotacao"
                            Moveto [Codigo do Item]
                            Locate Item,CODIGO
                            If RetVal
                               Then Moveto "Occ"
                                    Moveto [Numero da OC]
                                    Locate OC
                                    
                                    
                                    KeyPress "F7"
                                    
                                    
                                    ; 
                                    IsLockRecord()
                                    Moveto "Oci"
                            
                                    If Item="" Then QuitLoop EndIf
                                    While True
                                      Moveto [Item da OC]
                                      End
                                      NITEM = [Item da OC]
                                      Down
                                      Moveto [Item da OC]
                                      Seta_Sequencia(NITEM,False)
                                      If IsLockRecord()
                                         Then Del
                                              Loop
                                      EndIf
                                      QuitLoop
                                    EndWhile
                                    If Not Seta_Sequencia(NITEM,True)
                                       Then Del
                                            QuitLoop
                                    EndIf
                                    
                                    SEQIT=[Item da OC]
                                    [Numero da OC            ]=OC
                                    [Item da OC              ]=SEQIT
                                    [Codigo da Empresa       ]=VSDGEMPRESA
                                    [Codigo do Item          ]=Item
                                    [Quantidade              ]=Quant_item
                                    [Unidade Fiscal          ]=Un_item
                                    [Preco Unitario          ]=Preco_item 
                                    [Preco Total             ]=Quant_item*Preco_item 
                                    [Custo Medio Unitario    ]=[\Sistemas\Estoque\Cotacao->Custo Medio Unitario]
                                    [Tributacao de IPI       ]=[\Sistemas\Estoque\Cotacao->Tributacao de IPI]
                                    [Aliquota Reduzida BCIPI ]=[\Sistemas\Estoque\Cotacao->Aliquota Reduzida BCIPI]
                                    [Aliquota de IPI         ]=[\Sistemas\Estoque\Cotacao->Aliquota de IPI]
                                    [Tributacao de ICMS      ]=[\Sistemas\Estoque\Cotacao->Tributacao de ICMS]
                                    [Aliquota Reduzida BCICMS]=[\Sistemas\Estoque\Cotacao->Aliquota Reduzida BCICMS]
                                    [Aliquota de ICMS        ]=[\Sistemas\Estoque\Cotacao->Aliquota de ICMS]
                                    [Fator de Conversao      ]=[\Sistemas\Estoque\Cotacao->Fator de Conversao]
                                    [Unidade Interna         ]=[\Sistemas\Estoque\Cotacao->Unidade Interna]
                                    [CFO                     ]=[\Sistemas\Estoque\Cotacao->CFO]
                                    [Tipo Tributacao         ]=[\Sistemas\Estoque\Cotacao->Tipo Tributacao]
                                    [IPI_CST                 ]=[\Sistemas\Estoque\Cotacao->IPI_CST]
                                    
                                    UnlockRecord
                                    Item_Ins_Consulta=True
                                    
                                    FormKey
                       EndIf
                    EndIf
                 EndFor
                 AcceptDialog
                 Do_it!
          EndIf
     Case Evento["KeyCode"] = -61:  
          Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          Play "sw_consc"

     Case Evento["KeyCode"] = -62:  
          Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          Play "sw_consv"

     Case Evento["KeyCode"] =  -63:
          Temp=False
          Item=SWCONS2_Pega_Valor_String("Codigo do Item",ControlValue("TG_Registro"))
          Desc=SWCONS2_Pega_Valor_String("Descricao",ControlValue("TG_Registro"))
          Observacao2()

     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_Registro"   :   
                 MSG="Deseja sair sem Incluir os itens ?"
                 If Not ConfGeral(MSG)
                    Then Return  
                 EndIf 
                 SWCONS2_Limpa_Array_Registro("Cria Array")
                 CHAVEI=1 
                 CancelDialog
          EndSwitch

     Case Evento["KeyCode"] =  13:  
          Temp=False
          MudaPreco()  
   EndSwitch
EndIf

SelectControl Campo
Switch
  Case Campo="TG_Registro":
       MSGCAMPO=Format("W5",WCSW_NITENS)+" iten(s)                                      "
       TECLA="Esc=Retornar  =Selecionar  Enter=Incluir Quant/UN/Valor  Alt+F=Fun‡”es"
EndSwitch

MontaRodapeSD(MSGCAMPO, TECLA)
RefreshDialog

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("| "+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 Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametrossw()

PARAM_TODAS_COMPRAS = False
PARAM_NMES_CONSULTA = 0

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

Release Vars REG_SW
EndProc ;Carrega_Parametrossw()

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

Carrega_Parametrossw()

PARAM_IMAGEM = False
If SYS_CODIGO_CLIENTE="0294"
   Then PARAM_IMAGEM = True
EndIf

DynArray Array_Registro[]

INICIO_DIALOG = True
WCSW_NITENS   = 0

st1           = ""
st2           = ""
st3           = ""
st4           = ""
st5           = ""
st6           = ""
st7           = ""
st8           = ""
st9           = ""
st10          = ""
tit = "Descri‡„o do Item                 Cod. Item Fornecedor Un       Qtd    PrUnit"
;      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 99999999999999999999 AA  99.999.9 99.999.99
Sw_Item_Pesquisado = ""

while true
  If Not Seleciona()
     Then quitloop
  EndIf   
  
  ShowDialog "Consulta de Itens do Fornecedor" Proc "SD_Consulta"
   Trigger "OPEN","ARRIVE","UPDATE","CLOSE"
   Mouse "DOWN"
    Key "F1","ENTER","ESC","ClearArea","F8","F9","F5","TAB","ReverseTab",-61,-62,-33,-67,-63
 
 @ 01,00   Height 24 Width 82

  @ 00,00 ?? Format("W80,AC","[ Consulta de Itens do Fornecedor ]")   
  
    @ 01,00 ?? tit
    PickDynArray @02,-1 Height 12 width 80
     Columns 1
      Array_Registro
       Tag "TG_Registro"
        To ArrayElement
  
     @ 14,00 ?? st1
     @ 15,00 ?? st2
     @ 16,00 ?? st3
     PaintCanvas Attribute 111 14, 00, 16, 79

     PaintCanvas Attribute  96 16, 00, 16, 06
     PaintCanvas Attribute  96 16, 24, 16, 31
     PaintCanvas Attribute  96 16, 42, 16, 51
     PaintCanvas Attribute  96 16, 61, 16, 69

     
     @ 17,00 ?? "éltima Compra/Cota‡Æo"
     @ 18,00 ?? st7
     @ 19,00 ?? st8
     @ 20,00 ?? st9
     @ 21,00 ?? st10
     
     PaintCanvas Attribute 111 18, 00, 19, 79
  
     PaintCanvas Attribute  96 18, 00, 18, 05
     PaintCanvas Attribute  96 18, 10, 18, 30
     
     PaintCanvas Attribute  96 18, 33, 18, 79

     PaintCanvas Attribute  96 19, 11, 19, 11
     PaintCanvas Attribute  96 19, 22, 19, 22
     PaintCanvas Attribute  96 19, 33, 19, 33
     PaintCanvas Attribute  96 19, 44, 19, 44
     PaintCanvas Attribute  96 19, 55, 19, 55

     PaintCanvas Attribute 128 20, 00, 20, 79

     PaintCanvas Attribute 139 20, 00, 20, 00
     PaintCanvas Attribute 139 20, 17, 20, 17

     PaintCanvas Attribute 139 20, 30, 20, 30
     PaintCanvas Attribute 139 20, 32, 20, 32

     PaintCanvas Attribute 139 20, 37, 20, 37

     PaintCanvas Attribute 139 20, 49, 20, 49
     PaintCanvas Attribute 139 20, 51, 20, 51
     PaintCanvas Attribute 139 20, 54, 20, 54

     PaintCanvas Attribute 139 21, 00, 21, 79
     PaintCanvas Attribute 128 21, 11, 21, 11
     PaintCanvas Attribute 128 21, 22, 21, 22
     PaintCanvas Attribute 128 21, 33, 21, 33
     PaintCanvas Attribute 128 21, 44, 21, 44
     PaintCanvas Attribute 128 21, 55, 21, 55
  
  EndDialog
  Message("")
  
  quitloop
endwhile

Moveto "Occ"
CoEditKey

Release Vars Array_Registro,
             Item,Desc,Forn,
             WinArray5,Janela,MsgCampo,Tecla, Open_Tabelas,
             CondPg, PrItem, sw_tabant,
             ArrayLista
             
Release Procs Seleciona,SD_Consulta,Mostra_Estoque,Monta_Prompt,
              Monta_CondPg, Seleciona_CondPg, CondPg_Dialog,
              Lista_Dialog, Ver_Lista, Verifica_Item, monta_lista, Carrega_Parametrossw,
              Ordena_DynArray, Observacao2,SWCONS2_Pega_Valor_String
