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!
Fernando Bueno
Consultor em FBSOLUTIONS
Sou consultor na área de implantação de sistemas ERP, com experiência na análise e implantação de projetos de sistemas, configurando a estrutura do software, capacitando usuários-chaves, ministrando treinamentos e workshops.
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In