#include "PROTHEUS.CH" #include "RWMAKE.CH" #include "APWEBEX.CH" #include "TOPCONN.CH" #include "TBICONN.CH" #DEFINE SMSDEBUG /*__________________________________________________________________________ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦Funçäo ¦ MntOrc ¦ Autor ¦ Lucilene Mendes ¦ Data ¦28.08.17 ¦¦¦ ¦¦+----------+------------------------------------------------------------¦¦¦ ¦¦¦Descriçäo ¦ Manutenção de Orçamento de Venda. ¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/ User Function MntOrc() Local cHtml Local cItem := "" Local nPosFrete := 0 Local nPerCom := 0 Local nValCom := 0 Local nOpc := 0 Local nLin := 0 Local f := 0 Local lMoeda := .F. Local lNumber := .F. Local lVencido := .F. Local aTpFrete := {} Local nRecSCJ := 0 private cLisPar := "" private cParUs := GetMv('LC_FA074G1') Private cFilVen := "" Private cCodLogin := "" Private cVendLogin := "" Private cVendedor := "" Private cSite := "u_PortalLogin.apw" Private cPagina := "Orçamento de Venda" Private cTitle := "Portal SMS" Private cMenus := "" Private cAnexos := "" Private cDirOrc := "\anexosPortal\orcamentos\" Private cDirPortal := "" Private cEndServ := "" // Endereço do servidor da pagina de Portal Private cOrcCabec := "" Private cOrcItens := "" Private cItensHid := "" Private cBotoes := "" Private cBtnItens := "" Private cOptUF := "" Private cOptMun := "" Private cOptProd := "" Private cOptCond := "" Private cOptModal := "" Private cTblDesc := "" Private cCodOrc := "" Private cTabela := "" Private cCliente := "" Private cContato := "" Private cContDDD := "" Private cContTel := "" Private cTpCliente := "" Private cGrpTrib := "" Private cCondPag := "" Private cLocalEnt := "" Private cObra := "" Private cStatusObra := "" Private cIntermed := "" Private cOport := "" Private cRevOpt := "" Private cRegional := "" Private cTpFrete := "" Private cValFre := "" Private cPrazoEmb := "" Private cEstudo := "" Private cNumEst := "" Private cPrevFecha := "" Private cMargemCont := "" Private cTransp := "" Private cOptCli := "" Private cTotalReg := "" //Private cEntrega := "" //Private cValidade := "" Private nTVlrUnit := 0 Private nTVlrSDesc := 0 Private nTQtdItem := 0 Private nTTotal := 0 Private nTComiss := 0 Private nTImpostos := 0 Private nTAcresc := 0 Private nTFrete := 0 Private nItens := 0 Private lNewOrc := .F. Private lEdit := .F. Private lCopy := .F. Private cShowDesc := "false" Private aItens := {} Private aAnexos := {} Web Extended Init cHtml Start U_inSite() 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) //Atualiza as variáveis cEndServ := GetMv('MV_WFBRWSR') cCodVend := cVendLogin cNomeVend:= HttpSession->Nome cItem := StrZero(1,TamSX3("CK_ITEM")[1]) cOpcao := HttpGet->opc if !empty(HttpGet->rec) nRecSCJ := val(HttpGet->rec) EndIf lEdit := .F. lDele := .F. Do Case Case cOpcao == "view" nOpc:= 2 cPagina += " - Visualizar" Case cOpcao == "edit" nOpc:= 4 cPagina += " - Alterar" lEdit := .T. Case cOpcao == "dele" nOpc:= 5 cPagina += " - Excluir" lDele := .T. Case cOpcao == "copy" nOpc = 3 cPagina += " - Copiar" lEdit := .T. lCopy := .T. EndCase //Posiciona no Orçamento If !Empty(nRecSCJ) dbSelectArea("SCJ") SCJ->(dbGoTo(nRecSCJ)) //Troca de filial u_PTChgFil(SCJ->CJ_FILIAL) dbSelectArea("SCJ") SCJ->(dbGoTo(nRecSCJ)) dbSelectArea("SCK") SCK->(DbSetOrder(1)) SCK->(dbgotop()) SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM)) dbSelectArea("SA1") SA1->(DbSetOrder(1)) SA1->(dbgotop()) SA1->(dbSeek(xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA)) Endif cLisPar:='' cFilOrc+= ' ' cCodOrc:= '
' cCodOrc+= ' ' cCodOrc+= ' ' cCodOrc+= '
' cCodOrc+= '' //Cliente If lEdit .or. lCopy cCliente:='
cCliente+=' CJ_CLIENTE+'/'+SCJ->CJ_LOJA+' - '+Alltrim(Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+'" />' cCliente+=' cCliente+='
cOptCli+= u_ListaCli(cVendLogin,"") HttpSession->Cliente:= SCJ->CJ_CLIENTE+SCJ->CJ_LOJA Else cCliente:='' Endif //Oportunidade cOport:= '' cRevOpt:= '' //Combo da tabela de preço cTabPadrao:= GetNewPar("PR_TABPADR","001") cTabela:='' //Tipo de cliente Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_TIPO") cTpCliente:='' //Grupo de tributação do cliente cGrpTrib:= '' //Contato cContato:= ' ' cContDDD:= ' ' cContTel:= ' ' //Cliente de Entrega cCliEntr:='' //Local de entrega cLocalEnt:= '
' cLocalEnt+= ' ' //onchange="javascript:atuVlrFrete();" cLocalEnt+=' ' cLocalEnt+='
' //Alimenta os estados cOptUF:= u_ListaUF() //Nome da obra cObra:= ' ' //cStatusObra:= ' CJ_VEND6))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >' aStObra:= RetSx3Box(Posicione('SX3',2,'CJ_VEND6','X3CBox()'),,,1) cStatusObra:='' //Seleciona as condições de pagamento disponíveis no combo cCondPag:='' //Previsão Fechamento aPrevisao:= {{"B","Balizador"},{"A","30/120 dias"},{"V","Em 30 dias"},{"M","Após 4 meses"},{"C","Concorrência"}} //cPrevFecha:= ' ' cPrevFecha:='' //Intermediador If !(lEdit .or. lCopy) cIntermed:='' //Retorno nDiasVal:= 0 cRetorno:='CJ_RETORNO)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>' //Estudo Luminotécnico //cEstudo:= ' CJ_LUMINOT))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >' aEstd:= RetSx3Box(Posicione('SX3',2,'CJ_LUMINOT','X3CBox()'),,,1) aSort(aEstd) cEstudo:='' cNumEst:= ' ' //Segmento aSegmen:= RetSx3Box(Posicione('SX3',2,'CJ_SEGMENT','X3CBox()'),,,1) cSegmento:='' //Prospecção aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROPECC','X3CBox()'),,,1) aSort(aProsp) cProsp:='' //Prospectado por aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROSCOD','X3CBox()'),,,1) cProspPor:='' //Regional cRegional:='' //Vendedor do cliente cVend2:= '' //Vendedor da oportunidade cVend3:='' //Vendedor 4 cVend4:= '' //Especificado por cEspecif:= '' //Negociadora cNegociad:= '' //Validade do Orçamento nDiasVal:= GetNewPar("PR_DTVALID",10) cValidade:='CJ_VALIDA)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>' //Prazo de embarque cPrazoEmb:= '' //Tipo de frete aTpFrete:= {{"S","Sem Frete"},{"C","CIF"},{"F","FOB"}} cTpFrete:='' cPFrete:= 'CJ_PERCFRT,"@E 999.99")+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>' cValFre:= 'CJ_FRETE,"@E 999,999,999,999.99")+'" ' cValFre+= Iif((!lCopy .and. !lEdit) .or. SCJ->CJ_TPFRETE = "S" ,'disabled','')+'>' nTFrete+= SCJ->CJ_FRETE //% RT cComRT:= 'CJ_COMISTR,PesqPict("SCJ","CJ_COMISTR"))+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>' //Observação Comercial cObsCom:= SCJ->CJ_OBS //Margem de Contribuição If HttpSession->Tipo <> "R" //Representante cMargemCont:= '
' cMargemCont+= ' ' cMargemCont+= ' ' cMargemCont+= '
' Endif /* //Transportadora cTransp:='' */ /* //Validade do Orçamento nDiasVal:= GetNewPar("PR_DTVALID",3) cValidade:='CJ_VALIDA))+'" disabled>' //Peso cPeso:= 'CJ_XPESO)+'" '+Iif(lCopy .or. lEdit,'',' disabled')+'>' //Volume cVolume:= 'CJ_XVOLUME)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+'>' //Espécie cEspecie:= 'CJ_XESPECI)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+' maxlength="10">' //Combo da tabela de preço cTabela:='' HttpSession->Tabela:= SCJ->CJ_TABELA */ //Preenchimento dos itens /* aItens - array que define o cabeçalho da tabela de produtos [1] - Nome da coluna [2] - Nome do campo [3] - Tamanho [4] - Alinhamento [5] - Tipo [6] - Editável [7] - Obrigatório [8] - Moeda [9] - Placeholder [10]- Hidden [11] - MaxLength */ aAdd(aItens, {"Item","CK_ITEM","*","text-left","C",.F.,.F.,.F.,"",.F.,""}) aAdd(aItens, {"Produto","CK_PRODUTO","300px"," text-left","C",lEdit,.T.,.F.,"Selecione...",.F.,""}) aAdd(aItens, {"Quant.","CK_QTDVEN","*"," text-right only-numbers","N",lEdit,.T.,.F.,"0",.F.,""}) aAdd(aItens, {"Observação","CK_OBS","*"," text-left","C",lEdit,.F.,.F.,"",.F.,"80"}) aAdd(aItens, {"Prazo de Embarque","CK_PRZEMB","70px","text-right only-numbers","N",.F.,.F.,.F.,"",.F.,"3"}) aAdd(aItens, {"Vlr Unitário","CK_PRCVEN","*"," text-right","N",lEdit,.F.,.T.,"0,00",.F.,""}) aAdd(aItens, {"Vlr c/ Impostos","CK_XPRCIMP","*","text-right","N",.F.,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"Vlr de Venda","iCK_PRCVEN","*"," text-right myformato","N",.F.,.T.,.T.,"0,00",.T.,""}) aAdd(aItens, {"Custo","CK_CUSTO","*"," text-right myformato","N",.F.,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"IPI","CK_XVALIPI","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"ICMS","CK_XVALICM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"ICMS ST","CK_XICMST","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"% Desconto","CK_DESCACM","*"," text-right percentual","N",lEdit,.F.,.T.,"0,00",Iif(HttpSession->Tipo <> "R",.F.,.T.) ,"7"}) aAdd(aItens, {"Diretor","CK_NOMDIRE","*"," text-left","C",.T.,.F.,.T.,"",.T.,"12"}) aAdd(aItens, {"% Comissão","PER_COM","*"," text-right ","N",.F.,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"Vlr Comissão","VAL_COM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""}) aAdd(aItens, {"Total","CK_VALOR","150px"," text-right","N",.F.,.F.,.T.,"0,00",.F.,""}) aAdd(aItens, {"","ACAO","*"," text-center","X",lEdit,.F.,.F.,"",.F.,""}) // Cria o cabeçalho dos Itens For nLin := 1 to Len(aItens) cOrcCabec += ''+aItens[nLin][1]+'' Next dbSelectArea("SCK") SCK->(dbSeek(SCJ->CJ_FILIAL+SCJ->CJ_NUM)) While SCK->(!Eof()) .and. SCK->CK_FILIAL == SCJ->CJ_FILIAL .and. SCK->CK_NUM == SCJ->CJ_NUM nItens++ cItem := StrZero(nItens,TamSX3("CK_ITEM")[1]) Posicione("SB1",1,xFilial("SB1")+SCK->CK_PRODUTO,"B1_DESC") If SB5->(MsSeek(xFilial("SB5")+SCK->CK_PRODUTO)) If SB5->B5_DTVLESP + 30 < dDataBase lVencido:= .T. Endif Endif cOrcItens += '' nTImpostos += SCK->(CK_ST+CK_IPI) nTQtdItem += SCK->CK_QTDVEN nTVlrUnit += Round(SCK->CK_QTDVEN * SCK->CK_PRCVEN,2) nTVlrSDesc+= nTVlrUnit - SCK->CK_VLDSCAC nTTotal += SCK->CK_VALOR + SCK->(CK_IPI+CK_ST) nPerCom:= SCK->CK_COMIS1 nValCom:= SCK->CK_COMISSA //(SCK->CK_QTDVEN * SCK->CK_PRCVEN) * (nPerCom/100) nTComiss+= nValCom // gera os produtos de acordo com o Cliente e Tabela cOptProd := u_GetProdOrc(SCJ->CJ_CLIENTE, SCJ->CJ_TABELA, "") For nLin := 1 to Len(aItens) If aItens[nLin,2] == "ACAO" cOrcItens += '' If lEdit .or. lCopy //!lDele //cOrcItens += ' ' //cOrcItens += ' ' If lEdit .or. lCopy cOrcItens += ' Endif Endif If !lDele cOrcItens += ' ' Endif cOrcItens += ' Else If aItens[nLin,2] == "CK_PRODUTO" cOrcItens += '' //class="form-group row pb-4" Else cOrcItens += '' Endif lMoeda:= aItens[nLin,8] //Indica se é Moeda lNumber:= aItens[nLin,5] = "N" //Indica que é numérico xValue:= "" Do Case Case aItens[nLin][5] == 'C' If aItens[nLin,2] == "CK_PRODUTO" xValue := AllTrim(SCK->&(aItens[nLin][2]))+' - '+Alltrim(SB1->B1_DESC) Else xValue := AllTrim(SCK->&(aItens[nLin][2])) Endif Case aItens[nLin][5] == 'N' If aItens[nLin,2] == "CK_QTDVEN" xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->&(aItens[nLin][2])))) ElseIf aItens[nLin,2] == "PER_COM" xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nPerCom,PesqPict("SD2","D2_COMIS1")),TamSX3("D2_COMIS1")[1]))) ElseIf aItens[nLin,2] == "VAL_COM" xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nValCom,PesqPict("SCK","CK_PRCVEN")),TamSX3("CK_PRCVEN")[1]))) ElseIf aItens[nLin,2] == "iCK_PRCVEN" //xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->CK_PRCVEN))) xValue := Iif(lNewOrc,"",Alltrim(TransForm(SCK->CK_PRCVEN,PesqPict("SCK","CK_PRCVEN")))) Elseif aItens[nLin,2] == "CK_PRCVEN" xValue := Alltrim(TransForm(SCK->CK_PRUNIT,PesqPict("SCK","CK_PRUNIT"))) Elseif aItens[nLin,2] == "CK_VALOR" xValue := Alltrim(TransForm(SCK->(CK_VALOR/*+CK_XVALIPI+CK_XICMST*/),PesqPict("SCK",aItens[nLin,2]))) Else If SCK->(FieldPos(aItens[nLin][2])) > 0 xValue := Alltrim(TransForm(SCK->&(aItens[nLin][2]),PesqPict("SCK",aItens[nLin,2]))) Else xValue := "" Endif Endif EndCase If aItens[nLin,6] //Campo Editável If aItens[nLin,2] == "CK_PRODUTO" //Cria o select para o produto If lEdit .or. lCopy cOrcItens +='
' cOrcItens +='
cOrcItens +='
cOrcItens +=' CK_PRODUTO)+' -- '+Alltrim(SB1->B1_DESC)+'" >' cOrcItens +=' cOrcItens +='
cOrcItens +='
cOrcItens +='
Else cOrcItens +='' Endif Else cOrcItens += ' "CK_QTDVEN" .And. !(aItens[nLin,2] $ "CK_DESCONT") //.And. aItens[nLin,2] <> "CK_XPEDCLI" .And. aItens[nLin,2] <> "CK_XITEMCL" cOrcItens += 'disabled ' EndIf Else cOrcItens += 'disabled ' EndIf cOrcItens += 'value="'+Alltrim(xValue)+'">' Endif Else cOrcItens += '' Endif Endif cOrcItens += '' Next //Inputs Hidden //cItensHid += '' //cItensHid += '' //cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cItensHid += '' cOrcItens+=cItensHid SCK->(dbSkip()) End //nTAcresc:= Round(nTTotal*(nAcresc/100),2) nTTotal+= nTFrete //nTTotal+= nTFrete+nTAcresc cOrcItens += '' cOrcItens += ' cOrcItens += 'CJ_NUM)+'" />' cOrcItens += '' cOrcItens += '' cOrcItens += 'CJ_DSDIRET))+'" />' cOrcItens += '' cOrcItens += '' //Adiciona os botões de ações na tabela de itens If lEdit cBtnItens+='
' cBtnItens+='
' cBtnItens+=' ' cBtnItens+='
' cBtnItens+='
' Endif //Adiciona os botões da página If lEdit //cBotoes+='
Orçamento válido apenas dentro do mês de '+MesExtenso(SCJ->CJ_EMISSAO)+' de '+cvaltochar(Year(SCJ->CJ_EMISSAO))+'.
' cBotoes+=''+chr(13)+chr(10) Elseif lDele cBotoes+=''+chr(13)+chr(10) Endif cBotoes+=''+chr(13)+chr(10) //Totalizador disponível apenas para regional If HttpSession->Tipo <> "R" cTotalReg:='
' cTotalReg+=' ' cTotalReg+=' ' cTotalReg+='     ' cTotalReg+=' ' cTotalReg+=' ' cTotalReg+='
' cTotalReg+='
' cTotalReg+='
' cShowDesc := 'true' Endif //Retorna o HTML para construção da página cHtml := H_AddOrc() Web Extended End Return (cHTML) /*__________________________________________________________________________ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦Funçäo ¦ ExcOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦10.12.17 ¦¦¦ ¦¦+----------+------------------------------------------------------------¦¦¦ ¦¦¦Descriçäo ¦ Exclui o Orçamento de Venda ¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/ User Function ExcOrc() Local cHtml Local nOpc := 5 // 3- Incluir / 4- Alterar / 5- Excluir Local cCliente := "" Local cLoja := "" Local cNumOrc := "" Local cDirErro := "erro\" Private cReturn Private aCabSCJ :={} Private aItemSCJ:={} Private aLinhaSCJ:={} Private lMsErroAuto:= .F. Private cCodLogin := "" Private cVendLogin:= "" Private INCLUI := .F. Private ALTERA := .F. Web Extended Init cHtml Start U_inSite() //Verifica se não perdeu a sessão If type("HttpSession->CodVend") = "U" .or. Empty(HttpSession->CodVend) conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"Sessao encerrada") cHtml:= '' return cHtml Endif cVendLogin := u_GetUsrPR() cCodLogin := U_SetParPR(cVendLogin) //Variáveis do cabeçalho cCliente:= Left(HttpPost->CJ_CLIENTE,6) cLoja:= Right(HttpPost->CJ_CLIENTE,6) cNumOrc:= HttpPost->CJ_NUM nModulo:= 5 //Posiciona nas tabelas If !Empty(cCliente) Posicione("SA1",1,xFilial("SA1")+Alltrim(HttpPost->CJ_CLIENTE),"A1_COD") Endif //Posiciona no orçamento Posicione("SCJ",1,xFilial("SCJ")+cNumOrc,"CJ_NUM") cFilOrc:= SCJ->CJ_FILIAL //Monta o cabeçalho aadd(aCabSCJ,{"CJ_NUM",cNumOrc,Nil}) aadd(aCabSCJ,{"CJ_CLIENTE",SA1->A1_COD,Nil}) aadd(aCabSCJ,{"CJ_LOJA", SA1->A1_LOJA ,Nil}) aLinhaSCJ:={} //Monta os itens lMsErroAuto:= .F. //Chama execauto para inclusão do orçamento If Len(aCabSCJ) > 0 MATA415(aCabSCJ,aItemSCJ,nOpc) Else conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"FALHA AO EXCLUIR O ORÇAMENTO!") lMsErroAuto:= .T. Endif If lMsErroAuto If !ExistDir(cDirErro) MakeDir(cDirErro) Endif cDirErro+=dtos(date()) If !ExistDir(cDirErro) MakeDir(cDirErro) Endif //Grava o erro MostraErro(cDirErro,"erro_orcto_"+strtran(time(),":","")+".txt") cHtml:= "erro" Else SCJ->(dbGoBottom()) cHtml:= SCJ->CJ_NUM EndIf Web Extended End Return (cHTML) /*__________________________________________________________________________ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦Funçäo ¦ GetProdOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 10.12.17 ¦¦¦ ¦¦+----------+------------------------------------------------------------¦¦¦ ¦¦¦Descriçäo ¦ Função para retornar os produtos da tabela e esta no Orç. ¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/ User Function GetProdOrc(cOrcCli, cOrcTab, cOrcProd) Local cHtml Local cProds := "" Local cGrupo := "" //Atualiza a variável de sessão HttpSession->TABELA := cOrcTab //Busca os itens da tabela de preço cQry:="Select DA1_CODTAB, B1_GRUPO, BM_DESC, DA1_CODPRO, B1_DESC " cQry+=" From "+RetSqlName("DA1")+" DA1" cQry+=" INNER JOIN "+RetSqlName("DA0")+" DA0 ON DA0_FILIAL = DA1_FILIAL AND DA0_CODTAB = DA1_CODTAB AND DA0_ATIVO = '1' AND DA0.D_E_L_E_T_ = ' ' " cQry+=" INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = DA1_CODPRO AND B1_MSBLQL <> '1' AND SB1.D_E_L_E_T_ = ' ' " cQry+=" LEFT JOIN "+RetSqlName("SBM")+" SBM ON BM_FILIAL = '"+xFilial("SBM")+"' AND B1_GRUPO = BM_GRUPO AND SBM.D_E_L_E_T_ = ' ' " cQry+=" Where DA1_FILIAL = '"+xFilial("DA1")+"' " cQry+=" And DA1_CODTAB = '"+cOrcTab+"' " cQry+=" AND DA1_ATIVO = '1' " If !Empty(cOrcProd) cQry+=" AND DA1_CODPRO = '"+cOrcProd+"' " Endif cQry+=" AND DA1_PRCVEN > 0 " cQry+=" AND DA1.D_E_L_E_T_ = ' ' " cQry+=" Order by DA1_CODTAB, B1_GRUPO, B1_COD " If Select("QRP") > 0 QRP->(dbCloseArea()) Endif APWExOpenQuery(ChangeQuery(cQry),'QRP',.T.) //Preenche o select de produtos While QRP->(!Eof()) If Empty(cGrupo) cProds+= ' Elseif !Empty(cGrupo) .and. cGrupo <> QRP->B1_GRUPO cProds+= '' cProds+= ' Endif cProds+=' ' cGrupo:= QRP->B1_GRUPO QRP->(dbSkip()) End If !Empty(cProds) cProds+= '' Endif cHtml:= cProds Return cHtml /*__________________________________________________________________________ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦Funçäo ¦ GetMCOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 02.12.23 ¦¦¦ ¦¦+----------+------------------------------------------------------------¦¦¦ ¦¦¦Descriçäo ¦ Função para calcular a margem de contribuição do orçamento.¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/ User Function GetMCOrc() Local cMargem := "" Local cQry := "" Local nMkt := 0 Local nMktP := 0 Local nMC := 0 Local nMC_T := 0 Local nMCTotIt := 0 Local nCusto := 0 Local nICMS := 0 Local nComis2 := 0 Local nComis3 := 0 Local nPIS := 0 Local nCofins := 0 Local nComissao := 0 Local nRT := 0 Local nIPI := 0 Local nFrete := 0 Local nSubsTrb := 0 Local nSubsCus := 0 Local nST := 0 Local nINSSP := 0 Local nRecLiq := 0 Local nMargemT := 0 cQry:= "Select * From "+RetSqlName("SCK")+" SCK " cQry+= "Inner Join "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = CK_PRODUTO AND SB1.D_E_L_E_T_ = ' ' " cQry+= "Where CK_FILIAL = '"+SCJ->CJ_FILIAL+"' " cQry+= "AND CK_NUM = '"+SCJ->CJ_NUM+"' " cQry+= "AND SCK.D_E_L_E_T_ = ' ' " If Select("TMP1") > 0 TMP1->(dbCloseArea()) Endif TcQuery cQry New Alias "TMP1" // passa por todos os itens do orcamento While !TMP1->(EOF()) nMkt := 0 nCusto := TMP1->CK_CUSTO nICMS := TMP1->CK_ICMS nComis2 := TMP1->CK_COMIS1 nComis3 := TMP1->CK_COMIS3 nPIS := TMP1->CK_PIS nCofins := TMP1->CK_COFINS nComissao := TMP1->CK_COMISSA nRT := TMP1->CK_RT nIPI := TMP1->CK_IPI nFrete := TMP1->CK_FRETE nSubsTrb := TMP1->CK_SUBSTRB nSubsCus := TMP1->CK_SUBSCUS nST := TMP1->CK_ST nINSSP := TMP1->CK_INSSP // calcula receita liquida nRecLiq := TMP1->CK_VALOR - nICMS - nPIS - nCofins - nINSSP // se existe o campo de % do mkt If TMP1->(FieldPos("CK_MKTP")) > 0 nMktP:= TMP1->CK_MKTP Endif // se existe o campo de vlr de mkt If TMP1->(FieldPos("CK_MKT")) > 0 nMkt:= TMP1->CK_MKT Endif // calcula o valor da margem nMC:= ((TMP1->CK_VALOR - nCusto - nICMS - nPIS - nCofins - nFrete - nComissao - nINSSP - nRT - nMkt) + nSubsTrb + nSubsCus) // Carrega as Variaveis Totalizador Orçamento, Luminarias e Equipamentos. If Alltrim(TMP1->B1_TIPO) == "CO" .AND. Alltrim(TMP1->B1_GRUPO) == "ELEV" // soma a margem total nMC_T := nMC_T + (TMP1->CK_VALOR * -1) // soma o valor total nMCTotIt := nMCTotIt + TMP1->CK_VALOR Else // se nao é do grupo pan e nao são acessorios de painel de led If Alltrim(TMP1->B1_GRUPO) <> 'PAN' .and. !(AllTrim(TMP1->CK_PRODUTO) $ "ACS-LHT44BC/ACS-LHT44PT") // soma a margem total nMC_T := nMC_T + nMC // soma o valor total nMCTotIt := nMCTotIt + TMP1->CK_VALOR EndIf EndIf TMP1->(dbSkip()) End cMargem:= Transform(((nMC_T / nMCTotIt)*100),"@E 9999.99") Return cMargem /*__________________________________________________________________________ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦Funçäo ¦ GetSaldoProd ¦ Autor ¦ Lucilene Mendes ¦ Data ¦ 17.10.23 ¦¦¦ ¦¦+----------+------------------------------------------------------------¦¦¦ ¦¦¦Descriçäo ¦ Busca saldo do item (mesma query GetEstDisp-addorc.apl) ¦¦¦ ¦¦+-----------------------------------------------------------------------+¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/ Static Function GetSaldoProd() //Armazéns considerados para busca do estoque Local cArmazem:= GetNewPar("PR_ARMZPR","'01','02','03'") //deve estar no formato '01','02' Local cQry:="" //Busca o saldo do produto cQry:= "With QRY AS( " cQry+= "Select SUM(B2_QATU) EST , SUM(CASE WHEN B2_QEMP >= 0 THEN B2_QEMP ELSE 0 END) + SUM(CASE WHEN B2_RESERVA >= 0 THEN B2_RESERVA ELSE 0 END) + SUM(CASE WHEN B2_QPEDVEN >= 0 THEN B2_QPEDVEN ELSE 0 END) EMPENHO " //adicionado reserva 07.02.20 - Lucilene cQry+= "From "+RetSqlName("SB2")+" SB2 " cQry+= "Where B2_FILIAL = '"+xFilial("SB2")+"' And B2_COD = '"+SCK->CK_PRODUTO+"' And SB2.D_E_L_E_T_ = ' ' " If !Empty(cArmazem) cQry+= "AND B2_LOCAL in ("+cArmazem+") " Endif cQry+= "UNION ALL " cQry+= "Select 0 EST , SUM(CK_QTDVEN) EMPENHO " cQry+= "From "+RetSqlName("SCJ")+" SCJ, "+RetSqlName("SCK")+" SCK " cQry+= "Where CJ_FILIAL = '"+xFilial("SB2")+"' AND CJ_XTPORC = '1' AND CJ_STATUS = 'A' AND SCJ.D_E_L_E_T_ = ' ' " cQry+= "and CK_FILIAL = CJ_FILIAL AND CK_NUM = CJ_NUM AND CK_PRODUTO = '"+SCK->CK_PRODUTO+"' and SCK.D_E_L_E_T_ = ' ' " If !Empty(cArmazem) cQry+= "AND CK_LOCAL in ("+cArmazem+") " Endif cQry+= ")" cQry+= "SELECT SUM(EST) -SUM(EMPENHO) SALDO FROM QRY " If Select("QRS") > 0 QRS->(dbCloseArea()) Endif APWExOpenQuery(cQry,'QRS',.T.) Return cvaltochar(QRS->SALDO)