Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Caso especial de geração de código


Gabriel Cabral

Pergunta

Bom dia, galera...

Preciso de uma ajuda de voces em relação à geração de código....

num cadastro de produtos, faço a geração de código dessa forma

if not dm.tblCadPro.FieldByName('PROCOD').IsNull then
  Exit;

  dm.QueryMaxPro.DatabaseName := dm.tblCadPro.DatabaseName;
  dm.QueryMaxPro.SQL.Clear;
  dm.QueryMaxPro.SQL.Add('SELECT MAX (PROCOD) FROM ESTAPRO.dbf');
  dm.QueryMaxPro.Open;

  try
    dm.tblCadPro.FieldByName('PROCOD').AsString := FormatFloat('0000000000000', StrToFloat(dm.QueryMaxPro.Fields[0].AsString)+1);
    finally
    dm.QueryMaxPro.Close;
  end;

Então, em uma tabela vazia, os registros terão os códigos nessa ordem: 0000000000001, 0000000000002, 0000000000003...

Mas esses códigos gerados servem apenas para produtos sem código de barras [hortifrutti, por exemplo].

Supondo que o próximo produto cadastrado seja um com código de barras [7896065880106, por exemplo]; o código gerado será 0000000000004, então o usuário fará a alteração para 7896065880106.

Mas o código gerado do próximo produto a ser cadastrado, que teria que ser 0000000000004, será 7896065880107!!!!!

O que se deve fazer para evitar este conflito???

alguém conseguiria me ajudar???

Uma idéia seria percorrer os registros em ordem decrescente, até encontrar o primeiro número que não comece por 789, para pegá-lo e somar +1

Mas não tenho ideia de como posso fazer isso..

alguém conseguiria me ajudar nisso??? Ou teria alguma outra forma de fazer isso???

Por favor, me ajudem se puderem.....seria um ótimo presente de Natal!!!

Obrigado

Bom Natal a todos!!!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Supondo que o próximo produto cadastrado seja um com código de barras [7896065880106, por exemplo]; o código gerado será 0000000000004, então o usuário fará a alteração para 7896065880106.

Mas o código gerado do próximo produto a ser cadastrado, que teria que ser 0000000000004, será 7896065880107!!!!!

O que se deve fazer para evitar este conflito???

alguém conseguiria me ajudar???

Uma idéia seria percorrer os registros em ordem decrescente, até encontrar o primeiro número que não comece por 789, para pegá-lo e somar +1

Mas não tenho ideia de como posso fazer isso..

Vou fazer um exemplo usando o Memo

0000000000001

0000000000002

0000000000003

0000000000004

7896065880103

7896065880104

7896065880105

7896065880106

Imagine que voce tem essa sequencia no seu banco de dados.... então o que voce quer é o proximo depois do ( 4 ), mas usando ( dm.QueryMaxPro.SQL.Add('SELECT MAX (PROCOD) FROM ESTAPRO.dbf') voce teria o numero 7896065880106

para contornar esse problema, uma das maneiras seria esta:

procedure TForm1.Button1Click(Sender: TObject);
var S, s1: string; i, num : integer;
begin
  for i := 0 to Memo1.Lines.Count do
     begin
        S := Memo1.Lines.Strings[i];
        if Pos('0000', S) > 0 then
            begin
               num := strtoint(s);
               FmtStr(s1, '%.13d', [num+1]);
            end;
      end;
   Label1.Caption := ' O Proximo numero será ' + s1;   // 0000000000005
end;

OBS: Modifique o código para o seu uso

abraço e Feliz Natal

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...