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.