|
Запрос по регистру сведений больше миллиона записей за 13 сек - нормально? | ☑ | ||
---|---|---|---|---|
0
MaxisUssr
28.04.14
✎
14:11
|
Стоит постгре. Может это дюже медленно?
Появилась проблема в месте, где этот регистр используется (хотя там он и со связями, и с условиями на отбор и т.д.) - правильная расстановка связей проблему решает частично - все равно с условиями получаю 3-4 секунды на отбор определенных записей, что много. После этого решил проверить как тупо будет выводиться весь регистр без отбора - получил 13 секунд. Нормально или нужно настраивать СУБД/железки (хотя железки вроде не нагружены особо)? |
|||
1
ДенисЧ
28.04.14
✎
14:12
|
Профайлер что говорит на что время тратится?
|
|||
2
MaxisUssr
28.04.14
✎
14:14
|
(1)
Пока не долез до него - вот ищу сижу для постгре. |
|||
3
MaxisUssr
28.04.14
✎
14:23
|
Пока ставлю профайлер интересна просто общая статистика. Кол-во пользователей + СУБД + время выполнения запроса таблицы с миллионом записей и более
|
|||
4
Жан Пердежон
28.04.14
✎
14:27
|
(3) общей статистики нет и не будет, у всех случаи разные
|
|||
5
kumena
28.04.14
✎
14:30
|
наверное у каждого по своему, как настроено, либо быстро, либо безопасно.
|
|||
6
kumena
28.04.14
✎
14:32
|
>> как тупо будет выводиться весь регистр без отбора -
а зачем его весь выводить? время на вывод скорей всего и является самым затратным |
|||
7
MaxisUssr
28.04.14
✎
14:32
|
Понятно что у всех по-разному. Но если у 5 человек запрос проходит 1-2 секунды, а у меня 13 секунд - то это повод задуматься
|
|||
8
rsv
28.04.14
✎
14:32
|
(0) ???
|
|||
9
MaxisUssr
28.04.14
✎
14:33
|
(6)
Мне его весь выводить не нужно, но иногда нужно выводить большУю его часть. Вывод всего регистра - просто попутный ксперимент |
|||
10
Ненавижу 1С
гуру
28.04.14
✎
14:35
|
зачем выводить большУю часть?
пока задача слишком абстрактна может ты РС используешь вместо РН |
|||
11
dmpl
28.04.14
✎
14:35
|
(7) У всех по-разному с разными регистрами.
|
|||
12
rsv
28.04.14
✎
14:39
|
(8) Имха нужна какая либо админка на посгри где запросы запускать и прога типа скулева профайлера. Отловите запрос .... запустите в админке . Посмотрите когда наченется вывод данных .... сделать выводы между окончанием запроса и выводом данных.
|
|||
13
bolobol
28.04.14
✎
14:42
|
Шляпа. 13 секунд соединения могут работать, создание временных таблиц с индексами, да и то - вряд ли, а выборка ничего не делает - ссылки на индексы строит. Таких операций за секунду миллионы могут делаться.
|
|||
14
MaxisUssr
29.04.14
✎
12:10
|
(13)
Вот - уже мнение. Вообще еще после выполнения всех запросов и команд в 1С еще проходит очень много времени (и в это время не происходит "ПриВыводеСтроки" и т.п. - ни в один метод формы и модуля не заходится) прежде чем список будет выведен. |
|||
15
mikecool
29.04.14
✎
12:11
|
профилера под постгре нет
только если админ настроит логирование запросов в файл |
|||
16
MaxisUssr
29.04.14
✎
12:12
|
Даже когда видимость всех колонок кроме одной отрубил - список 12 тысяч строк тупит, грузится минуты 2. В "ПриВыводеСтроки" в самом конце попадаем, тратим менее секунды.
|
|||
17
mikecool
29.04.14
✎
12:13
|
(16) так там еще и привыводе строки прикручено?
|
|||
18
MaxisUssr
29.04.14
✎
12:14
|
(17)
Да, но на него с первого захода до последнего тратится менее секунды |
|||
19
Господин ПЖ
29.04.14
✎
12:15
|
а разве рс в грид весь вываливается... там какой-то select top Х был вроде
|
|||
20
MaxisUssr
29.04.14
✎
12:16
|
(19)
Это я про другой список речь веду. Список справочника. Возможно косвенная связь тормозов есть |
|||
21
MaxisUssr
29.04.14
✎
12:17
|
В замере производительности на все процедуры обновления отображения тратится в сумме полсекунды.
|
|||
22
Fragster
гуру
29.04.14
✎
12:18
|
зачем профайлер, когда есть технологический журнал?
|
|||
23
MaxisUssr
29.04.14
✎
12:37
|
Сервер с постгре - прохлаждается. Не загружен.
|
|||
24
DexterMorgan
29.04.14
✎
12:37
|
(0) запрос покажи, а так ни о чем
|
|||
25
MaxisUssr
29.04.14
✎
12:38
|
(24)
ВЫБРАТЬ * из РегистрСведений.ЗначенияСвойствОбъектов |
|||
26
DexterMorgan
29.04.14
✎
12:40
|
(25) а, я не понял, думал тебе тут надо оптимизировать =) "Появилась проблема в месте, где этот регистр используется (хотя там он и со связями, и с условиями на отбор и т.д.) "
|
|||
27
Chai Nic
29.04.14
✎
12:41
|
(25) Хм.. ну и чего вы хотите? Тянете из базы (с диска) мегебайты инфы, это же занимает время..
|
|||
28
DexterMorgan
29.04.14
✎
12:41
|
(25) просто имхо, время выполнения выборки из этого РС и твоего "проблемного запроса" никак не связано
|
|||
29
DexterMorgan
29.04.14
✎
12:42
|
проблемы скорее в индексах/соединениях/отборах
|
|||
30
MaxisUssr
29.04.14
✎
12:47
|
(26)
Ну это да - оптимизирую - при выносе во временные таблицы и т.п. немного выигрываю, но не сильно (1-2 сек.) (27) Понимаю, но в любом случае мне нужно взять 15 тысяч человек и присоединить к ним определенные свойства из регистра, как ни крутись - все равно выборка по регистру, даже с фильтрами, идет |
|||
31
Chai Nic
29.04.14
✎
12:48
|
(30) Давайте сюда ваш реальный запрос со всеми джойнами.. а то смотреть просто не на что
|
|||
32
bolobol
29.04.14
✎
12:49
|
Снести и заново установить сервер 1С. Доступность лицензий, кстати, может на сервер предприятия задуржку неадукватную давать.
Во всяком случае, когда формирование ОСВ в бух зависало на 20-40 минут, переустановка сервера 1С решала проблему. |
|||
33
kiruha
29.04.14
✎
12:55
|
(25)
ЗначенияСвойствОбъектов - неудачный механизм Точнее сделан для конфигураций в которых нет штатных Переносите инфо в другие регистры или реквизиты |
|||
34
kiruha
29.04.14
✎
12:55
|
Нет штатных прогов
|
|||
35
MaxisUssr
29.04.14
✎
13:00
|
(31)
Сейчас выложу, там простыня с 10 временными таблицами (32) Интересный совет |
|||
36
MaxisUssr
29.04.14
✎
13:06
|
(33)
Согласен, пока на это и настроен, но это обход проблемы какой-то, а не ее решение ВЫБРАТЬ ВложенныйЗапрос.Объект, ВложенныйЗапрос.Значение ПОМЕСТИТЬ вт_SMS ИЗ (ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект КАК Объект, МАКСИМУМ(ЗначенияСвойствОбъектов.Значение) КАК Значение ИЗ Константы КАК Константы ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ПО Константы.СвойствоSMS = ЗначенияСвойствОбъектов.Свойство СГРУППИРОВАТЬ ПО ЗначенияСвойствОбъектов.Объект) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Объект, ВложенныйЗапрос.Город ПОМЕСТИТЬ вт_Город ИЗ (ВЫБРАТЬ КонтактнаяИнформация.Объект КАК Объект, КонтактнаяИнформация.Поле4 КАК Город ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресФизЛица)) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Сотрудник.Физлицо, ЛОЖЬ КАК Свободен ПОМЕСТИТЬ вт_Занятость ИЗ (ВЫБРАТЬ ПрогнозВыходовСотрудников.Сотрудник КАК Сотрудник ИЗ РегистрСведений.ПрогнозВыходовСотрудников КАК ПрогнозВыходовСотрудников ГДЕ ПрогнозВыходовСотрудников.Период >= НАЧАЛОПЕРИОДА(&ТекДата, ДЕНЬ) И ПрогнозВыходовСотрудников.Период < ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ТекДата, ДЕНЬ), ДЕНЬ, 3)) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Сотрудник.Физлицо ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Ссылка ПОМЕСТИТЬ вт_ЗаявкиСписокДолжностей ИЗ (ВЫБРАТЬ ЗаявкиКандидатов.Ссылка КАК Ссылка ИЗ Справочник.ЗаявкиКандидатов КАК ЗаявкиКандидатов ГДЕ ВЫБОР КОГДА &ЕстьСписокДолжностей ТОГДА ЕСТЬNULL(ЗаявкиКандидатов.Ссылка.Должность, ЗНАЧЕНИЕ(справочник.должности.пустаяссылка)) В (&СписокДолжностей) ИНАЧЕ ИСТИНА КОНЕЦ СГРУППИРОВАТЬ ПО ЗаявкиКандидатов.Ссылка ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗаявкиКандидатовтчДолжности.Ссылка ИЗ Справочник.ЗаявкиКандидатов.тчДолжности КАК ЗаявкиКандидатовтчДолжности ГДЕ ВЫБОР КОГДА &ЕстьСписокДолжностей ТОГДА ЕСТЬNULL(ЗаявкиКандидатовтчДолжности.Должность, ЗНАЧЕНИЕ(справочник.должности.пустаяссылка)) В (&СписокДолжностей) ИНАЧЕ ИСТИНА КОНЕЦ СГРУППИРОВАТЬ ПО ЗаявкиКандидатовтчДолжности.Ссылка) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Объект, ВложенныйЗапрос.Медкнижка ПОМЕСТИТЬ вт_Медкнижка ИЗ (ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект КАК Объект, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМедкнижкаДействительна И ЗначенияСвойствОбъектов.Значение = ИСТИНА ТОГДА 2 ИНАЧЕ ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМедкнижкаПросрочена И ЗначенияСвойствОбъектов.Значение = ИСТИНА ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК Медкнижка ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов, Константы КАК Константы ГДЕ (ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМедкнижкаДействительна ИЛИ ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМедкнижкаПросрочена) СГРУППИРОВАТЬ ПО ЗначенияСвойствОбъектов.Объект) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.СотрудникФизлицо ПОМЕСТИТЬ вт_ПоДолжности ИЗ (ВЫБРАТЬ ЧасыРаботыПоОбъектам.Сотрудник.Физлицо КАК СотрудникФизлицо ИЗ РегистрНакопления.ЧасыРаботыПоОбъектам КАК ЧасыРаботыПоОбъектам ГДЕ ВЫБОР КОГДА &Должность <> ЗНАЧЕНИЕ(справочник.должности.пустаяссылка) ТОГДА ЧасыРаботыПоОбъектам.Должность = &Должность ИНАЧЕ ЛОЖЬ КОНЕЦ И ЧасыРаботыПоОбъектам.Явка СГРУППИРОВАТЬ ПО ЧасыРаботыПоОбъектам.Сотрудник.Физлицо) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.СотрудникФизлицо ПОМЕСТИТЬ вт_ПоОбъекту ИЗ (ВЫБРАТЬ ЧасыРаботыПоОбъектам.Сотрудник.Физлицо КАК СотрудникФизлицо ИЗ РегистрНакопления.ЧасыРаботыПоОбъектам КАК ЧасыРаботыПоОбъектам ГДЕ ВЫБОР КОГДА &ЕстьОбъекты ТОГДА ЧасыРаботыПоОбъектам.Объект В (&Объекты) ИНАЧЕ ЛОЖЬ КОНЕЦ И ЧасыРаботыПоОбъектам.Явка СГРУППИРОВАТЬ ПО ЧасыРаботыПоОбъектам.Сотрудник.Физлицо) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.ДнейПрогуляно, ВложенныйЗапрос.Физлицо ПОМЕСТИТЬ вт_Прогулы ИЗ (ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ вз.Период) КАК ДнейПрогуляно, вз.Сотрудник.Физлицо КАК Физлицо ИЗ (ВЫБРАТЬ ПрогнозВыходовСотрудников.Сотрудник КАК Сотрудник, ПрогнозВыходовСотрудников.Период КАК Период, СУММА(ЕСТЬNULL(ЧасыРаботыПоОбъектам.Часов, 0)) КАК ЧасыЗаДень, ПрогнозВыходовСотрудников.Невыход КАК Невыход ИЗ РегистрСведений.ПрогнозВыходовСотрудников КАК ПрогнозВыходовСотрудников ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЧасыРаботыПоОбъектам КАК ЧасыРаботыПоОбъектам ПО ПрогнозВыходовСотрудников.Период = ЧасыРаботыПоОбъектам.Период И ПрогнозВыходовСотрудников.Сотрудник = ЧасыРаботыПоОбъектам.Сотрудник И ПрогнозВыходовСотрудников.Объект = ЧасыРаботыПоОбъектам.Объект И ПрогнозВыходовСотрудников.Должность = ЧасыРаботыПоОбъектам.Должность И (ЧасыРаботыПоОбъектам.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(справочник.классификаториспользованиярабочеговремени.Работа)) И ((НЕ ПрогнозВыходовСотрудников.Невыход)) СГРУППИРОВАТЬ ПО ПрогнозВыходовСотрудников.Период, ПрогнозВыходовСотрудников.Сотрудник, ПрогнозВыходовСотрудников.Невыход) КАК вз ГДЕ вз.ЧасыЗаДень = 0 И вз.Период < &ПериодНачалаУчетаПрогулов И вз.Невыход СГРУППИРОВАТЬ ПО вз.Сотрудник.Физлицо) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.СотрудникФизлицо, ВложенныйЗапрос.Период ПОМЕСТИТЬ вт_Распределения ИЗ (ВЫБРАТЬ ПериодыРаспределенияСрезПервых.Сотрудник.Физлицо КАК СотрудникФизлицо, МИНИМУМ(ПериодыРаспределенияСрезПервых.Период) КАК Период ИЗ РегистрСведений.ПериодыРаспределения.СрезПервых КАК ПериодыРаспределенияСрезПервых СГРУППИРОВАТЬ ПО ПериодыРаспределенияСрезПервых.Сотрудник.Физлицо) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Объект, ВложенныйЗапрос.Значение, ВложенныйЗапрос.Ветка, ВложенныйЗапрос.Вахта, ВложенныйЗапрос.Постоянка, ВложенныйЗапрос.Подработка ПОМЕСТИТЬ вт_СвойстваФизЛица ИЗ (ВЫБРАТЬ ЗначенияСвойствОбъектов.Объект КАК Объект, МАКСИМУМ(ЗначенияСвойствОбъектов.Значение) КАК Значение, ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМетро И &Ветка <> ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка) ТОГДА СтанцииИВеткиМетро.Ветка ИНАЧЕ NULL КОНЕЦ КАК Ветка, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаВахтаФЛ ТОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) ИНАЧЕ NULL КОНЕЦ) КАК Вахта, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаПостояннаяФЛ ТОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) ИНАЧЕ NULL КОНЕЦ) КАК Постоянка, МАКСИМУМ(ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаПодработкаФЛ ТОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) ИНАЧЕ NULL КОНЕЦ) КАК Подработка ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтанцииИВеткиМетро КАК СтанцииИВеткиМетро ПО ЗначенияСвойствОбъектов.Значение = СтанцииИВеткиМетро.Станция ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константы КАК Константы ПО (ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМетро ИЛИ ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоГород ИЛИ ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаВахтаФЛ ИЛИ ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаПостояннаяФЛ ИЛИ ЗначенияСвойствОбъектов.Свойство = Константы.ГруппаПодработкаФЛ) СГРУППИРОВАТЬ ПО ЗначенияСвойствОбъектов.Объект, ВЫБОР КОГДА ЗначенияСвойствОбъектов.Свойство = Константы.СвойствоМетро И &Ветка <> ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка) ТОГДА СтанцииИВеткиМетро.Ветка ИНАЧЕ NULL КОНЕЦ) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВложенныйЗапрос.Объект, ВложенныйЗапрос.Представление, ВложенныйЗапрос.Представление1, ВложенныйЗапрос.Префикс, ВложенныйЗапрос.Префикс1 ПОМЕСТИТЬ вт_Телефон ИЗ (ВЫБРАТЬ вз_Объединение.Объект КАК Объект, МАКСИМУМ(вз_Объединение.Представление) КАК Представление, МАКСИМУМ(вз_Объединение.Представление1) КАК Представление1, МАКСИМУМ(вз_Объединение.Префикс) КАК Префикс, МАКСИМУМ(вз_Объединение.Префикс1) КАК Префикс1 ИЗ (ВЫБРАТЬ КонтактнаяИнформация.Объект КАК Объект, ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)) КАК Представление, "" КАК Представление1, КонтактнаяИнформация.Поле2 КАК Префикс, "" КАК Префикс1 ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(перечисление.типыконтактнойинформации.телефон) И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(справочник.ВидыКонтактнойИнформации.КонтактнТелефонКандидата) СГРУППИРОВАТЬ ПО КонтактнаяИнформация.Объект, ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)), КонтактнаяИнформация.Поле2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ КонтактнаяИнформация.Объект, "", ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)), "", КонтактнаяИнформация.Поле2 ИЗ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ГДЕ КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(перечисление.типыконтактнойинформации.телефон) И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(справочник.ВидыКонтактнойИнформации.ТелефонФизЛица) СГРУППИРОВАТЬ ПО КонтактнаяИнформация.Объект, ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)), КонтактнаяИнформация.Поле2) КАК вз_Объединение СГРУППИРОВАТЬ ПО вз_Объединение.Объект) КАК ВложенныйЗапрос ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СотрудникиОрганизаций.Ссылка, МАКСИМУМ(ВЫБОР КОГДА ПрогнозВыходовСотрудников.Период ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ) КАК ЗанятВВыбранныеДня ПОМЕСТИТЬ вт_СвободныВДни ИЗ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПрогнозВыходовСотрудников КАК ПрогнозВыходовСотрудников ПО (ПрогнозВыходовСотрудников.Сотрудник = СотрудникиОрганизаций.Ссылка) И (ВЫБОР КОГДА ПрогнозВыходовСотрудников.Период В (&МассивСвободныхДней) ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ) СГРУППИРОВАТЬ ПО СотрудникиОрганизаций.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ФизическиеЛица.Ссылка ПОМЕСТИТЬ вт_ПоМестуВвода ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Константы.СвойствоМестоВводаПоУмолчанию.Ссылка КАК Свойство ИЗ Константы КАК Константы ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ СоответствиеИменКомпьютеровАдресам.Свойство ИЗ РегистрСведений.СоответствиеИменКомпьютеровАдресам КАК СоответствиеИменКомпьютеровАдресам) КАК вз_МассивСвойств ПО ЗначенияСвойствОбъектов.Свойство = вз_МассивСвойств.Свойство ПО ФизическиеЛица.Ссылка = ЗначенияСвойствОбъектов.Объект И (ЗначенияСвойствОбъектов.Значение = ИСТИНА) ГДЕ вз_МассивСвойств.Свойство = &МестоВвода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КомментарииКандидатов.ФизЛицо ПОМЕСТИТЬ вт_ПоКомментарию ИЗ РегистрСведений.КомментарииКандидатов КАК КомментарииКандидатов ГДЕ ВЫБОР КОГДА &ПоКомментарию <> "" ТОГДА КомментарииКандидатов.Комментарий ПОДОБНО "%" + &ПоКомментарию + "%" ИНАЧЕ ИСТИНА КОНЕЦ СГРУППИРОВАТЬ ПО КомментарииКандидатов.ФизЛицо ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СправочникЗаявкиКандидатов.Ссылка КАК Ссылка, СправочникЗаявкиКандидатов.ПометкаУдаления, СправочникЗаявкиКандидатов.Предопределенный, СправочникЗаявкиКандидатов.Код, СправочникЗаявкиКандидатов.Наименование, СправочникЗаявкиКандидатов.ФизЛицо, СправочникЗаявкиКандидатов.Состояние, ВЫБОР КОГДА СправочникЗаявкиКандидатов.Важность = ЗНАЧЕНИЕ(Перечисление.Важность.Высокая) ТОГДА 0 КОГДА СправочникЗаявкиКандидатов.Важность = ЗНАЧЕНИЕ(Перечисление.Важность.Низкая) ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК ИндексВажности, СправочникЗаявкиКандидатов.Важность, СправочникЗаявкиКандидатов.Состояние КАК СтатусЗаявки, СправочникЗаявкиКандидатов.Закрыта, СправочникЗаявкиКандидатов.РезультатЗакрытия, СправочникЗаявкиКандидатов.ГруппаЗаявок, СправочникЗаявкиКандидатов.ДатаОткрытия, СправочникЗаявкиКандидатов.ИсточникИнформации, СправочникЗаявкиКандидатов.Подразделение, СправочникЗаявкиКандидатов.Должность, СправочникЗаявкиКандидатов.Организация, СправочникЗаявкиКандидатов.Ответственный, СправочникЗаявкиКандидатов.ФизЛицо.Наименование КАК ФИО, СправочникЗаявкиКандидатов.ФизЛицо.Пол КАК Пол, СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения КАК ДатаРожденияОт, СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения КАК ДатаРожденияДо, вт_Город.Город КАК Город, ВЫБОР КОГДА вт_СвойстваФизЛица.Значение ССЫЛКА Справочник.ЗначенияСвойствОбъектов ТОГДА вт_СвойстваФизЛица.Значение ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка) КОНЕЦ КАК Метро, вт_Медкнижка.Медкнижка, ВЫБОР КОГДА вт_Распределения.Период ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ вт_Распределения.Период КОНЕЦ КАК Результат, РейтингНегативаСрезПоследних.Рейтинг, ЕСТЬNULL(вт_Занятость.Свободен, ИСТИНА) КАК Свободен, ЕСТЬNULL(вт_Телефон.Представление, "") + ВЫБОР КОГДА ЕСТЬNULL(вт_Телефон.Представление1, "") <> "" ТОГДА "; " ИНАЧЕ "" КОНЕЦ + ЕСТЬNULL(вт_Телефон.Представление1, "") КАК Телефон, ВЫБОР КОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 >= 0 И СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА ВЫБОР КОГДА ДЕНЬГОДА(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения) > ДЕНЬГОДА(&ТекДата) ТОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 ИНАЧЕ РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК ПолныхЛет, ВЫБОР КОГДА ЕСТЬNULL(ВзаиморасчетыСРаботникамиОстатки.СуммаУпрОстаток, 0) >= 0 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ПолныйРасчет, ЕСТЬNULL(ГражданствоФизЛицСрезПоследних.Страна, ЗНАЧЕНИЕ(справочник.классификаторстранмира.пустаяссылка)) КАК Гражданство, СправочникЗаявкиКандидатов.Вакансия, СправочникЗаявкиКандидатов.Подразделение КАК Подразделение1, СправочникЗаявкиКандидатов.ОписаниеОбъекта, СправочникЗаявкиКандидатов.ПредставлениеДолжностей, ВЫБОР КОГДА РейтингНегативаСрезПоследних.Рейтинг ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ПроверенСБ, вт_СвойстваФизЛица.Ветка КАК Ветка, ЕСТЬNULL(вт_Прогулы.ДнейПрогуляно, 0) КАК Прогулов, вт_СвойстваФизЛица.Вахта, вт_СвойстваФизЛица.Постоянка, вт_СвойстваФизЛица.Подработка, КомментарииКандидатовСрезПоследних.Комментарий, ЦифровыеКодыФизЛиц.Код КАК КодSMS, РейтингНегативаСрезПоследних.НеАктивен, РейтингНегативаСрезПоследних.ОжидаетИзменениеАктивности ИЗ Справочник.ЗаявкиКандидатов КАК СправочникЗаявкиКандидатов ЛЕВОЕ СОЕДИНЕНИЕ вт_СвойстваФизЛица КАК вт_СвойстваФизЛица ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_СвойстваФизЛица.Объект ЛЕВОЕ СОЕДИНЕНИЕ вт_Телефон КАК вт_Телефон ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Телефон.Объект ЛЕВОЕ СОЕДИНЕНИЕ вт_Медкнижка КАК вт_Медкнижка ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Медкнижка.Объект ЛЕВОЕ СОЕДИНЕНИЕ вт_Город КАК вт_Город ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Город.Объект ЛЕВОЕ СОЕДИНЕНИЕ вт_Распределения КАК вт_Распределения ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Распределения.СотрудникФизлицо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РейтингНегатива.СрезПоследних КАК РейтингНегативаСрезПоследних ПО СправочникЗаявкиКандидатов.ФизЛицо = РейтингНегативаСрезПоследних.ФизЛицо ЛЕВОЕ СОЕДИНЕНИЕ вт_ПоОбъекту КАК вт_ПоОбъекту ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_ПоОбъекту.СотрудникФизлицо ЛЕВОЕ СОЕДИНЕНИЕ вт_ПоДолжности КАК вт_ПоДолжности ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_ПоДолжности.СотрудникФизлицо ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСРаботниками.Остатки(&ТекДата, ) КАК ВзаиморасчетыСРаботникамиОстатки ПО СправочникЗаявкиКандидатов.ФизЛицо = ВзаиморасчетыСРаботникамиОстатки.Физлицо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизЛиц.СрезПоследних КАК ГражданствоФизЛицСрезПоследних ПО СправочникЗаявкиКандидатов.ФизЛицо = ГражданствоФизЛицСрезПоследних.ФизЛицо ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_ЗаявкиСписокДолжностей КАК вт_ЗаявкиСписокДолжностей ПО СправочникЗаявкиКандидатов.Ссылка = вт_ЗаявкиСписокДолжностей.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ вт_Прогулы КАК вт_Прогулы ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Прогулы.Физлицо ЛЕВОЕ СОЕДИНЕНИЕ вт_SMS КАК вт_SMS ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_SMS.Объект ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КомментарииКандидатов.СрезПоследних КАК КомментарииКандидатовСрезПоследних ПО СправочникЗаявкиКандидатов.ФизЛицо = КомментарииКандидатовСрезПоследних.ФизЛицо ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦифровыеКодыФизЛиц КАК ЦифровыеКодыФизЛиц ПО СправочникЗаявкиКандидатов.ФизЛицо = ЦифровыеКодыФизЛиц.ФизЛицо ЛЕВОЕ СОЕДИНЕНИЕ вт_Занятость КАК вт_Занятость ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_Занятость.СотрудникФизлицо ЛЕВОЕ СОЕДИНЕНИЕ вт_СвободныВДни КАК вт_СвободныВДни ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_СвободныВДни.Ссылка.Физлицо ЛЕВОЕ СОЕДИНЕНИЕ вт_ПоМестуВвода КАК вт_ПоМестуВвода ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_ПоМестуВвода.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ вт_ПоКомментарию КАК вт_ПоКомментарию ПО СправочникЗаявкиКандидатов.ФизЛицо = вт_ПоКомментарию.ФизЛицо, Константы КАК Константы ГДЕ ВЫБОР КОГДА &РежимСБ ТОГДА ИСТИНА ИНАЧЕ РейтингНегативаСрезПоследних.Рейтинг ЕСТЬ NULL ИЛИ РейтингНегативаСрезПоследних.Рейтинг < 2 КОНЕЦ И ВЫБОР КОГДА &ЕстьОбъекты ТОГДА (НЕ вт_ПоОбъекту.СотрудникФизлицо ЕСТЬ NULL ) ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &Должность <> ЗНАЧЕНИЕ(справочник.должности.пустаяссылка) ТОГДА (НЕ вт_ПоДолжности.СотрудникФизлицо ЕСТЬ NULL ) ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &ВыплатыЗакрыты ТОГДА ЕСТЬNULL(ВзаиморасчетыСРаботникамиОстатки.СуммаУпрОстаток, 0) <= 0 ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &ПоSMS ТОГДА ЕСТЬNULL(вт_SMS.Значение, ЛОЖЬ) = ИСТИНА ИНАЧЕ ИСТИНА КОНЕЦ И СправочникЗаявкиКандидатов.ДатаОткрытия >= &ДатаОткрытияОт И ВЫБОР КОГДА &ДатаОткрытияДо <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА СправочникЗаявкиКандидатов.ДатаОткрытия <= &ДатаОткрытияДо ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &Пол <> ЗНАЧЕНИЕ(Перечисление.ПолФизическихЛиц.ПустаяСсылка) ТОГДА СправочникЗаявкиКандидатов.ФизЛицо.Пол = &Пол ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 >= 0 И СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 ИНАЧЕ 0 КОНЕЦ >= &ЛетОт И ВЫБОР КОГДА &ЛетДо = 0 ТОГДА ИСТИНА ИНАЧЕ ВЫБОР КОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 >= 0 И СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1) ТОГДА РАЗНОСТЬДАТ(СправочникЗаявкиКандидатов.ФизЛицо.ДатаРождения, &ТекДата, ГОД) - 1 ИНАЧЕ 0 КОНЕЦ <= &ЛетДо КОНЕЦ И ВЫБОР КОГДА &ЕстьСписокМетро ТОГДА ВЫБОР КОГДА вт_СвойстваФизЛица.Значение ССЫЛКА Справочник.ЗначенияСвойствОбъектов ТОГДА вт_СвойстваФизЛица.Значение ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ЗначенияСвойствОбъектов.ПустаяСсылка) КОНЕЦ В (&СписокМетро) ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &УчетПрогулов ТОГДА ЕСТЬNULL(вт_Прогулы.ДнейПрогуляно, 0) < &ПоПрогулам ИНАЧЕ ИСТИНА КОНЕЦ И ВЫБОР КОГДА &Вахта = ИСТИНА ТОГДА вт_СвойстваФизЛица.Вахта = ИСТИНА ИНАЧЕ ИСТИНА КОНЕЦ |
|||
37
Chai Nic
29.04.14
✎
13:23
|
Если выполнять запрос по частям, тормозит какая часть?
PS Нафига вот эти ВложенныйЗапрос? |
|||
38
Chai Nic
29.04.14
✎
13:25
|
Еще попробуй указывать "ИНДЕКСИРОВАТЬ ПО" во временных таблицах
|
|||
39
MaxisUssr
29.04.14
✎
13:25
|
(37)
Удаляя куски - получаем по 3 секунды на вт_СвойстваФизЛица, остальное 0-1 секунды. по поводу ВложенныйЗапрос - вроде особых сложенностей нет. На скуле нормально работает, постгре не переваривает? |
|||
40
MaxisUssr
29.04.14
✎
13:27
|
(38)
Понял, но вот прочти (14) и (16). Даже просто при изменении набора видимых колонок минуты 1-2 проходит. На запрос приходится в сумме около 7-8 сек. |
|||
41
Avganec
29.04.14
✎
13:28
|
(25) выразить делай, у тебя там запрос еще строится к куче таблиц
|
|||
42
MaxisUssr
29.04.14
✎
13:31
|
В списке формы стоит отбор "Ссылка - в списке [результат из запроса]"
|
|||
43
MaxisUssr
29.04.14
✎
13:35
|
Вроде нашел затык! Короче, ребята, вообще код состоит из двух блоков:
1. Выполняем запрос, складываем результат в список (ссылки). 2. Накладываем отбор на список формы "Ссылка В списке [список]". Вот если п.2 отключить то все проходит за 7 секунд. Если п.2 включаем и даже в п.1. пихаем простейший запрос (ВЫБРАТЬ * из Справочник.ААА) то тупит сильно, по минуте. Также если делаем сортировку в списке со включенным отбором- тоже тупит |
|||
44
Chai Nic
29.04.14
✎
13:36
|
Вот так кстати делать не надо:
--- ГДЕ ВЫБОР КОГДА&РежимСБ ТОГДА ИСТИНА ИНАЧЕ РейтингНегативаСрезПоследних.Рейтинг ЕСТЬ NULL ИЛИ РейтингНегативаСрезПоследних.Рейтинг < 2 КОНЕЦ --- А надо делать так: --- ГДЕ &РежимСБ ИЛИ (РейтингНегативаСрезПоследних.Рейтинг ЕСТЬ NULL ) ИЛИ (РейтингНегативаСрезПоследних.Рейтинг < 2) --- |
|||
45
MaxisUssr
29.04.14
✎
13:41
|
Тогда вопрос - как, сохраняя штатный список, вывести только отобранные элементы, при том, что этих элементов - тысяч 6 при всем списке 13-15 тыщ? Отбор "В списке" как я понял очень тупит. Но а как по-другому, только вместа списка писать свою ТЧ и в ней работать? Но это же коряво.
|
|||
46
Chai Nic
29.04.14
✎
13:45
|
(45) А если попробовать внутреннее соединение с этим списком сделать (в виде временной таблицы)?
|
|||
47
MaxisUssr
29.04.14
✎
13:49
|
(46)
Не, я не о запросе. См (43). Теперь уже запрос на втором плане, на первом - как сделать чтоб отбор "В списке" для элемента формы "СправочникСписок" не тупил при больших списках значений отбора (10 тыщ). |
|||
48
kiruha
29.04.14
✎
13:57
|
(36)
Если у Вас штатный регистр ЗначенияСвойствОбъектов там основной инднекс Объект или Свойство - нужно проводить индексирование Правильно например так РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект ГДЕ ССЫЛКА Справочник.Сотрудники И ЗначенияСвойствОбъектов.Свойство=&Свойство или што там у вас И не правильно РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Свойство=&Свойство |
|||
49
Chai Nic
29.04.14
✎
13:58
|
(47) Используйте не форму списка с отбором, а табличное поле с таблицей значений, формируемой запросом при открытии или обновлении.
|
|||
50
MaxisUssr
29.04.14
✎
14:02
|
(49)
Понятно, это конечно выход, вот гемор-то. Другие пути есть? (я тоже кроме своего самопального списка, не связанного со справочником, не вижу). Кстати еще минус - сортировка в "своем" списке потеряется. |
|||
51
MaxisUssr
29.04.14
✎
14:04
|
И обновления там раз в минуту наверное - что-то меняют постоянно (особенно комментарии) - это же список людей, в котором активно идет работа
|
|||
52
MaxisUssr
29.04.14
✎
14:05
|
с (51) справится можно обновлением отдельных часто изменяемых колонок
|
|||
53
MaxisUssr
29.04.14
✎
14:08
|
v8: Долго прорисовывается(отображается, выводится) список справочника
Вот у человека схожая проблема. Видимо один путь - сносить стандартный список и писать свою таблицу значений. |
|||
54
dmpl
29.04.14
✎
15:06
|
(47) А зачем так делать? В чем тайный смысл?
|
|||
55
dmpl
29.04.14
✎
15:07
|
(51) И все они на экране видны одновременно?
|
|||
56
MaxisUssr
29.04.14
✎
15:15
|
(54), (55)
Конечно не все. Намекаешь на то, что можно реализовать механизм "динамического списка" (при прокрутке списка мы будем подргужать в список для отбора доп. "порцию" данных, а кусок данных с начала убирать)? |
|||
57
dmpl
29.04.14
✎
15:21
|
(56) Зачем его реализовывать? Он есть в УФ.
Но вообще неясно, зачем список прокручивать? Особенно при таком количестве строк... P.S. Вообще, часть условий можно попробовать реализовать реквизитом справочника "ОтображатьВСписке". |
|||
58
MaxisUssr
29.04.14
✎
15:25
|
(57)
Ну вот хотят юзеры прокручивать его (там список заявок кандидатов). Вбивать в быстрый поиск одно ФИО, затем другое, третье, оставляют комментарии напротив каждого из них, через правую кнопку звонят по номерам физлиц через SIP-телефонию (Все это уже давно работает - просто сейчас база разрослась). УФ не подходит - т.к. запрос очень-очень большой, очень много доп. данных (см. 36). УФ была, затем из-за тормозов перешли как раз на обычный список. Про "ОтображатьВСписке" - не понял. |
|||
59
dmpl
29.04.14
✎
15:36
|
(58) 1. У динамического списка можно попробовать отключить галочку в настройках запроса "Динамическое считывание данных". При установленной галочке сложные запросы действительно вызывают тормоза.
2. Реквизит ОтображатьВСписке - и по нему делать отбор. Часть условий можно повесить на этот реквизит, вместо того чтобы каждый раз их проверять запросом. |
|||
60
dmpl
29.04.14
✎
16:07
|
Кстати, сейчас проверил - бросил на форму СправочникСписок, в справочнике около 200 тыс. элементов, сделал отбор из 10 тыс. записей. В файловом варианте (локальном) - ничо не тормозит. По сети - подтормаживает на полсекунды где-то периодически. В клиент-серверном - регулярно подтормаживает на пару секунд при прокрутке (MS SQL), в это время сетевой трафик подскакивает - передается где-то около 1 Мб.
Ты точно выбираешь именно РАЗЛИЧНЫЕ ссылки, на не по несколько ссылок на каждое физ.лицо? |
|||
61
MaxisUssr
29.04.14
✎
16:11
|
(60)
Точно. У меня постгре, а не скуль. И подвисания не 1-2 сек а по полминуты-минута. В данный момент делаю ТЗ вместо списка т.к. намучился уже и пользователи вечно недовольны этим списком. |
|||
62
dmpl
29.04.14
✎
16:14
|
(61) Почему бы не отображать список без отбора, просто ненужных раскрашивать серым?
|
|||
63
MaxisUssr
29.04.14
✎
16:16
|
(62)
Для меня хорошо бы (хоть и не красиво). Для юзеров неудобно будет - там в форме еще и выделение строк идет, и по выделенным строкам доп. действия на доп. закладках. |
|||
64
dmpl
29.04.14
✎
16:22
|
(63) Ну, это можно сделать хоть при следующем обновлении конфигурации, все меньше неудобства, чем с постоянными подвисаниями. А там, глядишь, и втянутся :) Тем более что некоторых особо ненужных можно отсечь описанным выше отбором по реквизиту с типом Булево.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |