GARANTIR DESCONTO

Fórum retornar proximo codigo vago #571896

01/12/2016

0

Bom dia

Preciso de uma ajuda para montar um select .

Tenho uma tabela chamada "COD_BARRAS"

um campo chamado "CODIGO_BARRA"

composto de 7 digitos

sendo os 4 primeiro que corresponde ao setor e grupo pre definido pelas compradoras

e os 3 ultimos que incrementa o codigo


Preciso de um select que ao filtrar os 4 digitos primeiro o select me retorne qual o proximo codigo vago para ser usado.

lembrando que é um campo VARCHAR

Exemplos:

no campo já existes estes codigos

0110001
0110002
0110003
0110005
0851001
0851002
0851003
0851005

supomos que a secao = '01' and grupo = '10'

o proximo codigo então seria '0110004'

ou

0110001
0110002
0110003
0110004
0851001
0851002
0851003
0851004


o proximo codigo então seria '0110005'


outro exemplos


supomos que a secao = '08' and grupo = '51'

o proximo codigo então seria '0851004'

ou

0110001
0110002
0110003
0110004
0851001
0851002
0851003
0851004


o proximo codigo então seria '0851005'



Desde já muito obrigado
Paulo Agnezze

Paulo Agnezze

Responder

Post mais votado

02/12/2016

Olá, fiz uma conversão da query mas não tenho como testar aqui agora, pode ser que de algum errinho, mas se der vai ser coisa mínima, dá uma testada ai:

DECLARE secaoGrupo varchar(4) = '0851';

SELECT FIRST 1 substring(c.CODIGO_BARRA from 1 for 4) || lpad( cast( substring(c.CODIGO_BARRA from 5 for 7) + 1 as integer) ) from COD_BARRAS as c
WHERE substring(c.CODIGO_BARRA from 1 for 4) = :secaoGrupo
AND NOT EXISTS(
SELECT CODIGO_BARRA FROM COD_BARRAS
WHERE CODIGO_BARRA = substring(c.CODIGO_BARRA from 1 for 4) || lpad( cast( substring(c.CODIGO_BARRA from 5 for 7) + 1 as integer) )
AND substring(c.CODIGO_BARRA from 1 for 4) = :secaoGrupo
)

Kleber Araujo

Kleber Araujo
Responder

Gostei + 2

Mais Posts

01/12/2016

Kleber Araujo

Fala Paulo, td blz

Eu fiz um sql pra vc, usando o SQL Server, pois não tenho como testar no firebird aqui na empresa, quando estiver em casa eu post no firebird, mas acredito que não mude muita coisa não, e acho que também vc vai sacar a query fácil, após o código da query estou comentando a lógica:

--aqui foi só exemplo, mas o seu valor virá da aplicação eu imagino
DECLARE @secaoGrupo AS varchar(4) = '0851'

SELECT TOP 1 SUBSTRING(c.CODIGO_BARRA,1,4) + FORMAT( CONVERT(int, SUBSTRING(c.CODIGO_BARRA, 5,7)) + 1, 'd3') as novoCodigo FROM COD_BARRAS c
WHERE SUBSTRING(c.CODIGO_BARRA,1,4) = @secaoGrupo
AND NOT EXISTS
(
SELECT CODIGO_BARRA FROM COD_BARRAS
WHERE CODIGO_BARRA = SUBSTRING(c.CODIGO_BARRA,1,4) + FORMAT( CONVERT(int, SUBSTRING(c.CODIGO_BARRA, 5,7)) + 1, 'd3')
AND SUBSTRING(c.CODIGO_BARRA,1,4) = @secaoGrupo
)

na primeira linha eu concateno as 4 primeiras posições do código + as 3 últimas posicoes transformadas em inteiro somando + 1, que já ira devolver o próximo código vago disponível,
no where só estou dizendo para selecionar somente os que começem com a mesma seção e grupo passado via aplicação ou procedure etc..., e o AND NOT EXISTS eu falo para retornar linhas do select onde não exista uma consulta onde o código seja igual ao código novo já somado com um 1 que seria o próximo,
o TOP 1 só diz para ele devolver uma linha, pois o legal dessa query que fiz é que se vc tiver 10 "buracos" nos registros tipo do 4 ao 10 está vago então essa query vai trazer todos os vagos já, basta alterar o TOP 1 para TOP a quantidade de próximos códigos disponíveis que vc quiser, amigo, depois faço no FIREBIRD, mas acho que vc vai converter tranquilo para o FireBird, abraços
Responder

Gostei + 0

02/12/2016

Paulo Agnezze

Bom dia

Muito obrigado pelo retorno
fico feliz contar com uma ajuda dessa
Valeu

vou testar
Responder

Gostei + 0

02/12/2016

Paulo Agnezze

Falar com quem sabe é outra coisa
perfeita esta logica , acredito que muita gente passa pelo mesmo problema que eu

e que problema
Responder

Gostei + 0

02/12/2016

Kleber Araujo

Opa que isso agradeço o Feedback, e fico feliz em ter ajudado, é sim nós de Ti, passamos por muitos problemas como esse, e as vezes é bom ter alguém para nos ajudar, eu mesmo já fui ajudado muitas vezes e agora quero contribuir com a comunidade ajudando no que posso, ia pedir pra deixar um joinha lá na resposta pra me ajudar, valeuuu
Responder

Gostei + 0

02/12/2016

Paulo Agnezze

Vou esperar vc me passar os comandos pelo firebird

entendi a logica mais nao roda no firebird
Responder

Gostei + 0

02/12/2016

Kleber Araujo

hum blza, vou converter para o firebird e logo mais te mando
Responder

Gostei + 0

02/12/2016

Paulo Agnezze

valeu mais uma vez muito obrigado
Responder

Gostei + 0

02/12/2016

Kleber Araujo

Opa, se der certo não esqueça de deixa os joinhas lá nas minhas respostas, pra me dar uma força, valeuuu, qualquer coisa só mandar ai blz
Responder

Gostei + 1

05/12/2016

Paulo Agnezze

Bom dia

Esta dando este erro no firebird

Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Dynamic SQL Error.
expression evaluation not supported.
Strings cannot be added or subtracted in dialect 3.



-- LOCALIZAR O PROXIMO CODIGO VAGO

--DECLARE secaoGrupo varchar(4) = '0851';

SELECT FIRST 1 substring(c.CODIGO_BARRA from 1 for 4) || lpad(cast(substring(c.CODIGO_BARRA from 5 for 7) + 1 as integer))
from COD_BARRAS as c
--WHERE substring(c.CODIGO_BARRA from 1 for 4) = :secaoGrupo
WHERE substring(c.CODIGO_BARRA from 1 for 4) = '0851'
AND NOT EXISTS (SELECT cb.CODIGO_BARRA FROM COD_BARRAS cb
WHERE cb.CODIGO_BARRA = substring(cb.CODIGO_BARRA from 1 for 4) || lpad( cast( substring(cb.CODIGO_BARRA from 5 for 7) + 1 as integer) )
--AND substring(c.CODIGO_BARRA from 1 for 4) = :secaoGrupo
AND substring(cb.CODIGO_BARRA from 1 for 4) = '0851')
Responder

Gostei + 0

05/12/2016

Kleber Araujo

Opa Boa tarde blz, começou a dar esse erro ou já de cara que foi executar essa query deu erro?, eu vou poder ver em casa, vou instalar o firebird e fazer uns testes dai consigo corrigir amigo, logo te retorno
Responder

Gostei + 0

05/12/2016

Paulo Agnezze

boa tarde

já de cara
Responder

Gostei + 0

08/12/2016

Paulo Agnezze

Boa tarde

Já fiz varias alterações ,mais sem sucesso
em relação a esta erro

Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements.
Dynamic SQL Error.
expression evaluation not supported.
Strings cannot be added or subtracted in dialect 3.
Responder

Gostei + 0

13/12/2016

Kleber Araujo

Olá td bem, desculpe a ausência, eu estava meio enrolado estes ultimos dias, a partir de hj a noite vou retomar minhas atividade no Dev Media pra ajudar a galera, provavelmente amanhã já terei uma resolução para seu problema
Responder

Gostei + 1

13/12/2016

Paulo Agnezze

Valeu obrigado
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar