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 |