#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:= '' 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 := '
' //1º Linha //-----------------------CLIENTE--------------------- cTopo += '
' cTopo += '
' cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' //-----------------------TIPO DO CLIENTE--------------------- cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' cTopo += '
' cTopo += '
' //2º Linha //-----------------------ESTADO FATURAMENTO--------------------- cTopo += '
' cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' //-----------------------ESTADO ENTREGA--------------------- cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' //-----------------------MUNICIPIO ENTREGA--------------------- cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' //-----------------------GRUPO PRODUTO--------------------- //cTopo += '
' /* cTopo += ' ' cTopo += ' ' cTopo += '
' cTopo += ' ' cTopo += '
' */ cTopo += '
' //-----------------------BOTAO BUSCAR--------------------- cTopo += '
' cTopo += '
' cTopo += ' ' //cTopo += '
' cTopo += ''+chr(13)+chr(10) //cTopo += '
' cTopo += '
' cTopo += '' APWExCloseQuery('QRY') cColunas+='Código' cColunas+='Descrição' cColunas+='Qtd Disponível' cColunas+='Preço de Venda' 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+='' cItens+=' '+Alltrim(QRPB2->CODIGO)+'' cItens+=' '+Alltrim(QRPB2->PRODUTO)+'' cItens+=' '+cValtoChar(Iif(QRPB2->SALDO > 0, QRPB2->SALDO, 0))+'' cItens+=' '+Transform(nPrcVen,'@E 9,999,999.9999')+'' cItens+='' 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 +=' ' endif endif While QRPCC2->(!Eof()) cMuns += ' ' 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