Banco de Dados Configuração Ferramentas Protheus

Copy, Append e Replace – APSDU

Escritor por Vinícius Gregório

 

Olá!

 

Hoje, por sugestão de um leitor, vamos falar um pouco sobre as operações básicas do APSDU.

 

O APSDU/MPSDU é uma ferramenta de gerenciamento de base de dados para o TOTVS Protheus, tanto para tabelas em arquivos DBF/CTREE/BTRIEVE quanto para tabelas na base de dados SQL. Dessa forma, através dele é possível de gerenciar tanto dicionários de dados quanto às tabelas de registros de usuário (clientes, fornecedores, produtos, TES, condições de pagamento, etc).

 

Para exemplificar algumas das funcionalidades do sistema, vamos fazer um processo de cópia de registros (que pode ser utilizado para backup antes de uma operação), append de registros em uma tabela, como apagar uma tabela da base de dados e como realizar replace em registros;

 

Lembrando que toda e qualquer operação na base de dados deve ser realizada com muito cuidado e atenção. Uma vez que existem relacionamentos de sistema (o Protheus não usa relacionamentos dentro da base de dados) entre os registros da tabela, qualquer alteração feita em um registro pela ferramenta APSDU será aceita e executada. Isso pode gerar diversos problemas durante a execução dos processos no sistema. O ideal é trabalhar com uma base de dados local primeiro para ter certeza que as alterações não irão impactar negativamente o sistema 😉

 

Tabela de Exemplo

 

Para esse artigo criei uma tabela de testes simples na base de dados. Ela contém poucos campos, mas que já ajudam a analisar todo o processo e alguns problemas que podem surgir alterando manualmente os registros de uma tabela:

 

ZA0_FILIAL
ZA0_CODIGO

  • Título e descrição: Código
  • Tipo e tamanho: C 6,0
  • Picture: @!
  • X3_RELACAO: GETSX8NUM(“ZA0″,”ZA0_CODIGO”)

ZA0_NOME

  • Título e descrição: Nome
  • Tipo e tamanho: C 60,0
  • Picture: @!

ZA0_NASCTO

  • Título e descrição: Dt. Nascto
  • Tipo e tamanho: D 8,0

 

Criei a tabela como ZA0 aqui e a única particularidade da tabela é que ela tem um númerador automatico no campo ZA0_CODIGO. Dessa forma, criei uma função de AxCadastro simples pra tabela e inseri alguns registros nela. Se precisar de ajuda sobre como fazer uma função dessas, leia esse artigo: AxCadastro – Cadastro Simples.

 

Após criar a função você poder colocar em um menu para facilitar o seu acesso: Menu de Acesso ao Sistema.

 

Ainda, se você precisar de ajuda para criar a tabela na base de dados, segue listagem de artigos sobre o assunto: Tabelas e Campos e Índices e Agendando Alterações no Dicionário de Dados

Fique atualizado, É GRÁTIS!
Cadastre o seu endereço de e-mail e fique por dentro de todas as atualizações da AcademiaERP.
Não enviamos spam.

Cópia/Backup dos Dados

 

Uma das funcionalidades mais importantes do APSDU é realizar a cópia dos dados de uma tabela para um arquivo separado. Esse tipo de operação existe desde os precursores do APSDU (FOX, DBU…) porém é possível realizar a cópia de registros de uma tabela em uma base SQL para um arquivo .dbf, por exemplo.

 

Assim, podemos fazer um “backup” dos registros de determinadas tabelas antes de executar algum processo que irá alterar radicalmente a estrutura ou dados (um update, pode exemplo).

 

apsdu

 

Para acessar a função cópia vá em Utilitário > Copiar Para, ou utilize as teclas de atalho CTRL + Y. É importante já estar com a tabela aberta (que pode ser feito com as teclas de atalho CTRL + B).

 

diretórios no apsdu

 

A tela acima será exibida com os seguintes campos:

  • (Caminho)Arquivo: é o caminho onde o arquivo com os registros selecionados será salvo. Ao clicar no botão “…” será apresentada a tela acima a esquerda onde é possível selecionar em qual diretório o arquivo será salvo. Caso queira alterar o nome padrão oferecido para o arquivo, basta alterar no campo de texto;

 

  • Driver: Informa qual o tipo de arquivo que será utilizado para o arquivo salvo. Estão disponíveis as opções “DBF (DBFCDXADS/DBFCDXAX)“, “Top Connect (TOPCONN)“, “BTrieve (BTVCDX)“, “Ctree (CTREECDX)” e “Arquivo TXT“;

 

  • Para: Esse é um campo importante. Ele define um filtro de quais registros serão copiados para o arquivo final. Ou seja, você pode clicar no botão “…” e será apresentada a tela padrão de filtros do TOTVS Protheus:

edição de filtro no apsdu

 

Nessa tela é possível selecionar quais os campos da tabela aberta no momento da cópia, definir o operador utilizado (Igual a, Maior que, Maior ou igual a, Menor que, etc) e qual o valor da expressão que deverá ser obedecido. Utilizando os operadores and e or, juntamente com os parênteses, você consegue definir uma expressão completa que servirá de filtro para selecionar os registros que serão salvos no arquivo;

 

  • Enquanto: É importante lembrar que todas as funções de execução em massa no APSDU são executadas a partir do registro atual em que o usuário está posicionado. Dessa forma, o campo enquanto define uma condição que deve ser atendida para a cópia dos arquivos e, somente enquanto ela for satisfeita os registros serão copiados.Pensando na lógica de como ela funciona, podemos traçar uma comparação direta com um Do While em Clipper/AdvPL. Ela é muito utilizada quando o usuário abre uma tabela, organiza os registros de acordo com um determinado índice, busca uma determinada informação (CTRL + S) e irá copiar os dados enquanto aquela busca for atendida. A expressão utilizada para esse campo também pode ser informada através do botão “…”;

 

  • Opções: Outra possibilidade interessante da tela de cópia é que é possível copiar uma quantidade definida de registros que atendem as condições especificadas. As opções disponíveis são: Todos (irá copiar todos os registros que atendam as condições especificadas), Próximos (exibe um campo lateral para você informar quantos registros que atendam as condições especificadas serão copiados à partir do registro atual) e Resto (irá copiar o restando dos registros que atendam as condições especificadas, à partir do atual).

 

Após especificar os registros que você deseja copiar através das condições informadas, você pode clicar no botão OK. Uma tela com uma barra de progresso da cópia será exibida e o tempo dependerá da quantidade de registros que serão selecionados. No término da operação, o arquivo será gerado no caminho solicitado e estará disponível para cópia, transferência, exclusão…enfim, qualquer operação disponível para os arquivos no computador.

 

 

Append dos Dados

 

Já realizamos a cópia de registros de uma tabela do Protheus para um arquivo separado, agora vamos fazer o processo inverso: copiar os registros de um arquivo para uma tabela do sistema.

 

Esse é um procedimento muito comum, utilizado para equalizar dicionários de dados e copiar registros de uma base para outra (validação para produção, por exemplo).

 

abrindo o append from no apsdu

 

Para acessar a função de Append, basta ir em Utilitário > Append From ou utilizar as teclas de atalho CTRL + A.

 

A mesma tela de parâmetros apresentada na cópia irá aparecer só que, nesse momento, o alvo dos parâmetros é o arquivo que vamos utilizar para a cópia e não a tabela aberta no APSDU. Dessa forma, podemos copiar somente alguns registros para dentro da tabela do sistema e não somente o conteúdo completo de um arquivo.

 

Uma coisa importante de mencionar no processo de cópia de registros é que o APSDU faz simplesmente a cópia dos registros e, como o Protheus não utiliza definições de base de dados para numeradores sequenciais em tabelas, campos como Código poderão ficar com o seu conteúdo prejudicado para os próximos cadastros. Isso acontece porque o sistema trabalha com um conceito de múltiplas possibilidades de arquitetura de bancos de dados e é possível escolher entre diversos SGBDs. Nem todos eles tem um mecânismo de controle de numeração interno (imagine uma base de dados DBF).

 

Agora imagine o seguinte cenário: você tem uma tabela com um campo sequencial (como o ZA0_CODIGO), cadastra três registros (o sequencial fica com o próximo número em “000004“) e você faz o append de 3 registros (tomando o cuidado de alterar manualmente o conteúdo do campo ZA0_CODIGO desses registros para que fiquem “000004“, “000005” e “000006“). Quando você for cadastrar um novo registro através do sistema, qual o código que será gerado automaticamente? Sim, “000004“! E, ao salvar você receberá um belo erro de chave duplicada na tabela 🙁

 

Para solucionar isso você pode alterar manualmente os sequenciais no TOTVS Protheus (supondo que o seu servidor não esteja configurado para controlar o sequencial no hardlock), o que é um procedimento que não recomendo por abrir margem para diversos erros, ou você pode utilizar o código abaixo para solucionar o problema:

 

/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±
±±ºPrograma  ³FIXSXENUM º Autor ³ Vinícius Gregório  º Data ³  09/07/14   º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Função auxiliar para ajustar código sequencial de tabela   º±±
±±º          ³                                                            º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºUso       ³ AcademiaERP                                                º±±
±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/

User Function FIXSXENUM(cTabela,cCampo,nQuantidade)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Declaracao de Variaveis                                             ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Local aArea			:= GetArea()
Local lRetorno		:= .T.

DEFAULT cTabela		:= "ZA0"
DEFAULT cCampo		:= "ZA0_CODIGO"
DEFAULT nQuantidade	:= 4

For nLoop	:= 1 to nQuantidade
	GetSX8Num(cTabela,cCampo)
	ConfirmSX8()
Next nLoop

RestArea(aArea)
Return lRetorno

 

Básicamente, é uma função para solicitar o próximo número de determinado campo com sequencial de uma tabela e confirmar essa numeração. Essa funcionalidade é executada pelas funções GetSX8Num e ConfirmSX8 que, respectivamente, solicita o próximo número e confirma a utilização desse número.

 

No meu caso, coloquei um laço controlando a quantidade de números que serão utilizados e coloquei na assinatura da função a possibilidade de receber as informações de qual tabela (alias da tabela), qual o campo e quantos números serão “queimados”. Para chamar em menu sem precisar colocar uma tela para informar esses parâmetros, utilizei o DEFAULT para cada um desses pârametros.

 

Revisão das funcionalidades + Drop de Tabela + Replace

 

 

Conclusão

 

Espero que tenham gostado desse artigo! Como podem ver, hoje começamos uma nova linha de artigos aqui na AcademiaERP, com conteúdo em vídeo no nosso novo canal do Youtube. A idéia é publicarmos mais vídeos com conteúdo do TOTVS Protheus e estou deixando o link do canal para quem quiser se inscrever: www.youtube.com/user/academiaerp

 

Obrigado e até o próximo!

 

Sobre o Autor

Vinícius Gregório

Tecnólogo em análise de sistemas da informação pela Faculdade IBTA (SP), empreendedor da área de TI e consultor Protheus especializado em desenvolvimento AdvPL. Trabalhou em diversos projetos com os módulos de Compras, Estoque/Custos, Faturamento, Contabilidade Gerencial, Field Service/Gestão de Serviços, Financeiro, Gestão de Contratos e Gestão de Projetos. Atua também como desenvolvedor de sistemas web e é usuário fanático de sistemas e softwares open source... (vinicius.gregorio@academiaerp.com.br)

Deixe um comentário

Dúvida?