Оптимизация конфигураций на платформе 1C SQL
На главную
Обратная связь
Карта сайта
Оптимизация конфигураций на платформе 1C SQL
ГлавнаяМатериалыСтатьиНачинающим
  • Деятельность

  • Материалы

  •      › Скачать
         › Статьи
         › FAQ
         › Новости
  • Контакты

  • Форум



  • e-mail:
    icq: 169296011
    © 2003-2010 Шемякин Павел





    Начинающим

    Опубликована: 14.06.2001, отредактирована: 26.03.2003 Автор: toypaul

    Баг лист

    Применение периодических числовых реквизитов в запросах

    Ситуация:

    Компонента расчет (Основные средства), SQL Server 7.0, 1С 15 релиз. Выполняем запрос на расчет Амортизации, указываем галочку по всем шифрам.

    Результат:

    Сообщение об ошибке
    Arithmetic overflow error converting numeric to data type numeric. Номер ошибки 8115 (для SQL Server 2000)

    Разбор полетов:

    Выполняемый запрос содержит примерно такой текст:

    БСт = ... .БалансоваяСтоимость
    Процент = ... .ПроцентИзноса
    БСтСумма = Сумма(БСт*Процент/100) когда (...)

    запрос на SQL Server:

    SELECT ..., _1SCONST.VALUE * CLxxx.CLyyy / 100 FROM ...

    Дело в том, что в SQL Server периодические значения хранятся как строки. В данном случае SQL Server не может преобразовать _1SCONST.VALUE к числу корректно (возможно это особенность SQL Server), переписываем запрос на:

    SELECT ...,CONVERT(numeric,_1SCONST.VALUE) * CLxxx.CLyyy / 100   FROM ... 

    все отлично. Пара секунд на размышление — идея! (если честно, не моя). Запрос 1С переписываем как:

    БСтСумма = Сумма(Число(БСт)*Процент/100) когда (...)

    результат положительный.

    З.Ы.

    Даже не подозревал что в Запрос"е можно умножать переменные в функция типа Сумма.

    Все запросы даны в примерном варианте поскольку приглашали меня разобраться на время иконфигурацию я с собой не забрал. Однако от этого суть не меняется.

    Ошибка при формировании бухгалтерского отчета за период некратный месяцу
    (Автор Alex Malychev по материалам форума Территория 1С)

    Ситуация

    Железо: P-III(~687), ОЗУ-512Mb.
    Софт: MS Windows 2000 Advanced Server+ sp1; MS SQL Server 7.0+ sp3; SQL-версия 1С 7.7.(7.70.015) и конфигурация релиз 4 ()7.70.404.

    Машин в сети - 14(все постоянно работают)


    Проблема:

    При формировании отчета за период превышающий 35-40(точно не проверял) отстреливается 1С и пишет о невосстановимой ошибке базы данных. Если же этот же отчет запускать по месяцам, то все нормально считается. Ошибка в 1С инициализируется как:


    SQL State: 42000
    Native: 8157
    Message: (расшифровка текста по коду ошибки)
    SQL State: 42000
    Native: 8180
    Message: (расшифровка текста по коду ошибки)


    Расшифровку текста по коду ошибки можно посмотреть если набрать в SQL Server Query Analyzer -

    SELECT * FROM master..sysmesseges


    Что делал: 1 — проверял базу из конфигуратора; 2 — запускал в Query Analyzer(dbcc checkdb); 3 — аналогично запускал процедуру 1С — _1sp_DBReindex. Всё это мне отвечало что с базой всё ОК(да так оно и есть- ведь по месецам и интервалам мень 35-40 дней всё нормально рассчитывается). Физически база целая.

    Мой комментарий


    Если коды в 2000 и 7.0 совпадают (для этих кодов так и есть как оказалось позже), то это ошибка формирования запроса 1С-кой. Известно, что за целый месяц запрос формируется по другому. Если же не за целый месяц, то идет расчет по проводкам. Так что в этом случае просто два разных запроса — один работает, другой нет. Попробуй релиз 12,14,17.


    З.Ы.

    В SQL Server 2000

    8157 это
    All the queries in a query expression containing a UNION operator must have the same number of
    expressions in their select lists.


    а 8180
    Statement(s) could not be prepared. - что значит запрос неверно составлен

    Решение

    Проблема разрешилась установкой 17 релиза, другое не пробовал.

    Проблема с триггером для таблицы 1С,
    Проблема с доступом к FoxPro-ным файлам
    Пересчет по дням при запросе по регистру
    Неверная сортировка счетов в запросе

    Данный список багов составлен мной с помощью Прокопьева Алексея (это еще один специалист с моего бывшего места работы, см. также статью HOWTO). Предприятие работает на 14 релизе, SQL Server 6.5.

    "... Еще, скажем, есть одна интересная вещь: на MS SQL 6.5, если есть таблица, на которую повешен триггер, то при изменении из 1С этой таблицы возможны вылеты на Windows 98, NT, 2000 и т.д. с ошибкой о занятом Hstm. Эта фигня появляется из-за того, что в этих Windows предустанавливается драйвер ODBC для SQL версии больше 3.5. После переписи драйвера SQLSRV32.DLL версии 3.5 эта ошибка исчезает. Также еще есть у нас ODBCSQL — библиотека для прямого доступа к таблицам и DBF. При работе на более высоких версиях Windows опять же не получается подключится к DBF по драйверу FoxPro, который поддерживает работу с DBF, занятыми пользователями, и опять же из-за драйвера ODBC для FoxPro. Если переписать драйвер из Windows95, то усе классно.".

    Комментарий

    То есть если кто сталкивался с проблемой (может даже в других сочетаниях 1С и SQL Server), то бороться с этим лучше всего сменой драйверов ODBC. Сам я пробовал создавать триггер на 15 релизе + SQL Server 2000 (и ODBC из его поставки) — все нормально работало.

    "... На сервере у нас памяти 750 Мб, и даже хочется перейти сразу же на SQL 2000, но 14-й релиз SQL 2000 не поддерживает, а 15,16,17 релизы имеют ТАКИЕ траблы при работе с нашей конфигурацией, что прямо туши свет. 15,16 релизы очень неадекватно работают с нашими основными регистрами, при запросе по регистру начинается пересчет по дням всего периода, за который сделан запрос. Я дважды написал об этом в 1С, и они соизволили ответить и исправили в 17-м релизе. Но 17-й релиз опять же неадекватно выполняет некоторые вещи, связанные с сортировкой счетов (нормальным явлением считается сортировка 01.99,01.01, 02.01) :-( , и с проведением некоторых документов по затратам и себестоимости. Поэтому, к сожалению, я отказался от промышленной эксплуатации 17-го релиза."

    Решение

    Ред.: смена ODBC + оставться на 14 релизе :(

     наверх