apostila manual de programação

Upload: thiago-reis

Post on 11-Jul-2015

142 views

Category:

Documents


4 download

TRANSCRIPT

Desenvolvimento Tcnicas e Procedimentos

NDICE ANALTICO

Prefcio............................................................................................................3 O Que Fazer um Programa com Inteligncia..............................................4 Programando Simples, mas Certo.................................................................5 Erros que Podem ser Evitados......................................................................5 A Importncia de Programas Documentados................................................6 Cabealho de Programa / Funo.................................................................7 Criao de Variveis.........................................................................................8 A Declarao.................................................................................................8 O Tipo de Varivel.........................................................................................8 Tipos Existentes............................................................................................8 Inicializao..................................................................................................9 Padronizao de Variveis............................................................................9 Criando uma Varivel Utilizando a Funo CRIAVAR()................................10 Variveis de Relatrios...............................................................................10 Cuidados com Posicionamentos de Registros................................................12 Funo Posicione........................................................................................13 Funo Existcpo..........................................................................................13 Restaurando ndice e limpando filtros.........................................................14 Outros cuidados.............................................................................................15 Confrontando relatrios e consultas...........................................................15 Problemas com Looping de Programas.......................................................16 Manipulao de Arquivos Externos ao Protheus.........................................17 Desenvolvendo Telas..................................................................................18 Salvando Arrays padres ..........................................................................19 Pontos de Entrada..........................................................................................20 Objetivo dos Pontos de Entrada..................................................................20 Quando criar um Ponto de Entrada.............................................................20 Procedimentos para sua criao.................................................................21 Contabilizando................................................................................................22 A Funo HeadProva...................................................................................22 A funo DetProva()....................................................................................23 A funo RodaProva().................................................................................23 Atualizando SX (ATUSX).................................................................................24 Exemplo de atualizao no SX: ..................................................................24 SX1 - Parmetros Genricos.......................................................................24 SX2 - Mapeamento dos arquivos.................................................................25

Microsiga Software S/A

Pgina 1 de 38

Desenvolvimento Tcnicas e Procedimentos

SX3 - Dicionrio de Dados...........................................................................25 SX5 - Tabelas Genricas.............................................................................25 SX6 - Parmetros .......................................................................................25 SX7 Gatilhos.............................................................................................25 SX8 - Seqncia. de documentos................................................................25 SINDEX- Arquivo de ndices.........................................................................25 Controle de Transao (TTS)..........................................................................26 O que .......................................................................................................26 Quando usar...............................................................................................26 Como usar...................................................................................................26 Onde no usar.............................................................................................26 Comandos definidos pelo usurio (UDCs)......................................................28 Uso de Strings.............................................................................................29 ndices............................................................................................................30 Criando e Deletando Arquivos de trabalho (Temporrios.)........................30 Utilizando Querys no Protheus....................................................................30 Dicas Importantes - DBF versus SQL...........................................................31 Conceito de Filial e Compartilhamento de Arquivos.......................................33 Arquivos Compartilhados ...........................................................................33 Arquivos Exclusivos.....................................................................................33 Tcnicas para Filtragem..............................................................................34 Chaves Primrias........................................................................................34 Chaves Estrangeiras...................................................................................34 Integridade Referencial...............................................................................34 Usando Rotinas Automticas..........................................................................36 Controle de Semforo....................................................................................37 Atualizao do Source Safe............................................................................38

Microsiga Software S/A

Pgina 2 de 38

Desenvolvimento Tcnicas e Procedimentos

PREFCIOExiste um ditado chins que diz: O Homem no tropea em montanhas, tropea em pedregulhos, areia, pequenos buracos, mas nunca em uma montanha. Isso nos remete a pensar que onde erramos exatamente no simples, naquele detalhe quase imperceptvel e que tem um valor muito grande para o todo. Avaliemos do ponto de vista humano; ser to difcil cumprimentar a todos, sermos mais amigos, mais serenos nas decises e companheiros uns dos outros e trabalharmos em equipe? Por que muitas vezes no o fazemos? Por que insistimos no individualismo e no mal-humor? No seria mais fcil, at mesmo bvio, estarmos mais bem-humorados e dispostos a trabalhar em equipe, trocarmos conhecimento e discernimento nas decises, pensarmos mais no todo porm se importando com as partes que o compe? Seria mais interessante se ao caminharmos por um parque, prestssemos mais ateno nas rvores, no caminho, nas flores, no canto dos passarinhos sem se esquecer do objetivo do passeio, sem perder a noo de tempo e distncia, mas curtindo muito a paisagem, o detalhe. Agora vamos traar um paralelo com o nosso dia a dia. No seria melhor ao reservarmos um fonte, verificarmos com mais ateno: As condicionais? Afinal muitas vezes no testamos um ELSE. Os filtros? Geralmente esquecemos de tentar otimizar a performance no SQL. As mensagens? Afinal to comum nos depararmos com textos completamente sem sentido. Os helps? Damos pouca ateno a eles e nos esquecemos que a primeira coisa que o usurio tenta. Imaginem algumas ligaes menos por causa de uma simples documentao a mais! Aquele ponto de entrada que criamos e no pensamos nos supostos parmetros que nosso pessoal em campo pode querer, ou mesmo no retorno mais adequado para aquela funo. Lembrem-se tambm da documentao do novo campo; Ela realmente necessria? Se a chave de ndice imprescindvel, por que no crio uma query? Ao responder um BOPS, no seria melhor que fosse sua ltima argumentao para o problema? Se isto ficar claro e bem resolvido no teremos mais aquela ocorrncia ou dvida. Se tivermos que explicar um processo para algum, que o faamos de tal forma a no gerarmos incgnitas. Por que ao invs de focarmos nossos esforos para matarmos o BOPS, no avaliamos o fonte para evitarmos NOVOS BOPS? Ao resolver uma ocorrncia lembrese de todos os pontos de implicao da sua atividade. O que isso ir impactar no servio do outro? Sem falar em documentar no Quark!

Microsiga Software S/A

Pgina 3 de 38

Desenvolvimento Tcnicas e Procedimentos

Vamos trazer o comportamento do parque para o nosso trabalho tambm. Ao programar vamos nos ater aos detalhes, sermos mais crticos, pensarmos que aquela instruo a mais, significa muito para o sistema e que l na frente, se tratado com descuido, pode causar problemas. Tenha convico que, se agirmos de maneira mais focada aos nossos propsitos, o passeio ou melhor a programao, ser muito mais entusiasmada, produtiva e com uma margem de erro bem menor. Com esse comportamento quem ganha somos ns; Microsiga!. S assim teremos mais tempo de irmos ao parque no final de semana. Lembre-se que no adianta decidirmos passear no parque do Ibirapuera no domingo, e no estarmos com a cabea voltada para o passeio, ao invs disso pensarmos no trabalho, na DLLl que no comunica, no BOPS que no foi baixado, pois se assim for, estaremos to voltados para outros fins que no curtiremos o passeio. Pense que para passear, ou melhor, programar, a regra tambm valida, no adianta nem ao menos tentarmos se no estivermos concentrados para isso. Enfim, quer uma prova de trabalho em equipe com um alto nvel de qualidade e detalhes; este manual, que foi constitudo em apenas 2 dias, com a colaborao de mais de 20 pessoas, focadas em seus objetivos, se atentando cada um com o seu tema. O resultado? Um trabalho excelente, um documento para nos ajudar a sermos melhores e no errarmos no fcil! O Que Fazer um Programa com Inteligncia Precisamos entender, antes de mais nada, o que inteligncia. Segundo o dicionrio Michaelis, inteligncia significa: faculdade de entender, pensar, raciocinar e interpretar; Compreenso, conhecimento profundo. De acordo com essa definio, se pretendemos utilizar nosso bem mais precioso em nosso trabalho, vamos precisar desenvolver alguns hbitos: Devemos estudar o programa antes de comear a desenvolver. Imagine prestar um concurso ou fazer uma prova sem estudar. Vai ganhar um zero na certa! No programa no ser diferente! Fazer um levantamento dos programas que sofrero as conseqncias das alteraes realizadas. Todos esses programas devero ser testados juntamente com o programa alterado. Antes de criar uma funo, consulte o Help Microsiga ou os colegas de trabalho, pois esta funo j pode ter sido criada. Ao criar uma funo, certifique-se de que no cabealho conste algumas informaes bsicas como: descrio da funo, sintaxe, definio dos parmetros e autor.

Microsiga Software S/A

Pgina 4 de 38

Desenvolvimento Tcnicas e Procedimentos

comum ao desenvolver uma funo, utilizarmos outra j pronta como exemplo, e neste momento o copiar/colar nos faz esquecer de alterar estas informaes. Imagine se algum desenvolver uma funo inconsistente e esquecer de trocar o seu nome no cabealho. Devemos assumir a responsabilidade de nossos atos. Ao fazer a documentao das alteraes realizadas, certifique-se de que as informaes esto claras, no s para o seu entendimento mas para que os colegas no percam tempo tentando entender-las. Ao realizar os testes, defina critrios. Antes de comear defina onde quer chegar. No basta consistir suas alteraes. O fato de suas alteraes estarem funcionando como previstas no garante a no existncia de erros. No limite-se a testar sua alterao na base que voc utilizou durante o desenvolvimento, pois voc criou o ambiente perfeito para que o programa funcione. Pode parecer um pouco trabalhoso passar por estes processos no decorrer do desenvolvimento do sistema, mas se medidas como estas no forem tomadas, o que era extremamente simples se tornar extremamente trabalhoso. Programando Simples, mas Certo Qual profissional da rea de informtica ainda no se deparou com um cdigo fonte que parecia estar escrito em outro dialeto mesmo com todo conhecimento adquirido naquela linguagem, este fato geralmente ocorre pela m utilizao de sintaxes complexas que nem sempre significam um bom funcionamento do sistema. Um profissional da rea de informtica no possui nenhum modelo padro para desenvolver os seus algoritmos, porm necessria a aplicao da tica profissional para que se possa desenvolver algoritmos de maneira simples e correta, este conceito se baseia nos seguintes aspectos : Entender qual o objetivo do processo em questo Analisar a melhor forma de desenvolver um algoritmo que seja de fcil manuteno. Utilizar comandos e sintaxes que utilizem o mximo de simplicidade e clareza possvel. Erros que Podem ser Evitados Existem alguns erros que com um pouco de ateno, podem ser evitados, tais como: Verifique se a varivel est declarada antes do uso; Ao declarar uma varivel, verifique qual a necessidade de ter essa varivel e qual o tipo e a sua classe; Classifiquem as funes e os procedimentos conforme a necessidade, como por exemplo, na declarao de um array, defina o seu tamanho e no uso verifique se o elemento existe;

Microsiga Software S/A

Pgina 5 de 38

Desenvolvimento Tcnicas e Procedimentos

Salve a ordem e a rea e o registro do arquivo que ser utilizadopara que no final do processo se recupere estes valores; Evite retornar da funo antes do seu final, ou seja, crie preferencialmente um nico retorno; Valide sempre o retorno do ponto de entrada; Quando for gravar um arquivo que utiliza campos de outros arquivos, posicione todos os arquivos e registros antes de iniciar a gravao, e descreva o alias do campo; Utilize de arquivo CH nas strings para localizao; Quando possvel utilize a linguagem SQL, pois minimiza o tempo de execuo em muitos processos. A Importncia de Programas Documentados Todos sabemos o quanto difcil elaborar e manter uma documentao tcnica atualizada, ainda mais aqui na Microsiga, cuja dinmica dos acontecimentos muitas vezes impede que isso seja viabilizado. Diante desse cenrio, o que nos resta? Obviamente que pelo menos os programas sejam documentados, bem documentados. Documentar bem, no significa que tenhamos que escrever dezenas de linhas de comentrios a cada linha de cdigo. Significa que os comentrios tm passar alguma informao relevante. Vemos comentrios assim: compara A com B e s. Isso bvio, a leitura do cdigo j nos diz isso. A documentao deve se ater a conceitos, por exemplo: Se A for maior que B, o arquivo de saldos ser atualizado, caso contrrio o registro ser rejeitado para que o saldo no fique negativo.. Isto sim transmite alguma informao. Tambm se pode utilizar desse recurso para fazer lembretes a fatos importantes que, se forem deixados de lado, podem comprometer o funcionamento das rotinas. Por exemplo: Ao acionar esta funo, o arquivo XXX DEVE estar posicionado no ndice 1. E os cabealhos? Quantos programas so aproveitados e nem sequer o nome do autor trocado? Se o analista X tivesse escrito todos programas que aparece como autor ele deveria ter comeado na poca do Charles Babage. O cabealho das funes de conter o nome na dita cuja, autor, data de criao, uma descrio sumria de sua funcionalidade, a sintaxe e por ltimo, mas no menos importante, a descrio dos argumentos de entrada e sada. A respeito desse ltimo item deve-se ter especial ateno nas manutenes, pois novos argumentos so criados e nem sempre so declarados nessa seo da documentao do cabealho, isso muito grave. No IDE do PROTHEUS existem opes bastante interessantes para nos auxiliar nessa tarefa. Experimente as opes Inserir, Documentao de cabealho e Inserir, Documentao de Explicao.

Microsiga Software S/A

Pgina 6 de 38

Desenvolvimento Tcnicas e Procedimentos

Existe ainda um tipo de documentao que nem sempre observada, aquela inerente ao prprio cdigo. Programas cujas variveis so declaradas como nX, cVAR1, dAUX, nNUM, etc., so extremamente difceis de entender e pior, manter. conveniente que os nomes das variveis retratem seu uso ou destino. Por exemplo: dDataDeS ou dDataDeE. Segundo as convenes da Microsiga, variveis do tipo DATA devem ser iniciadas pela letra d. Assim Data, no acrescenta nada ao entendimento do que a varivel representa. Nos sobrou o dES e o dEE para informar para que diados serve a bendita varivel. Ser sada, soluo, saldo? Entrada, Estorno, Estoque? Que tal isso: dSeguro e dEntrega? Enfim, como foi dito, no preciso escrever um livro a cada programa, basta ser objetivo e se colocar na posio de quem no conhece o programa to pouco o assunto. Algum dia voc mesmo poder estar nessa posio. Cabealho de Programa / Funo O cabealho do programa utilizado para identificar informaes gerais sobre a rotina, seu autor, data, entre outras informaes. importante que esteja preenchida de forma correta e atualizada. Lembre-se de que nada adianta um cabealho que no informe nada ou pior ainda, com informaes errneas. Lembre-se que um bom livro comea com um bom prefcio, e um bom programa comea com um cabealho til e legvel. A manuteno/atualizao do cabealho de responsabilidade da ltima pessoa que alterou o fonte. O cabealho de programa padro da Microsiga contm: rotina, autor, data do desenvolvimento, comentrio sinttico e sintaxe.

Microsiga Software S/A

Pgina 7 de 38

Desenvolvimento Tcnicas e Procedimentos

CRIAO

DE

VARIVEIS

Na criao de uma varivel deve-se ter em mente alguns pontos fundamentais: A declarao O tipo de varivel A funo CRIAVAR() A inicializao Padronizao de variveis A Declarao Deve ser feita sempre no incio da rotina que for utiliz-la, como no exemplo: Function a910VerCod() Local cCod910 := 001 Return O Tipo de Varivel O tipo de varivel serve para identificar a utilizao que a mesma ter no decorrer da rotina. Toda varivel deve estar tipada durante sua criao. Quando programamos nativamente em C, isto se torna obrigatrio. Devemos fazer o mesmo no AP5, pois isto demonstra que a varivel foi conscientemente declarada. Tipos Existentes PUBLIC: Esta varivel ser inicializada em um valor lgico falso (.F.) at que seja atribudo um valor especfico a ela. Esta varivel permanece definida por toda a durao da aplicao e pode ser vista (assim como usada, alterada e avaliada) por qualquer funo. Esta varivel gera um token (indicao) na tabela de smbolos, isto significa que o mdulo principal conter smbolos para esta classe de varivel, o que, por sua vez, ocupa mais espao de memria. Deve-se evitar a utilizao deste tipo, a no ser em casos extremos. PRIVATE: Esta varivel ser inicializada em valor nulo (NIL) e uma vez declarada, permanecer assim durante toda a durao do fluxo da funo, at que este volte ao procedimento inicial que a chamou. Em essncia, uma varivel de memria PRIVATE inicializada logo no incio do Protheus, agir como um varivel PUBLIC. Esta varivel pode ser vista por uma sub-rotina da funo e modificada de maneira correspondente. Esta varivel tambm gera um token na tabela de smbolos comentada acima.

Microsiga Software S/A

Pgina 8 de 38

Desenvolvimento Tcnicas e Procedimentos

LOCAL: Esta varivel de memria ser inicializada com valor nulo (NIL) e s visvel dentro da funo que a inicializa, mesmo que esta ltima, contenha funes incorporadas a seu contedo. Este tipo de varivel o mais adequado a ser utilizado em funes, pois no gera smbolos na tabela de smbolos, por conseqncia ocupa pouco espao de memria e, o compilador avalia as variveis LOCAL e STATIC mais rapidamente que os outros tipos (PUBLIC e PRIVATE). Cuidado para no sucumbir teoria de que se pode obter economia de memria, mudando qualquer referncia PRIVATE para uma referncia LOCAL. Se voc fizer isso, as funes podem no funcionar corretamente, embora funcionassem na verso anterior s alteraes. STATIC: A varivel STATIC idntica classe de armazenamento LOCAL, com uma exceo. Uma varivel STATIC retida dentro de sua sub-rotina, mesmo depois que o fluxo da funo a tenha deixado. Isto particularmente til para funes independentes tipo caixa-preta, que contm seu prprio conjunto de variveis exclusivas e devem manter esses valores de interao em interao. Inicializao Quando no atribumos nenhum valor a uma varivel no momento de sua declarao, corremos o risco de utiliz-la com valor NIL e causar erros fatais. Por isso, a inicializao de uma varivel de extrema importncia. Padronizao de Variveis importante que ao lermos o nome de uma varivel, possamos saber se o seu tipo numrico, caracter, data ou lgico. O nome da varivel de get no deve coincidir com uma varivel de outro programa, pois toda varivel de get possui um help especfico. Exemplo: a varivel DBaixa (get da baixa no programa de Ttulos a Receber), j possui um texto help que indica seu conteudo e no dever ser criada outra varivel para outra finalidade com este mesmo nome. Para tanto, definimos a seguinte padronizao : N L D C A O U Numricas Lgicas Data Caracter Array (matriz) Objeto Sem definio

Microsiga Software S/A

Pgina 9 de 38

Desenvolvimento Tcnicas e Procedimentos

Criando uma Varivel Utilizando a Funo CRIAVAR() Esta funo cria uma varivel, retornando o valor do campo, de acordo com o dicionrio de dados. Avalia o inicializador padro e retorna o contedo de acordo com o tipo de dado definido no dicionrio. Sintaxe uRet := CriaVar(cCampo,lIniPad,cLado) Onde : Uret cCampo LiniPad Clado tipo de retorno de acordo com o dicionrio de dados, considerando inicializador padro. Nome do campo Indica se considera (.T.) ou no (.F.) o inicializador padrao (X3_RELACAO) Lado para inicializao padro

Variveis de Relatrios Na criao de um relatrio algumas variveis e seus tipos so convencionados para a utilizao da biblioteca de funes de relatrio. Varivel Wnrel CbCont Cabec1 Cabec2 Cabec3 Tamanho Limite Titulo CDesc1 CDesc2 CDesc3 aReturn Tipo Local Local Local Local Local Local Local Local Local Local Local Private Contedo Nome default do relatrio em disco Contador 1 linha do cabealho do relatrio 2 linha do cabealho do relatrio 3 linha do cabealho do relatrio Tamanho do Relatrio (P = Pequeno 80 Colunas, M= Mdio 132 colunas), G = (Grande 220 colunas) Quantidade de colunas no relatrio (80, 132, 220). Titulo do Relatrio 1 linha da descrio do relatrio 2 linha da descrio do relatrio 3 linha da descrio do relatrio Array com as informaes para a tela de configurao da impresso Nome do programa do relatrio Alias do arquivo principal do relatrio para o uso de filtro Controle das linhas de impresso. Seu valor inicial a quantidade mxima de linhas por pgina utilizada no relatrio. Controle do nmero de pginas do relatrio. Array contendo as ordens de layout para a impresso. Caso no

Nomepro Private g CString Private Li Private M_Pag Aord Private Private

Microsiga Software S/A

Pgina 10 de 38

Desenvolvimento Tcnicas e Procedimentos

nLastKey Private Cperg Alinha Private Private

existam vrias ordens este array deve estar vazio. Ex.: aOrd:= {Cdigo, Descrio, Telefone} -> O layout do relatrio vai depender da ordem selecionada na tela de configurao de impresso. Utilizado para controlar o cancelamento da impresso do relatrio. Nome da pergunte a ser exibida para o usurio. Array que contem informaes para a impresso de relatrios cadastrais

Microsiga Software S/A

Pgina 11 de 38

Desenvolvimento Tcnicas e Procedimentos

CUIDADOS

COM

POSICIONAMENTOS

DE

REGISTROS

O posicionamento correto de registros fundamental para a funcionalidade completa dos programas. Algumas dicas para posicionamento de registros so : Evitar DBGOTOP(), usar DBSEEK(XFILIAL()) para os arquivos de dados do sistema. O comando DBGOTOP() somente ser utilizado quando da real necessidade de se efetuar uma leitura desde o incio do arquivo independente do tratamento de filial. Como no mesmo arquivo de dados, poderemos ter registros de vrias filiais, desta forma ficar garantido o posicionamento no primeiro registro da filial corrente. Ao executar um DBSEEK(), verificar se localizou o registro, exemplo: If ! SB1->(dbSeek(xFilial("SB1"))) // No achei o registro Endif Mesmo que seja bvio a existncia do registro, faa o teste pois o programa deve prever que a base de dados no to confivel como deveria, e um alerta ajuda a identificar estes casos. Em casos de relatrios, atentar-se para imprimir a mensagem de forma consciente. Se for executada a funo RECLOCK(cAlias, .F.), para alterao do registro atual, em um arquivo no estado de EOF() (caso falhe um DBSEEK() ) ser abortado o programa e gravado um arquivo texto de nome MSRLOCK.EOF que poder ser usado para averiguaes. O comando SOFTSEEK determina se ser usada uma busca relativa durante um procura em um banco de dados. Se este comando estiver em ON, e for utilizada uma funo DBSEEK(), e nenhuma correspondncia for encontrada, o ponteiro de registro ficar no prximo registro do ndice que possua um valor mais alto que a expresso utilizada nesta funo. Este comando dever ser utilizado com a mxima ateno, pois caso esteja ligado, poder localizar um registro errado. Quanto ao comando DO WHILE no esquecer de incluir a condio referente filial, quando esta leitura for de registros de uma filial). Exemplo : dbSelectArea("SB1") dbSeek(xFilial("SB1")) Do While ! Eof() .And. B1_FILIAL == xFilial("SB1") // Processamento dbSkip() Enddo

Microsiga Software S/A

Pgina 12 de 38

Desenvolvimento Tcnicas e Procedimentos

Ao criar uma funo que ir desposicionar registros, use a funo GETAREA() e RESTAREA(), para voltar tudo posio original. Exemplo: Dbselectarea("SD1") aAreasd1 := Getarea() // Armazena o ambiente do arquivo SD1 SD1->(dbsetorder(3)) SD1->(dbseek(xfilial("SD1") + DTOS("01/03/01"), .T.)) Do While ! Eof() .And. D1_FILIAL == xfilial("SD1") .And. DTOS(D1_EMISSAO) (!Eof()) ---------- Falta um DbSkip() Enddo No exemplo acima, a rotina ficar em looping (pois falta um comando de sada da rotina, um DbSkip() seria o mais apropriado), utilizando todos os recursos de processamento do servidor, fazendo com que o mesmo pare de funcionar. Outro exemplo: aCampos := {} Do while .T. Aadd(aCampos, Teste) Enddo

No exemplo acima o caso ainda mais crtico, pois alm utilizar todo o recurso de processamento do servidor, em dado momento haver uma queda do aplicativo, devido a limitao da varivel tipo Array, criada acima. E quando este limite for ultrapassado, o

Microsiga Software S/A

Pgina 16 de 38

Desenvolvimento Tcnicas e Procedimentos

sistema ser interrompido abruptamente e todos os demais usurios ficaro impossibilitados de utilizarem o sistema.Manipulao de Arquivos Externos ao Protheus A manipulao de arquivos considerados externos ao Protheus dever ter um tratamento diferenciado. O arquivos a serem manipulados (alterados/consultados) devero ser copiados do Client para o Server e vice-versa utilizando uma conexo (TPC-IP,IPX,etc). Para copiar os arquivos, foram criadas duas funes que sero executadas via conexo, a CPYS2T() encarregada de copiar do Server para o Client/Terminal e a CPYT2S() encarregada de copiar do Client/Terminal para o Server. O editor de texto Word da Microsoft, os arquivos de imagens (BMP,JPEG,etc) exigem um lugar fsico para abertura dos documentos/imagens, navegando pela Internet por exemplo so copiados via conexo para um diretrio temporrio no computador para serem visualizados. O AP5 trabalha da mesma forma, atravs dessas consideraes e utilizando a arquitetura Client/Server via conexo os arquivos sero copiados. Em alguns Mdulos do Protheus so encontradas rotinas de Importao/Exportao de lanamentos, exigindo serem utilizadas as funes CPYT2S() e CPYS2T() para manipulao dos arquivos. Por exemplo, uma importao de lanamentos da Folha de Pagamento poder ser feita diretamente do Client sem precisar copiar para o Server mas se outro usurio precisar visualizar os lanamentos de origem da importao no ter acesso, agora se for realizado a cpia do Client para o Server todos podero visualizar (aconselhvel). Isso acontece no Mdulo de Controle de Documentos, quando todos os arquivos (documentos) so copiados entre o Client e o Server para que todos visualizem e manipulem. Um exemplo que no h necessidade de cpia so os arquivos gerados para contabilizao (CPROVA), pois estes so gerados no prprio Server no havendo necessidade de cpia. Os arquivos que podero ser copiados devero estar necessariamente embaixo do RootPath na configurao do Server, isto , o diretrio DOCS do exemplo abaixo dever ser sub-diretrio do RootPath. Exemplo de cpia do Server para o Client: CPYS2T("\DOCS\EXEMPLO.DOC,"C:\WINDOWS\TEMP",.T.) Onde os parmetros so: 1o. o a ser copiado para o Client 2o. o do Client e/ou local fsico onde ser copiado o arquivo. 3o. se deseja compactar o arquivo (recomendvel) Exemplo de cpia do Client para o Server: CPYT2S("C:\WINDOWS\TEMP\EXEMPLO.DOC,"\DOCS",.T.)

Microsiga Software S/A

Pgina 17 de 38

Desenvolvimento Tcnicas e Procedimentos

Onde os parmetros so: 1o. o a ser copiado para o Server 2o. o do Server 3o. se deseja compactar o arquivo (recomendvel) As funes possuem um retorno True(.T.) ou False(.F.) indicando se a cpia foi realizada com sucesso ou no. Desenvolvendo Telas A aparncia e objetividade das telas num sistema base fundamental da interface Sistema x Usurio. O AP5 j cria, automaticamente, a grande parte das telas de um mdulo, tais como a Browse, a GetDados e Enchoice. Algumas outras telas necessitam de construo manual, ou seja, com a utilizao de comandos, tais como SAY , GET e LABEL, na Dialog. Procure sempre colocar em tela assunto abordado. as informaes que mais se objetivam com o

Sempre que possvel, d preferncia aos campos obrigatrios primeiro. Isso facilita a digitao do usurio, que no precisar passar de campo em campo (no caso de estar utilizando a tecla ) at chegar ao campo desejado. A ordem dos campos tambm importante para a fcil localizao das informaes. Quando o volume de informaes muito grande, divida os campos em folders, ou seja, pastas, agrupando os campos em assuntos. Isso ir deixar a tela menos poluda e evitar que o usurio navegue por uma tela s. Para fazer essa facilidade, preencha o campo X3_FOLDER, no SX3, com um nmero, agrupando-os de acordo com a tipo de informao e no SXA, com o ALIAS do arquivo em pauta, a ordem, que equivale ao numero informado no X3_FOLDER e a descrio nos trs idiomas. Essa descrio que ser a informao contida na pasta do folder. Exemplo: Os campos SZ1_ENDER, SZ1_NUM e SZ1_BAIRRO devem estar com o campo X3_FOLDER preenchido com o contedo 1. No SXA, o XA_ALIAS dever ser SZ1, o XA_ORDEM = 1 (mesmo valor preenchido no X3_FOLDER), no XA_DESCRIC, Endereo Residencial e, nos demais, o mesmo texto em outros idiomas. O Folder, alm de agrupar e facilitar a procura pelos campos, evita a rolagem vertical da tela, facilitando a visualizao das informaes. Evite tela com muitos botes. Isso poder confundir o usurio e induzi-lo ao erro. Utilize telas sequenciais, conhecidas como Wizard (semelhante aos de instalao de um software). Dessa forma, o usurio ficar mais atento aos fatos, dificultando o erro. Mas cuidado: no faa disso uma incansvel sequncia de telas, pois isso acabar desmotivando o usurio a utilizar o sistema.

Microsiga Software S/A

Pgina 18 de 38

Desenvolvimento Tcnicas e Procedimentos

Enfim, as telas devem ser limpas e objetivas, de tal forma que impea o usurio de sair de seu objetivo final. Todo curioso ir apertar todos os botes da tela ou preencher todos os campos com qualquer tipo de informao. Portanto, esteja atento a tamanho dos labels, para que os mesmos no excedam o tamanho da caixa de dilogo definida. Isso, alm de no ser esttico, prejudica o entendimento da informao. Salvando Arrays padres Quando temos Janelas que necessitem apresentar mais de uma getdados, devemos salvar os elementos, acols, aheader e n, da tela anterior para apresentar uma nova janela. As principais variveis so: Acols Getdados AHeader N = Array contendo as linhas usada que sero apresentadas na = Array contendo o cabeo das colunas da Getdados = Varivel publica que indica a posio do atual no acols (a Linha que est sendo editada na Getdados)

Para salva-las podemos: aColsAnt aHeaderAnt nElemAnt := aClone(Acols) := aClone(aHeader) := n

E para restaura-las: aCols aHeader n := aClone(aColsAnt) := aClone(aHeaderAnt) := nElemAnt

Microsiga Software S/A

Pgina 19 de 38

Desenvolvimento Tcnicas e Procedimentos

PONTOS

DE

ENTRADA

Dentro dos processos operacionais dos programas possvel criar aberturas que possibilitam a execuo de processos distintos a partir de uma rotina do sistema. Objetivo dos Pontos de Entrada Deixar o sistema flexivl , pois isso permite uma grande variedade de desenvolvimento via RDMAKE pelos nossos analistas de suporte de acordo com a necessidade de cada tipo de cliente/implantao Permitir que o sistema seja o mais abrangente possvel de acordo com cada tipo de segmento de negcio. Quando criar um Ponto de Entrada O ponto de entrada tem resultado quando permite que um processo possa ser modificado, desde que ele no seja crtico para o sistema. Exemplo: Montagem das parcelas de pagamento de um pedido Ele til em processos que podem ser diferentes de acordo com o tipo de negcio de cada empresa ou estratgia adotada. Ex: Relatrio de Pedido, Cadastro de Clientes Sintaxe para criar um Ponto de Entrada: Function TMKA010() Local lRetorno := .F. Local LTMKMCL := Existblock("TMKMCl") uma funo no repositrio do AP5 com esse PE. // O Existblock detecta se existe

If lTMKMCL lRetorno := Execblock(TMKMCI,.F.,F.,{aValor}) que seria recebido pelo usuario em PARAMIXB Endif Return( lRetorno )

// aValor um array

Microsiga Software S/A

Pgina 20 de 38

Desenvolvimento Tcnicas e Procedimentos

Procedimentos para sua criao Avaliar com critrio a criao do Ponto de Entrada, pois importante localiza-lo num ponto que seja til, no redudante e que realmente d condies de atender ao solicitante. O Ponto de entrada no uma ferramenta de correo de eventuais falha do sistema e sim para ajudar no desenvolvimento de negcios especficos. Documentar no QUARK com nome,momento no qual o momento em que ele disparado, parametros que ele envia,retorno esperado (se houver) e o que ele executa com o retorno Para Entendimento do Conceito de Integridade Referencial

Microsiga Software S/A

Pgina 21 de 38

Desenvolvimento Tcnicas e Procedimentos

CONTABILIZANDOA contabilizao de registros em um sistema ERP necessrio toda vez que houverem operaoes envolvendo valores na empresa, como por exemplo, a emisso de uma nota fiscal, um recebimento de dinheiro, um pagamento na folha, entre outros. Para quem est programando fundamental que este conceito esteja bastante sidimentado. Para se definir a contabilizao em qualquer rotina deve-se : Definir os lanamentos padronizados que sero utilizados para a rotina (cada mdulo ou famlia de mdulo possui uma sequencia lgica) Preparar o programa para efetuar as atualizaes e a contabilizao. Este detalhe muito importante pois o lanamento padro uma frmula e o posicionamento dos registros fundamental. Exemplo : Na rotina de exclusao de nota fiscal deve-se executar a contabilizao antes do comando dbDelete(). A chamada do lanamento contbil deve estar em um lugar estratgicamente correto, pois teoricamente a ltima coisa a ser feita na rotina. No aconselhvel executar a contabilizao e depois efetuar outros comandos. Existem trs funes que devero ser utilizadas, para que seja criado um arquivo texto, contendo as informaes a serem contabilizadas. Como temos 2 sistemas contbeis (SIGACON e SIGACTB) com procedimentos diferenciados programamos de forma identica para ambos porm internamente as rotinas efetuam comandos diferentes. Os comandos para a contabilizao so : A Funo HeadProva Este funo cria o cabealho da contabilizao. tratada de forma diferenciada para os mdulos SIGACON e SIGACTB. Sintaxe: nHdlPrv := HeadProva(cLoteAtf, cNomProg, Substr(cUsuario,7,6), @arquivo, .T.) Onde: NHdlPrv cLoteAtf cNomProg cUsuario Varivel que conter o num. (Handle) do arquivo (.LAN) criado. Cdigo do lote do mdulo (Ex.: Ativo Fixo: 8866) Nome do Programa (Ex.: ATFA060) Usurio arquivo: nome do arquivo (Ex.: cArquivo := )

Microsiga Software S/A

Pgina 22 de 38

Desenvolvimento Tcnicas e Procedimentos

A funo DetProva() Em primeiro lugar, deve-se estar posicionado no registro, que contm o valor ser contabilizado Sintaxe: ExpN1 := DetProva(ExpN2,ExpC1,ExpC2,ExpC3) ExpN1 Valor Total da Contabilizao ExpN2 Handle retornado da funo anterior ExpC1 Cdigo do Lanamento Padro ExpC2 Nome da rotina Geradora ExpC3 Lanamento Padro A funo RodaProva() Esta funo ir cria a finalizao da contabilizao. Sintaxe: RodaProva(ExpN1, ExpN2) ExpN1 Handle retornado da funo anterior ExpN2 Valor Total da contabililizao No Final, ou seja, aps todos registros serem processados utilizar a funo CA100INCL(), cujo objetivo ler o arquivo gerado (.LAN), e gerar os lanamentos no arquivo SI2 (Lanamentos contbeis). Exemplo: CA100Incl( cArquivo, cOnLine, dData) nHdlPrv, nOpcx, cLoteContabil, lDigita, lAglut,

Onde: cArquivo Nome do arquivo nHdlPrv Numero do Header nOpcx Numero da Opcao escolhida cLoteContabil Numero do Lote lDigita Se Mostra ou nao lAglut Se Aglutina ou no cOnLine Determina se sera On Line ou pelo cProva

Microsiga Software S/A

Pgina 23 de 38

Desenvolvimento Tcnicas e Procedimentos

ATUALIZANDO SX (ATUSX)O ATUSX uma ferramenta muito importante utilizada na manuteno dos arquivos customizadores internos: os arquivos SXs . nos arquivos SX que esto armazenadas todas as informaes padres necessrias para a criao de bases das empresas e efetuar possveis customizaes. Em uma atualizao de verso, o sistema ir fazer uma compatibilizao de dados com os arquivos j existentes e os atualizar com base nos SXs. Ao desenvolver uma rotina que exige um novo campo, por exemplo, este dever ser criado no ATUSX, caso contrrio gerar uma no conformidade comprometendo todo o trabalho da atualizao e o bom andamento do trabalho. Todo os campos, perguntas, ndices, parmetros novos devero estar no ATUSX , pois estes so os padres do Protheus. aqui tambm que cadastramos os HELPs de campo e de programas, criamos os menus do sistema e onde disponibilizamos informaes para serem traduzidas para outros pases. Exemplo de atualizao no SX: Criao de ndice no Cadastro de Funcionrios- Suponhamos que seja necessrio um ndice por Data de Admisso. Neste caso utilizaremos o SINDEX , onde devero ser alimentados basicamente o Alias (SRA), a ordem , a chave de indexao (RA_ADMISSA) e sua descrio em Portugus. As descries referentes s outras lnguas devero ficar a cargo do departamento de tradues. Numa atualizao de verso, o sistema enxergar a existncia deste ndice pelo SINDEX e o disponibilizar para utilizao. Ao final da manuteno dos arquivos SXs, abre-se uma janela onde deve ser documentado todas as alteraes efetuadas da forma mais clara e precisa possvel. Esta documentao de extrema importncia para que se tenha um controle dos arquivos customizadores padres e garantem um perfeito funcionamento do Protheus. SX1 - Parmetros Genricos Esta tabela contm as perguntas, os valores armazenados e a ltima resposta utilizada para processamento, impresso de relatrios , etc. Todos os processamentos ou relatrios que tenham a opo de parametrizao, devero utilizar a funo Pergunte para carregar os valores dos parmetros e/ou apresentar na tela as perguntas relacionadas.

Microsiga Software S/A

Pgina 24 de 38

Desenvolvimento Tcnicas e Procedimentos

Como o usurio pode no utilizar a opo de parametrizao, devemos sempre carregar as variveis MV_PARXX com os valores default ou com as ltimas respostas aplicadas, para evitar erros de comparao de variveis. SX2 - Mapeamento dos arquivos Armazena os Paths dos arquivos possibilitando que estes possam ser distribudos em diversos drives ou diretrios. SX3 - Dicionrio de Dados Armazena informaes referentes s definies de todos os campos que existem no Protheus. SX5 - Tabelas Genricas Armazena tabelas genricas utilizadas em todo sistema. SX6 - Parmetros Elemento chave para a execuo de um processamento, que determina diferentes resultados dependendo do seu contedo. SX7 Gatilhos Rotina ou operao que disparada a partir de um evento get. SX8 - Seqncia. de documentos Armazena sequencias alfanumricas que devero ser controladas por um semforo. Um exemplo clssico seria a numerao de pedidos de venda, em que vrios usurios poderiam estar utilizando o mesmo nmero de pedido. SINDEX- Arquivo de ndices Armazena todos os ndices padres.

Microsiga Software S/A

Pgina 25 de 38

Desenvolvimento Tcnicas e Procedimentos

CONTROLEO que

DE

TRANSAO (TTS)

Tratando-se de Banco de Dados, toda e qualquer operao de incluso, alterao ou excluso de registro armazenada primeiramente na rea de LOG, garantindo assim que ao fazer a incluso de uma linha (registro) seja garantida a incluso completa de todas as colunas (campos). Caso no seja possvel a incluso da linha completa ele executa um procedimento chamado de ROLLBACK, ou seja, ignora todo o registro. Quando usar Quando temos uma operao em Banco de Dados que necessite que vrias incluses, alteraes ou excluses s sejam efetuadas quando todas as operaes tenham sido realizadas com sucesso, garantindo com isso que no seja atualizada parcialmente uma tabela ou que atualize uma tabela e no atualize outra tabela relacionada. Como usar Para definir uma transao, deve-se utilizar os comandos BEGIN TRANSACTION e END TRANSACTION para definir inicio e fim de uma transao respectivamente. Todas informaes serem gravadas no Banco devem estar dentro de uma nica transao sejam elas provenientes de uma ou vrias tabelas. Deve-ser evitar utilizar laos (WHILE, FOR) dentro de uma transao, pois a rea de LOG do banco limitada, e se o volume de informaes ultrapassarem este limite, ocasionar o travamento do banco de dados. O tamanho da transao deve-ser ser conhecido pelo programdor. Em suma, para exemplificar, devemos controlar a transao de uma nota e no de um conjunto ilimitado de notas. Onde no usar O controle de transao jamais dever ser utilizado durante processo que envolvam interface (telas com entrada de dados). O controle deve-se resumir apenas ao processo de gravao. Entre um incio de transao (Begin Transaction) e um final (End Transaction) Todos os registros a serem gravados ficam locados at o final da transao. Caso tenhamos uma tela aps o BEGIN e antes do END dependeremos do usurio para efetuar a liberao da transao, fato este que causaria enormes problemas para o usurio.

Microsiga Software S/A

Pgina 26 de 38

Desenvolvimento Tcnicas e Procedimentos

Outro lugar que no deve-se ter o controle de transao refere-se a rotinas de reprocessamentos ou reclculos, onde as informaes podem ser regerados durante este processo ou onde possamos ter um grande nmero de locks. BEGIN TRANSACTION ExpN1 :=FuncGrava() END TRANSACTION Caso exista uma transao dentro de uma outra a segunda ser automaticamente ignorada, fechando-se a transao principal quando da chamada do comando END TRANSACTION.

Microsiga Software S/A

Pgina 27 de 38

Desenvolvimento Tcnicas e Procedimentos

COMANDOS

DEFINIDOS PELO USURIO

(UDCS)

Este recurso cria novas e infinitas possibilidades para modificar a maneira pela qual escrevemos o cdigo de uma funo e a maneira pela qual podemos resolver problemas complexos. Ele ajuda a facilitar a manuteno do cdigo, e a implementao de normas. Estes comandos so traduzidos, analisados e modificados antes que o compilador comece a trabalhar para gerar um arquivo objeto. O responsvel por esta traduo o pr-processador que um tradutor inteligente que atua antes da gerao do cdigo objeto. Em sua maioria, isto se resume a encontrar os comandos no cdigo fonte e traduzilos para instrues e funes equivalentes que se acham no corpo da funo ou no contedo de arquivos .CH (arquivos de cabealho). Este tipo de arquivo (.CH), contm diversos comandos que sero utilizados por todas as funes que contenham a instruo include em seu cdigo. Estes mesmos comandos poderiam estar embutidos na funo, mas para facilitar a manuteno, um nico arquivo .CH, pode ser includo (comando include) em vrias funes ao mesmo tempo. No h a necessidade de colocar o comando include em cada funo. Uma nica meno ao .CH no arquivo .PR?, servir ao propsito de todas as funes nele embutidas. Estes comandos so diretivas do pr-processador e comeam sempre com o caracter # diretamente sua frente e devem estar escritos em caracteres tipo caixa alta. Os mais utilizados no Protheus so: #DEFINE #IFDEF, ou #IFNDEF #ELSE #ENDIF #INCLUDE Cada um destes comandos pode ser colocado em qualquer parte do arquivo fonte, que ser lido pelo pr-processador. No entanto, para facilitar a visualizao da existncia destes comandos e manuteno da funo, estes comandos devem ser colocados no incio do fonte. O pr-processador substituir, cada ocorrncia da constante no fonte, ser substituda pela expresso ou valor, que estiver contida diretamente frente da mesma. A exemplo de sintaxe e cdigo fonte para este comando : #DEFINE #DEFINE _TESC _LESC 27 lastkey()

Microsiga Software S/A

Pgina 28 de 38

Desenvolvimento Tcnicas e Procedimentos

if _nLastkey == _TESC RETURN Endif if _LESC == _TESC RETURN Endif Esta diretiva muito til quando temos um valor constante vrias vezes repetido dentro do cdigo fonte, que poder ser alterado com freqncia no decorrer da vida til da funo. #IFDEF ou #IFNDEF #ELSE #ENDIF Esta diretiva do pr-processador permite que voc prepare aplicaes para compilao condicional, ou em outras palavras, se a , definida anteriormente via diretiva DEFINE ou pelo Protheus foi definida (IFDEF), as sero incorporadas ao cdigo objeto e as , sero desprezadas. Mas se a no foi definida as sero incorporadas e as sero desprezadas. #INCLUDE Uma instruo INCLUDE diz ao pr-processador para inserir o contedo de outro arquivo em um local determinado dentro da funo. Este arquivo especificado, deve focalizar outras instrues do pr-processador que possam ser comuns a diversos mdulos da rotina. Uso de Strings Para que o sistema possa ser utilizado em outros pases com lnguas diferentes ao invs de inserirmos diretamente os textos no fonte do relatrio utilizamos o recurso de strings, onde atravs de um include acessaremos o texto em trs lnguas diferentes (Portugus, Espanhol e Ingls) dependendo da forma da compilao. convencionado que o nome do include seja o mesmo nome do fonte do relatrio para que a manuteno deste relatrio seja o mais simples possvel. Exemplo: Relatrio FABR001.PRW Include FABR001.CH

Microsiga Software S/A

Pgina 29 de 38

Desenvolvimento Tcnicas e Procedimentos

NDICESA utilizao de ndices para a pesquisa deve ser bem analisada a fim de evitar lentido ou processamentos redundantes nos relatrios. Os ndices ajudam a otimizar as pesquisas e laos de processamentos, por isto no devem ser subtilizados ou utilizados de forma errnea. Caso a necessidade do relatrio exija uma otimizao que no possvel obter com os ndices padres do sistema possvel criar ndices temporrios atravs da funo Indregua tornando assim os relatrios mais geis e bem estruturados. Criando e Deletando Arquivos de trabalho (Temporrios.) Quando criamos um arquivo de trabalho ou um ndice de trabalho (utilizando a funo Indregua) no final do programa devemos apaga-los. Para criao de um ndice de Trabalho (Temporrio) com Indregua: cArqNtx := CriaTrab( NIL, .F. ) IndRegua( "SRA", cArqNtx, cIndCond, , cFor, STR0039 ) //Criando Arquivo //Selec.registros..."

Para deletar este ndice de trabalho no final do processamento: DbSelectArea( SRA ) DbSetOrder( 1 ) fErase( cArqNtx + OrdBagExt() ) //Selecionando a area //Posicionando na ordem de origem //Deletando arquivo de trabalho

Caso o programa que crie um arquivo de trabalho e no o apague no final de seu processamento, este ficar ocupando espao em disco no ambiente de trabalho. Isto poder gerar problemas futuros para o cliente. Por isto, fundamental, que aps sua utilizao o mesmo seja descartado. Utilizando Querys no Protheus Podemos utilizar querys no Protheus quando acessamos bancos de dados via TopConnect. As querys, quando bem construdas, melhoram enormemente a eficincia ( velocidade ) das consultas aos dados e reduzem a sobrecarga no servidor de aplicao, TopConnect e Banco de Dados.

Microsiga Software S/A

Pgina 30 de 38

Desenvolvimento Tcnicas e Procedimentos

Normalmente uma query utilizada em substituio a um Loop ( While ) na base de dados de programao convencional. Querys mais complexas utilizando joins poder ser construdas com a mesma funo de vrios loops. Dicas Importantes - DBF versus SQL A princpio no existem diferenas na programao na verso SQL, j que pelo prprio fato de ser uma linguagem interpretada, o sistema quem se encarrega de executar os comandos e funes adequadamente no ambiente em que trabalha. Mas importante manter algumas informaes em mente ao programar para o ambiente SQL. Deve-se lembrar que estamos trabalhando com um banco de dados relacional, que se utiliza de tabelas ao invs de arquivos, e onde o sistema no tem acesso aos dados de forma nativa e sim atravs do Top Connect. Essa forma de acesso adiciona ao sistema algumas das caractersticas e vantagens oferecidas pelo SGBD em uso (por exemplo, o Oracle, MSSQL Server ou o DB2) como por exemplo segurana e integridade referencial, e as imensas facilidades da linguagem SQL, mas por outro lado tem-se tambm as implicaes da converso dos comandos no padro xBase para a perfeita compreenso no ambiente SQL. Imagine a montagem de uma expresso de filtro para um ndice condicional. Tome a seguinte expresso como exemplo: "DTOS(E1_VENCTO) >= DTOS(mv_par01)". Em um ambiente padro xBase, como o NTX ou o ADS, pode-se utilizar variveis sem qualquer problema em uma expresso de filtro pois a mesma ser avaliada registro a registro durante a montagem do ndice. Mas no ambiente SQL, o filtro nada mais do que uma tabela temporria, onde esto selecionados apenas os registros conforme a condio indicada. A seleo de dados em tabelas pelo SQL mais rpida, mas em conpensao o SGBD no tem como reconhecer a varivel informada na expresso. Ela existe apenas no sistema ou, mais especificamente, no seu programa. Por isso, deve-se substituir a expresso anteriormente exemplificada pela seguinte (que tambm funcionaria perfeitamente em um ambiente xBase): "DTOS(E1_VENCTO) >= "+DTOS(mv_par01)+"". Esta expresso melhor que anterior simplesmente porque no se utiliza da varivel e sim do contedo da mesma, o que pode ser compreendido em qualquer ambiente. Toda essas explicaes so vlidas, da mesma maneira, a filtros criados atravs do comando SET FILTER. Ainda existem outros detalhes a se considerar quando se trabalha com ndices em um ambiente SQL. que na verdade no existem ndices condicionais nesse ambiente. O filtro criado independente do ndice. Ento, voc pode criar um INDREGUA com um filtro e mudar a ordem, mas o filtro permanecer ativo, em qualquer ordem. Do mesmo modo, no se pode manter dois ndices, com filtros diferentes, pois um filtro sobrescreveria o outro. Outro ponto de ateno deve ser a funo xBase chamada DBSETINDEX. Podem ocorrer alguns erros ao tentar-se utilizar essa funo para abrir um ndice de trabalho criado. Por esses motivos e pelo fato de tornar o processamento mais lento deve-se evitar ao mximo o uso de ndices de trabalho no ambiente SQL.

Microsiga Software S/A

Pgina 31 de 38

Desenvolvimento Tcnicas e Procedimentos

Da mesma maneira que a funco DBSETINDEX, os comandos COPY TO e APPEND FROM tambm devem ter uma ateno especial. No ambiente SQL esses comandos so executados entre uma tabela e um arquivo DBF (e vice-versa) ou entre dois arquivos DBF. Por exemplo, o comando COPY TO pode ser usado para copiar os dados da tabela ativa para um DBF local e o comando APPEND FROM pode ser usado para importar os dados de um arquivo local para a tabela ativa. Os dois podem ser usados entre dois arquivos, mas nunca pode-se usar, por exemplo, o comando APPEND FROM para importar os dados de uma tabela para outra.

Microsiga Software S/A

Pgina 32 de 38

Desenvolvimento Tcnicas e Procedimentos

CONCEITO

DE

FILIAL

E

COMPARTILHAMENTO

DE

ARQUIVOS

O Sistema permite a criao de vrias Filiais para uma mesma empresa cadastrada, de modo que Filiais da mesma empresa compartilhem ou no as mesmas informaes como Cadastro de Produtos, Clientes, etc. Este tratamento feito internamente atravs dos campo XX_FILIAL obedecendo a seguinte regra: Arquivos Compartilhados Quando o arquivo esta configurado para trabalhar no modo compartilhado (X2_MODO = C), este campo ser gravado com ( espaos ). Deste modo o registro ficara disponvel para todas as Filiais. Arquivos Exclusivos Quando o arquivo esta configurado para trabalhar no modo exclusivo ( X2_MODO= C ), esta campo ser gravado com o cdigo da Filial Atual. Deste modo o registro focara disponivel apenas para a Filial que o gravou. Para que o registro realmente fique disponvel ou no para suas respectivas Filiais , TODAS as rotinas que manilpulam registros diretamente na base de dados dever verificar a Filial atravs da Funo xFilial() , alem disto a maioria dos ndices possuem o campo FILIAL na chave : Sintaxe : XFILIAL(EXPC1) onde, ExpC1 = Alias do arquivo A funo xFilial() verifica se o arquivo exclusivo ou compartilhado e ira retornar se o arquivo for Compartilhado e o cdigo da Filial se o arquivo for exclusivo . Por exemplo : Para executar um dbSeek no arquivo de clientes : DbSelectArea(SA1) DbSeek(xFilial(SA1)+cCodCli+cLoja) ndice do SA1 : A1_FILIAL+A1_COD+A1_LOJA

Microsiga Software S/A

Pgina 33 de 38

Desenvolvimento Tcnicas e Procedimentos

Ou um processamento no arquivo : Do while !EOF() .AND. XX_FILIAL==xFilial(01) Sendo o campo FILIAL parte da chave de Todos os ndices do sistema, este procedimento garante que a utilizao dos registros ser exclusiva da Filial que criou os mesmos no caso do arquivo ser Exclusivo, ou disponvel para todas as Filiais quando o mesmo estiver configurado como Compartilhado. Jamais use um campo filial de uma tabela para executar um dbSeek() em outra tabela. Pois uma tabela poder ser compartillhada (campo filial em branco), enquanto que a outra poder ser compartilhada (campo filial preenchido). A varivel cFilAnt contm a filial que o usurio est operando, e a varivel cEmpant contm a empresa e a filial Tcnicas para Filtragem Nos sistemas Microsiga, a filtragem dos dados em ambiente Code Base os DBFs feita de maneira geral pela Funo INDREGUA(Params,) , o que de forma geral no impede o uso de instrues como SET FILTER TO, DBSETFILTER(), DBFILTER() ou qualquer outro comando de sintaxe xBase. A INDREGUA() uma funo interna que rene vrios atrativos e facilidades para o seu uso, entre elas a possibilidade de se indexar e filtrar os registros atravs dos parmetros fornecidos, ela tambm preferencialmente usada para que o cdigo fique mais limpo e de fcil interpretao pois dentro de sua estrutura rene uma srie de comandos de indexao e filtragem que agiliza o processo de criao de ndices e filtros em arquivos de trabalho com menos linhas de cdigo, vejamos o Exemplo : Chaves Primrias Sua funo garantir unicidade. Em toda relao, por definio, tem-se uma ou mais chaves candidatas. Dessas chaves, uma ser primria e se houver mais de uma na relao, essas outras sero definidas como chave alternada. Chaves Estrangeiras um atributo cuja funo permitir relacionamento. Em uma tabela na qual o atributo chave externa ou estrangeira, em outra, o atributo deve ser chave primria, e os valores dos campos so necessrios. Integridade Referencial Todos os valores da chave estrangeira tem, obrigatoriamente, que ter valor correspondente na chave primria que se relaciona; mas nem todos os valores

Microsiga Software S/A

Pgina 34 de 38

Desenvolvimento Tcnicas e Procedimentos

encontrados na chave primria, precisam ter seus correspondentes na chave estrangeira que se relaciona. Por exemplo, na tabela de clientes, o campo A1_COD (cdigo do cliente), vai estar relacionado com outra tabela que indica quais so os pedidos de venda colocados. Desta forma, nem todos os clientes precisam ter pedidos de venda colocados; mas, necessariamente, todos os pedidos de venda precisam de um cliente. Como o PROTHEUS foi projetado para o ambiente SQL, onde a integridade referencial das tabelas definida no prprio banco de dados atravs de regras internas, devemos tomar algumas precaues com esse tpico: Verificar a integridade da coluna em todas as tabelas relacionadas: no pode-se alterar o tamanho do cdigo do cliente em apenas uma tabela, caso esse cdigo seja alterado deve-se verificar as tabelas de cabecalho e itens das notas fiscais, de titulos a pagar e receber, etc. O sistema conta com o recurso de grupos de tabelas relacionadas, que permite alterar o tamanho de diversas colunas de uma vez s , garantindo a integridade das colunas Verificar a integridade dos cadastros com todas as tabelas relacionadas: no pode-se excluir o cdigo do cliente se existe um pedido de vendas em aberto para esse cliente, deve-se verificar todas as tabelas relacionadas antes de atualizar a base de dados.Alm disso na incluso de cadastros devemos utilizar as funes existchav e existcpo para garantir que as informaes de chave no sejam repetidas e que o acesso a tabelas externas seja validado de maneira consistente. Verificar a atualizao da informao em todas as tabelas relacionadas: a integridade no se resume a validaes de cadastros e tamanho de colunas, deve-se garantir no ato do desenvolvimento que TODOS os pontos relacionados ao tpico envolvido sejam analisados e se necessrio atualizados. Por exemplo, se ser atualizado o saldo em estoque de determinado produto NO DEVE-SE atualizar somente o arquivo de saldos em estoque, deve-se avaliar se o produto utiliza rastreabilidade para nesse caso atualizar o arquivo de saldos por lote, deve-se avaliar se o produto utiliza controle de localizao fisica para nesse caso atualizar o arquivo de saldos por localizao, etc. Deve-se fazer um estudo antes de qualquer alterao em atualizao de base de dados.

Microsiga Software S/A

Pgina 35 de 38

Desenvolvimento Tcnicas e Procedimentos

USANDO ROTINAS AUTOMTICASA cada dia estamos criando rotinas com interface automtica para melhorar a entrada de dados via outros equipamentos, tais como coletores de dados, interface de outros softwares, etc. Porm, para nossa prpria portabilidade e utilizao de rotinas padronizadas, temos adotado o prprio programa standard, contudo sem interferencia do usurio (digitador). Para tal, criamos um mecanismo onde todos os programas que necessitem desta regra devem ser capazes de inserir dados de forma automtica. Abaixo mostraremos como proceder : Tome como exemplo o MATA250.PRX . O vetor aRotAuto passado para o programa citado. Se este vetor contiver elementos, significa que ser utilizada a Rotina Automtica. Este vetor deve, quando da utilizao das rotinas automticas, conter os dados mnimos necessrios para a atualizao dos arquivos. Veja a estrutura do vetor a ser enviado para a rotina automtica. ARotAuto := { cCampo, Contedo, Validao} Onde CCampo Contedo Validao o campo a ser atualizado, o contedo que cCampo vai receber a validao que cCampo vai receber.

Observao: A Validao pode ser uma funo ou um valor NIL. Se for NIL, as validaes a serem utilizadas para o respectivo campo sero as existentes no SX3. Se as validaes no forem as do SX3, elas devem ser passadas numa funo. Exemplo, ARotAuto := { { { { { { { { "D3_TM" "D3_COD" "D3_UM" "D3_QUANT" "D3_OP" "D3_LOCAL" "D3_EMISSAO" ,"001" ,padr("10100",15) ,"UN" ,1 ,"00000401001" ,"01" ,dDataBase ,NIL ,NIL ,NIL ,NIL ,NIL ,NIL ,NIL } } } } } } } , , , , , , ; ; ; ; ; ; }

Para o processo de incluso simples, sem getdados, a varivel padro a ser utilizada nos programas chama-se aRotAuto, e para processo de incluso com cabealho e itens, as variveis a serem utilizadas so: aAutoCab para o cabealho, e aAutoItens para os itens da getdados. Para uma incluso simples, tomar como exemplo o MATA250.PRX. Para uma incluso com cabealho e tem, tomar como exemplo o CONA050.PRX.

Microsiga Software S/A

Pgina 36 de 38

Desenvolvimento Tcnicas e Procedimentos

CONTROLE

DE

SEMFORO

O controle de Semaforo permite que o sistema controle a Numerao Automtica de Documentos On Line. Temos basicamente 3 funes que gerenciam o controle do mesmo. So elas : GETSXENUM( EXPC1) Obtem o nmero sequencial do alias especificado no parmetro. ROLLBACKSXE Descarta o nmero pendente do semforo. usado quando o usurio cancela a operao (o numero no aproveitado). CONFIRMSXE Confirma o nmero sugerido. Esta funo deve ser chamada quando da confirmao da gravao do registro. MAYIUSE Checa fisicamente se um determinado arquivo existe. O arquivo poder conter o nmero sequencial.

Microsiga Software S/A

Pgina 37 de 38

Desenvolvimento Tcnicas e Procedimentos

ATUALIZAO

DO

SOURCE SAFE

A atualizao do Source Safe a ltima, e mais crtica, etapa do processo de alterao dos programas. Para que ela seja feita com a mxima segurana algumas etapas devem ser observadas. A seguir: Aps as alteraes ser necessria uma anlise meticulosa de tudo o que foi alterado para avaliar qual o impacto que estas podero causar no programa em que foram executadas e nos programas correlacionados; Devero ser efetuados o maior nmero de testes onde devero ser previstos o maior nmero de situaes possveis e provveis. Os testes devero ser simulados em base equivalente instalada no cliente e para as novas verses, em uma nova base que poder ser gerada atravs do ATUSX; Feita a anlise, os testes e antes de atualizar definitivamente o Source Safe o programa alterado dever ser comparado com o constante no Source Safe para verificar se as alteraes foram realmente feitas no programa que foi reservado e, s ento o programa poder ser Baixado. Aps a Baixa, e para garantir que o atualizao do Source Safe foi feita corretamente, o programa atualizado dever ser novamente comparado. E claro que se todas as etapas anteriores, principalmente a 1 e 2 , foram cumpridas essa no passar de uma medida de segurana.

Microsiga Software S/A

Pgina 38 de 38