|
v7: Светка базы с использование 1С++ | ☑ | ||
---|---|---|---|---|
0
PRO100 NigGaZ
02.10.13
✎
15:09
|
Предыстория такова:
Встал углом вопрос сворачивания базы (ТиС), я как эталон взял стандартную свертку (порядок выполнения кода и формирование документов), Переписал все узкие места свертки, последние два шага это удаление периодических реквизитов и получение данных для документов ввода остатков, перед этим добавил анализ неактивных контрагентов после того как написал формирование запросов по итогам регистров (10 минут выполнялись стандартные запросы сейчас занимает около 10 секунд), думал все УРА свертка базы за 4 минуты, НО теперь анализ контрагентов длится 6-8 минут! а был пару секунд О_о вот запрос анализа контрагентов глТНачатьЗамер(); // ТЗ = СоздатьОбъект("ТаблицаЗначений"); рс = СоздатьОбъект("ODBCRecordSet"); ТекстЗапроса = " |SELECT Контрагенты.ID [Контрагенты $Справочник.Контрагенты] |FROM $Справочник.Контрагенты AS Контрагенты | FULL OUTER JOIN $Справочник.Договоры AS Договоры ON Контрагенты.ID = Договоры.PARENTEXT | FULL OUTER JOIN $РегистрОстаткиОбороты.Покупатели(:НачДата, | :КонДата,,,,, | Договор,) AS ПокупателиОстаткиОбороты ON Договоры.ID = ПокупателиОстаткиОбороты.Договор | FULL OUTER JOIN $РегистрОстаткиОбороты.Поставщики(:НачДата, | :КонДата,,,,, | Договор,) AS ПоставщикиОстаткиОбороты ON Договоры.ID = ПоставщикиОстаткиОбороты.Договор | FULL OUTER JOIN (SELECT Контрагенты.ID Ссылка | , Count(Договоры.ID) КоличествоДоговорыСсылка | FROM $Справочник.Контрагенты AS Контрагенты | FULL OUTER JOIN $Справочник.Договоры AS Договоры ON Контрагенты.ID = Договоры.PARENTEXT | GROUP BY Контрагенты.ID) AS Подзапрос ON Контрагенты.ID = Подзапрос.Ссылка |WHERE (Контрагенты.ISFOLDER = 2) AND (ПокупателиОстаткиОбороты.Договор is null) AND (ПоставщикиОстаткиОбороты.Договор is null) |GROUP BY Контрагенты.ID | , Подзапрос.КоличествоДоговорыСсылка |HAVING (Count(Договоры.ID) = Подзапрос.КоличествоДоговорыСсылка) |"; рс.УстановитьТекстовыйПараметр("НачДата", НачГода(ДатаСвертки)); рс.УстановитьТекстовыйПараметр("КонДата", ДатаСвертки); ТЗ = рс.ВыполнитьИнструкцию(ТекстЗапроса); СписКонт = СоздатьОбъект("СписокЗначений"); ТЗ.Выгрузить(СписКонт); тут используем 2 регистра по поставщикам и покупателям, таблицы договоров и контрагентов, из таблицы договоров фильтруем по договорам которых нет в таблицах движений, считаем количество договоров у контрагента и если все договоры у контрагента неактивны, то это наш контргент Вопрос в том, что почему так долго стал выполняться код и как проверить в чем дело? |
|||
1
PRO100 NigGaZ
03.10.13
✎
03:00
|
Переписал с ВТ в обычные таблицы оборотов все стабилизировалось :) база с 800 тыс документов за 6 лет 2,5 минуты :)
|
|||
2
Злой Бобр
03.10.13
✎
15:40
|
Никогда непонимал товарищей борющихся за пару секунд на подобной задаче. Оторви пятую точку от стула, сходи с девушкой, ... - жизнь прекрасна без 1С.
|
|||
3
sergey198
03.10.13
✎
15:41
|
Где Светка?
|
|||
4
Mikeware
03.10.13
✎
15:53
|
(2) эстеты...
|
|||
5
PRO100 NigGaZ
03.10.13
✎
16:07
|
Работа есть работа, пара секунд это в переводе на реальность трое суток
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |