#Include 'Protheus.ch' User Function SJTelaDes() Local nI := 0 Local aGrpUsu := UsrRetGrp() //Pega os grupos do usuario Local cCodOp := Space(11) Local cCodPro := Space(20) Local cDesPro := "" Local cCodDoc := Space(09) Local oMenu Local oTMenuIte1 Local oTMenuIte2 Local oTButton //Objetos e componentes gerais Private oTimer Private oDlgPrinc Private oFwLayer Private oPanGrid1 Private oPanGrid2 Private oTempTable Private cMascara := "@E 999,999,999,999,999.99" //Cabeçalho Private oSayOP, oGetOP Private oBtnSair Private oBtnCopy Private oBtnGrav Private oBtnCons //Tamanho da janela Private aSize := MsAdvSize(.F.) Private nJanLarg := aSize[5] Private nJanAltu := aSize[6] //Fontes Private cFontUti := "Tahoma" Private oFontBtn := TFont():New(cFontUti, , -14) Private oFontSay := TFont():New(cFontUti, , -12) //Grid Private aCampos := {} Private aColGrid1 := {} //Colunas da Grid 1 Private aColGrid2 := {} //Colunas da Grid 2 Private oMarkBrowse //Cria tabela temporaria SFCriaTab() //Busca as colunas do browse SFCriaCols() //Cria a janela DEFINE MSDIALOG oDlgPrinc TITLE "Desmontagem Produtos" FROM 0,0 TO nJanAltu,nJanLarg PIXEL //Criando a camada oFwLayer := FwLayer():New() oFwLayer:Init(oDlgPrinc,.F.) //Adicionando 3 linhas, a de título, a superior e a do calendário oFWLayer:addLine("TITULO",015,.T.) oFWLayer:addLine("CORPO" ,085,.T.) //Adicionando as colunas das linhas oFWLayer:addCollumn("HEADERTEXT",070,.T.,"TITULO") oFWLayer:addCollumn("BLANKBTN" ,030,.T.,"TITULO") oFWLayer:addCollumn("BLANKANTES" ,001,.T.,"CORPO") oFWLayer:addCollumn("COLGRID1" ,049,.T.,"CORPO") //Coluna da grid 1 oFWLayer:addCollumn("COLGRID2" ,049,.T.,"CORPO") //Coluna da grid 2 oFWLayer:addCollumn("BLANKDEPOIS",001,.T.,"CORPO") //Criando os paineis oPanHeader := oFWLayer:GetColPanel("HEADERTEXT","TITULO") oPanSair := oFWLayer:GetColPanel("BLANKBTN" ,"TITULO") oPanGrid1 := oFWLayer:GetColPanel("COLGRID1" ,"CORPO") oPanGrid2 := oFWLayer:GetColPanel("COLGRID2" ,"CORPO") //Cabeçalho cDesPro := Alltrim(Posicione("SB1",1,xFilial("SB1")+cCodPro,"B1_DESC")) oSayOP := TSay():New(006,003,{|| "Ordem Produção:"},oPanHeader,"",oFontSay,,,,.T.,,,200,30,,,,,,.F.,,) oGetOP := TGet():New(004,052,{|u| IIF(PCount() > 0,cCodOp := u,cCodOp)},,80,10,,,,,oFontSay,,,.T.) oSayDoc := TSay():New(006,150,{|| "Documento:"},oPanHeader,"",oFontSay,,,,.T.,,,200,30,,,,,,.F.,,) oGetDoc := TGet():New(004,189,{|u| IIF(PCount() > 0,cCodDoc := u,cCodDoc)},,80,10,,,,,oFontSay,,,.T.) oSayPro := TSay():New(020,003,{|| "Produto:"},oPanHeader,"",oFontSay,,,,.T.,,,200,30,,,,,,.F.,,) oGetPro := TGet():New(018,052,{|u| IIF(PCount() > 0,cCodPro := u,cCodPro)},,80,10,,,,,oFontSay,,,.T.) oSayDoc := TSay():New(020,150,{|| "Descrição:"},oPanHeader,"",oFontSay,,,,.T.,,,200,30,,,,,,.F.,,) oGetDoc := TGet():New(018,189,{|u| IIF(PCount() > 0,cDesPro := u,cDesPro)},,350,10,,,,,oFontSay,,,.T.) //Cria Menu oMenu := TMenu():New(003,040,050,012,.T.) oTMenuIte1 := TMenuItem():New(oDlgPrinc,"Consultar",,,,{|| SFConsult(cCodOp)},,,,,,,,,.T.) oTMenuIte2 := TMenuItem():New(oDlgPrinc,"Copiar" ,,,,{|| SFCopy()} ,,,,,,,,,.T.) oMenu:Add(oTMenuIte1) oMenu:Add(oTMenuIte2) //Criando os botões //oBtnCons := TButton():New(003,000,"Consultar",oPanSair,{|| SFCopy()},050,012,,oFontBtn,,.T.,,,,,,) //oBtnCopy := TButton():New(003,040,"Copiar" ,oPanSair,{|| SFCopy()},050,012,,oFontBtn,,.T.,,,,,,) oTButton := TButton():New(003,040,"Outras Ações",oPanSair,{||} ,050,012,,oFontBtn,,.T.,,,,,,) oBtnGrav := TButton():New(003,095,"Confirmar" ,oPanSair,{|| SFGrava()},050,012,,oFontBtn,,.T.,,,,,,) oBtnSair := TButton():New(003,150,"Fechar" ,oPanSair,{|| oDlgPrinc:End()},050,012,,oFontBtn,,.T.,,,,,,) // Define botão no Menu oTButton:SetPopupMenu(oMenu) //Cria a grid 1 oMarkBrowse := FWMarkBrowse():New() oMarkBrowse:SetAlias("TRB1") oMarkBrowse:DisableFilter() oMarkBrowse:DisableConfig() oMarkBrowse:DisableReport() oMarkBrowse:DisableSeek() oMarkBrowse:DisableSaveConfig() oMarkBrowse:SetFontBrowse(oFontSay) oMarkBrowse:SetFieldMark('OK') oMarkBrowse:SetTemporary(.T.) oMarkBrowse:SetColumns(aColGrid1) oMarkBrowse:SetOwner(oPanGrid1) oMarkBrowse:Activate() oMarkBrowse:Refresh(.T.) //Cria a grid 2 oMarkBrowse := FWMarkBrowse():New() oMarkBrowse:SetAlias("TRB2") oMarkBrowse:DisableFilter() oMarkBrowse:DisableConfig() oMarkBrowse:DisableReport() oMarkBrowse:DisableSeek() oMarkBrowse:DisableSaveConfig() oMarkBrowse:SetFontBrowse(oFontSay) oMarkBrowse:SetFieldMark('OK') oMarkBrowse:SetTemporary(.T.) oMarkBrowse:SetColumns(aColGrid2) oMarkBrowse:SetOwner(oPanGrid2) oMarkBrowse:Activate() Activate MsDialog oDlgPrinc Centered oTempTable:Delete() Return /**************************************************************************/ /*** Descrição: Rotina para criar tabela temporária ***/ /**************************************************************************/ Static Function SFCriaTab() //Adiciona as colunas que serão criadas na temporária aAdd(aCampos,{"OK" ,"C",2 ,0}) aAdd(aCampos,{"CODPRO" ,"C",30,0}) aAdd(aCampos,{"DESPRO" ,"C",50,0}) aAdd(aCampos,{"QUANT" ,"N",18,2}) aAdd(aCampos,{"ARMAZEM" ,"C",2 ,0}) //Cria a tabela temporária oTempTable:= FWTemporaryTable():New("TRB1") oTempTable:SetFields(aCampos) oTempTable:Create() oTempTable:= FWTemporaryTable():New("TRB2") oTempTable:SetFields(aCampos) oTempTable:Create() Return /**************************************************************************/ /*** Descrição: Rotina para adicionar os campos no Browse da Grid ***/ /**************************************************************************/ Static Function SFCriaCols() Local nAtual := 0 Local aEstrut := {} Local oColumn //Adicionando campos que serão mostrados na tela //[1] - Campo da Temporaria //[2] - Titulo //[3] - Tipo //[4] - Tamanho //[5] - Decimais //[6] - Máscara aAdd(aEstrut,{"CODPRO" ,"Produto" ,"C",30,0,""}) aAdd(aEstrut,{"DESPRO" ,"Desc.Prod.","C",50,0,""}) aAdd(aEstrut,{"QUANT" ,"Quantidade","N",18,2,cMascara}) aAdd(aEstrut,{"ARMAZEM","Armazem" ,"C",2 ,0,""}) //Percorrendo todos os campos da estrutura For nAtual := 1 To Len(aEstrut) //Cria a coluna oColumn := FWBrwColumn():New() oColumn:SetData(&("{|| TRB1->" + aEstrut[nAtual][1] +"}")) oColumn:SetTitle(aEstrut[nAtual][2]) oColumn:SetType(aEstrut[nAtual][3]) oColumn:SetSize(aEstrut[nAtual][4]) oColumn:SetDecimal(aEstrut[nAtual][5]) oColumn:SetPicture(aEstrut[nAtual][6]) //Adiciona a coluna aAdd(aColGrid1,oColumn) oColumn := FWBrwColumn():New() oColumn:SetData(&("{|| TRB2->" + aEstrut[nAtual][1] +"}")) oColumn:SetTitle(aEstrut[nAtual][2]) oColumn:SetType(aEstrut[nAtual][3]) oColumn:SetSize(aEstrut[nAtual][4]) oColumn:SetDecimal(aEstrut[nAtual][5]) oColumn:SetPicture(aEstrut[nAtual][6]) aAdd(aColGrid2,oColumn) Next Return /**************************************************************************/ /*** Descrição: Rotina para carregar as informações da OP antiga ***/ /**************************************************************************/ Static Function SFConsult(cCodOp) Local cQuery := "" cQuery := "SELECT D3_COD, B1_DESC, D3_QUANT, D3_LOCAL " cQuery += "FROM "+ RetSqlName("SD3") +" SD3 " cQuery += "JOIN "+ RetSqlName("SB1") +" SB1 ON B1_FILIAL = '"+ xFilial("SB1") +"' AND SB1.B1_COD = SD3.D3_COD " cQuery += " AND SB1.B1_MSBLQL = '2' AND SB1.D_E_L_E_T_ = '' " cQuery += "WHERE SD3.D3_FILIAL = '"+ xFilial("SD3") +"' " cQuery += "AND SD3.D3_OP = '"+ cCodOp +"' " cQuery += "AND SD3.D3_TM <> '010' AND SD3.D_E_L_E_T_ = '' " cQuery := ChangeQuery(cQuery) dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"QRY",.T.,.T.) While QRY->(!EoF()) RecLock("TRB1", .T.) TRB1->OK := "" TRB1->CODPRO := QRY->D3_COD TRB1->DESPRO := QRY->B1_DESC TRB1->QUANT := QRY->D3_QUANT TRB1->ARMAZEM := QRY->D3_LOCAL TRB1->(MsUnlock()) QRY->(DbSkip()) EndDo QRY->(dbCloseArea()) oMarkBrowse:Refresh(.T.) oPanGrid1:Refresh(.T.) Return /**************************************************************************/ /*** Descrição: Rotina para copiar os dados da OP antiga para a Nova OP ***/ /**************************************************************************/ Static Function SFCopy() MsgStop("Copiar dados!") Return /**************************************************************************/ /*** Descrição: Rotina para criar a nova OP de acordo com os empenhos ***/ /**************************************************************************/ Static Function SFGrava() MsgStop("Gravar dados!") Return