Скорость работы бланка 7.52 - индивидуальные сведения
Здравствуйте!
Бюджетная версия 8.802.
Высылаю базу бюджетного учреждения.
Скорость расчета бланка у клиента превысила 40 мин, дальше терпения не хватило.
Проблему я решила самостоятельно.
К Вам огромная просьба тестировать свои нововведения на больших базах, а не на базах из 10 человек!
Итак, вот в чем были причины:
-----------------------------
Причина № 1
zp_lib16.ibl, функция
СФОРМИРОВАТЬ_ВЫПЛАТЫ_СОТР_2014
найти строку
ЕСЛИ НАЙТИ("CODE",сотр) ТО
далее строку
ЦИКЛ ПОКА (ПОЛЕ("CODE") = сотр)
в этом цикле перебираются все начисления сотрудника за все месяца выбранного периода
Находим строки:
СОЗДАТЬ(зпр,ТИП_СПИСОК) зпр.ОЧИСТИТЬ // из zp_tab21.dbf
зпр.ДОБАВИТЬ("SELECT DISTINCT TARIF FROM '"+табСоцНалог+"' WHERE CODE='"+сотр+"' AND")
зпр.ДОБАВИТЬ(" ATTR02='"+СТР(годдд)+"' AND ATTR01='"+СТР(мес)+"' AND
ATTR03='ПЕНС/С'")
зпр.ДОБАВИТЬ(" AND BAZA1+BAZA2>0 AND TARIF<>'' AND TARIF IS NOT NULL")
выпзап=SQL_ЗАПРОС(зпр)
ЕСЛИ выпзап.ВСЕГО<>0 ТО
выпзап.ПЕРЕЙТИ(1)
типТарифа_РСВ!сотр!мес=выпзап.ПОЛЕ("TARIF")
Т.е. Вы для КАЖДОГО начисления КАЖДОГО месяца КАЖДОГО сотрудника проверяте, не поменялся ли тариф?
Зачем?
У меня у каждого сотрудника в каждом месяце около 15 начислений.
За 9 месяцев это 135 начислений.
Всего сотрудников 150
Т.е. я жду 20250 запросов только для того, чтобы убедиться,
что тариф как был 01, так и остался
-----------------------------
Причина № 2
Библиотека та же.
Функция
ВЫБРАТЬ_НАЧИСЛЕНИЯ_ПЕРИОД2013
Зачем нужна эта конструкция:
ЕСЛИ СУЩ_ФАЙЛ(ф1) ТО
запрос.ДОБАВИТЬ("SELECT T1.* , "+СТР(мес_нач)+" AS ATTR17, "+СТР(год_тек)+" AS ATTR16 FROM '"+ф1+"' AS T1")
КОНЕЦ_ЕСЛИ
ЕСЛИ СУЩ_ФАЙЛ(ф2) ТО
ЕСЛИ СУЩ_ФАЙЛ(ф1) ТО
запрос.ДОБАВИТЬ(" UNION ")
КОНЕЦ_ЕСЛИ
запрос.ДОБАВИТЬ("SELECT T2.* , "+СТР(мес_нач+1)+" AS ATTR17, "+СТР(год_тек)+" AS ATTR16 FROM '"+ф2+"' AS T2")
КОНЕЦ_ЕСЛИ
ЕСЛИ СУЩ_ФАЙЛ(ф3) ТО
ЕСЛИ СУЩ_ФАЙЛ(ф1) ТО
запрос.ДОБАВИТЬ(" UNION ")
ИНАЧЕ
ЕСЛИ СУЩ_ФАЙЛ(ф2) ТО
запрос.ДОБАВИТЬ(" UNION ")
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЕСЛИ
запрос.ДОБАВИТЬ("SELECT T3.* , "+СТР(мес_кон)+" AS ATTR17, "+СТР(год_тек)+" AS ATTR16 FROM '"+ф3+"' AS T3")
КОНЕЦ_ЕСЛИ
Вы представляете себе размер файла, который в результате получится?
Это более 10 000 строк!
Следующий запрос просто умирает в течение 8 минут.
Я это все хозяйство закоментировала, оставила только:
запрос.ДОБАВИТЬ("SELECT T1.* , "+СТР(мес_нач)+" AS ATTR17, "+СТР(год_тек)+" AS ATTR16 FROM '"+табСписокНач+"' AS T1")
У Вас эта строка тоже есть, но она выполняется только при условии
ЕСЛИ НЕ СУЩ_ФАЙЛ(ф1) И НЕ СУЩ_ФАЙЛ(ф2) И НЕ СУЩ_ФАЙЛ(ф3) ТО
-----------------------------
Подитожим.
Все нововведения должны тестироваться на больших базах.
- 12 просмотров