#include "PROTHEUS.CH" #include "RWMAKE.CH" #include "APWEBEX.CH" #include "TOPCONN.CH" #include "TBICONN.CH" /*__________________________________________________________________________ ����������������������������������������������������������������������������� ��+-----------------------------------------------------------------------+�� ���Fun��o � Estoque � Autor � Lucilene Mendes � Data �17.07.19 ��� ��+----------+------------------------------------------------------------��� ���Descri��o � Grid com o estoque de itens por tabela de pre�o. ��� ��+-----------------------------------------------------------------------+�� ����������������������������������������������������������������������������� ���������������������������������������������������������������������������*/ User Function Estoque() Local cHtml Local cArmazem := "" //Local cVend := HttpSession->CodVend Local cTabela := "" Local cGrupoP := "" Local cTpCli := "" Local i := 0 Local cCliSel := "" Local cOport := "" Local cUfEntr := "" Local cUFFat := "" Local cMunEnt := "" Local cTipoProd := "" Local cGrupoProd:= "" Local nPrcVen := 0 Private oObjLog := nil Private aMunic := {} Private cColunas:= "" Private cItens := "" Private cTopo := "" Private cSite := "u_PortalLogin.apw" Private cPagina := "Consulta de Pre�o" Private cTitle := "" Private lTableTools:= .T. Private lSidebar:= .F. Private cCodLogin := "" Private cVendLogin:= "" Web Extended Init cHtml Start U_inSite() oObjLog:= LogSMS():new() oObjLog:setFileName("\temp\"+Procname()+"_"+dtos(date())+".txt") cVendLogin := u_GetUsrPR() cCodLogin := U_SetParPR(cVendLogin) If Empty(HttpSession->CodVend) cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">' Return cHtml Else If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend HttpSession->CodVend:= HttpSession->Superv Endif Endif // Pega do par�metro com o Titulo do Portal cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS") // Define a funcao a ser chama no link cSite := "u_SMSPortal.apw?PR="+cCodLogin // Monta o cabe�alho para a pagina cHeader := U_PSHeader(cTitle, cSite) //Fun��o que atualiza os menus cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin) //Armaz�ns considerados para busca do estoque //@Todo - Ainda precisa? cArmazem:= GetNewPar("PR_ARMZPR","'01'") //deve estar no formato '01','02' //Tipos de produto que devem ser exibidos na consulta cTipoProd:= GetNewPar("PR_TPPROD","PA|RE") //Grupos de produto que devem ser exibidos na consulta cGrupoProd:= GetNewPar("PR_GRPPROD","PE|PEL") If type("HttpPost->FILTROP") <> "U" if !empty(HttpPost->FILTROP) cTabela := Alltrim(HttpPost->FILTROP)//@Todo - Valor fixado em 001 //cGrupoP := HttpPost->GRUPOP cOport := Alltrim(HttpPost->OPORTUN) cUFEntr := Alltrim(HttpPost->EST_ENTRE) cUFFat := Alltrim(HttpPost->EST_FAT) cMunEnt := Alltrim(HttpPost->MUN_ENTRE) cTpCli := Alltrim(HttpPost->TPCLI) if !empty(Alltrim(HttpPost->CLIENTE)) cCliSel := Alltrim(HttpPost->CLIENTE) else cCliSel := RetCli(cUFFat,cTpCli)//Usuario n�o preencheu o campo do cliente endif endif endif cQuery := " Select A1_COD, A1_LOJA, A1_NOME,A1_TIPO,A1_EST,A1_MUN,A1_GRPTRIB" cQuery += " From "+RetSqlName("SA1")+" SA1 " cQuery += " Where A1_FILIAL = '"+xFilial("SA1")+"' " cQuery += " And A1_MSBLQL <> '1'" cQuery += " AND A1_VEND = '"+cVendLogin+"' " if !empty(cCliSel)//Ao entrar na rotina, n�o estava vindo nenhum cliente para sele��o if !empty(Alltrim(HttpPost->CLIENTE)) cQuery += " AND A1_COD = '"+SubStr(cCliSel,1,len(cCliSel)-2)+"' " endif endif cQuery += " And SA1.D_E_L_E_T_ = ' ' " cQuery += " Order by A1_COD " If Select("QRY") > 0 QRY->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQuery),"QRY",.T.) //Query das oportunidades cQuery := " Select AD1_NROPOR,AD1_REVISA, AD1_DESCRI, AD1_DESCCI, AD1_NOMPAR" cQuery += " From "+RetSqlName("AD1")+" AD1 " cQuery += " Where AD1_FILIAL = '"+xFilial("AD1")+"' " cQuery += " And AD1_HOMOLO = '3' " //Status homologa��o = homologado cQuery += " And AD1.D_E_L_E_T_ = ' ' " cQuery += " Order by AD1_NROPOR " If Select("QRYAD1") > 0 QRYAD1->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQuery),"QRYAD1",.T.) //Query dos grupos de produtos /*cQuery := " Select BM_GRUPO,BM_DESC" cQuery += " From "+RetSqlName("SBM")+" SBM " cQuery += " Where BM_FILIAL = '"+xFilial("SBM")+"' " cQuery += " And BM_GRUPO NOT IN ('PE') AND BM_MSBLQL <> '1' AND SBM.D_E_L_E_T_ = ' ' " cQuery += " Order by BM_GRUPO " If Select("QRYSBM") > 0 QRYSBM->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQuery),"QRYSBM",.T.) */ aTpCli := {{"F","Cons. Final"},{"L","Prod. Rural"},{"R","Revendedor"},{"S","Solidario"},{"X","Exportacao"}} aEstados := {"AC","AL","AM","AP","BA","CE","DF","ES","EX","GO","MA","MG","MS","MT","PA","PB","PI","PR","RJ","RN","RO","RR","RS","SC","SE","SP","TO"} aMunicipio := {} cTopo := '<form name="formGrid" id="formGrid" method="POST" action="U_Estoque.apw?PR=' + cCodLogin + '">' //1� Linha //-----------------------CLIENTE--------------------- cTopo += ' <div class="row form-group">' cTopo += ' <div class="col-12">' cTopo += ' <label class="col-md-1 control-label">Cliente:</label>' cTopo += ' <div class="col-md-8">' cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'" cTopo += ' { "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"+' name="CLIENTE" id="CLIENTE" ' cTopo += ' onchange="javascript:SelectCli()" > ' if empty(cCliSel) .or. empty(Alltrim(HttpPost->CLIENTE)) cTopo += ' <option value=""> </option>' endif While !QRY->(EOF()) cTopo += ' <option value="' + Alltrim(QRY->A1_COD + QRY->A1_LOJA) ; + '" TIPO="'+QRY->A1_TIPO+'" EST="'+QRY->A1_EST+'" ESTE="'+QRY->A1_EST+'" MUN="'+QRY->A1_MUN+'" >' ; + QRY->A1_COD + '/' + QRY->A1_LOJA + ' - ' + Alltrim(QRY->A1_NOME) + '</option>' QRY->(dbSkip()) End cTopo += ' </select>' cTopo += ' </div>' //-----------------------TIPO DO CLIENTE--------------------- cTopo += ' <label class="col-md-1 control-label text-right">Tipo:</label>' cTopo += ' <div class="col-md-2">' cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"' cTopo += ' name="TPCLI" id="TPCLI">' if Empty(cTpCli) cTopo += ' <option value=""> </option>' else cTopo += ' <option value="' + aTpCli[aScan(aTpCli,{|x| alltrim(x[1]) == cTpCli}), 1] + '">' + aTpCli[aScan(aTpCli,{|x| alltrim(x[1]) == cTpCli}), 2] + '</option>' endif for i := 1 to Len(aTpCli) cTopo += ' <option value="' + aTpCli[i, 1] + '">' + aTpCli[i, 2] + '</option>' Next cTopo += ' </select>' cTopo += ' </div>' cTopo += ' </div>' cTopo += ' </div>' //2� Linha //-----------------------ESTADO FATURAMENTO--------------------- cTopo += ' <div class="row form-group">' cTopo += ' <label class="col-md-2 control-label">Estado Faturamento:</label>' cTopo += ' <div class="col-md-2">' cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"' cTopo += ' name="EST_FAT" id="EST_FAT">' if Empty(cUFFat) cTopo += ' <option value=""> </option>' else cTopo += ' <option value="' + aEstados[aScan(aEstados,cUFFat)] + '">' + aEstados[aScan(aEstados,cUFFat)] + '</option>' endif for i := 1 to Len(aEstados) cTopo += ' <option value="' + aEstados[i] + '">' + aEstados[i] + '</option>' Next cTopo += ' </select>' cTopo += ' </div>' //-----------------------ESTADO ENTREGA--------------------- cTopo += ' <label class="col-md-1 control-label">Estado Entrega:</label>' cTopo += ' <div class="col-md-2">' cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"' cTopo += ' name="EST_ENTRE" id="EST_ENTRE" onchange="javascript:retMunicipios('+"'"+cMunEnt+"'"+')">' if empty(cUfEntr) cTopo += ' <option value=""> </option>' else cTopo += ' <option value="' + aEstados[aScan(aEstados,cUfEntr)] + '">' + aEstados[aScan(aEstados,cUfEntr)] + '</option>' endif for i := 1 to Len(aEstados) cTopo += ' <option value="' + aEstados[i] + '">' + aEstados[i] + '</option>' Next cTopo += ' </select>' cTopo += ' </div>' //-----------------------MUNICIPIO ENTREGA--------------------- cTopo += ' <label class="col-md-1 control-label">Munic�pio Entrega:</label>' cTopo += ' <div class="col-md-4">' cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"' cTopo += ' name="MUN_ENTRE" id="MUN_ENTRE">' if empty(cMunEnt) cTopo += ' <option value=""> </option>' else cTopo += u_retMun(cCliSel,cUFEntr) endif cTopo += ' </select>' cTopo += ' </div>' cTopo += ' </div>' //3� Linha //-----------------------OPORTUNIDADE--------------------- cTopo += ' <div class="row form-group">' cTopo += ' <label class="col-md-2 control-label text-left">Oportunidade:</label>' cTopo += ' <div class="col-md-4">' cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'" cTopo += ' { "placeholder": "Selecione a oportunidade", "allowClear": false }'+"'"+' name="OPORTUN" id="OPORTUN" >' if Empty(cOport) cTopo += ' <option value=""> </option>' else If cOport = 'ZZZZZZ' cTopo += ' <option value="ZZZZZZ">ZZZZZZ - SEM OPORTUNIDADE </option>' Else cTopo += ' <option value="' + Alltrim(cOport)+'">'+cOport+'/'+Alltrim(GetAdvfVal("AD1","AD1_REVISA",xFilial("AD1")+cOport,1))+'/'+; Alltrim(GetAdvfVal("AD1","AD1_DESCRI",xFilial("AD1")+cOport,1))+'/'+Alltrim(GetAdvfVal("AD1","AD1_DESCCI",xFilial("AD1")+cOport,1))+'/'+; Alltrim(GetAdvfVal("AD1","AD1_NOMPAR",xFilial("AD1")+cOport,1))+'</option>' Endif endif cTopo += ' <option value="ZZZZZZ">ZZZZZZ - SEM OPORTUNIDADE </option>' While !QRYAD1->(EOF()) If Alltrim(QRYAD1->AD1_NROPOR) <> cOport cTopo += ' <option value="' + Alltrim(QRYAD1->AD1_NROPOR)+'">'+QRYAD1->AD1_NROPOR+'/'+Alltrim(QRYAD1->AD1_REVISA)+'/'+; Alltrim(QRYAD1->AD1_DESCRI)+'/'+Alltrim(QRYAD1->AD1_DESCCI)+'/'+Alltrim(QRYAD1->AD1_NOMPAR)+'</option>' Endif QRYAD1->(dbSkip()) End cTopo += ' </select>' cTopo += ' </div>' //-----------------------GRUPO PRODUTO--------------------- //cTopo += ' <div class="row form-group">' /* cTopo += ' <label class="col-md-1 control-label">Grupo:</label>' cTopo += ' <input type="hidden" name="GRUPOP" id="GRUPOP" value="" />' cTopo += ' <div class="col-md-5">' cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'" cTopo += ' { "placeholder": "Selecione a oportunidade", "allowClear": false }'+"'"+' name="GRUP_PROD" id="GRUP_PROD"> ' if empty(cGrupoP) cTopo += ' <option value=""> </option>' else cTopo += ' <option value="' + Alltrim(cGrupoP)+'">'+cGrupoP + ' - ' + GetAdvfVal("SBM","BM_DESC",xFilial("SBM")+cGrupoP,1)+'</option>' endif While !QRYSBM->(EOF()) cTopo += ' <option value="' + Alltrim(QRYSBM->BM_GRUPO)+'">'+QRYSBM->BM_GRUPO + ' - ' + Alltrim(QRYSBM->BM_DESC) +'</option>' QRYSBM->(dbSkip()) End cTopo += ' </select>' cTopo += ' </div>' */ cTopo += ' </div>' //-----------------------BOTAO BUSCAR--------------------- cTopo += ' <br>' cTopo += ' <div class="row form-group text-center">' cTopo += ' <input type="hidden" name="FILTROP" id="FILTROP" value="" />' //cTopo += ' <div class="col-md-5" offset-2 style="text-align: right">' cTopo += '<input class="btn btn-primary" type="button" id="btFiltro" name="btFiltro" value="Consultar" onclick="this.value= ' + "'Consultando...'" + ';Filtro()" />'+chr(13)+chr(10) //cTopo += ' </div>' cTopo += ' </div>' cTopo += '</form>' APWExCloseQuery('QRY') cColunas+='<th>C�digo</th>' cColunas+='<th>Descri��o</th>' cColunas+='<th>Qtd Dispon�vel</th>' cColunas+='<th>Pre�o de Venda</th>' conout("Antes query: "+Time()) if !empty(cTabela) cQry := "SELECT CODIGO,PRODUTO,sum(SALDO_ATUAL) SALDO " cQry += "FROM V_BI_ESTQ_01_SEM_DONO " cQry += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_COD = CODIGO AND SB1.D_E_L_E_T_ = ' ' " cQry += " AND B1_TIPO IN ('PA','RE') " cQry += " AND B1_MSBLQL <> '1' " cQry += "WHERE GRUPO NOT IN ('PEL','PE') " cQry += "GROUP BY CODIGO,PRODUTO" cQry += "ORDER BY 1" /* cQry := "SELECT CODIGO,PRODUTO,sum(SALDO_ATUAL) SALDO FROM V_BI_ESTQ_01_SEM_DONO" cQry += " WHERE GRUPO = '"+cGrupoP+"' " cQry += " GROUP BY CODIGO,PRODUTO" cQry += " ORDER BY 1" */ If Select("QRPB2") > 0 QRPB2->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQry),'QRPB2',.T.) conout("depois query: "+Time()) conout("query estoque: "+cQuery) DbSelectArea("SA1") DbSelectArea("SB1") DbSelectArea("AD1") While QRPB2->(!Eof()) lOportun:= .F. SA1->(DbSetOrder(1)) if SA1->(DbSeek(xFilial("SA1")+SubStr(cCliSel,1,6)+SubStr(cCliSel,7,2))) SB1->(DbSetOrder(1)) if SB1->(DbSeek(xFilial("SB1")+Alltrim(QRPB2->CODIGO))) If (SB1->B1_TIPO $ cTipoProd) .and. !(SB1->B1_GRUPO $ cGrupoProd) AD1->(DbSetOrder(1)) if AD1->(DbSeek(xFilial("AD1")+cOport))//AD1_FILIAL+AD1_NROPOR+AD1_REVISA lOportun:= .T. endif nPrcVen := cpFata1003(cUfEntr,cMunEnt,lOportun) cItens+='<tr>' cItens+=' <td>'+Alltrim(QRPB2->CODIGO)+'</td>' cItens+=' <td>'+Alltrim(QRPB2->PRODUTO)+'</td>' cItens+=' <td>'+cValtoChar(Iif(QRPB2->SALDO > 0, QRPB2->SALDO, 0))+'</td>' cItens+=' <td>'+Transform(nPrcVen,'@E 9,999,999.9999')+'</td>' cItens+='</tr>' Endif endif endif QRPB2->(dbSkip()) End endif conout("final rotina: "+Time()) //oObjLog:saveMsg("Vai chamar H_SMSGrid") cHtml := H_SMSGrid() //oObjLog:saveMsg("Vai retornar") Web Extended End Return (cHTML) User Function RetMun(cCli,cUF) Local cHtml Local cSigla := iif(empty(HttpPost->CEST),cUF,HttpPost->CEST) Local cCliente := iif(empty(HttpPost->CCLI),cCli,HttpPost->CCLI) Local cMuns := "" Local cCodMun := "" Web Extended Init cHtml Start U_inSite() cQry:="SELECT CC2_EST,CC2_CODMUN,CC2_MUN " cQry+=" From "+RetSqlName("CC2")+" CC2" cQry+=" Where CC2_FILIAL = '"+xFilial("CC2")+"' " cQry+=" And CC2_EST = '"+cSigla+"' " cQry+=" AND CC2.D_E_L_E_T_ = ' ' " cQry+=" ORDER BY CC2_MUN " If Select("QRPCC2") > 0 QRPCC2->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQry),'QRPCC2',.T.) DbSelectArea("SA1") SA1->(DbSetOrder(1)) if SA1->(DbSeek(xFilial("SA1")+cCliente)) if SA1->A1_EST == cSigla cCodMun := GetAdvfVal("CC2","CC2_CODMUN",xFilial("CC2")+SA1->A1_EST,1) cMuns +=' <option value="'+Alltrim(cCodMun)+'">'+encodeUTF8(Alltrim(Strtran(SA1->A1_MUN,"'","")))+'</option>' endif endif While QRPCC2->(!Eof()) cMuns += ' <option value="' + Alltrim(QRPCC2->CC2_CODMUN) + '"' cMuns += '>' + encodeUTF8(Alltrim(Strtran(QRPCC2->CC2_MUN, "'", ""))) + '</option>' QRPCC2->(dbSkip()) End cHtml:= cMuns Web Extended end Return cHtml Static Function cpFata1003(cUfEntr,cMunEnt,lOportun) Local aArea := GetArea() Local cPrTabela := 0 If Select("QRY") > 0 dbSelectArea("QRY") QRY->(DbCloseArea()) Endif cQuery := "SELECT * FROM " cQuery += RetSQLName("SF7") cQuery += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' " cQuery += " AND F7_GRTRIB = '" + Trim(SB1->B1_GRTRIB) + "' " cQuery += " AND F7_EST = '" + SA1->A1_EST + "' " cQuery += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' " cQuery += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' " cQuery += " AND D_E_L_E_T_ = ' '" + " " TcQuery cQuery New Alias "QRY" cProduto := SB1->B1_COD//TMP1->CK_PRODUTO oObjLog:saveMsg("Estoque.apl - Calculo do produto:"+cProduto) If SB1->B1_TIPO = 'CO' .AND. SB1->B1_GRUPO = 'ELEV' oObjLog:saveMsg("Estoque.apl - Tipo do produto igual a CO e grupo igual a ELEV") cPrUnit := SB1->B1_CUSTD oObjLog:saveMsg("Estoque.apl - Recebeu pre�o de custo da SB1: "+cValtoChar(cPrUnit)) Return(cPrUnit) EndIf If Select("QRY1") > 0 dbSelectArea("QRY1") QRY1->(DbCloseArea()) Endif cQuery1 := "SELECT DA1_PRCVEN FROM " cQuery1 += RetSQLName("DA1") cQuery1 += " WHERE DA1_FILIAL = '" + xFilial("DA1") + "' " cQuery1 += " AND DA1_CODPRO = '" + Trim(cProduto) + "' " //SB1->B1_COD + "' " cQuery1 += " AND DA1_CODTAB = '" + QRY->F7_TPL + "' " cQuery1 += " AND D_E_L_E_T_ = ' '" TcQuery cQuery1 New Alias "QRY1" If !QRY1->(Eof()) cPrTabela := QRY1->DA1_PRCVEN oObjLog:saveMsg("Estoque.apl - Recebeu pre�o da tabela de venda: "+DA1->DA1_CODTAB+"="+cValtoChar(cPrTabela)) Else cPrTabela := 0 oObjLog:saveMsg("Estoque.apl - retorno zero da tabela de pre�o") EndIf cPrUnit := (cPrTabela - (cPrTabela * ((18 - QRY->F7_CARGICM - QRY->F7_FATCORR)/100))) If lOportun If AD1->AD1_COMIRT > 0 cPrUnit := (cPrUnit * ((AD1->AD1_COMIRT/100)+1)) oObjLog:saveMsg("Estoque.apl - entrou no calculo da oportunidade: "+cValtochar(cPrUnit)+" * ("+cValtochar(AD1->AD1_COMIRT)+"/100)+1") EndIf EndIf DbSelectArea("SZ3") SZ3->(DbSetOrder(1))//Z3_FILIAL+Z3_UF+Z3_MUNICIP if SZ3->(DbSeek(xFilial("SZ3")+cUfEntr+cMunEnt)) oObjLog:saveMsg("Estoque.apl - Encntrou a UF e Municipio") If SZ3->Z3_PERFRAD > 0//Z3_VLFRMIN cPrUnit := (cPrUnit * ((SZ3->Z3_PERFRAD/100)+1)) oObjLog:saveMsg("Estoque.apl - Entrou na SZ3 com SZ3->Z3_PERFRAD > 0: "+cValtoChar(cPrUnit)+" * ("+cValtoChar(SZ3->Z3_PERFRAD)+" /100)+1") EndIf elseif SZ3->(DbSeek(xFilial("SZ3")+cUfEntr)) oObjLog:saveMsg("Estoque.apl - Encntrou a UF") If SZ3->Z3_PERFRAD > 0 cPrUnit := (cPrUnit * ((SZ3->Z3_PERFRAD/100)+1)) oObjLog:saveMsg("Estoque.apl - Entrou na SZ3 com SZ3->Z3_PERFRAD > 0: "+cValtoChar(cPrUnit)+" * ("+cValtoChar(SZ3->Z3_PERFRAD)+" /100)+1") EndIf endif oObjLog:saveMsg("Estoque.apl - Pre�o final retornado: "+cValtoChar(cPrUnit)) RestArea(aArea) Return(cPrUnit) Static Function retCli(cEstFat,cTipoCli) Local aArea := GetArea() Local cCodigo := "" If Select("QRYCLI") > 0 dbSelectArea("QRYCLI") QRYCLI->(DbCloseArea()) Endif cQuery := "SELECT A1_COD,A1_LOJA FROM "+RetSQLName("SA1")+" SA1 " cQuery += " WHERE D_E_L_E_T_ = ' '" cQuery += " AND A1_TIPO = '"+cTipoCli+"' AND A1_EST = '"+cEstFat+"'" cQuery += " AND A1_COD = 'CLI-"+cEstFat+"' " TcQuery cQuery New Alias "QRYCLI" If !QRYCLI->(Eof()) cCodigo := QRYCLI->A1_COD+QRYCLI->A1_LOJA oObjLog:saveMsg("Cliente padr�o selecionado:"+cCodigo) else oObjLog:saveMsg("Estoque.apl - Cliente padr�o n�o encontrado.") endif RestArea(aArea) Return cCodigo