DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

UserControl com controle por FILIAL

Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #3798
    narba
    Participante

    Alguém já usou o UserControl com controle por FILIAL ?

    Ou saberia me dar uma ideia de como fazer isso ?

    #3799
    mariodosreis
    Participante

    O que pretende significar com “Control por Filial”?

    #3800
    narba
    Participante

    Tenho um sistema aonde uso o User Control para cadastrar os usuários, mas preciso adaptar para ser por Filial, por que agora serão duas filiais.

    Eu pensei em colocar o campo FILIAL em todas tabelas do sistema para diferenciar os cadastros das duas filiais, mas pode ter um usuário que vai ter acesso somente a uma FILIAL por exemplo, então precisaria diferenciar isso na cadastro de usuário do User Control.

    Então queria saber se alguém já passou por algo parecido e qual foi a solução encontrada.

    #3801
    mariodosreis
    Participante

    Eu já fiz uma coisa semelhante. Os meus utilizadores só vêm informação por “Centro de Custos”. Mas depois dentro do programa V. tem igualmente que criar uma tabela de relação dos cliente com os centros de custos.
    Vou deixar-lhe a ideia:
    Tenho 3 centos de custo “A” “B” e “C” mas poderia ser um cento. E, na tabela user do userscontrolo dois campos CCInicial e CCFinal. Então crio um Range indexado a áreas geográficas. Por exemplo “A” vai do 1000 -a- 2000 “B”=2001 -a- 3000 e “C”=3001 a 4000 por exemplo. Todas as tabelas do sistema tem de gravar o Campo CCustos ou outro por exemplo o CEP e alimentar uma tabela intermédia que faça a ligação coerente entre regiões:1 Região Norte, 2 Região Nordeste, 3 Região Centro-Oeste 4 Região Sudeste 5 Região Sul, estas e os Estados as Cidades dos estados os locais das cidades e assim por diante dependendo do nível de detalhe que precisa.
    Eu vivo em Portugal, pais administrativamente dividido Distritos/Ilhas, com Concelhos, cidades, Vilas e freguesias. Com codigos postai distintos ai V. chamam de CEP (Código de Endereçamento Postal) e sempre que aparece um novo que ainda não existe ainda na tal tabela intermédia registo. Depois sempre que alguém quer ver/mexer e não está no range do user não deixo; mas depois à users que têm missões de contrlo e têm de ver tudo ou dois ou tres, então digo CcInicial=1000 e o CCFinal=2000 ou
    ao 3300 ou 4000 se é de um só o CCinicial=3000 e o CCfinal=3000(é o mesmo) e fica ali contido. Mas haverá outra forma de fazer. Esta foi a mais simples e mais rápida que encontrei.

    #3802
    mariodosreis
    Participante

    Correcção:
    quando digo acima” Todas as tabelas do sistema tem de gravar o Campo CCustos…” quero dizer todas as tabelas master, por exemplo Clientes, Fornecedores, Moradas é aqui que tenho o CEP. Depois ligo cliente ou fornecedor com moradas, saco o CEP e com ele vou à tabela de relação intermédia ver se corresponde ao range do meu user.
    Qualquer duvida disponha

    #3803
    mariodosreis
    Participante

    Exemplo de Pesquisa:

    procedure TFEdtCadastro.btnProcurarClick(Sender: TObject );
    var IPessoa_ID, iCCMenor, iCCMaior: integer;
    SlqFiltra:Boolean ;
    begin

    // Faço um Range para fazer fetch de apenas
    // um registo para a Horta e para AH;
    // para cá trago todos mas posso trazer tb apenas 1.
    (* ***
    São carregada duas variaveis Ci e CF logo a seguir a validar
    *** o user e estão visiveis todo o programa
    *** *)
    // MainForm.cCustosI ; MainForm.cCustosF ;
    iCCMenor := StrToIntDef(IbRtvCfg(36),0) ;
    iCCMaior := StrToIntDef(IbRtvCfg(37),0) ;

    SlqFiltra:=(MainForm.cCustosF>=iCCMenor) OR (MainForm.cCustosF<=iCCMaior);

    if (MainForm.cCustosF=9999999) then // Administrador vê tudo
    SlqFiltra:=False;

    //’ Select * From Pessoas ‘;
    If SlqFiltra Then
    FSelect:=’ Select * From Pessoas P ‘+
    ‘ LEFT OUTER JOIN DISTRITO_CCUSTO CC ON CC.SOCIOS_ID=P.PESSOA_ID ‘
    Else
    FSelect:=’ Select * From Pessoas P ‘;

    If Localizar(IPessoa_ID) then
    begin
    //Sec. Geral Não Há Filtro==Rede Local
    If SlqFiltra Then
    FWhere := ‘ P.PESSOA_ID = ‘ + IntToStr(IPessoa_ID) + ‘ ‘ +
    ‘ AND CC.C_CUSTOS BETWEEN ‘+IntToStr(MainForm.cCustosI)+’ AND ‘+
    IntToStr(MainForm.cCustosF)
    Else
    FWhere := ‘ P.PESSOA_ID = ‘ + IntToStr(IPessoa_ID) ;

    AbrirDataSet;

    end;
    end;
    ====================
    eX:TABELA DISTRITO RELACIONA-SE COM TODOS OS cc
    ====================
    DD DESIG C_CUSTOS
    1 Aveiro 9 999
    2 Beja 9 999
    3 Braga 9 999
    4 Bragança 9 999
    5 Castelo Branco 9 999
    6 Coimbra 9 999
    7 Évora 9 999
    8 Faro 9 999
    9 Guarda 9 999
    10 Leiria 9 999
    11 Lisboa 9 999
    12 Portalegre 9 999
    13 Porto 9 999
    14 Santarém 9 999
    15 Setúbal 9 999
    16 Viana do Castelo 9 999
    17 Vila Real 9 999
    18 Viseu 9 999
    31 Ilha da Madeira 3 100
    32 Ilha de Porto Santo 3 100
    41 Ilha de Santa Maria 4 100
    42 Ilha de Sao Miguel 4 100
    43 Ilha Terceira 4 300
    44 Ilha da Graciosa 4 300
    45 Ilha de Sao Jorge 4 300
    46 Ilha do Pico 4 600
    47 Ilha do Faial 4 600
    48 Ilha das Flores 4 600
    49 Ilha do Corvo 4 600
    99 Angola 9 999
    98 Moçambique 9 999
    97 Brasil 9 999
    96 Estados Unidos America 9 999
    95 Canadá 9 999
    94 Bermudas 9 999
    93 Alemanha 9 999
    92 França 9 999
    91 Espanha 9 999
    90 Macau 9 999
    89 Cabo Verde 9 999
    88 Ucrânia 9 999
    ====================
    c/ESTA VISTA ESTABELEÇO AS RELAÇOES TODAS EXISTENTE
    ====================
    CREATE VIEW DISTRITO_CCUSTO(
    CLIENTE_ID,
    NOCLI_ID_ID,
    CC,
    DD,
    DESIG,
    C_CUSTOS)
    AS
    SELECT C.CLIENTE_ID, C.NOCLI_ID, M.CC , D.DD, D.DESIG, D.C_CUSTOS FROM CLIENTES S
    INNER JOIN MORADAS M ON M.MORADA_ID=C.CLIENTE_ID
    INNER JOIN DISTRITO D ON D.DD=M.DD
    INNER JOIN CONCELHO C ON C.DD=D.DD AND (C.DD=M.DD AND C.CC=M.CC)
    WHERE M.TPMORA=1;

    Eu comecei por falr no CEP mas o CEP é apenas para alimentar os Distritos e por ai adiante porque a tabela de Codigos postais ofial é publica e tem essa informação (distritos e Conclehos) associada ao códigos postais. Então seleccionamos o Codigo Postal e ele traz a restante infomração DD=Distrito e CC=Concelho.
    Não sei em que mais te possa ajudar está praticamente tudo dito.
    Abraço. Vou dormir
    E, POR AQUI É TUDO VALIDADO O LIMITE É O CÉU

    #3808
    mariodosreis
    Participante

    Narba. Diga-me se as cenas que te facultei ajudaram ou não.Qq coisa estamos ai.

Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Você deve fazer login para responder a este tópico.

Ir ao topo
© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados