Página 2 de 4

Enviado: 14 Set 2007 13:27
por Pablo César
rochinha escreveu:mas como me cabelo é black-power imagine como ficaria, hehehe.
Ahh mas a verdadeira beleza se encontra em outras formas. E você é muito gente boa !.
Eu ja penso assim: usuario que tem idéias e pensam que é simples fazer, estes não dão valor ao trabalho feito
Pior que isso é bem assim mesmo !. Mas também tem a idéia de quem ama o que faz não se preocupa com o trabalho empregado e sim com o resultado. Também tem aquela questão que saber não ocupa espaço e se você tem tempo então vale a pena investir nisso.

Por isso é bom avaliar bem antes. Como dito em outras mensagens, o importante é uma solução prática e de preferência de graça (ou valor custo).

Enviado: 14 Set 2007 13:46
por Rodrigo Reis
Concordo plenamente com vc Rochina . .em gênero, número e grau. rssss
Tanto é que realmente, me pedem zilhões de coisas alguns de meus clientes, sendo que a grande maioria, realmente, nem precisam, não daum valor. E realmente eu atuo dessa forma: O que eu vejo que não vai me valorizar, nem a mim nem valorizar meu trabalho, eu realmente não ofereço como meu serviço .. . e graças a Deus, atuar dessa forma fez com que existisse uma mudança muito grande na visão dos meus clientes com relação a mim e com relação aos meus sistemas . . . Acredito, que seja essa a forma certa de atuar . .utilizando um pouco de malícia no trato com os clientes, eliminando o que realmente não precisa e tirando a tal idéia de que é simples fazer tal coisa, porque vc naum faz rapidinhu!!!!rsss
Issu, graças a Deus eu naum escuto mais a anos . .rssss
Porém, nesse caso específico eu vou explicar com o pingo nos devidos Is . . .
Estou substituindo um sistema de um cliente, porém, o sistema deles feito por um outro programador e que não esta em manutenção a algum tempo apresenta muitas falhas . . .O que eu percebi, é que de inicio, o programador utilizou uma rotina de clientes e histórico de compras desses clientes, dentro do sitema . . .Da seguinte forma . . .
O cadastros dos clientes normal , padrão, armazenando em DBfs e o histórico de compras dentro de um campo MEMO do DBF dos clientes . .
Ele deve ter encontrado algum problema com os campos MEMO e decidiu substituir os campos MEMO do sistema por DBFs com um único campo, caracter 78 . . .
Os clientes editavam o histórico, e a alguns meses eles editam os DBFs diretamente . . .
O que consta é que existiu um problema com esse histórico e desde que houve a mudança que o outro programador fez, a tal inserção de "linhas" do histórico do cliente não funciona . .rssss linguagem de usuário . rss
Tenho que contornar esse problema, até a substituição desse sistema ..
Por issu, eu precisava de inserir um registro em qualquer local do DBf, local a escolha do usuário, pois acredito que eles trabalhavam dessa forma com o MEMOEDIT e agora, o programador usou um TBROWSE, pra substituir . .
Não questiono o que o outro programador fez, até pq resolveu o problema na época, mas com certeza, substituindo por xharbour e utilizando uma interface gráfica junto, podemos melhorar um pouco pra esse cliente :-)
Enquanto issu, preciso de uma forma de incluir um registro em branco no dbf na posição do cursos . . caso totalmente atípico . .

Obrigado galera

Rodrigo Reis

Enviado: 14 Set 2007 13:49
por Maligno
Ele deve ter encontrado algum problema com os campos MEMO e decidiu substituir os campos MEMO do sistema por DBFs com um único campo, caracter 78
Há 18 anos eu não uso MEMO. Uso apenas listas (simplesmente) ligadas em DBF. Funciona que é uma maravilha. Mas a implementação tem que ser cuidadosa. Senão vira um balaio de gatos. :)

Enviado: 14 Set 2007 14:12
por Pablo César
Ele deve ter encontrado algum problema com os campos MEMO e decidiu substituir os campos MEMO do sistema por DBFs com um único campo, caracter 78 . . .
Eu acho isso uma barbaridade, tendo em conta a falta de flexibilidade e o aumento de tamanho desnecessário que causa no BD.

Acho que existe uma solução bem mais prática do que você pensaba, Rodrigo. Ao você ter explicado seu problema. Eu entendí que o problema está no histórico dos clientes. Eu não sou a favor da utilização de campos MEMOs isso causa um transtorno enorme quando fica corrompido. A solução indicada veja em:

https://pctoledo.org/forum/viewto ... 7337#17337

Você não vai se arrepender em tomar esta medida. E lembre, que quer faz bonito e não olha com maus olhos as críticas dos usuários, sempre as ouve com atenção. Claro que existem alguns que nem vale a pena a sua atenção, mas o que realmente importa é a produção e a satisfação dos usuários. Tenho como lema:

"O sistema deve se adequar ao usuário e não o usuário ao sistema."

É que eu tento ser bom e uma vez feito isso me ajudará em outras ocasiões pois o importante é acumular conhecimento e bagagem de rotinas para facilitar a nossa futura lavor.

Enviado: 14 Set 2007 14:16
por Maligno
"O sistema deve se adequar ao usuário e não o usuário ao sistema."
Nem sempre. Há situações em que você precisa alinhar o usuário com algumas boas práticas, que ele nem sempre conhece. Nem sempre o usuário sabe o que é bom pra ele.

Enviado: 14 Set 2007 14:27
por Pablo César
Maligno escreveu:
"O sistema deve se adequar ao usuário e não o usuário ao sistema."
Nem sempre. Há situações em que você precisa alinhar o usuário com algumas boas práticas, que ele nem sempre conhece. Nem sempre o usuário sabe o que é bom pra ele.
Sim até entendo essas situações por isso mencionei:
Claro que existem alguns que nem vale a pena a sua atenção
Mas essa é uma questão política e muito questionável pela ação que cada programador/analista toma. Eu ja sou dessa opinião e penso que sempre podemos evoluir e melhorar mesmo que isso implique em demanda de trabalho.

O que eu gostaria de destacar ou digamos salvaguardar: é a idéia de aperfeiçoamentos de técnicas mais elaboradas para que o profissional possa evoluir e não ficar num círculo vicioso e dizer apenas: "Não dá pra fazer". Eu no entanto sou da idéia e gosto dizer: O quê eu não faço com o Clipper ?. Isso me enche de muita alegria (mesmo que alguns usuários não valorizem).

Enviado: 14 Set 2007 14:45
por Maligno
mesmo que alguns usuários não valorizem
Tem razão. É preciso valorizar o trabalho do programador, sem o qual, nada seria possível, mesmo com a melhor ferramenta do planeta. O resto é resto. :)

Enviado: 21 Set 2007 08:24
por Rodrigo Reis
Sei que pode parecer uma dúvida simples, mas realmente não tá dando certo comigo . .rsssss
Penso que a forma mais rápida de solucionar este problema é pelo menos por enquanto ( durante o processo de desenvolvimento do novo sistema desse cliente ), é fazendo a inserção de registros em branco no DBF na posição do cursor, ja que o programador anterior fez dessa forma, ou passar o conteúdo destes DBFs para txt e implementar algo como foi sugerido mais acima por um dos mestres-colega que sugeriu . . .
Porém, não to conseguindo inserir um registro em branco na posição do cursor . .estou travado aqui . .alguém ja fez algo desse tipo . . .inserir um registro em branco na posição do cursor em um DBF? o append blank está inserindo no final do DBF . . .

Obrigado

Rodrigo Reis

Enviado: 21 Set 2007 11:08
por Pablo César
Sei que pode parecer uma dúvida simples, mas realmente não tá dando certo comigo
Rodrigo, o quê é que não está dando certo nas suas tentativas ? Poderia exemplificar ?. Eu ainda acho que insirir um REGISTRO no meio do arquivo vai demandar uma rotina que só poderia ser utilizada em modo EXCLUSIVO. O que eu acho uma medida muito radical, desaconselhável e que poderá originar algumas inconsistências no seu BD. Poderia nos dizer o quê você tentou ? E como fez ?.

Você fala que estaria optando por inserção de registro no meio do seu BD até que o novo sistema sair. Desculpa questionar, mas por quê você ja não faz do modo certo ? A sugestão de criar arquivos independentes por registros em lugar de utilizar campo MEMOs não resolve seu problema ?
Ele deve ter encontrado algum problema com os campos MEMO e decidiu substituir os campos MEMO do sistema por DBFs com um único campo, caracter 78 . . .
Substitua então esse DBF com campo fixo para a utilização de arquivos TEXTOS cujos nomes venham a serem composto pelo número da compra e dessa forma você obterá um arquivo para cada registro (isso se tiver histórico, senão irá economizar espaço). Faça isso colega, você não vai se arrepender.

Enviado: 21 Set 2007 16:12
por Rodrigo Reis
Estava mesmo pensando em utilizar arquivos textos . .. no lugar dos campos memo . . porem, nunca fiz issu . .
Vc tem algum exemplo dessa implementação . . .?

Como eu faria,tipo, teria jeito de eu usar o memoedit?

Obrigado

Rodrigo Reis

Enviado: 21 Set 2007 17:37
por Pablo César
teria jeito de eu usar o memoedit?
Com certeza e até vão poder inserir as linhas que quiserem (até 64K, é claro). Caso que precise mais (o que acho dificil) existe outra forma de edição de arquivo texto que seria ilimitado (acho eu). Caso queira ver veja este exemplo p/edição acima de 64k (não que eu acho necessário).

Mas como fazer ? Você leu a minha mensagem onde indico e consequentemente explico como poderia ser feito ? Bem você tem algum campo que indique o número da compra (e que não repita) ? Pois não sei a estrutura do seu BD, ajudaria se detalhasse um pouco a estrutura dos seu BD em questão.

Exemplo: poderias criar o arquivo texto com o nome digamos: \PROGRAMA\VENDAS\OBS00001.TXT onde 00001 é o código da venda.

Para poder dar um exemplo mais adequado seria conveniente nos passar a estrutura do seu BDs em questão.

Enviado: 21 Set 2007 19:39
por Eolo
Porém, não to conseguindo inserir um registro em branco na posição do cursor . .estou travado aqui . .alguém ja fez algo desse tipo . . .inserir um registro em branco na posição do cursor em um DBF? o append blank está inserindo no final do DBF . . .
Rodrigo, dá pra fazer, sim, usando o Tbrowse... Aliás, eu faço isso, mas é só visual, só parece que um registro foi inserido no meio do DBF...

Seguinte: o TBrowse listou os primeiros 20 registros do NOMES.dbf nas linhas de 1 a 20 da tela, certo? Agora, vc vai com o cursor digamos na linha 10, tecla F5 e quer que os registros se desloquem pra vc escrever o GET após essa linha 10, não é isso?

A mágica é fácil. Na rotina de construção do GET, vc vai escrever POR CIMA do que o Tbrowse aprensentou:
a) faça 10 SAYs mostrando os registros de 1 a 10 nas linhas de 1 a 10
b) limpe a linha 11 e escreva nela o GET
c) faça 9 SAYs mostrando os registros de 11 a 19 nas linhas 12 a 20 (o registro 20 vai "sumir" da tela, porque não cabe, certo?).

Tá lá a sua "linha em branco no meio do DBF"...

Depois disso, vem o resto da discussão. O que vc vai incluir nesse novo registro? Vai ser um nome obedecendo a ordem alfa do DBF ou vc quer manter essa linha em branco? Diz aí.

Enviado: 21 Set 2007 19:52
por Pablo César
Mas Eolo, essa sua idéia será que iria funcionar mesmo que depois de gravado no DBF o registro ficaria no lugar certo ? Ou teria que indexar ?.

Se bem que tudo isso seria desnecessário porque trata-se apenas de inserção de registro no campo OBSERVAÇÃO que inclusive estaria abrindo outro DBF. Não é assim Rodrigo ?. Sendo aasim, eu acho ainda bem mais prático, seguro e mais versátil editar em arquivo cada observação. Sabemos que nem todo registro tem uma observação e que cada observação poder ser feita de modo LIVRE. Então ainda acho que a criação de arquivo texto é a melhor opção (na minha opinião).

De todas formas é válido seu acrécimo Eolo. Nunca se sabe quando irá ser usado. Por falar disso, você utiliza esta técnica em quê caso Eolo ?

Enviado: 21 Set 2007 21:04
por Eolo
Putz, acho que eu li só o final da discussão e não percebi que se tratava da substituição de campo memo por campo caracter!... Mea culpa.

Então vamos mudar a coisa: Rodrigo, se vc tem um arquivo CLIENTES.dbf e, para cada cliente, tem um número indeterminado de "anotações" ou observações, e não deseja MEMO, pq vc não faz o seguinte:

NOMES.DBF
CODIGO (n/5), NOME (c/40)
1, Eolo
2, Rodrigo
3, Pablo

OBS.DBF (indexado por CODIGO e DATA)
CODIGO (n/5), DATA (d), OBS (c/78)
2, 10/10/06, "Cliente ligou reclamando"
1, 11/10/06, "Enviado FAX de confirmação"
2, 15/10/06, "PC Trocado"

Vc abre um TBROWSE com o NOMES.DBF. O usuário navega até o nome desejado (Rodrigo) e tecla F5 (por ex), para ver o histórico. Nessa hora vc cria um OBS_TEMP.dbf, copia do OBS.dbf todos os registros que tenham CODIGO=2 e abre o OBS_TEMP com o TBrowse... Se o usuário fizer alguma alteração nele, na saída vc atualiza o OBS.dbf a partir do TEMP.

E fica valendo a tal "INCLUSÃO de linha em branco" a que me referi no post anterior. É só ter um campo a mais, no TEMP, que controle a seqüência das linhas...

Enviado: 22 Set 2007 00:14
por clodoaldomonteiro
Rodrigo!
Postei um exemplo que pode te ajudar muito, é criado pelo GASpro que no browse dele pode-se criar duas janelas relacionadas entre si por um campo comum entre dois DBFs, o famoso relacionamento de arquivos.
Em cima fica o dbf pai e em baixo o filho.

O browse do GAS é muito dinâmico, e quando pressionamos a tecla "J" no browse, ele divide a janela e na parte debaixo mostra quais registros estão relacionados com o registro selecionado da parte de cima.

Exemplo:
Você lança várias notas de saida e em cada nota de saida pode ter vários produtos. Na consulta (browse) do arquivo de produtos voce pode dividi-la e na parte demaixo mostrar quantas notas fiscais deram saida no produto selecionado da parte de cima da janela.

Ai voce pode adaptar ao seu sistema.

O link para baixar o arquivo compactado é http://suportegas.com.br/portal/downloa ... STOQUE.ZIP

ou pode acessar o forum da GAS e baixar o arquivo em COLABORAÇÕES.
http://www.suportegas.com.br/portal/dl.asp

Espero ter ajudado um pouco e qualquer coisa to pode me mandar os teus DBFs dizendo o que é cada um deles que eu faço um sistema rapidinho em GAS prá ti.

Os meus e-mails estão aqui abertos para serem visualizados.