⭐ Gostou do tema? Salve este artigo para consultar depois
Olá, tudo bem?
Muitas vezes, quando trabalhamos com tabelas de preço no Protheus, uma gama de clientes, de um determinado vendedor, possui a mesma tabela.
Exemplo:
- Vendedor de código 000001, que possui uma base de 100 clientes.
- Todos os clientes deste vendedor vão utilizar a tabela de preço 002. Antes era a 001.
Então você vai no MPSDU e altera todos os clientes? Não. Você utiliza a rotina abaixo que deixa você alterar todos os clientes de uma única vez, filtrando por vendedor.
Abrindo a rotina, é só informar:

Depois, você verá, na tabela de clientes deste mesmo vendedor:

Segue o código ADVPL abaixo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
//Bibliotecas #Include "Protheus.ch" #Include "TopConn.ch" //Constantes #Define STR_PULA Chr(13)+Chr(10) /*/{Protheus.doc} FBFATM01 //TODO Atualiza tabelas de preço por vendedor. @author fbsolutions.com.br @since 01/01/2017 @version undefined @type function /*/ User Function FBFATM01() Local aArea := GetArea() Private cPerg := "" //Definições da pergunta cPerg := "FBFATM01 " ValidPerg() If !Pergunte(cPerg, .T.) Return .F. EndIf //Se a pergunta não existir, zera a variável DbSelectArea("SX1") SX1->(DbSetOrder(1)) //X1_GRUPO + X1_ORDEM If ! SX1->(DbSeek(cPerg)) cPerg := Nil EndIf Processa({|| fUpdTab()}, "Processando...") RestArea(aArea) Return Static Function fUpdTab() Local cQuery := "" If MsgYesNo("O sistema atualizará para tabela " + MV_PAR03 + " todos os clientes, do vendedor " + MV_PAR01 + " até " + MV_PAR01 + ". Deseja confirmar?", "Confirma alteração?") cQuery := " UPDATE " + RetSQLName("SA1") + " SET A1_TABELA = '" + MV_PAR03 + "' WHERE A1_VEND BETWEEN '" + MV_PAR01 + "' AND '" + MV_PAR02 + "' AND A1_MSBLQL <> '1' " TCSQLEXEC(cQuery) MsgInfo("Cadastros atualizados.") EndIf Return Static Function ValidPerg() Local _sAlias, i, j _sAlias := Alias() dbSelectArea("SX1") dbSetOrder(1) aRegs:={} cPerg := if(upper(substr(cVersao,1,3)) == 'MP8',padr(cPerg,6),padr(cPerg,10)) AADD(aRegs,{cPerg,"01","Vend De?" ,"Espanhol","Ingles","mv_ch1","C",6,0,0,"G","","mv_par01","","","","","","","","","","","","","","","","","","","","","","","","","SA3",""}) AADD(aRegs,{cPerg,"02","Vend Até?" ,"Espanhol","Ingles","mv_ch2","C",6,0,0,"G","","mv_par02","","","","","","","","","","","","","","","","","","","","","","","","","SA3",""}) AADD(aRegs,{cPerg,"03","Para Tabela" ,"Espanhol","Ingles","mv_ch3","C",3,0,0,"G","","mv_par03","","","","","","","","","","","","","","","","","","","","","","","","","DA0",""}) For i := 1 to Len(aRegs) If !dbSeek(cPerg+aRegs[i,2]) RecLock("SX1",.T.) For j := 1 to FCount() If j <= Len(aRegs[i]) FieldPut(j,aRegs[i,j]) Endif Next j MsUnlock() dbCommit() EndIf Next i dbSelectArea(_sAlias) Return /*/{Protheus.doc} FBFATM01 //TODO Ponto de entrada que adiciona menu no Outras Ações, na tela de cadastro de vendedor. @author fbsolutions.com.br @since 01/01/2017 @version undefined */ User Function MTA040MNU() aAdd(aRotina, {'Atualiza Tabelas','U_FBFATM01' , 0 , 3,0,NIL}) Return |
Espero ter ajudado!


