#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 nValDesc := 0
Local nVlrProd := 0
Local nTotValor := 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 := ""
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 cOptInter := ""
Private cTotalReg := ""
Private cLisPar := ""
Private cParUs := ""
Private cMgItens := ""
//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 nMargem := 0
Private nMLuminaria := 0
Private nMEquipa := 0
Private nMPainel := 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
cParUs := GetMv('LC_FA074G1')
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:=' '
cLisPar+= 'Selecione... '
cLisPar+= U_GETPARC()
cLisPar+=' '
cFilOrc:= '
'
//Cliente
If lEdit .or. lCopy
cCliente:='
cCliente+=' CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+'" />'
cCliente+=' '
cCliente+=' '
cCliente+='
cCliente+='
cOptCli+= u_ListaCli(cVendLogin,"",'S')
HttpSession->Cliente:= SCJ->CJ_CLIENTE+SCJ->CJ_LOJA
Else
cCliente:='' //value='+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA+'
cCliente+=' '+SCJ->CJ_CLIENTE+'/'+SCJ->CJ_LOJA+' - '+Alltrim(Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+' '
cCliente+=' '
Endif
//Oportunidade
cOport:= ' '
cRevOpt:= ' '
//Combo da tabela de preço
cTabPadrao:= GetNewPar("PR_TABPADR","001")
cTabela:=''
//Tabela de preço por filial
cQry:= "SELECT DA0_CODTAB, DA0_DESCRI "
cQry+= "FROM "+RetSqlName("DA0")+" DA0 "
cQry+= "WHERE DA0_FILIAL = '"+xFilial("DA0")+"'
cQry+= "AND DA0_ATIVO = '1' "
cQry+= "AND (DA0_DATATE = '' OR DA0_DATATE >= '"+dtos(dDataBase)+"') "
cQry+= "AND DA0.D_E_L_E_T_ = ' ' "
If Select("QFIL") > 0
QFIL->(dbCloseArea())
Endif
TcQuery cQry New Alias "QFIL"
While QFIL->(!Eof())
cTabela+=' DA0_CODTAB == SCJ->CJ_TABELA,'selected','')+'>'+Alltrim(QFIL->DA0_CODTAB)+' - '+Alltrim(QFIL->DA0_DESCRI)+' '
QFIL->(dbSkip())
End
cTabela+=' '
//Tipo de cliente
Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_TIPO")
cTpCliente:=''
cTpCliente+=' '+X3COMBO("A1_TIPO",SA1->A1_TIPO)+' '
cTpCliente+=' '
//Grupo de tributação do cliente
cGrpTrib:= ' '
//Contato
cContato:= ' '
cContDDD:= ' '
cContTel:= ' '
//Cliente de Entrega
cCliEntr:=''
If lEdit .or. lCopy
cCliEntr+=' '
Endif
// Localiza os clientes
cCliEntr+= u_ListaCli(cVendLogin,"QRY->A1_COD+QRY->A1_LOJA==SCJ->CJ_CLIENT+SCJ->CJ_LOJAENT",'N')
cCliEntr+=' '
//Local de entrega
cLocalEnt:= ''
cLocalEnt+= ' ' //onchange="javascript:atuVlrFrete();"
cLocalEnt+=' '
cLocalEnt+=' '
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:=''
cStatusObra+=' '
For f:= 1 to Len(aStObra)
cStatusObra+=' CJ_VEND6),'selected','')+'>'+aStObra[f,1]+' '
Next
cStatusObra+=' '
//Tipo da Obra
cTpObra:=''
cTpObra+=' '
//Alimenta os tipos de obra
cTpObra+= u_ListaObra(SCJ->CJ_YOBRATP)
cTpObra+=' '
//Seleciona as condições de pagamento disponíveis no combo
cCondPag:=''
cCondPag+=' '+SCJ->CJ_CONDPAG+" - "+Posicione("SE4",1,xFilial("SE4")+SCJ->CJ_CONDPAG,"E4_DESCRI")+' '
If lEdit
//Verifica a tabela cadastrada no cliente
SE4->(dbSeek(xFilial("SE4")+SA1->A1_COND))
//Seleciona as condições de pagamento disponíveis no combo
cQry:= " Select E4_CODIGO, E4_DESCRI, E4_ACRSFIN"
cQry+= " From "+RetSqlName("SE4")+" SE4 "
cQry+= " Where E4_FILIAL = '"+xFilial("SE4")+"' "
cQry+= " And E4_MSBLQL <> '1' "
cQry+= " And E4_CODIGO NOT IN ('"+SCJ->CJ_CONDPAG+"') "
cQry+= " And SE4.D_E_L_E_T_ = ' ' "
If Select("QRP") > 0
QRP->(dbCloseArea())
Endif
TcQuery cqry New Alias "QRP"
While QRP->(!Eof())
cCondPag+=' E4_CODIGO) == AllTrim(SCJ->CJ_CONDPAG),'selected','')+'>'+Alltrim(QRP->E4_CODIGO)+" - "+Alltrim(QRP->E4_DESCRI)+' '
QRP->(dbSkip())
End
QRP->(dbCloseArea())
Endif
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:=''
cPrevFecha+=' '
For f:= 1 to Len(aPrevisao)
cPrevFecha+=' CJ_TERMOME,'selected','')+'>'+aPrevisao[f,2]+' '
Next
cPrevFecha+=' '
//Intermediador
If !(lEdit .or. lCopy)
cIntermed:=''
cIntermed+=' '
//Busca a lista de clientes
cIntermed+= u_ListaCli(cVendLogin,"QRY->A1_COD==SCJ->CJ_CLIINTE",'S')
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:=''
cEstudo+=' '
For f:= 1 to Len(aEstd)
cEstudo+=' CJ_LUMINOT),'selected','')+'>'+Upper(aEstd[f,3])+' '
Next
cEstudo+=' '
cNumEst:= ' '
//Segmento
aSegmen:= RetSx3Box(Posicione('SX3',2,'CJ_SEGMENT','X3CBox()'),,,1)
cSegmento:=''
cSegmento+=' '
For f:= 1 to Len(aSegmen)
cSegmento+=' CJ_SEGMENT),'selected','')+'>'+aSegmen[f,1]+' '
Next
cSegmento+=' '
//Prospecção
aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROPECC','X3CBox()'),,,1)
aSort(aProsp)
cProsp:=''
cProsp+=' '
For f:= 1 to Len(aProsp)
cProsp+=' CJ_PROPECC,'selected','')+'>'+Upper(aProsp[f,3])+' '
Next
cProsp+=' '
//Prospectado por
aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROSCOD','X3CBox()'),,,1)
cProspPor:='CJ_PROSCOD)*/,'','disabled')+'>'
cProspPor+=' '
For f:= 1 to Len(aProsp)
cProspPor+=' CJ_PROSCOD),'selected','')+'>'+aProsp[f,1]+' '
Next
cProspPor+=' '
//Regional
cRegional:=''
If lCopy .or. lEdit
cRegional+= u_ListaVend(.T.,SCJ->CJ_REGIAO)
Else
cRegional+=''+SCJ->CJ_REGIAO+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_REGIAO,"A3_NOME")+' '
Endif
cRegional+=' '
//Vendedor do cliente
cVend2:= ''
If lCopy .or. lEdit
cVend2+= u_ListaVend(.F.,SCJ->CJ_VEND)
Else
cVend2+=''+SCJ->CJ_VEND+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_VEND,"A3_NOME")+' '
Endif
cVend2+=' '
//Vendedor da oportunidade
cVend3:=''
If lCopy .or. lEdit
cVend3+= u_ListaVend(.F.,SCJ->CJ_VEND3)
Else
cVend3+=''+SCJ->CJ_VEND3+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_VEND3,"A3_NOME")+' '
Endif
cVend3+=' '
//Vendedor 4
cVend4:= ''
cVend4+= u_Vend04(SCJ->CJ_VEND4)
cVend4+=' '
//Especificado por
cEspecif:= ''
cEspecif+= u_ListaEsp(SCJ->CJ_CODESP)
cEspecif+=' '
//Negociadora
cNegociad:= ''
cNegociad+= u_ListaNeg(SCJ->CJ_VEND7)
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:=''
If lEdit
For f:= 1 to Len(aTpFrete)
cTpFrete+=' CJ_TPFRETE),'selected','')+'>'+aTpFrete[f,2]+' '
Next
Else
nPosFrete:= aScan(aTpFrete,{|x|x[1]==SCJ->CJ_TPFRETE})
If nPosFrete = 0
nPosFrete:= 1
Endif
cTpFrete+=' '+aTpFrete[nPosFrete,2]+' '
Endif
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+= ' MC '
cMargemCont+= ' '
cMargemCont+= '
'
Endif
/*
//Transportadora
cTransp:='CJ_TPFRETE = 'S','disabled','')+'>'
cTransp+=' '+Alltrim(Posicione("SA4",1,xFilial("SA4")+SCJ->CJ_XTRANSP,"A4_NOME"))+' '
If lEdit
//Transportadora do cadastro do cliente
If !Empty(SA1->A1_TRANSP)
cNome:= Alltrim(Posicione("SA4",1,xFilial("SA4")+SA1->A1_TRANSP,"A4_NOME"))
cTransp+=' '+cNome+' '
Endif
//Seleciona as transportadoras disponíveis no combo
cQry:= " Select A4_COD COD, A4_NOME NOME"
cQry+= " From "+RetSqlName("SA4")+" SA4 "
cQry+= " Where A4_FILIAL = '"+xFilial("SA4")+"' "
cQry+= " And A4_COD NOT IN ('"+SA1->A1_TRANSP+"','"+SCJ->CJ_XTRANSP+"') "
cQry+= " And SA4.D_E_L_E_T_ = ' ' "
If Select("QRT")> 0
QRT->(dbCloseArea())
Endif
APWExOpenQuery(ChangeQuery(cQry),'QRT',.T.)
While QRT->(!Eof())
cTransp+=' '+Alltrim(QRT->NOME)+' '
QRT->(dbSkip())
End
Endif
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:=''
cTabela+=' '+Alltrim(Posicione("DA0",1,xFilial("DA0")+SCJ->CJ_TABELA,"DA0_DESCRI"))+' '
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","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","N",lEdit,.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_DESCONT","*"," 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 += ''
lProdBloq:= .F.
SB1->(dbSetOrder(1))
SB1->(dbSeek(xFilial("SB1")+SCK->CK_PRODUTO))
If SB1->B1_MSBLQL = '1'
lProdBloq:= .T.
Endif
DA1->(dbSetOrder(1))
DA1->(dbSeek(xFilial("DA1")+SCJ->CJ_TABELA+SCK->CK_PRODUTO))
// 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
//Verifica se o produto está bloqueado
If aItens[nLin,2] == "CK_ITEM" .and. lEdit .and. lProdBloq //lCopy .and. SB1->B1_MSBLQL = '1'
xValue := 'xx'
//lProdBloq:= .T.
Else
xValue := AllTrim(SCK->&(aItens[nLin][2]))
Endif
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)))
If lEdit
nVlrProd:= u_getValProd(SCJ->CJ_COMISTR,SCJ->CJ_PERCFRT)
xValue := Alltrim(TransForm(nVlrProd,PesqPict("DA1","DA1_PRCVEN")))
Else
xValue := Iif(lNewOrc,"",Alltrim(TransForm(SCK->CK_PRCVEN,PesqPict("SCK","CK_PRCVEN"))))
Endif
Elseif aItens[nLin,2] == "CK_PRCVEN"
If lEdit
nVlrProd:= u_getValProd(SCJ->CJ_COMISTR,SCJ->CJ_PERCFRT)
xValue := Alltrim(TransForm(nVlrProd,PesqPict("DA1","DA1_PRCVEN")))
nVlrCDesc:= nVlrProd
Else
xValue := Alltrim(TransForm(SCK->CK_PRUNIT,PesqPict("SCK","CK_PRUNIT")))
nVlrCDesc:= SCK->CK_PRUNIT
Endif
Elseif aItens[nLin,2] == "CK_DESCONT"
xValue:= Alltrim(TransForm(SCK->CK_DESCACM,PesqPict("SCK","CK_DESCONT")))
Elseif aItens[nLin,2] == "CK_VALOR"
If lEdit
nVlrProd:= u_getValProd(SCJ->CJ_COMISTR,SCJ->CJ_PERCFRT)
xValue := Alltrim(TransForm(nVlrProd*SCK->CK_QTDVEN,PesqPict("SCK",aItens[nLin,2])))
nTotValor:= nVlrProd*SCK->CK_QTDVEN
Else
xValue := Alltrim(TransForm(SCK->(CK_VALOR/*+CK_XVALIPI+CK_XICMST*/),PesqPict("SCK",aItens[nLin,2])))
nTotValor:=SCK->CK_VALOR
Endif
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) .and. SB1->B1_MSBLQL <> '1'
cOrcItens +='
Else
cOrcItens +='' //style="size:4" data-width="90%" style="height:90%"
cOrcItens += U_GetProdOrc(SCJ->CJ_CLIENTE, SCJ->CJ_TABELA, SCK->CK_PRODUTO)
cOrcItens +=' '
Endif
Else
cOrcItens += ' "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 += ' '
cItensHid += ' '
cItensHid += ' '
cItensHid += ' '
cOrcItens+=cItensHid
//Totais
nTImpostos += SCK->(CK_ST+CK_IPI)
nTVlrUnit += nTotValor //total do item c/desconto
nTTotal += nTotValor + SCK->(CK_IPI+CK_ST) //total com desconto + impostos
nTQtdItem += SCK->CK_QTDVEN
nValDesc += nTotValor * (SCK->CK_DESCACM/100)
//nValDesc += nTotValor * (SCK->CK_DESCONT/100)
nTVlrSDesc += nTotValor + (nTotValor * (SCK->CK_DESCACM/100)) //Total sem desconto
//nTVlrSDesc += nTotValor + (nTotValor * (SCK->CK_DESCONT/100)) //Total sem desconto
nPerCom:= SCK->CK_COMIS1
nValCom:= SCK->CK_COMISSA //(SCK->CK_QTDVEN * SCK->CK_PRCVEN) * (nPerCom/100)
nTComiss+= nValCom
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+=''
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+=' Itens sem Desconto '
cTotalReg+=' '
cTotalReg+=' '
cTotalReg+=' Itens sem Desconto+Impostos '
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 SB1.D_E_L_E_T_ = ' ' " //AND B1_MSBLQL <> '1'
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 "
CONOUT(CQRY)
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+=' DA1_CODPRO) == AllTrim(cOrcProd), 'selected','')+'>'+Alltrim(QRP->DA1_CODPRO)+' - '+Alltrim(StrTran(QRP->B1_DESC,"'",""))+' '
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 cLinha := "00"
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 nMC_L := 0
Local nMCTotIt_L:= 0
Local nMC_E := 0
Local nMCTotIt_E:= 0
Local nMC_P := 0
Local nMCTotIt_P:= 0
Local cAcessorio:= GetNewPar("PR_ACESSOR","ACS-LHT44BC/ACS-LHT44PT/ACS-LHT45BC/ACS-LHT45PT")
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())
cLinha := soma1(cLinha)
cTipo := Alltrim(TMP1->B1_TIPO)
cGrupo := Alltrim(TMP1->B1_GRUPO)
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)
//Cria o grid da tabela de margem
cMgItens+= ''
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
cMgItens+= ' '
// Carrega as Variaveis Totalizador Orçamento, Luminarias e Equipamentos.
If cTipo == "CO" .AND. cGrupo== "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 cGRUPO <> 'PAN' .and. !(AllTrim(TMP1->CK_PRODUTO) $ cAcessorio)
// soma a margem total
nMC_T := nMC_T + nMC
// soma o valor total
nMCTotIt := nMCTotIt + TMP1->CK_VALOR
EndIf
EndIf
//Margem total do orçamento
nMargem:= ((nMC_T / nMCTotIt)*100)
//Luminarias
If cTipo == "PA"
If cGRUPO == "C" .OR. cGRUPO == "C-EX" .OR. cGRUPO == "F" .OR. cGRUPO == "F-EX" .OR. cGRUPO == "PE" .OR. cGRUPO == "DEC" .OR. cGRUPO == "DECV" .OR. cGRUPO == "PED" .OR. cGRUPO == "TEC" .OR.;
cGRUPO == "LED" .OR. cGRUPO == "LEDC" .OR. cGRUPO == "LEDD" .OR. cGRUPO == "LEDT" .OR. cGRUPO == "PEL" .OR. cGRUPO == "REIL" .OR. cGRUPO == "REIO" .OR. cGRUPO == "REAB"
nMC_L := nMC_L + nMc
nMCTotIt_L := nMCTotIt_L + TMP1->CK_VALOR
ElseIf cGrupo == "IMP" .AND. Substr(TMP1->CK_PRODUTO,1,2) <> "AC"
nMC_L := nMC_L + nMc
nMCTotIt_L := nMCTotIt_L + TMP1->CK_VALOR
EndIf
nMLuminaria:= (nMC_L / nMCTotIt_L)*100
ElseIf cTipo == "RE" .AND. cGrupo == "RELU"
nMC_L := nMC_L + nMc
nMCTotIt_L := nMCTotIt_L + TMP1->CK_VALOR
nMLuminaria:= (nMC_L / nMCTotIt_L)*100
EndIf
// Acessorios e Equipamentos.
If cTipo == "PA"
If cGRUPO == "ACES" .OR. cGRUPO == "PI" .OR. cGRUPO == "E040" .OR. cGRUPO == "E041" .OR. cGRUPO == "E042" .OR. cGRUPO == "E043" .OR. cGRUPO == "E044" .OR. cGRUPO == "E045" .OR.;
cGRUPO == "E046" .OR. cGRUPO == "E047" .OR. cGRUPO == "E048" .OR. cGRUPO == "E049"
// Acessorios PAN 23.01.2023 sao contabilizados junto do grupo pan
If !(AllTrim(TMP1->CK_PRODUTO) $ cAcessorio)
nMC_E := nMC_E + nMc
nMCTotIt_E := nMCTotIt_E + TMP1->CK_VALOR
Endif
ElseIf cGrupo == "IMP" .AND. Substr(TMP1->CK_PRODUTO,1,2) = "AC"
nMC_E := nMC_E + nMc
nMCTotIt_E := nMCTotIt_E + TMP1->CK_VALOR
EndIf
nMEquipa:= (nMC_E / nMCTotIt_E)*100
ElseIf (cTipo == "MP" .OR. cTipo == "RE")
If cGRUPO <> "RELU"
nMC_E := nMC_E + nMc
nMCTotIt_E := nMCTotIt_E + TMP1->CK_VALOR
nMEquipa:= (nMC_E / nMCTotIt_E)*100
EndIf
EndIf
// Grupo PAN
IF cGrupo == "PAN" .or. (AllTrim(TMP1->CK_PRODUTO) $ cAcessorio)
nMC_P := nMC_P + nMc
nMCTotIt_P := nMCTotIt_P + TMP1->CK_VALOR
nMPainel:= (nMC_P / nMCTotIt_P)*100
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)