Página 1 de 1

Considerações, Criticas & Autocríticas

Enviado: 28 Jan 2005 00:06
por ROMARIO
Caros Clipeiros.

Quero agradecer a todos que responderam o meu tópico anterior (Uso de subdiretórios). Anotei para não magoar ninguém: Domenico, Maligno, Toledo, Clipper, Augusto, Antonio, rrsistemas (Renato) e Jorge Adourian (a quem devo muito do pouco que sei). Resolvi postar outro tópico para não ficar grande demais.

Considerações Iniciais.

1) Sou Contador (formado em Ciências Contábeis) e trabalho no ramo a 30 anos. Resolvi trilhar o ramo de programação por que sou idealista/perfeccionista. Nunca vi um programa que atenda 100% ao Contador (Cara Chato !!). Mas é pela imposição da legislação tributária que muda de hora em hora neste Pais. Meu interesse é em programção voltada para a área contabil/comercial (Contab., Folha pagto. Livros Fiscais etc).

2) Como disse no tópico anterior gosto de "entender" o que estou fazendo. Não me satisfaz usar uma lib qualquer, funcionou tá OK. Por força da profissão acho, gosto de compreender bem o que se está fazendo, testar, ver o resultado etc. Meus poucos programas que fiz rodam sem dar nenhum problema. Vejo aqui no forum o pessoal reclamar que deu erro tal, e a resposta invariavelmente é "Verifica se não foi linkado uma lib de terceios incompatível com o Clipper." etc. Por isso da minha antipatia por usar lib, func., sem que a elas tenho acesso (fontes). Mas não sou contra de quem as use.

3) Gosto de estudar (contei: tenho 25 livros só de clipper. acho que todos publicados em portugues eu tenho), comprei CD de programas prontos com fontes para estudar, comprei Programas c/Fontes para estudar, acho que vasculhei todos os sites de clipper etc. Com tudo isso tenho dúvidas. Por isso participo deste Forum.

4) Sou um gaucho "grosso e burro" e como dizia o saudoso Gildo de Freitas "Reconheço a minha gossura" . Digo isso com humildade porque nos dois ultimos tópicos que postei obtive muitas respostas mas confesso que não entendi nada.

5) Diante do acima exposto pensei em desistir. Penso que estou atrapalhando o andamento deste Forum. Por outro lado o Forum não terá razão de ser se todos sabem e ninguém tem dúvida.

Vamos aos fatos.

Vou citar apenas as minhas últimas duas dúvidas que postei aqui neste Forum:

1) Como trabalhar com tabelas com validade:

Ex.: a tabela do I. Renda. no ano de 2004 vigorou com certos valores. Em 2005 mudou a tabela como todos sabem. PRECISO fazer um programa que calcule tanto pelo valor de 2004 ou de 2005. Fiz essa pergunta e todos me responderam coloque um campo com data. ISSO EU SEI. O problema é como programar isso em Clipper. Abaixo a tabela do IR/2005:

valini - valfin - aliq. - desc.
0,00 - 1.164,00 - 0,15 - 174,60
1.164,01 - 2.326,00 - 0,275 - 465,35

Imaginem o ano de 2004 com valores 10% menor, 2003 c/20% menor etc.
Agora a pergunta:

Um sujeito ganhou no mes Abril/2004 - R$ 2.200,00. Quais campos preciso acrescentar na minha tabela e como seria a rotina para calcular quanto de IRenda esse camarada deve ???.

2) No tópico anterior (subdiretórios) também não obtive a resposta que preciso (burro não entende fácil). Use lib tal, crie uma function que faça tal coisa ou retorne tal resultado. Isso é teoria. Mas como é a tal function escrita em clipper. Isso que preciso. O Toledo me respondeu: Use um campo na tabela empresa, com o caminho do subdiretório. Acho que é por aí. Mas gostaria de mais detalhes (Nos míiiinimos detalhes) de preferência com uma explicação em cada linha de comando.

Desculpem o desabafo. Se eu soubesse não estaria perguntando. Não se acanhem em responder simplesmente. Se não for a melhor idéia com certeza ela servirá para alguem. (como eu).

Abraços a todos.

Obrigado.

Romario

Enviado: 28 Jan 2005 01:49
por rrfsistemas
Caro amigo Romário, apesar de não gostar do seu nome eu vou te ajudar.

(sou palmeirense) :mrgreen: (Y)

brincadeirinha falo !!

tenho um sistema de condomínios que usa uma lib chamada Funcky e trabalho com subdiretórios como vc disse antes, se quise mando para vc via e-mail, para dar uma estudada.

Enviado: 28 Jan 2005 11:10
por ROMARIO
Caro Renato.

Por favor mande tudo que tiver de clipper e achar bom. Será aproveitado.

Muito obrigado.

Enviar para:

rkilian@terra.com.br

Enviado: 28 Jan 2005 11:50
por lima
Caro Romario

Quanto a sua duvida da Tabela do Imposto de Renda,
o seu tópico anterior "Duvidas c/ tabelas de 26/08/2004
https://pctoledo.org/forum/viewto ... ight=#1375 "

traz exemplos de como vc pode fazer...
Porém lá vai...

No meu sistema de Folha de Pagamento eu faço o seguinte:-
criei uma tabela contendo os campos:-

Data Inicio
Data Final
Faixa
Valor Inicio
Valor Final
Aliquota
Valor Reduzir

ex:=
01/01/2002 31/12/2004 1 0,00 1.058,00 0,00% 0,00
01/01/2002 31/12/2004 2 1.058,01 2.115,00 15,00% 158,70
01/12/2002 31/12/2004 3 2.115,01 9.999,99 27,50% 423,08
01/01/2005 99/99/9999 1 0,00 1.164,00 0,00% 0,00
01/01/2005 99/99/9999 2 1.164,01 2.326,00 15,00% 174,60
01/01/2005 99/99/9999 3 2.326,00 9.999,99 27.50% 465,35

Tenho a base de calculo e a data de pagamento, procura nos registros (conforme exemplo acima) os valores relacionados da tabela e fazer o calculo do IR como de costume,
Acho que dá para entender...

Até+
Lima :cool:

Enviado: 28 Jan 2005 13:34
por Clipper
Prezado Romario

Fiz uma pequena rotina que exemplifica o que você deseja.

Abaixo segue a listagem para a avaliação e sugestão dos colegas, no link você pode pegar ela junto com o banco de dados de teste.

Código: Selecionar todos

CLS
USE EMPRESA ALIAS EMP NEW // Cadastro de empresas
IF .NOT. FILE("EMPRESA.NTX")
   INDEX ON CODIGO TO EMPRESA
ELSE
   SET INDEX TO EMPRESA
ENDIF

EMPRESA=0
@ 02,00 SAY "Selecione a Empresa : "
@ 03,00 TO 03,79
@ 05,00 SAY PADC("Dados da Empresa Selecionada",80)
@ 07,00 SAY "Nome da Empresa       : "
@ 08,00 SAY "Diretorio de Trabalho : "
DO WHIL .T.
   @ 02,22 GET EMPRESA PICT "999" VALID VEREMP(EMPRESA)
   READ
   IF LASTKEY()=27
      DBCLOSEALL()
      CLS
      RETURN
   ENDIF
ENDDO

*********************
FUNCTION VEREMP(MEMP)
IF MEMP=0
   EDITAEMP()
   RETURN(.T.)
ELSE
   DBSEEK(MEMP)
   IF EOF()
      @ 24,00 SAY PADC("Empresa nao cadastrada...",80)
      INKEY(2)
      @ 24,00 CLEAR TO 24,79
      RETURN(.F.)
   ENDIF
   @ 07,24 SAY NOME
   @ 08,24 SAY EMPPATH
   @ 24,00 SAY PADC("Pressione uma tecla para selecionar outra empresa...",80)
   @ 07,24 CLEAR TO 08,79
   INKEY(0)
   MPATH=ALLTRIM(EMPPATH)
   MNOME=ALLTRIM(NOME)
   // Neste caso a empresa teria sido selecionada e bastaria agora
   // abrir os arquivos normalmente para trabalho, sendo que eles
   // serao abertos no respectivo diretorio. Exemplo :
   //  USE "&MPATH"+"CLIENTES.DBF"
   //  USE "&MPATH"+"LFISCAL.DBF"
   //  USE "&MPATH"+"FORNECED.DBF"
   //  NÆo esquecendo que isso deve ser usado tambem na criacao
   //  e abertura dos arquivos de indices
   //
   // Para trabalhar com diretorios voce pode usar as funcoes da FAST.LIB
   // DIRCHANGE() Ir para um diretorio
   // DIREXIST()  Verificar se um diretorio existe
   // DIRCREATE() Criar um diretorio
   // DIRDEL()    Excluir um diretorio
ENDIF
RETURN(.T.)

*******************
FUNCTION EDITAEMP()
SAVE SCREEN TO SALVAEDIT

DECLARE CAMPOS[3]
DECLARE WPICTU[3]
DECLARE WCABEC[3]

CAMPOS[1]="CODIGO"
CAMPOS[2]="NOME"
CAMPOS[3]="EMPPATH"

WPICTU[1]="999"
WPICTU[2]="@!"
WPICTU[3]="@!"

WCABEC[1]="Codigo"
WCABEC[2]="Nome da Empresa"
WCABEC[3]="Diretorio de Trabalho"

DBEDIT(10,00,22,79,CAMPOS,"",WPICTU,WCABEC,"Ä","³","Ä")
RESTORE SCREEN FROM SALVAEDIT
RETURN(NIL)
www.zitinformatica.com/clipper/rotemp.zip

Até logo.

Marcelo

Não se perca de mim
Não se esqueça de mim
Não desapareça
A chuva tá caindo
E quando a chuva começa
Eu acabo perdendo a cabeça
Não saia do meu lado
Segure o meu pierrot molhado
E vamos embora ladeira abaixo
Acho que a chuva ajuda a gente a se ver
Venha, veja, deixa, beija, seja
O que Deus quiser

A gente se embala se embola se embola
Só para na porta da igreja
A gente se olha se beija e se molha
De chuva, suor e cerveja

Música incidental
Chuva, suor e cerveja
Caetano Veloso

Enviado: 28 Jan 2005 19:48
por ROMARIO
Caros amigos do Clipper.

Fiquei muito contente com as respostas colocadas (Lima e Clipper). Agora as coisas começaram a ficar mais claras. Quanto a trabalhar com tabelas com vigência, já está esclarecido, com a resposta do colega (ex de tabela etc.)
Vou criar um exemplo, testar e colocar aqui no forum para que outros que tenham dúvidas a respeito como eu fiquem bem esclarecidos.

Quanto a subdiretórios ainda persistem algumas dúvidas. No path devo colocar o caminho completo (ex.: c:\cfiscal\empr01\.... até onde) com as barras, sem as barras etc. e os indices ???.

Obrigado por me ajudarem.

Romario

Enviado: 29 Jan 2005 04:05
por Clipper
Prezado Romario

Fiz uma rotina mais completa que inclui o cadastramento da empresa e seu respectivo diretorio de trabalho, e também cria os arquivos de dados no diretorio da empresa, espero que eja mais esclarecedor.

Abaixo o código e o link para baixar a nova versão :

Ps : Para linkar essa versão você precisará da CLIPPER TOOLS LIB
Se não tiver pegue-a no meu site.

Código: Selecionar todos

PUBLIC DIREMP,DIRPADRAO
// DIREMP = Diretorio dos dados da empresa selecionada
// DIRPADRAO = Diretorio dos dados comuns a todas as empresas
PRIVATE EMPRESA
CLS
DIRPADRAO=DISKNAME()+":\"+CURDIR()+"\"

USE "&DIRPADRAO"+"CFOP" ALIAS CFO NEW // Cadastro de CFOPS - de cortesia... :-)
IF .NOT. FILE("&DIRPADRAO"+"CFOP"+INDEXEXT())
   INDEX ON CFOCOD TO "&DIRPADRAO"+"CFOP"+INDEXEXT()
ELSE
   SET INDEX TO "&DIRPADRAO"+"CFOP"+INDEXEXT()
ENDIF

USE "&DIRPADRAO"+"EMPRESA" ALIAS EMP NEW // Cadastro de empresas
IF .NOT. FILE("&DIRPADRAO"+"EMPRESA"+INDEXEXT())
   INDEX ON CODIGO TO "&DIRPADRAO"+"EMPRESA"+INDEXEXT()
ELSE
   SET INDEX TO "&DIRPADRAO"+"EMPRESA"+INDEXEXT()
ENDIF

EMPRESA=0

@ 02,00 SAY "Selecione a Empresa : "
@ 03,00 TO 03,79
@ 05,00 SAY PADC("Dados da Empresa Selecionada",80)
@ 07,00 SAY "Nome da Empresa       : "
@ 08,00 SAY "Diretorio de Trabalho : "
@ 09,00 SAY "Local e nome do EXE   : "+EXENAME()
@ 10,00 SAY "Diretorio atual       : "+DIRPADRAO

DO WHIL .T.
   EMPRESA=0
   @ 02,22 GET EMPRESA PICT "999" 
   READ
   IF LASTKEY()=27
      DBCLOSEALL()
      CLS
      RETURN
   ENDIF
   VEREMP(EMPRESA)
ENDDO

*********************
FUNCTION VEREMP(MEMP)
IF MEMP=0
   EDITAEMP()
   RETURN(.T.)
ELSE
   DBSEEK(MEMP)
   IF EOF()
      CAD=SPACE(1)
      @ 23,02 SAY "Msg : Empresa nao cadastrada..."
      @ 24,02 SAY "Cadastrar (S/N) ? " GET CAD PICT "@!" VALID CAD$"SN"
      READ
      IF LASTKEY()=27 .OR. CAD="N"
         @ 23,02 CLEAR TO 24,79
         RETURN(.F.)
      ENDIF
      @ 23,02 CLEAR TO 24,79
      SAVE SCRE TO SALVATELA
      CLS
      MNOME:=SPACE(40) ; MPATH:=SPACE(8)
      @ 02,00 SAY "Nome da Empresa    : " GET MNOME PICT "@!"
      @ 03,00 SAY "Diretorio de dados : " GET MPATH PICT "@! AAAAAAAA" VALID VERPATH(MPATH)
      READ
      IF LASTKEY()=27
         RESTORE SCRE FROM SALVATELA
         RETURN(.F.)
      ENDIF
      DBAPPEND()
      REPLACE CODIGO  WITH EMPRESA
      REPLACE NOME    WITH MNOME
      REPLACE EMPPATH WITH MPATH
      DBCOMMIT()
      DIRMAKE("\"+CURDIR()+"\"+ALLTRIM(MPATH))
      DIREMP="\"+CURDIR()+"\"+MPATH+"\"
      CRIADBFS()
      RESTORE SCRE FROM SALVATELA
   ELSE
      @ 07,24 SAY NOME
      @ 08,24 SAY DISKNAME()+":\"+CURDIR()+"\"+EMPPATH
      @ 24,00 SAY PADC("Pressione uma tecla para selecionar outra empresa...",80)
      INKEY(0)
      @ 24,00 CLEAR TO 24,79
      @ 07,24 CLEAR TO 10,79
      MPATH=ALLTRIM(EMPPATH)
      MNOME=ALLTRIM(NOME)
      DIREMP="\"+CURDIR()+"\"+MPATH+"\"
   ENDIF
   // Agora e so abrir/criar os arquivos especificando o path
   // O ideal e ter uma variavel publica com o path completo
   // Exemplo :
   // DIREMP="\"+CURDIR()+ALLTRIM(EMPPATH)+"\"
   // USE "&DIREMP"+"CLIENTES" ALIAS CLI NEW 
   // INDEX ON CODIGO TO "&DIREMP"+"CLICOD"+INDEXEXT() 
ENDIF
RETURN(.T.)

************************
FUNCTION VERPATH(MMPATH)
DDIR="\"+CURDIR()
IF DIRCHANGE(DDIR+"\"+ALLTRIM(MMPATH))=0
   @ 24,00 SAY PADC("Diretorio ja existe...",80)
   INKEY(2)
   @ 24,00 CLEAR TO 24,79
   DIRCHANGE(DDIR)
   RETURN(.F.)
ENDIF
RETURN(.T.)

*******************
FUNCTION EDITAEMP()
SAVE SCREEN TO SALVAEDIT

DBGOTOP()
DECLARE CAMPOS[3]
DECLARE WPICTU[3]
DECLARE WCABEC[3]

CAMPOS[1]="CODIGO"
CAMPOS[2]="NOME"
CAMPOS[3]="EMPPATH"

WPICTU[1]="999"
WPICTU[2]="@!"
WPICTU[3]="@!"

WCABEC[1]="Codigo"
WCABEC[2]="Nome da Empresa"
WCABEC[3]="Diretorio de Trabalho"

DBEDIT(12,00,22,79,CAMPOS,"",WPICTU,WCABEC,"Ä","³","Ä")
RESTORE SCREEN FROM SALVAEDIT
RETURN(NIL)

*****************
FUNCTION CRIADBFS
DBCREATE( "&DIREMP"+"CLIENTES.DBF", {{ "CLICOD", "N",   6,  0 }, ;
{ "CLIRAZAO", "C",  50,  0 }, ;
{ "CLICNPJ", "C",  14,  0 }} )
//Cria o arquivo de clientes no diretorio da empresa selecionada

DBCREATE( "&DIREMP"+"FONECED.DBF", {{ "FORCOD", "N",   6,  0 }, ;
{ "FORRAZAO", "C",  50,  0 }, ;
{ "FORCNPJ", "C",  14,  0 }} )
//Cria o arquivo de fornecedores no diretorio da empresa selecionada
RETURN(.T.)
www.zitinformatica.com/clipper/rotemp2.zip

Até logo.

Marcelo

Enviado: 01 Fev 2005 04:37
por rochinha
Amiguinho

Vai aqui uma dica de um velho batalhador.

Quando pensar em estruturas dos .DBFs pense em matrizes.
Quando pensar em tabelas pense em matrizes.

Faça o esboço das informações que voce deseja lançar em uma tabela primeiramente em uma planilha( vocé é contador, portanto, sabe muito bem como usa-las ).

Uma vez precisei montar um módulo de custos para um cliente e não sabia por onde começar. Foi então que lendo uma antiga publicação, Pequenas empresas, Grandes negócios encontrei uma planilhamento onde eram informados desde os valores necessários para o inicio do negócio até o lucro final e custo do serviço.

Joguei estas informações no Excell, fui criando os vinculos e alguns dias depois já tinha um controle de custos totalmente automatizado.

A partir dai já sabia quantas tabelas iria criar, quais campos conteriam e como seriam seus dados.

veja a mesma em http://www.softclever.com/downloads/custos~1.xls

A partir dela pude fazer com maior rapidez o módulo de custos que hoje compõe meu sistema e é claro esta mais aprimorado e integrado com o mesmo.

Portanto antes de quebrar a cabeça use uma ferramenta mais visual, depois é só partir pro abraço, falô parcero.

@braços :?)