Avalados por :

Problemas ao atualizar UDT [dbo].[@BinStock] de um loop de busca de cursor: Solução e dicas

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 1 Vistas
0
Cargando...

Olá SBOneans...

por favor, dedique um tempo e esclareça.

em 14 de novembro, fiz uma pergunta sobre a atualização do UDT, perguntando como e com quais valores atualizar os campos padrão 'Code' e 'Name' do UDT. Embora não tenha recebido respostas satisfatórias, através de um pouco de tentativa e erro, encontrei uma solução alternativa para o mesmo.

mas agora, estou enfrentando problemas ao tentar atualizar o UDT [dbo].[@BinStock] de um loop de busca de cursor. Abaixo está a parte relevante de toda a minha consulta.

/* início da consulta */

delete [dbo].[@BinStock]

/* muitos códigos que criam outras tabelas temporárias são criados aqui */

CREATE TABLE #tStBin

(

Wh_code VARCHAR(8),

Item_code VARCHAR(18),

St_bin VARCHAR(8),

qty MONEY

)

/*

#mStBin criado apenas para fins de teste/depuração. Não sei sobre o Tipo e Tamanho dos campos padrão do sistema 'Code' e 'Name' no UDT [dbo].[@BinStock], mas, o restante dos campos são iguais aos definidos no UDT [dbo].[@BinStock]

*/

CREATE TABLE #mStBin

(

code varchar(10),

name varchar(20),

Wh_code VARCHAR(8),

Item_code VARCHAR(18),

St_bin VARCHAR(8),

qty MONEY

/* #mStBin criado apenas para fins de teste/depuração */

DECLARE @tWhcode VARCHAR(8),

@tItemcode VARCHAR(18),

@tStbin VARCHAR(8),

@tqty MONEY,

@trecno int

/* muitos códigos que preenchem a tabela temporária #tStBin são criados aqui */

DECLARE cur1 CURSOR FOR

select T0.Wh_code, T0.Item_code, T0.St_Bin, sum(T0.qty)

FROM #tStBin T0

group by T0.Wh_code, T0.Item_code, T0.St_Bin

OPEN cur1

FETCH NEXT FROM cur1 INTO @tWhcode, @tItemcode, @tstbin, @tqty

set @trecno = 0

WHILE (@@fetch_status = 0)

BEGIN

set @trecno = @trecno + 1

/* no momento em que a próxima declaração de inserção é introduzida, o sistema lança um erro */

insert into [dbo].[@BinStock] (code, name, U_Wh_Code, U_Item_code, U_St_Bin, U_Qty_Bal)

values (@trecno, 'Rec#'+cast(@trecno as varchar(5)), @tWhCode, @tItemCode, @tStBin, @tqty)

/* na declaração de inserção anterior, se [dbo].[@BinStock] for substituído por #mStBin, a consulta funciona sem problemas! */

FETCH NEXT FROM cur1 INTO @tWhcode, @tItemcode, @tstbin, @tqty

END

CLOSE cur1

DEALLOCATE cur1

drop table #tStBin, #mStBin

/* fim da consulta */

embora inserir registros na tabela temporária #mStBin com a mesma declaração de inserção não cause problemas, tentar inserir registros no UDT [dbo].[@BinStock] com essa declaração de inserção resulta em um erro. mas, não conheço o erro exato, pois o sistema exibe a mensagem de erro anterior encontrada e corrigida!

outro problema irritante são as mensagens de erro que o sistema nos lança, realmente são confusas e enganosas, e na maioria das vezes parecem mostrar a mensagem de erro anterior em vez da real!

há algum problema ao inserir/atualizar UDTs dentro de um cursor? como podemos fazer isso?

por favor, dedique um tempo e esclareça.

Obrigado e Cumprimentos,

Raghu Iyer

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

A população desses dois campos está correta, como você pode ver, eu já cuidei disso. O problema está no erro que o SBO está apresentando. Hoje, ao tentar executar a consulta, a mensagem de erro é: 'Contratos de Serviço' (OCTR).

Preciso manter uma tabela de usuário (UDT) para armazenar o estoque de Armazém_Local_de_Armazenamento_Rack_Binwise.

Na verdade, se esse estoque pudesse ser mantido online através do FMS em cada tela de movimento de estoque, seria melhor, mas, considerando que isso envolve um gatilho adequado e levando em conta outras restrições no SBO, como permitir apenas um campo base para o gatilho, este mini projeto será abordado posteriormente. Por enquanto, gostaríamos de lidar com a atualização em lote por meio de uma consulta.

Estamos iniciando no SDK, então estamos tentando gerenciar o show completamente através das ferramentas disponíveis dentro do próprio SBO, mas para realizar algumas personalizações significativas, se não houver outra forma além do SDK, bem, também não temos muitas opções.

Obrigado e cumprimentos,

Kr

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Tradicionalmente, as UDT's são preenchidas manualmente pelos usuários de dentro do B1 ou através do SDK como parte da personalização. Não posso comentar sobre a validade e viabilidade de inserir diretamente em uma UDT.

Você poderia simplesmente tentar inserir o seguinte para os campos de Código e Nome.

1,1

2,2

3,3

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¡Wow! ¡Esa fue una respuesta muy rápida! Gracias.

De hecho, me preguntaba cómo llamar la atención de campeones de peso pesado como tú, ¡Suda!

Gracias por la información sobre el tipo y tamaño.

Sería genial si pudieras también iluminarme sobre ese problema de inserción de UDT.

Gracias y saludos,

Kr

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Raghu,

O código tem 8 caracteres (alfanumérico)

O nome tem 30 caracteres (alfanumérico)

Inserir registros usando uma declaração INSERT em um UDT não é a maneira correta.

Suda

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?