|
Выгрузить характеристики запросом | ☑ | ||
---|---|---|---|---|
0
camojiet
19.04.13
✎
10:43
|
Есть необходимость выгрузить характеристики во Временную таблицу в запросе.
Тоесть есть регистр сведений Справочник Параметр Значение Необходимо получить таблицу Справочник Параметр1 Параметр2 Параметр3 и т.д. Я подсмотрел как СКД вытаскивает характеристики ВЫБРАТЬ РАЗРЕШЕННЫЕ CW_Грузоперевозки.Ссылка КАК Ссылка, ЕСТЬNULL(CW_Характеристики.Значение, &ПустаяДата) КАК Дата1, ЕСТЬNULL(CW_Характеристики1.Значение, НЕОПРЕДЕЛЕНО) КАК Параметр1 ИЗ Справочник.Справочник КАК Справочник ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Характеристики КАК Характеристики ПО (Характеристики.Справочник = Справочник.Ссылка) И (Характеристики.Параметр = &П_Дата1) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Характеристики КАК Характеристики1 ПО (Характеристики1.Справочник = Справочник.Ссылка) И (Характеристики.Параметр = &П_Параметр1) Выяснилось что это в примерно в 5 раз быстрее чем: ВЫБРАТЬ Характеристики.Ссылка МАКСИМУМ(ВЫБОР КОГДА Характеристики.Параметр = &П_Дата1 ТОГДА Характеристики.ЗначениеФакт ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ) КАК Дата1, МАКСИМУМ(ВЫБОР КОГДА Характеристики.Параметр = &П_Параметр1 ТОГДА Характеристики.Значение ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ) КАК Параметр1 ИЗ Справочник.CW_Грузоперевозки.ПараметрыГрузоперевозки КАК CW_ГрузоперевозкиПараметрыГрузоперевозки ГДЕ CW_ГрузоперевозкиПараметрыГрузоперевозки.Ссылка.ПометкаУдаления = ЛОЖЬ СГРУППИРОВАТЬ ПО CW_ГрузоперевозкиПараметрыГрузоперевозки.Ссылка Может у кого-нибудь есть рецепт по наиболее быстрому формированию такой таблицы? Ну или какие-нибудь соображения и поправки? |
|||
1
camojiet
19.04.13
✎
10:44
|
Прошу прощения за синтаксические ошибки правил имена объектов чтобы сохранить общность картины и не доделал (недосмотрел). Важна сама суть.
|
|||
2
camojiet
19.04.13
✎
10:51
|
Так прошу прощения, кажется я нашёл себе почву для раздумий.
|
|||
3
Wobland
19.04.13
✎
10:52
|
обращайся, всегда рады
|
|||
4
camojiet
19.04.13
✎
11:14
|
Спасибо =)
Занимаюсь программой уже несколько месяцев и только что обнаружил что данные в программе дублируются в табличной части справочника и в РС. 0_o Попробовал фокус со сверткой таблицы РС и всё равно левое соединение выигрывает в 2-3 раза по времени ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка, МАКСИМУМ(ВЫБОР КОГДА CW_ХарактеристикиГрузоперевозок.Параметр = &ВыгруженВПорту ТОГДА CW_ХарактеристикиГрузоперевозок.ЗначениеФакт ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ) КАК ВыгруженВПорту, МАКСИМУМ(ВЫБОР КОГДА CW_ХарактеристикиГрузоперевозок.Параметр = &СтанцияОтправления ТОГДА CW_ХарактеристикиГрузоперевозок.Значение ИНАЧЕ НЕОПРЕДЕЛЕНО КОНЕЦ) КАК СтанцияОтправления ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок СГРУППИРОВАТЬ ПО CW_ХарактеристикиГрузоперевозок.Грузоперевозка Можно ли обмануть судьбу? |
|||
5
Wobland
19.04.13
✎
11:17
|
>дублируются в табличной части справочника и в РС
не приходила в голову мысль, что на форме справочника показывается тот же самый РС? |
|||
6
camojiet
19.04.13
✎
11:18
|
Я пользуюсь консолью запросов когда изучаю структуру программы.
|
|||
7
Wobland
19.04.13
✎
11:19
|
(6) уболтал, дублируются ;)
|
|||
8
camojiet
22.04.13
✎
03:08
|
Ни у кого нет каких нибудь альтеративных идей по этому поводу? Я замерю и отпишусь о результатах.
|
|||
9
camojiet
22.04.13
✎
08:14
|
Появился такой вариант:
ВЫБРАТЬ CW_Грузоперевозки.Ссылка, Автовывоз.ЗначениеФакт КАК АвтовывозСТерминала, АгентОтправитель.Значение КАК АгентОтправитель, АгентПоПередаче.Значение КАК АгентПоПередаче, ВыгруженВПорту.ЗначениеФакт КАК ВыгруженВПорту, Коносамент.Значение КАК Коносамент, Отгружен.ЗначениеФакт КАК Отгружен, ПереданПорожним.ЗначениеФакт КАК ПереданПорожним, СтанцияНазначения.Значение КАК СтанцияНазначения, СтанцияОтправления.Значение КАК СтанцияОтправления ИЗ Справочник.CW_Грузоперевозки КАК CW_Грузоперевозки ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.ЗначениеФакт КАК ЗначениеФакт ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &АвтовывозСТерминала) КАК Автовывоз ПО CW_Грузоперевозки.Ссылка = Автовывоз.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК Значение ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &АгентОтправитель) КАК АгентОтправитель ПО CW_Грузоперевозки.Ссылка = АгентОтправитель.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК Значение ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &АгентПоПередаче) КАК АгентПоПередаче ПО CW_Грузоперевозки.Ссылка = АгентПоПередаче.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.ЗначениеФакт КАК ЗначениеФакт ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &ВыгруженВПорту) КАК ВыгруженВПорту ПО CW_Грузоперевозки.Ссылка = ВыгруженВПорту.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК Значение ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &Коносамент) КАК Коносамент ПО CW_Грузоперевозки.Ссылка = Коносамент.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.ЗначениеФакт КАК ЗначениеФакт ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &Отгружен) КАК Отгружен ПО CW_Грузоперевозки.Ссылка = Отгружен.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.ЗначениеФакт КАК ЗначениеФакт ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &ПереданПорожним) КАК ПереданПорожним ПО CW_Грузоперевозки.Ссылка = ПереданПорожним.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК Значение ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &СтанцияНазначения) КАК СтанцияНазначения ПО CW_Грузоперевозки.Ссылка = СтанцияНазначения.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК Значение ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &СтанцияОтправления) КАК СтанцияОтправления ПО CW_Грузоперевозки.Ссылка = СтанцияОтправления.Грузоперевозка Работает в примерно в 1,5 раза быстрее СКД-шного запроса. Сейчас буду пробовать сделать пакетными запросами вместо вложенных. Когда мудрил с группировкой, попробовал засечь без неё(самой группировки) и выяснил, что сама группировка (функция максимум) занимает очень мало времени. Попробовал ограничить Параметры через В, и получил чуть худшие результаты чем с Левым соединением, потом попробовал несгруппированную таблицу через объединения и тоже получил неплохой результат (но хуже чем левое соединение). Из всех возможных способов, на мой взгляд распологает потенциалом самый первый прокачанный(так как таблица читается 1 раз): ВЫБРАТЬ CW_ГрузоперевозкиПараметрыГрузоперевозки.Ссылка, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &ВыгруженВПорту ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.ЗначениеФакт КОНЕЦ) КАК ВыгруженВПорту, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &СтанцияОтправления ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК СтанцияОтправления, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &АгентОтправитель ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК АгентОтправитель, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &Отгружен ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.ЗначениеФакт КОНЕЦ) КАК Отгружен, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &СтанцияНазначения ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК СтанцияНазначения, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &АгентПоПередаче ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК АгентПоПередаче, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &ПереданПорожним ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.ЗначениеФакт КОНЕЦ) КАК ПереданПорожним, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &Коносамент ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК Коносамент, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &Собственник ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Значение КОНЕЦ) КАК Собственник, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &ПеремещенНаАвто ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.ЗначениеФакт КОНЕЦ) КАК ПеремещенНаАвто, МАКСИМУМ(ВЫБОР КОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр = &АвтовывозСТерминала ТОГДА CW_ГрузоперевозкиПараметрыГрузоперевозки.ЗначениеФакт КОНЕЦ) КАК АвтовывозСТерминала ИЗ Справочник.CW_Грузоперевозки.ПараметрыГрузоперевозки КАК CW_ГрузоперевозкиПараметрыГрузоперевозки ГДЕ CW_ГрузоперевозкиПараметрыГрузоперевозки.Ссылка.ПометкаУдаления = ЛОЖЬ И CW_ГрузоперевозкиПараметрыГрузоперевозки.Параметр В(&Параметры) СГРУППИРОВАТЬ ПО CW_ГрузоперевозкиПараметрыГрузоперевозки.Ссылка Догадываюсь о том, что время запроса к РС возрастает с количеством условий (ГДЕ) с геометрической прогрессией. Так как много запросов, у которых указано по одному условию работают быстрее, чем выборка всех нужных вариантов Измерения разом. Теперь можно пинать. |
|||
10
camojiet
22.04.13
✎
08:57
|
Пакетами запросов получилось медленее.
|
|||
11
camojiet
22.04.13
✎
09:33
|
А нет, я соврал, когда делал вложенными пропустил одну характеристику, пакетные быстрее. Не в 1,5 раза но тоже хорошо. В общем судьбу обмануть можно.
|
|||
12
camojiet
24.04.13
✎
04:37
|
Вобщем, большие объемы характеристик выгружаются быстрее всего следующим образом:
ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.ЗначениеФакт КАК АвтовывозСТерминала ПОМЕСТИТЬ Т_АвтовывозСТерминала ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &АвтовывозСТерминала ИНДЕКСИРОВАТЬ ПО Грузоперевозка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ CW_ХарактеристикиГрузоперевозок.Грузоперевозка КАК Грузоперевозка, CW_ХарактеристикиГрузоперевозок.Значение КАК АгентОтправитель ПОМЕСТИТЬ Т_АгентОтправитель ИЗ РегистрСведений.CW_ХарактеристикиГрузоперевозок КАК CW_ХарактеристикиГрузоперевозок ГДЕ CW_ХарактеристикиГрузоперевозок.Параметр = &АгентОтправитель ИНДЕКСИРОВАТЬ ПО Грузоперевозка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ CW_Грузоперевозки.Ссылка, Т_АвтовывозСТерминала.АвтовывозСТерминала, Т_АгентОтправитель.АгентОтправитель ИЗ Справочник.CW_Грузоперевозки КАК CW_Грузоперевозки ЛЕВОЕ СОЕДИНЕНИЕ Т_АвтовывозСТерминала КАК Т_АвтовывозСТерминала ПО CW_Грузоперевозки.Ссылка = Т_АвтовывозСТерминала.Грузоперевозка ЛЕВОЕ СОЕДИНЕНИЕ Т_АгентОтправитель КАК Т_АгентОтправитель ПО CW_Грузоперевозки.Ссылка = Т_АгентОтправитель.Грузоперевозка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |