|
v7: Поиск данных элементов подчиненного справочника | ☑ | ||
---|---|---|---|---|
0
YaroslavStr
05.03.13
✎
14:07
|
Задача: есть справочник Контакты. Ему подчинен справочник: Созвоны. Надо отобрать элементы справочника (сделанные созвоны) Созвоны, согласно текущей дате. Как способ наиболее быстрый? Может, кто пробовал? Количество контактов: около 30000 шт. Созвонов: по 5-7 шт на каждый контакт.
|
|||
1
КонецЦикла
05.03.13
✎
14:11
|
Запросом можно
Выбрать по реквизиту (если есть индекс по дате) Прямым запросом можно |
|||
2
ДенисЧ
05.03.13
✎
14:11
|
ЗАпросом.
Прямым или чОрным.. |
|||
3
ЧеловекДуши
05.03.13
✎
14:16
|
Не юли, пиши код, а мы поможем :)
|
|||
4
ЧеловекДуши
05.03.13
✎
14:17
|
(2) Лучше прямым, быстрее :)
|
|||
5
ДенисЧ
05.03.13
✎
14:18
|
(4) Если человек задаёт такой вопрос, то ой не факт...
|
|||
6
YaroslavStr
05.03.13
✎
14:27
|
Кон = СоздатьОбъект("Справочник.Контакты");
Соз = СоздатьОбъект("Справочник.Созвоны"); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Созвоны_"); Таб.ВывестиСекцию("Заг"); Но = 0; Кон.ВыбратьЭлементы(); Пока Кон.ПолучитьЭлемент() > 0 Цикл Соз.ИспользоватьВладельца(Кон); Соз.ВыбратьЭлементы(); Пока Соз.ПолучитьЭлемент() > 0 Цикл Если Соз.ДатаСозвона = Д тогда СИН = Найти(Соз.Автор, СокрЛП(глПользователь)); Если СИН > 0 тогда Но = Но + 1; Таб.ВывестиСекцию("Тело"); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Таб.ПараметрыСтраницы(2,,,,,,,,,,,); Таб.Опции(0); Таб.ТолькоПросмотр(1); Таб.Показать("Созвоны_", ""); |
|||
7
ЧеловекДуши
05.03.13
✎
14:28
|
Соз.ИспользоватьВладельца(Кон);
Пиши так Соз.ИспользоватьВладельца(Кон.ТекущийЭлемент()); |
|||
8
ЧеловекДуши
05.03.13
✎
14:29
|
+(6) И что тебя тревожит?
|
|||
9
YaroslavStr
05.03.13
✎
14:32
|
Меня тревожит то, что это долго, что ужас. Думал, может есть способы побыстрее обработать и выдать на гора
|
|||
10
dk
05.03.13
✎
14:33
|
(6) для обращения к спр. созвоны не обязательно перебирать все элементы контактов
можно напрямую созвоны перебирать (или запросом) в контакты уже через владельца получать |
|||
11
dk
05.03.13
✎
14:34
|
"в контакты" = "а контакты"
|
|||
12
Sserj
05.03.13
✎
14:34
|
(9) Прямым запросом меньше секунды, но если ты не знаешь что это такое, то это длинная история :)
|
|||
13
YaroslavStr
05.03.13
✎
14:35
|
Что быстрее: перебор или запрос? Кто знает? Сам только учусь :)
|
|||
14
YaroslavStr
05.03.13
✎
14:36
|
Может кто переделает код под прямой запрос? Буду признателен.
|
|||
15
YaroslavStr
05.03.13
✎
14:37
|
1С - dbf
|
|||
16
YaroslavStr
05.03.13
✎
14:38
|
Если я не ошибаюсь - прямые запросы, только в SQl версии?
|
|||
17
ДенисЧ
05.03.13
✎
14:39
|
(16) ошибаешься
|
|||
18
Sserj
05.03.13
✎
14:40
|
(16) Ошибаешь ищи класс "ПрямойЗапрос" он использует компоненту 1cpp и 1sqlite
|
|||
19
dk
05.03.13
✎
14:43
|
Для начала с простыми запросами разберись ))
|
|||
20
YaroslavStr
05.03.13
✎
14:45
|
(19) Спасибо. Простые я могу делать. Просто перед тем как делать думал переспросить. Может кто уже пробовал так делать. Всем спасибо.
|
|||
21
КонецЦикла
05.03.13
✎
14:47
|
Поставь у "ДатаСозвона" сортировку и делай ВыбратьПоРеквизиту()
При обходе проверяй пользователя Нафига перебирать во-первых все контакты, во-вторых все созвоны? |
|||
22
Sserj
05.03.13
✎
14:47
|
Что то я честно говоря несколько в недоумении :)
Условие (Найти(Автор, СокрЛП(глПользователь)) > 0) А простите разве Автор это строка? Это помоему реквизит типа Справочник.Пользователи и собстрвенно должно быть: Условие (Автор = глПользователь); Что собственно даст существенный прирос в скорости. |
|||
23
mgk2
05.03.13
✎
14:48
|
(21) ВыбратьЭлементыПоРеквизиту()
|
|||
24
Дядя Вова
05.03.13
✎
14:55
|
SELECT
Спр.ParentExt as [Контакты $Справочник.Контакты], Спр.ID as [Созвоны $Справочник.Созвоны], $Спр.Автор FROM $Справочник.Созвоны as Спр WHERE $Спр.ДатаС = :ВыбКонтра AND $Спр.Автор = :глПользователь"; Не? |
|||
25
Дядя Вова
05.03.13
✎
14:57
|
т.е.
WHERE $Спр.ДатаСозвона = :Д AND $Спр.Автор = :глПользователь"; |
|||
26
YaroslavStr
05.03.13
✎
15:00
|
Всем сразу скажу: писал это не я. Я только начал исправлять этот участок кода. Ибо он слишком тормозит работу программы при каждом включении.
|
|||
27
YaroslavStr
05.03.13
✎
15:01
|
(21) теоретически после сортировки, если следующий автор не тот, что ищем, можно прервать все циклы? я правильно понял?
|
|||
28
YaroslavStr
05.03.13
✎
15:02
|
(22) Да, а вот тут Вы правы - надо будет посмотреть и переделать эту проверку
|
|||
29
YaroslavStr
05.03.13
✎
15:03
|
(22) Автор - это реквизит справочника Созвоны.
|
|||
30
mgk2
05.03.13
✎
15:04
|
(27) цикл с включенным фильтром гораздо быстрее выполнтся чем в твоем коде.
|
|||
31
КонецЦикла
05.03.13
✎
15:10
|
(27) Ты уж определись что первично и чем больше можно отсечь данных.
Я бы отсекал по дате. Дат явно больше чем авторов. Выборка не будет упорядочена по авторам. Он может встретиться еще раз. Так что ничего прерывать не нужно. |
|||
32
YaroslavStr
05.03.13
✎
15:18
|
(31) Спасибо за столь дельный совет. Один из лучших как для новичков. :) Реально спасибо! Так и сделаю
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |