Perguntas Erro na qry

Mais
7 anos 10 meses atrás #30751 por CLAUDIOADVPL
Erro na qry foi criado por CLAUDIOADVPL
Bom dia Pessoal,

estou montando um relatório customizado da ordem de produção, e depois de fazer uma alteração na qry começou a dar o erro abaixo:

THREAD ERROR (administrador, SERVIDOR) 15/06/2016 17:43:20
type mismatch on + on XCABEC(RPCPAF01.PRW) 15/06/2016 17:42:46 line : 188


eu sei que a linha que esta dando pau é essa porque antes chegava a aparecer o relatório e depois que alterei parou de funcionar... alguém poderia me ajudar na qry (não manjo de qry)

segue linha:

_cQry += " LEFT JOIN " + RetSqlName("SD1") + " SD1" + " ON SUBSTRING(SC2.C2_OBS,4,9) = SD1.D1_DOC " + CRLF


desde já agradeço.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 10 meses atrás #30753 por will
Respondido por will no tópico Erro na qry
Boa Tarde!

Poderia colocar o SQl completo aqui por favor para tentar te ajudar?

E como estava antes de você mexer?

O que eu faço para testar, é o seguinte eu pego via debug o que esta na variavel _cQry e jogo no SQL e rodo lá, geralmente o SQl dá o erro que esta acontecendo.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 10 meses atrás #30758 por CLAUDIOADVPL
Respondido por CLAUDIOADVPL no tópico Erro na qry
Boa tarde Willian,

a qry mudada é essa:

//PESQUISA DADOS CABEÇALHO
_cAlias := "cQuerySC2"
_cQry := " SELECT " + CRLF
_cQry += " C2_NUM AS OP, " + CRLF
_cQry += " C2_ITEM AS ITEM, " + CRLF
_cQry += " C2_SEQUEN AS SEQUENCIA, " + CRLF
_cQry += " C2_X_CODCL AS CODCLIENTE, " + CRLF
_cQry += " C2_X_LJCLI AS LJCLIENTE, " + CRLF

_cQry += " ISNULL(A1_NREDUZ,'') AS RAZAOSOCIAL, " + CRLF
_cQry += " C2_PRODUTO AS CODPROD, " + CRLF
_cQry += " B1_DESC AS DESCPROD, " + CRLF
_cQry += " C2_QUANT AS QUANT, " + CRLF
_cQry += " C2_UM AS UNIDADE, " + CRLF

_cQry += " C2_STATUS AS STATU, " + CRLF
_cQry += " C2_EMISSAO AS EMISSAO, " + CRLF
_cQry += " C2_DATPRI AS DTINICIAL, " + CRLF
_cQry += " C2_DATPRF AS DTFINAL, " + CRLF
_cQry += " C2_OBS AS OBSERV, " + CRLF
_cQry += " D1_QTSEGUM AS SEGUM, " + CRLF
_cQry += " B1_X_AREA AS AREA, " + CRLF
_cQry += " B1_X_PCCRG AS PCCARGA, " + CRLF
_cQry += " B1_X_TMPCG AS TEMPCARGA " + CRLF
_cQry += " FROM " + RetSqlName("SC2") + " SC2" + CRLF
_cQry += " LEFT JOIN " + RetSqlName("SA1") + " SA1" + " ON SC2.C2_X_CODCL = SA1.A1_COD AND SC2.C2_X_LJCLI = SA1.A1_LOJA " + CRLF //usei left porque usando inner - é obrigado que existam o registro nas tabelas.
_cQry += " LEFT JOIN " + RetSqlName("SD1") + " SD1" + " ON SUBSTRING(SC2.C2_OBS,4,9) = SD1.D1_DOC " + CRLF
_cQry += " INNER JOIN " + RetSqlName("SB1") + " SB1" + " ON SC2.C2_PRODUTO = SB1.B1_COD " + CRLF
_cQry += " WHERE SC2.C2_FILIAL = '" + xFilial ("SC2") + "' " + CRLF
_cQry += " AND SC2.D_E_L_E_T_ = ' ' " + CRLF
_cQry += " ORDER BY SC2.C2_NUM,SC2.C2_ITEM,SC2.C2_SEQUEN " +CRLF //ordenando por n°da OP, item e sequencia.

_cQry := ChangeQuery(_cQry)

dbUseArea(.T.,"TOPCONN",TcGenQry(,,_cQry),_cAlias,.T.,.T.)

// Abre opcoes para o usuario ou SetLandscape()


oPrint:SetUp()
oPrint:SetPortrait()

// PAPEL A4
oPrint:setPaperSize(9)

//Inicia uma nova página
//oPrint:StartPage()

dbSelectArea("cQuerySC2")
cQuerySC2->(dbGoTop())

//Controle de Pagina
While cQuerySC2->(!EOF())

////If lFlag
nLin := 0
nTotal:= 0
cFrete:= ''
lFlag1:= .f.

//Cabeçalho
oPrint:StartPage()
xCabec()

//Rodapé
xRodape()

oPrint:EndPage()

cQuerySC2->(dbSkip())

EndDo

//finaliza a pagina
oPrint:EndPage()
oPrint:Preview()
oPrint:End()

cQuerySC2->(dbCloseArea())
//RestArea(_aArea)
Return

/*
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ºPrograma ³XCABEC ºAutor Claudio º Data ³ 26/05/2016 º±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ºDesc. ³Imprime o Cabecalho. º±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*/
static function xCabec()
Local nLimp := 0
Local dataRos :=date()
cLogoD := GetSrvProfString("Startpath","") + "LGRLREL" + cEmpAnt + ".BMP"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Titulo do Relatorio dados ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
oPrint:Say(050,800,OEMTOANSI('Relação de Ordens de Producao'),oFont16n,,CLR_BLUE)
oPrint:SayBitmap(050,050,cLogoD,390,150)
oPrint:Say(050,1900,OEMTOANSI('Data: ')+ Transform(dataRos,"@E 99/99/9999"),oFont12n,,CLR_BLUE) //data na parte superior igual a data do rodapé

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//Informacoes da ordem de produção (cabeçalho)
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
oPrint:Say(340,100,OEMTOANSI('Número da Ordem de Produção: ')+cQuerySC2->(OP),oFont12)
oPrint:Say(340,1200,OEMTOANSI('Item: ')+cQuerySC2->(ITEM),oFont12)
oPrint:Say(340,1900,OEMTOANSI('Sequência: ')+cQuerySC2->(SEQUENCIA),oFont12)
oPrint:Say(390,100,OEMTOANSI('Código do Cliente: ')+cQuerySC2->(CODCLIENTE),oFont12)
oPrint:Say(390,1200,OEMTOANSI('Loja: ')+cQuerySC2->(LJCLIENTE),oFont12)
oPrint:Say(440,100,OEMTOANSI('Razão Social do Cliente: ')+cQuerySC2->(RAZAOSOCIAL),oFont12)
oPrint:Say(490,100,OEMTOANSI('Código do Produto Anodizado: ')+cQuerySC2->(CODPROD),oFont12)
oPrint:Say(540,100,OEMTOANSI('Descrição do Produto Anodizado: ')+cQuerySC2->(DESCPROD),oFont12)
oPrint:Say(590,100,OEMTOANSI('Quantidade: ')+cvaltochar(cQuerySC2->(QUANT)),oFont12)
oPrint:Say(590,1200,OEMTOANSI('Unidade: ')+cQuerySC2->(UNIDADE),oFont12)
oPrint:Say(590,1900,OEMTOANSI('Status: ')+cQuerySC2->(STATU),oFont12)
oPrint:Say(640,100,OEMTOANSI('Data de Emissão: ')+Transform(STOD(cQuerySC2->(EMISSAO)),"@E 99/99/9999"),oFont12)
oPrint:Say(690,100,OEMTOANSI('Data de Previsão de inicio: ')+Transform(STOD(cQuerySC2->(DTINICIAL)),"@E 99/99/9999"),oFont12)
oPrint:Say(690,1200,OEMTOANSI('Data de Previsão de término: ')+transform(STOD(cQuerySC2->(DTFINAL)),"@E 99/99/9999"),oFont12)
oPrint:Say(740,100,OEMTOANSI('Data de Inicio efetivo: '),oFont12)
oPrint:Say(740,1200,OEMTOANSI('Data de Término efetivo: '),oFont12)
oPrint:Say(790,100,OEMTOANSI('Hora de Inicio efetivo: '),oFont12)
oPrint:Say(790,1200,OEMTOANSI('Hora de Fim efetivo: '),oFont12)
oPrint:Say(840,100,OEMTOANSI('Observações: ')+cQuerySC2->(OBSERV),oFont12)


oPrint:Line(910,100,910,2400)

// Insere retângulo preenchido
oBrush1 := TBrush():New( , CLR_YELLOW )

oPrint:FillRect( {940, 100, 1000, 2400}, oBrush1 )

oPrint:Say(950,1000,OEMTOANSI('Detalhes da Ordem de Producao'),oFont12,,CLR_BLACK)
oPrint:Say(1040,100,OEMTOANSI('Código do Produto: ')+cQuerySC2->(CODPROD),oFont10) //ver com vagner
oPrint:Say(1040,1200,OEMTOANSI('Descrição do Produto: ')+cQuerySC2->(DESCPROD),oFont10)
oPrint:Say(1090,100,OEMTOANSI('Quant. na 1° unidade de medida: ')+cQuerySC2->(UNIDADE),oFont10)
oPrint:Say(1140,100,OEMTOANSI('Quant. na 2° unidade de medida: ')+cQuerySC2->(SEGUM),oFont10
oPrint:Say(1190,100,OEMTOANSI('Área do Produto: ')+cvaltochar(cQuerySC2->(AREA)),oFont10)
oPrint:Say(1190,1200,OEMTOANSI('PÇ/CARGA: ')+cvaltochar(cQuerySC2->(PCCARGA)),oFont10)
oPrint:Say(1190,1900,OEMTOANSI('TEMPO/CARGA: ')+cQuerySC2->(TEMPCARGA),oFont10)



a qry anterior era essa: (note que mudei aonde busca cQuerySC2->(SEGUM):


//PESQUISA DADOS CABEÇALHO
_cAlias := "cQuerySC2"
_cQry := " SELECT " + CRLF
_cQry += " C2_NUM AS OP, " + CRLF
_cQry += " C2_ITEM AS ITEM, " + CRLF
_cQry += " C2_SEQUEN AS SEQUENCIA, " + CRLF
_cQry += " C2_X_CODCL AS CODCLIENTE, " + CRLF
_cQry += " C2_X_LJCLI AS LJCLIENTE, " + CRLF

_cQry += " ISNULL(A1_NREDUZ,'') AS RAZAOSOCIAL, " + CRLF
_cQry += " C2_PRODUTO AS CODPROD, " + CRLF
_cQry += " B1_DESC AS DESCPROD, " + CRLF
_cQry += " C2_QUANT AS QUANT, " + CRLF
_cQry += " C2_UM AS UNIDADE, " + CRLF

_cQry += " C2_STATUS AS STATU, " + CRLF
_cQry += " C2_EMISSAO AS EMISSAO, " + CRLF
_cQry += " C2_DATPRI AS DTINICIAL, " + CRLF
_cQry += " C2_DATPRF AS DTFINAL, " + CRLF
_cQry += " C2_OBS AS OBSERV, " + CRLF
_cQry += " B1_SEGUM AS SEGUM, " + CRLF
_cQry += " B1_X_AREA AS AREA, " + CRLF
_cQry += " B1_X_PCCRG AS PCCARGA, " + CRLF
_cQry += " B1_X_TMPCG AS TEMPCARGA " + CRLF
_cQry += " FROM " + RetSqlName("SC2") + " SC2" + CRLF
_cQry += " LEFT JOIN " + RetSqlName("SA1") + " SA1" + " ON SC2.C2_X_CODCL = SA1.A1_COD AND SC2.C2_X_LJCLI = SA1.A1_LOJA " + CRLF //usei left porque usando inner - é obrigado que existam o registro nas tabelas.
_cQry += " INNER JOIN " + RetSqlName("SB1") + " SB1" + " ON SC2.C2_PRODUTO = SB1.B1_COD " + CRLF
_cQry += " WHERE SC2.C2_FILIAL = '" + xFilial ("SC2") + "' " + CRLF
_cQry += " AND SC2.D_E_L_E_T_ = ' ' " + CRLF
_cQry += " ORDER BY SC2.C2_NUM,SC2.C2_ITEM,SC2.C2_SEQUEN " +CRLF //ordenando por n°da OP, item e sequencia.

_cQry := ChangeQuery(_cQry)

dbUseArea(.T.,"TOPCONN",TcGenQry(,,_cQry),_cAlias,.T.,.T.)

// Abre opcoes para o usuario ou SetLandscape()


oPrint:SetUp()
oPrint:SetPortrait()

// PAPEL A4
oPrint:setPaperSize(9)

//Inicia uma nova página
//oPrint:StartPage()

dbSelectArea("cQuerySC2")
cQuerySC2->(dbGoTop())

//Controle de Pagina
While cQuerySC2->(!EOF())

////If lFlag
nLin := 0
nTotal:= 0
cFrete:= ''
lFlag1:= .f.

//Cabeçalho
oPrint:StartPage()
xCabec()

//Rodapé
xRodape()

oPrint:EndPage()

cQuerySC2->(dbSkip())

EndDo

//finaliza a pagina
oPrint:EndPage()
oPrint:Preview()
oPrint:End()

cQuerySC2->(dbCloseArea())
//RestArea(_aArea)
Return

/*
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ºPrograma ³XCABEC ºAutor Claudio º Data ³ 26/05/2016 º±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ºDesc. ³Imprime o Cabecalho. º±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
*/
static function xCabec()
Local nLimp := 0
Local dataRos :=date()
cLogoD := GetSrvProfString("Startpath","") + "LGRLREL" + cEmpAnt + ".BMP"

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Titulo do Relatorio dados ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
oPrint:Say(050,800,OEMTOANSI('Relação de Ordens de Producao'),oFont16n,,CLR_BLUE)
oPrint:SayBitmap(050,050,cLogoD,390,150)
oPrint:Say(050,1900,OEMTOANSI('Data: ')+ Transform(dataRos,"@E 99/99/9999"),oFont12n,,CLR_BLUE) //data na parte superior igual a data do rodapé

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//Informacoes da ordem de produção (cabeçalho)
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
oPrint:Say(340,100,OEMTOANSI('Número da Ordem de Produção: ')+cQuerySC2->(OP),oFont12)
oPrint:Say(340,1200,OEMTOANSI('Item: ')+cQuerySC2->(ITEM),oFont12)
oPrint:Say(340,1900,OEMTOANSI('Sequência: ')+cQuerySC2->(SEQUENCIA),oFont12)
oPrint:Say(390,100,OEMTOANSI('Código do Cliente: ')+cQuerySC2->(CODCLIENTE),oFont12)
oPrint:Say(390,1200,OEMTOANSI('Loja: ')+cQuerySC2->(LJCLIENTE),oFont12)
oPrint:Say(440,100,OEMTOANSI('Razão Social do Cliente: ')+cQuerySC2->(RAZAOSOCIAL),oFont12)
oPrint:Say(490,100,OEMTOANSI('Código do Produto Anodizado: ')+cQuerySC2->(CODPROD),oFont12)
oPrint:Say(540,100,OEMTOANSI('Descrição do Produto Anodizado: ')+cQuerySC2->(DESCPROD),oFont12)
oPrint:Say(590,100,OEMTOANSI('Quantidade: ')+cvaltochar(cQuerySC2->(QUANT)),oFont12)
oPrint:Say(590,1200,OEMTOANSI('Unidade: ')+cQuerySC2->(UNIDADE),oFont12)
oPrint:Say(590,1900,OEMTOANSI('Status: ')+cQuerySC2->(STATU),oFont12)
oPrint:Say(640,100,OEMTOANSI('Data de Emissão: ')+Transform(STOD(cQuerySC2->(EMISSAO)),"@E 99/99/9999"),oFont12)
oPrint:Say(690,100,OEMTOANSI('Data de Previsão de inicio: ')+Transform(STOD(cQuerySC2->(DTINICIAL)),"@E 99/99/9999"),oFont12)
oPrint:Say(690,1200,OEMTOANSI('Data de Previsão de término: ')+transform(STOD(cQuerySC2->(DTFINAL)),"@E 99/99/9999"),oFont12)
oPrint:Say(740,100,OEMTOANSI('Data de Inicio efetivo: '),oFont12)
oPrint:Say(740,1200,OEMTOANSI('Data de Término efetivo: '),oFont12)
oPrint:Say(790,100,OEMTOANSI('Hora de Inicio efetivo: '),oFont12)
oPrint:Say(790,1200,OEMTOANSI('Hora de Fim efetivo: '),oFont12)
oPrint:Say(840,100,OEMTOANSI('Observações: ')+cQuerySC2->(OBSERV),oFont12)


oPrint:Line(910,100,910,2400)

// Insere retângulo preenchido
oBrush1 := TBrush():New( , CLR_YELLOW )

oPrint:FillRect( {940, 100, 1000, 2400}, oBrush1 )

oPrint:Say(950,1000,OEMTOANSI('Detalhes da Ordem de Producao'),oFont12,,CLR_BLACK)
oPrint:Say(1040,100,OEMTOANSI('Código do Produto: ')+cQuerySC2->(CODPROD),oFont10) //ver com vagner
oPrint:Say(1040,1200,OEMTOANSI('Descrição do Produto: ')+cQuerySC2->(DESCPROD),oFont10)
oPrint:Say(1090,100,OEMTOANSI('Quant. na 1° unidade de medida: ')+cQuerySC2->(UNIDADE),oFont10)
oPrint:Say(1140,100,OEMTOANSI('Quant. na 2° unidade de medida: ')+cQuerySC2->(SEGUM),oFont10) //ver com vagner
oPrint:Say(1190,100,OEMTOANSI('Área do Produto: ')+cvaltochar(cQuerySC2->(AREA)),oFont10)
oPrint:Say(1190,1200,OEMTOANSI('PÇ/CARGA: ')+cvaltochar(cQuerySC2->(PCCARGA)),oFont10)
oPrint:Say(1190,1900,OEMTOANSI('TEMPO/CARGA: ')+cQuerySC2->(TEMPCARGA),oFont10)

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 10 meses atrás #30761 por will
Respondido por will no tópico Erro na qry
Bom dia!

Vi seu Sql, testei no Sql Studio e funcionou mesmo sem eu ter alguns campos especificos.

Conclui então que o erro não esta no seu SQL, e sim na função depois dela Xcabec, onde tem os seus Oprint da uma debugada ali olha campo a campo, acredito ser algum errro de o caracter é string ta indo data é data ta indo caracter.

Debuga o trecho dos Oprint para ver.

Desculpa não conseguir ajudar com mais certeza.

Por favor Acessar ou Registrar para participar da conversa.

Mais
7 anos 10 meses atrás #30764 por CLAUDIOADVPL
Respondido por CLAUDIOADVPL no tópico Erro na qry
Boa tarde Willian,

fica na paz Brother, já mostrou o caminho...vou investigar e posto aqui uma vez solucionado o problema.

Obrigado.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.115 segundos
Joomla templates by a4joomla