Você está na página 1de 5

Pgina 1 de 5

04 Outros Cuidados
Reviso: 13/07/2002

Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

Um dos cuidados que devemos ter quando da criao de relatrios contendo valores a utilizao dos subtotais e totais, a fim de evitar erros que podem ser desastrosos durante uma tomada de deciso errada devido a valores errados. A utilizao de somatrias deve ser bastante criteriosa a fim de no cometermos o erro de misturarmos unidades de medidas diferentes no mesmo clculo.

Confrontando relatrios e consultas

Quando elaboramos um sistema, existem muitos relatrios que geram dados para outros relatrios e consultas. Devemos tomar cuidado para que no aconteam divergncias de informaes de um para o outro, como por exemplo, no caso de valores. Um bom exemplo disso, a rotina de impresso de folha de pagamento. Este relatrio exibe informaes que so utilizadas em outros relatrios, tais como, valores para o FGTS, guia de recolhimento de impostos. Uma soluo para que no se ocorra uma divergncia de valores, seria utilizar uma nica funo ou rotina de processamento. Isto evitaria que ao se alterar o sistema, por motivo de lei ou outro qualquer, o programador alterasse por exemplo s rotinas de relatrio de folha de pagamento e guia de impostos e esquecesse de alterar por exemplo rotina de relatrio de FGTS. Exemplos como Saldos Bancrios, Quantidades de Estoques, Valores de Faturamento, entre outros, devem ser confrontados entre relatrios e consultas para no gerarem informaes errneas ao cliente. Normalmente estes problemas ocorrem em funes de critrios de filtragens diferenciados entre eles. Para evitar este tipo de problema fundamental que o analista ao efetuar alguma manuteno em algum relatrio ou consulta atente-se ao fato de assegurar que esta alterao no influencie outras situaes. Este um tipo de no conformidade simples de ser evitada e que pode causar problemas srios para os usurios alm de ser de dificil argumentao quando nos questionado, pois evidencia falta de ateno ou critrio na manuteo ou falta de conhecimento sobre o funcionamento do sistema. Problemas com Looping de Programas O Protheus utiliza a tecnologia Cliente/Servidor. Isto significa que o aplicativo no mais executado individualmente em cada mquina, ele ser executado no servidor do aplicativo. At a verso 4.07 um programa travado significava que apenas a estao estava comprometida (o executvel estava na memria da estao). Com o Protheus, todo o processamento est no Server e quando o programa

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018277

24/8/2004

Pgina 2 de 5

est em looping estaremos gradativamente usando todo a CPU do Server e consequentemente parando todo o processamento. Se ao desenvolvermos uma rotina e a mesma entrar em looping (tiver apenas uma entrada e no tiver uma sada do processamento), este processamento utilizar todos os recursos do servidor comprometendo (reduzindo drasticamente a performance do aplicativo), ou at impedindo, o uso do aplicativo por todos os demais usurios. Se isso acontecer em uma empresa onde existem apenas 5 usurios, o administrador da rede poder reiniciar o servidor, porm onde existe um nmero considervel de usurios poder haver um prejuzo para a empresa que utiliza nosso sistema. Exemplo:
dbSeek(xFilial(SE1)+DTOS(dDtIni)) Do While SE1->(!Eof()) // demais comandos , etc. <---------- 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 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.

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018277

24/8/2004

Pgina 3 de 5

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 <Nome do Arquivo> a ser copiado para o Client 2o. o <Nome do Diretrio> 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.)

Onde os parmetros so: 1o. o <Nome do Arquivo> a ser copiado para o Server 2o. o <Nome do Diretrio> 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,

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018277

24/8/2004

Pgina 4 de 5

tais como SAY , GET e LABEL, na Dialog. Procure sempre colocar em tela as informaes que mais se objetivam com o assunto abordado. 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 <TAB>) 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. 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 = Array contendo as linhas usada que sero apresentadas na Getdados AHeader = Array contendo o cabeo das colunas da Getdados N = Varivel publica que indica a posio do atual no acols (a Linha que est sendo editada na Getdados)

Para salva-las podemos:

aColsAnt := aClone(Acols) aHeaderAnt := aClone(aHeader) nElemAnt := n

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018277

24/8/2004

Pgina 5 de 5

E para restaura-las:

aCols := aClone(aColsAnt) aHeader := aClone(aHeaderAnt) n := nElemAnt

Grupos Relacionados Principal / Guias de Referncia / Como programar Advpl no ERP

Topo da Pgina

http://dem.microsiga.com.br/w_wEx011.apw?Cod=018277

24/8/2004