Árvore de páginas

Produto:

SIGAGPE

Versões:

P12

Ocorrência:

THREAD ERROR Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression 

Passo a passo:

Esse cenário caracteriza problemas na base legada do cliente

Erro THREAD ERROR Error : 512 (21000) (RC=-1) - [Microsoft][SQL Server Native Client 11.0][SQL Server]Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. ( From tDBServer::SQLExec )

Caso 1

Abrir o SQL e posicionar na tabela SRH depois, abrir a pasta indexes, conforme abaixo:

Clicar duas vezes em cada índice e verificar a chave que ele valida. Por exemplo:

Neste índice, a chave é Filial+Matricula+DataBase+DataInicio. Para cada índice o cliente pode usar a query e verificar o que tem duplicado pra fazer os ajustes.


Abaixo tem as querys executadas para achar os registros invalidos

Localizar registros duplicados com valores:

SELECT RH_FILIAL, RH_MAT, CONVERT(VARCHAR(10),CAST(RH_DTRECIB AS DATE), 103), COUNT(RH_MAT)
FROM SRH010
WHERE D_E_L_E_T_ <> '*'
AND RH_DTRECIB <> ' '
GROUP BY RH_FILIAL, RH_MAT, RH_DTRECIB
HAVING COUNT(RH_MAT) > 1 

Localizar registros duplicados com datas em branco (tínhamos registros que foram incluídos manualmente na versão 10 e ficaram assim. Gerou duplicidade da mesma forma):

SELECT RH_FILIAL, RH_MAT, CONVERT(VARCHAR(10),CAST(RH_DTRECIB AS DATE), 103), COUNT(RH_MAT)
FROM SRH010
WHERE D_E_L_E_T_ <> '*'
AND RH_DTRECIB = ' '
GROUP BY RH_FILIAL, RH_MAT, RH_DTRECIB
HAVING COUNT(RH_MAT) > 1 

Com essas querys, basta o DBA alterar os campos que ele quer concatenar conforme os índices e assim ele conseguirá encontrar os problemas e finalizar a conversão.

Caso 2

Já tivemos esse erro com outros clientes e foi detectado problemas na base de dados.

Segue abaixo o caso em questão, pode ser que no seu caso tenha alguma outra particularidade mas na maioria dos casos as indicações do caso tiveram resultado positivo.

Caso do cliente

Analista Totvs
O sistema está fazendo querys que estão retornando valores indevidos causando o erro em questão porem ainda não detectamos o que pode estar causando o mesmo. Acredito estar relacionado ao preenchimento da tabela SRH cabeçalho de férias onde erroneamente deve existir mais de um registro para o mesmo funcionário. Exemplo imagine um funcionário com dois gozos de férias no mesmo período ( Isso é uma suposição ), porem podemos tentar descobrir qual registro está causando o erro por amostragem. Exemplo: Quebre as tabelas SRH e SRR em 3 partes iguais relacionado a datas e vá processando o Gpeconv de férias separadamente para sabermos em qual parte está com problema. Descobrindo qual parte está com problemas podemos quebrar a mesma em mais 3 partes até achar o registro errado.
A outra opção seria me passar um cenário especifico para eu testar o mesmo na 11 e fazer a migração para reprodução do problema.

Cliente
Verifiquei que há registros de matrículas na SRR que não existem na SRH. Na prática penso que isso não deveria ocorrer. Estou correto? O primeiro teste que penso em fazer é eliminar esses registros e depois rodar o GPECONV pra ver se o erro persiste. Qual sua opinião?

Analista
A SRR é itens de dois cabeçalhos SRG-RESCISÕES e SRH-Ferias, se o funcionário não tiver rescisão você esta certo não pode haver registro na SRR e não ter na SRH, porem se o mesmo funcionário tiver rescisão isso justificaria, mas é bom checar as verbas exemplo se tiver verbas como exemplo SALDO DE SALARIO significa que é de rescisão ou de férias mas no SX3 da SRR tem um campo que identifica a origem da verba RR_TIPO3 = Referencia = PERCENTE("FR")

Cliente
Consegui migrar, de fato o problema estava na SRH conforme você mencionou
Executamos a Query abaixo na SRH que busca registros deletados com base no índice 2 (RH_FILIAL+RH_MAT+DTOS(RH_DATAINI)) e encontramos alguns registros duplicados e outros com campos zerados. Esses registros também não existiam na SRR.
Por exemplo:
- Para uma matrícula X haviam dois registros no SRH, ambos com os campos RH_DATAINI e RH_DATAFIM iguais, porém com os campos RH_DATABAS e RH_SALHRS diferentes, então analisei junto ao RH e verificamos que um dos registros estava indevido visto que o RH_DATABAS e RH_SALARS não estavam coerentes, portanto deletamos via SDU.
- Para outra matrícula, haviam vários registros com alguns campos zerados como RH_SALMES, RH_SALDIA, RH_DATAINI, RH_DATAFIM..., deletamos também via SDU.

Segue Query:

SELECT RH_FILIAL, RH_MAT, RH_DATAINI
FROM SRH010
WHERE D_E_L_E_T_ <> '*'
AND RH_FILIAL = '01'
GROUP BY RH_FILIAL, RH_MAT, RH_DATAINI
HAVING COUNT(RH_MAT) > 1

 

Observações: