В нашей базе. Воспроизводится Отчеты -> Специализированные -> Акт сверки. Контрагент. Там набираем символы для поиска, потом из удаляем Есть только лог ODBC: 1cv7s 40-41 EXIT SQLExecDirect with return code -1 (SQL_ERROR) HSTMT 0B4B15B8 UCHAR * 0x00FD5648 [ -3] "set rowcount 1 select * from SC133(NOLOCK INDEX=PDESCR) where PARENTID=? and DESCR>='\ 8' and substring(DESCR,1, 1)='\ 8' order by PARENTID,ISFOLDER, DESCR,ROW_ID set rowcount 0\ 0" SDWORD -3 DIAG [HY000] ODBC escape convert error (1)
(В ответ на comment #0) > Есть только лог ODBC: > UCHAR * 0x00FD5648 [ -3] "set rowcount 1 > select * from SC133(NOLOCK INDEX=PDESCR) where PARENTID=? and DESCR>='\ 8' and > substring(DESCR,1, > 1)='\ 8' order by PARENTID,ISFOLDER, DESCR,ROW_ID set rowcount 0\ 0" подозреваю, что из-за бэкслэша. надо еще посмотреть что в логе сельты
К сожалению не делал для другой баги и не логов SELTA нет.
(В ответ на comment #1) > > UCHAR * 0x00FD5648 [ -3] "set rowcount 1 > > select * from SC133(NOLOCK INDEX=PDESCR) where PARENTID=? and DESCR>='\ 8' and > > substring(DESCR,1, > > 1)='\ 8' order by PARENTID,ISFOLDER, DESCR,ROW_ID set rowcount 0\ написал тест для odbc, но воспроизвести пока не смог.
воспроизвел ошибку. нужно Отчеты -> Специализированные -> Акт сверки, Контрагент - набрать один символ, затем backspace, и получается ошибка только не очень понятно почему. в логах сельты - символ "точка" (.) и ошибка трансляции в трассировке - вообще '\ 8'
кажется, что нажатие backspace передается как символ, а не затирает последний символ в строке поиска - даже простое нажатие backspace ведет к падению 1С. это объясняет и ошибку в парсере - он ругается на кавычку, посмотрел в hex: действительно, там символ 0x08, а это и есть backspace в ascii; непонятно только, как такое возможно... надо посмотреть в mssql и виндовом odbc
(В ответ на comment #5) > посмотрел в hex: действительно, там символ 0x08 wine(cellar) + mssql(win2008-mssql2005, virtualbox) не воспроизвелось. ошибка где-то в odbc? т.к. в сельту уже приходит неправильный запрос
можно решить, если добавить в грамматику ''{&0008}'' в определение строки. но это будет хак. истинной причины я не понял, почему в парсер попадает символ 0x08. проверил, это не SQLBindParameter(). и не понятно, почему mssql-odbc нормально отрабатывает
(В ответ на comment #7) > можно решить, если добавить в грамматику ''{&0008}'' в определение строки. но > это будет хак. Мне не кажется, что это хак, если MS SQL считает, что 0x08 символ это символ строки, то SELTA тоже может так считать. > истинной причины я не понял, почему в парсер попадает символ 0x08. проверил, > это не SQLBindParameter(). и не понятно, почему mssql-odbc нормально > отрабатывает Мне показалось, что попадает через SQLExecDirect напрямую от 1с (DESCR>='\ 8')
(В ответ на comment #8) > Мне не кажется, что это хак, если MS SQL считает, что 0x08 символ это символ > строки, то SELTA тоже может так считать. Действительно, в трассировке (wine+mssql) тот же символ - '\ 8' , т.е. для odbc и mssql это нормально, получать backspace как строку
закоммитил, сделал revision 9, выложил на ftp. в 1С больше не воспроизводится.
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.