Skip to content

Como Corrigir o erro de A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão. A instrução foi finalizada.

Software: PDV - Softshop Caixa | Grupo: PDV

Solução

A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão. A instrução foi finalizada.

Motivo Vendas: vendas de itens com composição

correção:

1.0 Abra o SQL management studio e vá até a pasta em procedimentos armazenados localize a opção dbo.USP_MovimentarEstoque como mostrado na imagem a baixo

1.2 após isso apague a opção e depois execute o script a seguir

/****** Object: StoredProcedure [dbo].[USP_MovimentarEstoque] Script Date: 24/02/2025 15:43:07 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE [dbo].[USP_MovimentarEstoque]

@TipoMovimentacao VARCHAR(50) = NULL,

@ProdutoId VARCHAR(50) = NULL,

@LojaOrigem VARCHAR(50) = 'MATRIZ',

@Quantidade FLOAT,

@Tam NVARCHAR(255)= NULL,

@Cores NVARCHAR(255)= NULL,

@BaixarComposicao BIT = 0

AS

BEGIN

SET NOCOUNT ON;

DECLARE @ModuloApp NVARCHAR(255);

SET @ModuloApp = dbo.getModuloApp;

DECLARE @QuantidadeTotal FLOAT;

if @BaixarComposicao IS NULL

BEGIN

SET @BaixarComposicao = IIF((SELECT BaixarComposicao FROM Empresa) = 'SIM', 1, 0)

END;

--LOG

--INSERT INTO TabelaLog (Mensagem) VALUES ('---------------------------------------');

--INSERT INTO TabelaLog (Mensagem) VALUES ('[USP_MovimentarEstoque]');

-- INSERT INTO TabelaLog (Mensagem) VALUES (CONCAT('TipoMovimentacao: ', @TipoMovimentacao));

-- INSERT INTO TabelaLog (Mensagem) VALUES (CONCAT('ProdutoId: ', @ProdutoId));

-- INSERT INTO TabelaLog (Mensagem) VALUES (CONCAT('LojaOrigem: ', @LojaOrigem));

-- INSERT INTO TabelaLog (Mensagem) VALUES (CONCAT('Quantidade: ', @Quantidade));

--INSERT INTO TabelaLog (Mensagem) VALUES (CONCAT('BaixarComposicao: ', @BaixarComposicao));

-- INSERT INTO TabelaLog (Mensagem) VALUES ('---------------------------------------');

DECLARE @NaoControlarEstoque AS BIT

DECLARE @NaoBaixarComposicaoNaVenda AS BIT

SELECT @NaoControlarEstoque = NaoControlarEstoque, @NaoBaixarComposicaoNaVenda = NaoBaixarComposicaoNaVenda

FROM [Cadastro de Mercadorias] WHERE [Código da Mercadoria] = @ProdutoId

IF @NaoControlarEstoque = 0

BEGIN

if @TipoMovimentacao = 'SAIDA' -- SAIDA

BEGIN

UPDATE [Cadastro de mercadoriasLojas]

SET [Estoque] = [Estoque] - @Quantidade

WHERE [Código da Mercadoria] = @ProdutoId AND [Loja] = @LojaOrigem AND (

@ModuloApp = 'CONFECCAO' AND

[cadastro de mercadoriasLojas].[Tam] = @Tam AND

[cadastro de mercadoriasLojas].[Cores] = @Cores

OR

@ModuloApp <> 'CONFECCAO'

);

END

ELSE --ENTRADA

BEGIN

UPDATE [Cadastro de mercadoriasLojas]

SET [Estoque] = [Estoque] + @Quantidade

WHERE [Código da Mercadoria] = @ProdutoId AND [Loja] = @LojaOrigem AND (

@ModuloApp = 'CONFECCAO' AND

[cadastro de mercadoriasLojas].[Tam] = @Tam AND

[cadastro de mercadoriasLojas].[Cores] = @Cores

OR

@ModuloApp <> 'CONFECCAO'

);

END;

SELECT @QuantidadeTotal = SUM([Estoque])

FROM [Cadastro de mercadoriasLojas]

WHERE [Código da Mercadoria] = @ProdutoId;

UPDATE [Cadastro de mercadorias]

SET [Unidades em Estoque] = @QuantidadeTotal

WHERE [Código da Mercadoria] = @ProdutoId;

END

IF @BaixarComposicao = 1 AND @NaoBaixarComposicaoNaVenda = 0

BEGIN

DECLARE @temProducao int

SELECT @temProducao = COUNT(*)

FROM [Producao_Composicao]

WHERE [Código da Mercadoria] = @ProdutoId;

--IF COUNT ((SELECT [Código da Mercadoria] AS CodigoProduto, [Código da Composição] AS CodigoComposicao, [Quantidade]

-- FROM Producao_Composicao WHERE [Código da Mercadoria] = @ProdutoId)

IF (@temProducao > 0)

BEGIN

DECLARE @QuantidadeComposicao FLOAT

--SET @QuantidadeComposicao = (SELECT [Quantidade] FROM Producao_Composicao WHERE [Código da Mercadoria] = @ProdutoId)

UPDATE [cadastro de mercadoriasLojas]

SET Estoque = Estoque + (CASE WHEN @TipoMovimentacao='SAIDA' THEN -@Quantidade ELSE +@Quantidade END) * (SELECT Producao_Composicao.Quantidade)

FROM [cadastro de mercadoriasLojas]

INNER JOIN [Producao_Composicao] ON [cadastro de mercadoriasLojas].[Código da Mercadoria] = [Producao_Composicao].[Código da Composição]

WHERE Producao_Composicao.[Código da Mercadoria] = @ProdutoId AND [Loja] = @LojaOrigem;

UPDATE [cadastro de mercadorias]

SET [Unidades em Estoque] = [Unidades em Estoque] + (CASE WHEN @TipoMovimentacao='SAIDA' THEN -@Quantidade ELSE +@Quantidade END) * (SELECT Producao_Composicao.Quantidade)

FROM [cadastro de mercadorias]

INNER JOIN [Producao_Composicao] ON [cadastro de mercadorias].[Código da Mercadoria] = [Producao_Composicao].[Código da Composição]

WHERE Producao_Composicao.[Código da Mercadoria] = @ProdutoId;

END;

END;

END

GO

1.3 após executar efetue um teste com o mesmo produto que havia dado erro na tela de pedidos de venda do softshop se nao apresentar nem um erro é por que o erro foi corrigido e pedir para o cliente fazer uma nova venda no pdv

Documentação de Testes