Jump to content
Sign in to follow this  
brunodopredio

Inserção de lotes automáticamente com condição

Recommended Posts

brunodopredio

Olá pessoal.

Tenho duas tabelas, Lote e CLiente.

Preciso inserir o numero de lote Automaticamente e em sequência, mas é o seguinte, se o cliente for do tipo cliente ele add o lote com inicio 100 se o cliente for do tipo fornecedor eu add o lote com inicio 500, como posso fazer para ele sempre incrementar mais um quando eu inserir um novo lote com esta condição.

eu tava fazendo assim mas com o .max ele sempre pega o 500 como max e não adiciona no lote 100

If testacli = "Fornecedor" Then

                            Dim strNumLoteForn = (From l In Ent.Entities.LOTE Select l.NumeroLote).Max + 1   'AQUI TAH O PROBLEMA



                            Dim lote As New LOTE With {.Largura = strLargura, _
                                                         .PesoLiquido = strPeso, _
                                                         .CodExterno = strCodExt, _
                                                         .Condicao = strCondicao, _
                                                         .Inspecao = strUsrLogado, _
                                                         .NumeroLote = strNumLoteForn, _
                                                         .LocalEstoque = "CNS", _
                                                         .IdLinha = i, _
                                                         .Status = "RECEBIMENTO"}

                            lote.NOTAFISCAL_PRODUTO = (From l In Ent.Entities.NOTAFISCAL_PRODUTO Where l.IdNF = txtNumDoc.Text _
                                                       And l.IdNFProduto = stridNfProd Select l).First()

                            Ent.Entities.AddToLOTE(lote)
                            Ent.Entities.SaveChanges()

                        Else
                            Dim strNumLoteCli = (From l In Ent.Entities.LOTE Select l.NumeroLote).Max + 1  'AQUI TAH O PROBLEMA



                            Dim lote As New LOTE With {.Largura = strLargura, _
                                                         .PesoLiquido = strPeso, _
                                                         .CodExterno = strCodExt, _
                                                         .Condicao = strCondicao, _
                                                         .Inspecao = strUsrLogado, _
                                                         .NumeroLote = strNumLoteCli, _
                                                         .LocalEstoque = "CNS", _
                                                         .IdLinha = i, _
                                                         .Status = "RECEBIMENTO"}

                            lote.NOTAFISCAL_PRODUTO = (From l In Ent.Entities.NOTAFISCAL_PRODUTO Where l.IdNF = txtNumDoc.Text _
                                                       And l.IdNFProduto = stridNfProd Select l).First()

                            Ent.Entities.AddToLOTE(lote)
                            Ent.Entities.SaveChanges()

                            
                        End If

COMO POSSO FAZER PARA RESOLVER ESTOU SEM IDÈIAS

Obrigado,

Atenciosamente,

Bruno Sella

Share this post


Link to post
Share on other sites
Caça

Para isso tens de ter um campo que te diga se é cliente ou fornecedor


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
brunodopredio

Já tenho o campo dizendo isso na tb cliente e esta relacionado com ele....

o problema é que eu quero que pegue na tabela se for cliente a sequencia de 100 e fornecedor a de 500.....

to tentando usar o like, mas não funciona, nem o starswith.

eu to usando o entity framework.

Share this post


Link to post
Share on other sites
Caça

Esta instrução

Dim strNumLoteCli = (From l In Ent.Entities.LOTE Select l.NumeroLote).Max + 1

retorna o lote máximo que existe na tabela, seja cliente ou fornecedor.

Para distinguir seria tipo isto

Dim strNumLoteCli = (From l In Ent.Entities.LOTE Where l.Campo_que_distingue_cliente_de_fornecedor = valor Select l.NumeroLote).Max + 1


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
brunodopredio

Esta instrução

Dim strNumLoteCli = (From l In Ent.Entities.LOTE Select l.NumeroLote).Max + 1

retorna o lote máximo que existe na tabela, seja cliente ou fornecedor.

Para distinguir seria tipo isto

Dim strNumLoteCli = (From l In Ent.Entities.LOTE Where l.Campo_que_distingue_cliente_de_fornecedor = valor Select l.NumeroLote).Max + 1

Sim mas já inseri manualmente o primeiro de cliente 5000000 e de fornecedor 1000000

ai eu tava pensando mais ou menos nisso......

  If testacli = "Fornecedor" Then

                            strNumLote = (From l In Ent.Entities.LOTE Where l.NumeroLote Like "1%" Select l.NumeroLote).Max + 1
                        Else
                            strNumLote = (From l In Ent.Entities.LOTE Where l.NumeroLote Like "5%" Select l.NumeroLote).Max + 1
                        End If

maaaaaaaaaaaaasssss.......

o select não aceita like nem starswith.....

estou usando o entity framework

Share this post


Link to post
Share on other sites
Caça

o select não aceita like nem starswith.....

Não aceita StartsWith porque é do tipo Integer. Coloca antes

strNumLote = (From l In Ent.Entities.LOTE Where l.NumeroLote.ToString.StartsWith("5") Select l.NumeroLote).Max + 1c


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
brunodopredio

Não aceita StartsWith porque é do tipo Integer. Coloca antes

strNumLote = (From l In Ent.Entities.LOTE Where l.NumeroLote.ToString.StartsWith("5") Select l.NumeroLote).Max + 1c

mesmo assim ele apresenta erro LINQ to Entities não reconhece o método 'System.String ToString(); que não pode ser convertido em uma expressão de armazenamento, já tinha tentado esse toString.StarsWith.....

Não sei como fazer isso....

Share this post


Link to post
Share on other sites
Caça

Que Framework estas a usar?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
brunodopredio

3.5

Já tentei left(l.numerolote,1) = "1" ele não deixa o left informando que é integer

Share this post


Link to post
Share on other sites
brunodopredio

Já tentei left(l.numerolote,1) = "1" ele não deixa o left informando que é integer

Alguma outra idéia????

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.