//-------------------------------------------------------------------------------------- // Ponto de Entrada: A415TDOK - Valida o Orçamento antes de Gravar. // Solicitante: Rodrigo / Comercial. // Autor: Aytel M. Fonseca. // Data: 06-08-2014 // Data Alteração: PILATTI - Incluída pergunta sobre o valor do frete, pois para SEDEX é // necessário permitir a inclusão do valor, nesses caso pergunto e caso a resposta seja // positiva, desconsidero o cálculo de frete mínimo. //-------------------------------------------------------------------------------------- #include "protheus.ch" #include "rwmake.ch" #include "TOTVS.CH" #include "topconn.ch" User Function A415TDOK() Local aArea := GetArea() Local lRet := .T. Local cTotOrcTab := 0 Local cDscVista := 0 Local cMsLumEspL := "" Local cMsLumEspT := "" Private cTotOrc := 0 Private Gravou := .F. Private cCusto := 0 Private cAliqIPI := 0 Private cICMS := 0 Private cSubsTrb := 0 Private cSubsCus := 0 Private cPIS := 0 Private cCofins := 0 Private cComissao := 0 Private cComis1, cComis2 Private cFrete := 0 Private cRT := 0 Private cIPI := 0 Private cST := 0 Private cPerST := 0 Private cGrupoTri := 0 Private cINSSP := 0 Private cRecLiq := 0 Private cMC := 0 Private cMensagem := "" /* TMP1->(dbGoTop()) While TMP1->(!EOF()) If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado) TMP1->(dbSkip()) Loop EndIf If Trim(POSICIONE("SB1",1,xFilial("SB1")+Trim(TMP1->CK_PRODUTO),"B1_GRUPO")) == 'PAN' IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) <> 0 .AND. TMP1->CK_DESCACM > 0 // Alterado em 15.03.22 p/ permitir desconto negativo (Acrescimo) - Gabrielle e Rodrigo. // .AND. M->CJ_CONDPAG <> 'A49' MsgStop("Desconto permitido apenas para quantdades multiplos de 6.", "Produto Grupo PAN - Ajsutes Necessarios.") lRet := .F. ENDIF ENDIF TMP1->(dbSkip()) EndDo If !lRet Return(.F.) EndIf TMP1->(dbGoTop()) While TMP1->(!EOF()) If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado) TMP1->(dbSkip()) Loop EndIf If Trim(POSICIONE("SB1",1,xFilial("SB1")+Trim(TMP1->CK_PRODUTO),"B1_GRUPO")) == 'PAN' /* If M->CJ_CONDPAG = 'A49' IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) = 0 .AND. TMP1->CK_DESCACM > 6.5 MsgStop("Produto Grupo PAN com Pagto. A Vista - Desconto máximo permitido de 6.5 % ", "Ajsutes Necessarios.") lRet := .F. ENDIF Else IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) = 0 .AND. TMP1->CK_DESCACM > 5 MsgStop("Produto Grupo PAN - Desconto máximo permitido de 5 % ", "Ajsutes Necessarios.") lRet := .F. ENDIF // ENDIF ENDIF TMP1->(dbSkip()) EndDo If !lRet Return(.F.) EndIf */ // CHAMADO RODRIGO //E4_FILIAL+E4_CODIGO If Posicione("SE4",1,xFilial('SE4')+ M->CJ_CONDPAG, "E4_MSBLQL")=='1' .and. !isblind() MsgStop("A codição de pagamento " + M->CJ_CONDPAG + " esta bloqueada, por favor verifique. ","ATENÇÃO") Return() EndIf //---------------------------------- // Validações Comerciais Engenharia. //---------------------------------- // If cFilAnt = '01' If Vazio(M->CJ_NROPOR) .and. !isblind() MsgStop("Não foi informado o código da oportunidade. Aba cadastrais.","Erro.") RestArea(aArea) Return(.F.) EndIf // Chamado 000051 If !Vazio(M->CJ_CODPERD).AND.Vazio(M->CJ_CDCONCO) .and. !isblind() MsgStop("O cód. da perda está preenchido portanto, o campo concorrente deve ser preenchido.","Atenção") RestArea(aArea) Return(.F.) EndIf If M->CJ_LUMINOT = '1' .AND. Vazio(M->CJ_REGLUMI) .and. !isblind() MsgStop("Foi informado que houve Estudo Luminotécnico, mas não foi"+Chr(13)+"informado o numero do Registro.","Erro !!!") RestArea(aArea) Return(.F.) EndIf If M->CJ_LUMINOT <> '1' .AND. !Vazio(M->CJ_REGLUMI) .and. !isblind() MsgStop("Foi informado o Registro do Estudo Luminotécnico, mas não houve o Estudo.","Erro !!!") RestArea(aArea) Return(.F.) EndIf If ALTERA .AND. aRotina[3][2] <> 'A415Copia' If Select("QRY") > 0 dbSelectArea("QRY") dbCloseArea("QRY") Endif cQuery := "SELECT * FROM SZW010 WHERE D_E_L_E_T_ = ' ' AND ZW_FILIAL = '" + xFilial("SCJ") + "' AND ZW_ORCAMEN = '" + M->CJ_NUM + "' AND ZW_DATA = '" + DToS(DDATABASE) + "' " TcQuery cQuery New Alias "QRY" If QRY->(EOF()) .and. !isblind() MsgStop("Não foi encontrado nenhum registro no cadastro da Etapa de Negociação.","Erro.") RestArea(aArea) Return(.F.) EndIf If Vazio(M->CJ_CLIINTE) .and. !isblind() MsgStop("Não foi informado o Cliente de Intermediação. Aba Etapas da Negociação.","Erro.") RestArea(aArea) Return(.F.) EndIf EndIf // Política de Descontos. TMP1->(dbGoTop()) While TMP1->(!EOF()) If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado) TMP1->(dbSkip()) Loop EndIf cTotOrc := cTotOrc + TMP1->CK_VALOR cTotOrcTab := cTotOrcTab + (TMP1->CK_PRTAB * TMP1->CK_QTDVEN) TMP1->(dbSkip()) EndDo cDscConc := Round(((((Round(cTotOrc,2)/NoRound(cTotOrcTab,2))*100)-100)*-1),2) If ABS(Round(cDscConc,2)) <= 0.02 cDscConc := 0 EndIf If Select("QRY") > 0 dbSelectArea("QRY") dbCloseArea("QRY") Endif cQuery := "SELECT ZA_PERCDES, ZA_PEDESAV FROM " + RetSQLName("SZA") + " WHERE " cQuery += "ZA_FILIAL = '" + xFilial("SZA") + "' AND ZA_DE <= " + Str(cTotOrcTab) + " AND ZA_ATE >= " + Str(cTotOrcTab) + " AND D_E_L_E_T_ = ' ' " TcQuery cQuery New Alias "QRY" If CJ_CONDPAG == '001' .OR. CJ_CONDPAG == '500' cDscVista := QRY->ZA_PEDESAV EndIf If Round(cDscConc,2) > (QRY->ZA_PERCDES + CJ_DSDIRET + cDscVista) .and. !isblind() lRet := .F. MsgStop("Orçamento excedeu a Política de Descontos." + Chr(13) + "Entre em contato com a Supervisão ou Diretoria." + Chr(13) + Chr(13)+; "Dsc.Concedido: " + Transform(cDscConc,"@R 999.99") + " %" + Chr(13) + "Dsc.Máximo Permitido:" +; Transform((QRY->ZA_PERCDES + CJ_DSDIRET + cDscVista),"@R 999.99") + " %" + Chr(13) + Chr(13)+; "Orçamento Pr.Tabela: R$ " + Transform(Round(cTotOrcTab,2),"@R 9,999,999.99") ,"Política de Descontos") EndIf // Frete. // CJ_FRETE := 0 Pilatti - 26/03/2015 - // If cTotOrcTab <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ") // Alterado em 17.03.2015 - Katiane. If (CJ_TPFRETE = 'F' .OR. CJ_TPFRETE = 'T' .OR. CJ_TPFRETE = 'S') CJ_FRETE := 0 Else If CJ_FRETE > 0 If MsgYesNo("*** ATENÇÃO *** " + Chr(13) + Chr(13) + "Foi informado um valor de FRETE diferente do frete mínimo calculado pelo sistema, CONFIRMA ?") CJ_FRETE := CJ_FRETE Else If cTotOrc <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ") If Select("QRY") > 0 dbSelectArea("QRY") dbCloseArea("QRY") Endif cQuery := "SELECT * FROM " + RetSQLName("SZ3") + " WHERE " // cQuery += "Z3_FILIAL = '" + xFilial("SZ3") + "' AND D_E_L_E_T_ = ' ' AND " cQuery += "D_E_L_E_T_ = ' ' AND " cQuery += "Z3_UF = '" + Substr(CJ_UFEnt,1,2) + "' ORDER BY Z3_MUNICIP" TcQuery cQuery New Alias "QRY" CJ_FRETE := QRY->Z3_VLFRMIN While QRY->(!EOF()) If Trim(QRY->Z3_MUNICIP) == Substr(CJ_UFEnt,3,5) CJ_FRETE := QRY->Z3_VLFRMIN EndIf QRY->(DbSkip()) EndDo Else CJ_FRETE := 0 EndIf EndIf Else If cTotOrc <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ") If Select("QRY") > 0 dbSelectArea("QRY") dbCloseArea("QRY") Endif cQuery := "SELECT * FROM " + RetSQLName("SZ3") + " WHERE " // cQuery += "Z3_FILIAL = '" + xFilial("SZ3") + "' AND D_E_L_E_T_ = ' ' AND " cQuery += "D_E_L_E_T_ = ' ' AND " cQuery += "Z3_UF = '" + Substr(CJ_UFEnt,1,2) + "' ORDER BY Z3_MUNICIP" TcQuery cQuery New Alias "QRY" CJ_FRETE := QRY->Z3_VLFRMIN While QRY->(!EOF()) If Trim(QRY->Z3_MUNICIP) == Substr(CJ_UFEnt,3,5) CJ_FRETE := QRY->Z3_VLFRMIN EndIf QRY->(DbSkip()) EndDo Else CJ_FRETE := 0 EndIf EndIf EndIf // EndIf // Pergunta se o cliente é contribuinte do ICMS - Sim ou Não. // Atualiza SA1 - Solicitante: Rodrigo Wilges em 30-11-2015. // Autor: Aytel M. Fonseca. // Retirado em 09.10.2020 Solicitação Marcelo. /* If lRet .AND. INCLUI MontaTela() If Gravou = .F. MontaTela() EndIf EndIf */ // If cFilAnt == '01' .AND. INCLUI // Envia e-Mail para supervisoras dos clientes que ficaram ativos. If (DToS(SA1->A1_ULTORCA) = ' ' .OR. (DDATABASE-SA1->A1_ULTORCA) > 365) EmailAtiv() EndIf // Grava data do último orçamento. RecLock("SA1",.F.) SA1->A1_ULTORCA:= DDATABASE MsUnlock() // EndIf /* If cFilAnt = '05' If Select("QRY") > 0 dbSelectArea("QRY") dbCloseArea("QRY") Endif cQuery := "SELECT * FROM SUC010 WHERE D_E_L_E_T_ = ' ' AND UC_CODIGO = '" + M->CJ_ATENDIM + "' AND UC_ENTIDAD = 'SA1' AND UC_CHAVE = '" + M->CJ_CLIENTE + M->CJ_LOJA + "'" TcQuery cQuery New Alias "QRY" If QRY->(EOF()) MsgStop("O atendimento selecionado não é para o mesmo cliente do orçamento.","Validação do Atendimento.") RestArea(aArea) Return(.F.) EndIf EndIf */ // Testa a Validade do Custo das Luminarias Especiais. 08/10/2018. TMP1->(dbGoTop()) While TMP1->(!EOF()) If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado) TMP1->(dbSkip()) Loop EndIf If Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PE" .OR.; Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PEL" .OR.; Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PED" .OR.; Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PI" If (POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP")+30) < dDataBase cMsLumEspL += "" + TMP1->CK_ITEM + "" cMsLumEspL += "" + TMP1->CK_PRODUTO + "" cMsLumEspL += "" + TMP1->CK_DESCRI + "" cMsLumEspL += "" + DToC(POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP"))+" "+; Str(dDatabase - POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP"))+" dias"+"" cMsLumEspL += "" + Transform(TMP1->CK_QTDVEN,"@E 99999.99") + "" EndIf EndIf TMP1->(dbSkip()) EndDo If cMsLumEspL <> "" cMsLumEspT += IIf(cFilAnt = '01',"Engenharia - "+Trim(cUserName),"Abalux - "+Trim(cUserName))+Chr(13)+Chr(14) cMsLumEspT += "Cliente: "+Trim(M->CJ_CLIENTE)+" - "+Trim(M->CJ_YNOMCLI)+Chr(13)+Chr(14) cMsLumEspT += "Obra: "+Trim(M->CJ_OBRA)+Chr(13)+Chr(14) cMsLumEspT += "" If MsgYesNo("Existem códigos especiais com preços desatualizados."+Chr(13)+Chr(13)+"Deseja enviar e-Mail solicitando atualização ?","** Atenção **") U_EnvMail("jucelene-sjp@lumicenter.com;victor.pires@lumicenter.com;gustavo-sjp@lumicenter.com",UsrRetMail(__cUserId),"","e-Mail Automático. Atualização de preço - Luminárias especiais. Orçamento: "+M->CJ_NUM+"",cMsLumEspT+cMsLumEspL,"") EndIf cMsLumEspL := "" cMsLumEspT := "" EndIf Calc_MC() RestArea(aArea) // Desabilita Funções SetKey(K_ALT_K, Nil) SetKey(K_ALT_L, Nil) Return(lRet) /*Static Function MontaTela() Local aOptions :={"Sim","Não"} Local oRadio := 1 Private nRadio := IIf(SA1->A1_CONTRIB = '1' .OR. SA1->A1_CONTRIB = ' ',1,2) // 1=Sim 2=Nao Private oFont1 := TFont():New("Calibri",,020,,.T.,,,,,.F.,.F.) Private oButton1 Private oSay1 Private oDlg DEFINE MSDIALOG oDlg TITLE "Cliente Contribuinte do ICMS" FROM 000,000 TO 140,330 COLORS 0,16777215 PIXEL oRadio:= tRadMenu():New(25,08,aOptions,{|u|if(PCount()>0,nRadio:=u,nRadio)},oDlg,,,,,,,,100,20,,,,.T.) @ 010,005 SAY oSay1 PROMPT "O cliente é contribuinte do ICMS ?" SIZE 150,012 OF oDlg COLORS 0,16777215 FONT oFont1 PIXEL @ 050,115 BUTTON oButton1 PROMPT "Confirmar" SIZE 040,012 ACTION GravaA1() OF oDlg PIXEL ACTIVATE MSDIALOG oDlg CENTERED Return() Static Function GravaA1() RecLock("SA1",.F.) SA1->A1_CONTRIB := IIf(nRadio = 1,'1','2') MsUnlock() Gravou := .T. oDlg:END() Return()*/ Static Function Calc_MC() TMP1->(dbGoTop()) While TMP1->(!EOF()) If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado) TMP1->(dbSkip()) Loop EndIf // Buscar o Custo Medio ou Custo Standart, Aliquota do IPI If Select("QRY1") > 0 dbSelectArea("QRY1") dbCloseArea("QRY1") Endif cQuery1 := "SELECT B1_CUSTD,B1_IPI,B1_GRTRIB, B1_TIPO, B1_GRUPO FROM " + RetSQLName("SB1") + " WHERE B1_FILIAL = '" + xFilial("SB1") + "' AND " cQuery1 += "B1_COD = '" + TMP1->CK_PRODUTO + "' AND " cQuery1 += RetSQLName("SB1") + ".D_E_L_E_T_ = ' ' " TcQuery cQuery1 New Alias "QRY1" If QRY1->B1_TIPO = 'PS' .AND. QRY1->B1_GRUPO = 'SERV' cCusto := TMP1->CK_CUSTO // * TMP1->CK_QTDVEN) Else cCusto := (QRY1->B1_CUSTD * TMP1->CK_QTDVEN) EndIf cAliqIPI := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_IPI") == "S",QRY1->B1_IPI,0) cGrupoTri := Trim(QRY1->B1_GRTRIB) // Buscar a Aliquota Externa e do Destino If Select("QRY2") > 0 dbSelectArea("QRY2") dbCloseArea("QRY2") Endif cQuery2 := "SELECT * FROM " cQuery2 += RetSQLName("SF7") cQuery2 += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' " cQuery2 += " AND F7_GRTRIB = '" + Trim(cGrupoTri) + "' " cQuery2 += " AND F7_EST = '" + SA1->A1_EST + "' " cQuery2 += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' " cQuery2 += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' " cQuery2 += " AND D_E_L_E_T_ = ' '" TcQuery cQuery2 New Alias "QRY2" // Carrega as Variaveis If CJ_TIPOCLI $ 'F/S' cICMS := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_ICM") == "S",(TMP1->CK_VALOR*(1+(cALIQIPI/100))*QRY2->F7_CARGICM/100),0) If POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_TIPO") == "PS" .AND.; POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_GRUPO") == "SERV" cICMS := ((TMP1->CK_VALOR * POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_ALIQISS"))/100) EndIf Else cICMS := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_ICM") == "S",((TMP1->CK_VALOR * QRY2->F7_CARGICM)/100),0) EndIf cPIS := ((TMP1->CK_VALOR * 1.65)/100) cCofins := ((TMP1->CK_VALOR * 7.60)/100) // Testa se tem Subsido Tributario. cSubsTrb := 0 If POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSTRB") > 0 cSubsTrb := ((cICMS * 0.80) * POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSTRB")) Endif // Testa se tem Subsido no Custo. cSubsCus := 0 If POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSCUS") > 0 cSubsCus := (cCusto * POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSCUS")) Endif cComis2 := 0 cComis3 := 0 If !Vazio(CJ_VEND) cComis2 := TMP1->CK_COMIS1 EndIf If !Vazio(CJ_VEND3) cComis3 := TMP1->CK_COMIS3 EndIf If cFilAnt = '05' .AND. CJ_VEND = '00143' cComissao := (TMP1->CK_VALOR * 0.05) // Alterado para 5 em 21-02-2018 - Dr. Chen Else cComissao := ((TMP1->CK_VALOR * (cComis2 + cComis3))/100) EndIf cRT := (((TMP1->CK_VALOR * CJ_COMISTR)/100)*0.60) cIPI := IIF(Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_IPI")=='S',((TMP1->CK_VALOR * cALIQIPI)/100),0) // If Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPCMP") == "2" // Comentado para que as usuarios do comercial possam usar o campo %ST para informa o valor ao cliente. If Select("QRY5") > 0 dbSelectArea("QRY5") dbCloseArea("QRY5") Endif cQuery5 := "SELECT CFC_ALQFCP FROM CFC010 WHERE CFC_FILIAL = '" + xFilial("SCK") + "' AND CFC_UFDEST = '" + QRY2->F7_EST + "' AND D_E_L_E_T_ = ' ' " TcQuery cQuery5 New Alias "QRY5" cFCP := QRY5->CFC_ALQFCP If (CJ_TPFRETE = 'F' .OR. CJ_TPFRETE = 'T' .OR. CJ_TPFRETE = 'S') CJ_FRETE := 0 Else cFrete := ((((TMP1->CK_VALOR + cIPI) * (3 + CJ_PERCFRT))/100)*0.60) EndIf // Calculo da ST /* If M->CJ_FRETE > 0 If Select("QRY_FRT") > 0 dbSelectArea("QRY_FRT") dbCloseArea("QRY_FRT") Endif cQuery := "SELECT SUM(CK_VALOR) TotMer FROM SCK010 WHERE D_E_L_E_T_ = ' ' AND CK_FILIAL = '" + xFilial("SCJ") + "' AND CK_NUM = '" + CJ_NUM + "' " TcQuery cQuery New Alias "QRY_FRT" EndIf*/ CalcST() /* If QRY2->F7_MARGEM > 0 If QRY2->F7_EST = 'PR' cST := (((((TMP1->CK_VALOR + cIPI)*QRY2->F7_MARGEM)/100) + (TMP1->CK_VALOR + cIPI)) * ((QRY2->F7_ALIQDST)/100) - (TMP1->CK_VALOR * (QRY2->F7_ALIQINT/100))) cPerST := ((cST / (TMP1->CK_VALOR + cIPI))*100) Else cST := (((((TMP1->CK_VALOR + cIPI)*QRY2->F7_MARGEM)/100) + (TMP1->CK_VALOR + cIPI)) * (((QRY2->F7_ALIQDST+cFCP))/100) - (TMP1->CK_VALOR * (QRY2->F7_ALIQEXT/100))) cPerST := ((cST / (TMP1->CK_VALOR + cIPI))*100) EndIf Else If Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPCMP") == '2' .AND. Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPSOL") == '1' CalcST() EndIf EndIf // EndIf */ cINSSP := 0 cRecLiq := (TMP1->CK_VALOR - cICMS - cPIS - cCofins - cINSSP) cMC := ((TMP1->CK_VALOR - cCusto - cICMS - cPIS - cCofins - cFrete - cComissao - cINSSP - cRT) + cSubsTrb + cSubsCus) TMP1->CK_CUSTO = cCusto TMP1->CK_ICMS = cICMS TMP1->CK_SUBSTRB = cSubsTrb TMP1->CK_SUBSCUS = cSubsCus TMP1->CK_PIS = cPIS TMP1->CK_COFINS = cCofins TMP1->CK_COMISSA = cComissao TMP1->CK_FRETE = cFrete TMP1->CK_RT = cRT TMP1->CK_IPI = cIPI TMP1->CK_ST = cST TMP1->CK_MCPERST = cPerST TMP1->CK_INSSP = cINSSP TMP1->CK_CARICMS = QRY2->F7_CARGICM TMP1->CK_MC = cMC TMP1->CK_MCPERC = ((cMC / TMP1->CK_VALOR) * 100) TMP1->CK_RECLIQ = cRecLiq TMP1->(dbSkip()) EndDo Return() Static Function CalcST() Local cFreteVal := 0 // Em Produção 09.12.2020 If M->CJ_FRETE > 0 // cFreteVal := ((TMP1->CK_VALOR * M->CJ_FRETE) / QRY_FRT->TotMer) cFreteVal := ((TMP1->CK_VALOR * M->CJ_FRETE) / cTotOrc) EndIf MaFisSave() MaFisEnd() //Dados do Cliente Para Calculo do Imposto. MaFisIni(M->CJ_CLIENTE,; // 1-Codigo Cliente/Fornecedor M->CJ_LOJA,; // 2-Loja do Cliente/Fornecedor "C",; // 3-C:Cliente , F:Fornecedor M->CJ_TIPOORC,; // 4-Tipo da NF M->CJ_TIPOCLI,; // 5-Tipo do Cliente/Fornecedor Nil,; // 6-Relacao de Impostos que suportados no arquivo Nil,; // 7-Tipo de complemento Nil,; // 8-Permite Incluir Impostos no Rodape .T./.F. Nil,; // 9-Alias do Cadastro de Produtos - ("SBI" P/ Front Loja) "MATA415",; // 10-Nome da rotina que esta utilizando a funcao Nil,; // 11-Tipo de documento Nil,; // 12-Especie do documento Nil) // 13- Codigo e Loja do Prospect //Calculo Substituição Tributaria MaFisAdd(Trim(TMP1->CK_PRODUTO),; // 1-Codigo do Produto TMP1->CK_TES,; // 2-Codigo do TES TMP1->CK_QTDVEN,; // 3-Quantidade Round(TMP1->CK_PRCVEN,2),; // 4-Preco Unitario 0,; // 5-Valor do Desconto "",; // 6-Numero da NF Original "",; // 7-Serie da NF Original 0,; // 8-RecNo da NF Original Round(cFreteVal,2),; // Valor do frete do item 0,; // Valor da despesa do item 0,; // Valor do seguro do item 0,; // 12-Valor do Frete Autonomo Round(TMP1->CK_VALOR,2),; // 13-Valor da Mercadoria 0) // 14-Valor da Embalagem cST := MaFisRet(1,"IT_VALSOL") cPerST := ((cST / (TMP1->CK_VALOR + cIPI + cFreteVal))*100) MaFisEnd() MaFisRestore() Return() /* Local A:= 0 Local B:= 0 Local C:= 0 Local D:= 0 Local cFreteVal := 0 // Calculo criado em 16.10.2020 - Marcelo. If CJ_FRETE > 0 If Select("QRY_FRT") > 0 dbSelectArea("QRY_FRT") dbCloseArea("QRY_FRT") Endif cQuery := "SELECT SUM(CK_VALOR) TotMer FROM SCK010 WHERE D_E_L_E_T_ = ' ' AND CK_FILIAL = '" + xFilial("SCJ") + "' AND CK_NUM = '" + CJ_NUM + "' " TcQuery cQuery New Alias "QRY_FRT" cFreteVal := ((TMP1->CK_VALOR * CJ_FRETE) / QRY_FRT->TotMer) EndIf If Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'MG' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'MGS' A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))) B := (A / (1 - (QRY2->F7_ALIQDST / 100))) C := (B * (QRY2->F7_ALIQDST / 100)) D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)) cST := (C - D) ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'RS' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'RSS' A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))) B := (A / (1 - (QRY2->F7_ALIQDST / 100))) C := (B * (QRY2->F7_ALIQDST / 100)) D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)) cST := (C - D) ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'GO' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'GOS' A := ((TMP1->CK_VALOR + cIPI + cFreteVal) / (1 - (QRY2->F7_ALIQDST / 100))) B := ((QRY2->F7_ALIQDST - QRY2->F7_ALIQEXT) / 100) cST := (A * B) ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'BA' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'BAS' A := (TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)) B := (A / (1 - (QRY2->F7_ALIQDST / 100))) C := (B * (QRY2->F7_ALIQDST / 100)) cST := (C - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))) ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'RJ' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'RJS' A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))) B := (A / (1 - ((cFCP + QRY2->F7_ALIQDST) / 100))) C := (B * ((cFCP + QRY2->F7_ALIQDST) / 100)) D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)) cST := (C - D) ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'MT' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'MTS' A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))) B := (A / (1 - (QRY2->F7_ALIQDST / 100))) C := (B * (QRY2->F7_ALIQDST / 100)) D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)) cST := (C - D) Else cST := ((TMP1->CK_VALOR + cIPI + cFreteVal) * ((QRY2->F7_ALIQDST - QRY2->F7_ALIQEXT) / 100)) EndIf Return() */ Static Function EMailAtiv() Local cMensagem := "" cMensagem += "Cliente Ativado pelo Orçamento: " + Trim(CJ_NUM) + CHR(13)+CHR(14)+CHR(13)+CHR(14) cMensagem += "Cliente: " + Trim(SA1->A1_COD)+"-"+Trim(SA1->A1_NOME) + CHR(13)+CHR(14) cMensagem += "Representante: " + Trim(CJ_VEND)+'-'+Trim(Posicione("SA3",1,xFilial('SCJ')+CJ_VEND,"A3_NOME")) + CHR(13)+CHR(14) cMensagem += "Regional: " + Trim(CJ_REGIAO)+'-'+Trim(Posicione("SA3",1,xFilial('SCJ')+CJ_REGIAO,"A3_NOME")) + CHR(13)+CHR(14) cMensagem += "Pré-Resgate: " + IIF(!Vazio(Trim(SA1->A1_USUPRER)),Trim(SA1->A1_USUPRER)+ " em: "+DToC(SA1->A1_DTPRERE),'-*-*-*-*-') + CHR(13)+CHR(14) U_EnvMail("gabrielle-sjp@lumicenter.com","tabata-sjp@lumicenter.com;regiane-sp@lumicenter.com","","e-Mail Automático. Cliente Ativado - Engenharia.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos) Return()
ItemProdutoDescriçãoAtualização do custo emQtde.