Clipper On Line • Ver Tópico - Entrada Saída 02 tabelas ou varias

Entrada Saída 02 tabelas ou varias

Aqui é o lugar para bater papo e trocar idéias sobre os mais variados assuntos

Moderador: Moderadores

 

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 17 Ago 2017 11:28

Olá pessoal

Vou começar um novo projeto em SQL e estou em dúvida e peço a ajuda de vcs

Tenho hj em DBF para a vendas 02 tabelas cabeçalho e itens
Para entrada tb mais 2 tabelas
Para Nfe tb mais 02

Estou pensando em fazer apenas 02 para tudo e diferenciar internamente se é entrada ou saída e já usar modelo se nfe 55 se nfce 65 se sat outro e assim por diante, se não tiver doc fiscal emitido fica em branco

Se nota a partir do cupom gera um novo registro e marca nos registros q originaram a nota q tem nota emitida e o nr

Pensando a nível de consultas, relatórios e SPED vcs acham melhor como e pq?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 17 Ago 2017 11:30

Pra clientes fornecedores funcionários transportadores tb algo semelhante hj tenho 1 tabela pra cada talvez criar 1 pra tudo e diferenciar por flats ehfuncionario sim ou não cliente sim ou não fornecedor sim ou não
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor JoséQuintas » 17 Ago 2017 13:03

Eu até faço isso.
Em todo aplicativo era 1 pra clientes ou saídas ou vendas ou contas a receber, 2 pra fornecedores ou entradas ou compras ou contas a pagar.
Depois criei código único, mantendo ainda o 1 e 2, e acrescentei o 3 pra transportadora.
É que nota de entrada ou saída pode ter cliente ou fornecedor,e começa a complicar ter cadastro diferente.

Também já pensei em usar um código parecido com os do governo: ano, mês, CNPJ emitente, tipo de documento, pra juntar tudo.
Mas é complicado chegar num acordo, porque começa a ter campos específicos.

Nas notas fiscais já tenho um campo a mais, criei nos tempos da NFE, pra diferenciar NF de NFE, mas criei com 6 dígitos que é meu padrão.
Isso permite quase 1 milhão de documentos diferentes.
Cheguei a usar pra NF, NFE e Cupom Fiscal, ou até pedido sem nota, gerando uma nota simulada com numeração própria.

Também pensei em usar isso pro aplicativo de imobiliária, que tem dono de imóvel, inquilinos, quem recebe o valor, etc., mas pode ser perigoso o usuário colocar um inquilino pra receber aluguel ao invés de pagar.

Não é fácil decidir, é uma coisa que a gente sempre vai deixando pra depois... rs

Como no SQL dá pra deixar o campo sem nada (NULL) pode valer a pena juntar algumas coisas.
Avalie a questão dos comandos SQL pra obter as informações, se vai ser vantagem ou não.
Acho que isso tudo depende de cada aplicativo e até gosto pessoal.

Se fizer como eu fiz, com um indicativo, o código único pra tudo já facilita se depois decidir separar ou não.
Independente da tela de cadastro ser única ou não.
Nessas horas um #define pode ajudar muito, pra localizar os pontos de mudança.

aqui dá uma idéia de tabelas minhas que usam um único arquivo:

#define AUX_BANCO   "BANCO." // bancos
#define AUX_CADCTL  "CADCTL" // Contábil para Cadastro
#define AUX_CARCOR  "CARCOR" // códigos de carta de correção
#define AUX_CCUSTO  "CCUSTO" // centros de custo
#define AUX_CFOP    "CFOP.." // CFOP
#define AUX_CLIGRU  "CLIGRU" // Cliente - Grupos
#define AUX_CNAE    "CNAE.." // CNAE
#define AUX_CTAADM  "CTAADM" // contas administrativas
#define AUX_EDICFG  "EDICFG" // configuracao de edi
#define AUX_FILIAL  "FILIAL" // filiais
#define AUX_FINOPE  "FINOPE" // financeiro - operações
#define AUX_FINPOR  "FINPOR" // financeiro - portadores
#define AUX_ICMCST  "ICMCST" // ICMS CST
#define AUX_IPICST  "IPICST" // IPI CST
#define AUX_IPIENQ  "IPIENQ" // IPI Enquadramento
#define AUX_LICTIP  "LICTIP" // Tipo de licença
#define AUX_LICOBJ  "LICOBJ" // Tipo de objeto
#define AUX_MIDIA   "MIDIA." // Midia, forma por onde chegou o cliente
#define AUX_MODFIS  "MODFIS" // Modelo de documento fiscal
#define AUX_MOTIVO  "MOTIVO" // Motivo de cancelamento
#define AUX_ORIMER  "ORIMER" // origem da mercadoria
#define AUX_PISCST  "PISCST" // PIS CST
#define AUX_PISENQ  "PISENQ" // PIS Enquadramento
#define AUX_PPRECO  "PPRECO" // percentuais de tabelas de preço
#define AUX_PROGRU  "PROGRU" // Produto Grupo
#define AUX_PRODEP  "PRODEP" // Produto Departamento
#define AUX_PROSEC  "PROSEC" // Produto Seção
#define AUX_PROLOC  "PROLOC" // Produto Localização
#define AUX_PROUNI  "PROUNI" // Produto unidade
#define AUX_QUAASS  "QUAASS" // Qualificação do Assinante
#define AUX_TABAUX  "TABAUX" // Tabelas Auxiliares
#define AUX_TRICAD  "TRICAD" // Tributação de Cadastros
#define AUX_TRIEMP  "TRIEMP" // Tributação de empresa
#define AUX_TRIPRO  "TRIPRO" // Tributação de produtos
#define AUX_TRIUF   "TRIUF." // Tributação de UFs

#define AUX_CXATIP   "CXATIP"   // Tipo de lançamento no caixa

#define AUX_ECIVIL   "ECIVIL"   // Estado Civil
#define AUX_REAJUS   "REAJUS"   // Tipo de Reajuste
#define AUX_TIPIMO   "TIPIMO"   // Tipo de Imóvel
#define AUX_TIPCTR   "TIPCTR"   // Tipo de Contrato


a compilação -w3 -es2 evita erros de digitação desse nome, e o uso desse nome facilita pesquisar nos fontes aonde usa cada coisa.

Exemplo:

SEEK AUX_PROLOC + cCodigo

E mesmo sendo tabelas juntas, crio módulos separados, já que até o tamanho dos códigos pode ser diferente, como em CST, origem da mercadoria, CFOP, etc.

Neste ponto, pra que economizar tela de cadastro. veja meu fonte do cadastro de bancos.

/*
PAUXBANCO - BANCOS
2013.01 José Quintas
*/

#include "josequintas.ch"
#include "inkey.ch"
#include "hbclass.ch"

PROCEDURE PAUXBANCO

   LOCAL oFrm := AUXBANCOClass():New()

   IF ! AbreArquivos( "jptabel" )
      RETURN
   ENDIF
   SELECT jptabel
   SET FILTER TO jptabel->axTabela == AUX_BANCO
   oFrm:Execute()
   CLOSE DATABASES

   RETURN

CREATE CLASS AUXBANCOClass INHERIT AUXILIARClass

   VAR  cTabelaAuxiliar INIT AUX_BANCO

   ENDCLASS


Desse jeito, se eu decidir separar, o fonte já é separado... rs
Mas como a regra geral é igual, apenas usei herança e pronto, ficou um fonte simples.
Se a intenção é economizar programas fonte... essa seria uma opção.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 18 Ago 2017 19:01

Obrigado Zé... mas resumindo continua as 2 possibilidades... kkkkk

Se fosse vc, faria separado como demonstrei q tenho hj ou unificado?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor JoséQuintas » 18 Ago 2017 20:09

Na prática, todas as minhas tabelas, DBF e MySQL estão públicas, no que chamei LIB José Quintas.

Entradas e saídas estão juntas em pedidos, estoque, financeiro e fiscal.
Clientes, fornecedores, transportadoras estão juntos.

Aliás... tem uma coisa que até hoje não decidi: PEDIDOS
Faço o vínculo de muitas coisas pelo ID do pedido.
O ID do pedido fica em estoque, financeiro, fiscal, notas fiscais.
Por várias vezes pensei em transferir os pedidos com nota emitida pra uma sub-tabela de notas fiscais, mas até hoje continua em pedidos.

Tenho bastante coisa pra melhorar nisso tudo, mas não tive nenhuma idéia que gostasse... rs
Até as regras de tributação já pensei em transformar em fórmulas, mas só complicaria.

Enquanto isso, vai ficando pra depois.

Ah sim... XMLs...
Fica tudo junto, NFE, CTE, MDFE, próprios e de terceiros, eventos e tudo.
E no meu servidor fica TUDO de TODOS.
Mas tudo separado por ano, porque dependendo do tipo de pesquisa, o comando SQL demora muuuito em campo texto contendo XML.

Tem horas que acho que será melhor reorganizar depois que tudo estiver no MySQL, tem horas que acho que deveria reorganizar antes....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor JoséQuintas » 18 Ago 2017 23:13

Outra coisa a resolver é saldo de estoque, pra agilizar relatórios.
Sempre calculo desde o início, o que deixa certos relatórios lentos.

mas no MySQL, nem sei o que vai ser mais rápido, somar tudo ou ter que verificar um arquivo auxiliar.

E tem também pedidos e devolução.
A devolução pode ser referente ao mês anterior, mesmo com data do mês atual.
Talvez eu tenha ido pela cabeça do usuário, e não devesse fazer isso.... rs
Isso obriga a processar mais de um mês pra emitir o relatório de um único mês.
Tá na hora de mudar isso....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 19 Ago 2017 08:40

Obrigado Zé
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor rubens » 19 Ago 2017 08:45

Bom dia...

Fladimir...

Tô acompanhando esta discussão que me interessa muito...

Do meu ponto de vista e da minha realidade vejo que: Resumir muito em poucas tabelas, talvez, não conheço o mysql na prática, vai ter que "rebolar" muito depois para determinados relatórios. Como terá muitos dados para filtrar em uma só tabela as consultas relatórios não ficariam mais lentos? Porque se tiver várias tabelas como você disse no início, tabelas pai e filhas, através de relacionamentos não ficaria mais rápido e mais fácil uma manutenção? Não sei se você trabalha sozinho ou tem mais programadores, porque se for mais programadores vocês terão que ter muita disciplina para um entrosamento disso aí, né? Mas nada melhor do que um bom projeto e uma boa modelagem de dados com DER. Pelo pouco que estudei do SQL não é uma boa prática ficar remodelando o banco depois de funcional, diferente dos DBF que vai criando campos conforme a necessidade...
Eu entei levar o meu sistema para SQL parei na modelagem. O cara que tava me ajudando (com muita experiência em SQL) falou que era tempo perdido se eu não normatizasse minhas tabelas... Como o tempo tava e tá muito curto... ficou mais para frente...
Do meu ponto de vista...
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 19 Ago 2017 09:25

Vlw Rubens! Então talvez tabelas (para movimentos) de estrutura igual mas recebendo de um lado entrada (cabeçalho e itens) de outro saídas (cabeçalho e itens) pra separar os registros já fisicamente em tabelas distintas correto? É uma boa ideia tb. Obrigado.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor JoséQuintas » 19 Ago 2017 12:47

Acho que é como eu disse: depende do que quiser enfrentar com comandos SQL, ou campos inúteis, e do aplicativo em geral.

SELECT ITEMPEDIDO.CST, CST.DESCRICAO
FROM ITEMPEDIDO, CST
WHERE ITEMPEDIDO.CST = CST.CODIGO

SELECT ITEMPEDIDO.CST, CST.DESCRICAO
FROM ITEMPEDIDO, ( SELECT DESCRICAO FROM TABELAGERAL WHERE TIPOTABELA="CST' ) AS CST
WHERE ITEMPEDIDO.CST = CST.CODIGO

Acredito que a velocidade nos dois seja a mesma.
No segundo comando, primeiro cria a CST virtual pra depois usar.

Então NESSE CASO, essas tabelas juntas acaba exigindo sempre texto e cuidado a mais, e não sei se memória a mais no servidor pra processar

Isso é diferente de
SELECT * FROM MOVESTOQUE WHERE ENTRADASAIDA=1

Então, depende do que vai agrupar, e de como vai usar o resultado.
Para o MySQL não há limite de quantidade de tabelas ou de linha de comando.

Tem também os chamados VIEW
É algo como criar a tabela virtual no MySQL.
No mesmo caso do início, criar uma tabela do tipo VIEW chamada CST que vai trazer somente TIPOTABELA="CST"

Importante:

Uso MySql + Dbf no aplicativo, e isso impede de usar muito recurso do MySql, inclusive relacionamento, porque não dá pro MySql relacionar com dbf.
Então no assunto deste tópico, minha opinião NÃO se baseia no uso prático em MySql.
Apenas estou mostrando as possíveis diferenças nos comandos.
Se o servidor precisaria menos memória pra processar um comando ou outro, não faço idéia.
Ou se faz cache de tabelas, pra que manter uma tabela grande em cache, se poderia manter apenas uma parte.
Clientes e fornecedores acho vantagem serem juntas, ou pelo menos código único, porque tanto faz se é nota de entrada ou saída, pode usar cliente ou fornecedor como destinatário, mesma coisa com movimento de estoque.

Ou as vezes pode compensar um misto, acho que é o mais comum:
Nesta parte até tenho um pouco de experiência, bem pouca.
A tabela com XMLs no MySql fica muito lenta.
Tenho XMLs separados em tabelas por ano.
Mas tenho uma tabela única contendo dados básicose a chave de acesso.
Então faço pesquisas nesta tabela única, pra só depois pegar os XMLs pela chave de acesso, nas tabelas contendo os XMLs.
Isso dá resultado instantâneo, além de não precisar pesquisar várias tabelas diferentes.
Então pode ser que compense juntar clientes + fornecedores, deixando parte das informações em separado.
Tudo depende do tamanho das bases, quantidade de campos, e instruções extras nos comandos SQL.

E aí... voltamos a uma questão inicial: depende de cada aplicativo e talvez até de gosto pessoal.
O que é bom para um aplicativo pode não ser bom pra outro.
De repente um aplicativo tem centenas de informações a mais sobre o cliente, e o outro não.
Pro primeiro aplicativo pode compensar criar uma tabela extra pra dados adicionais do cliente, e pro outro aplicativo não.

Voltando ao meu PEDIDO:

Tem PEDIDOS, é uma tabela
Tem Itens de pedido, é outra tabela
Tem códigos de barra, é outra tabela

Uma nota fiscal, de vários computadores, vai precisar códigos de barra de cada computador pra registrar a garantia.
Não dava pra manter junto com itens de pedido, porque iria limitar a quantidade.

E no caso de combustíveis, isso nem é usado, então a tabela de códigos de barra fica vazia, sem atrapalhar em nada.

Se estivesse em itens de pedido, iria faltar espaço no caso dos computadores, e iria sobrar espaço no caso de combustíveis.
E se fosse campo memo (ou text no mysql), complicaria pra pesquisas.

Mas pra muito aplicativo, pode ser que um único código de barras já resolva, pode até ser que a loja apenas exija a nota de compra e nem precise registrar nenhum código de barras.
Vai de cada aplicativo, e vai de cada cliente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Entrada Saída 02 tabelas ou varias

Mensagempor fladimir » 19 Ago 2017 14:49

Vlw Zé

Show de bola

Obrigado
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar de usuário

fladimir
Colaborador

Colaborador
 
Mensagens: 2434
Data de registro: 15 Nov 2006 19:21
Curtiu: 28 vezes
Mens.Curtidas: 157 vezes




Retornar para Bate Papo

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro