|
Предлагаю потестировать новый метод среза последних "вилку Фиксина" на УТ11.4/5 | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
01.09.22
✎
21:53
|
Запускайте два варианта запроса, сравнивайте результаты.
Мне нужно было по каждому товару получить последнюю и предпоследнюю цену, чтобы сравнить, было ли уменьшение цены и когда. Запрос 1:
Запрос 2: (внезапно быстрее в 2 раза)
|
|||
1
Гений 1С
гуру
01.09.22
✎
22:28
|
хотя не, потестил на болших объемах. Первый 468 секунд, вилка 556 (3723 позиции номенклатуры)
|
|||
3
Курцвейл
01.09.22
✎
23:01
|
(0) А если предпоследней цены нету, то запросы неправильные. Оба.
|
|||
11
AneJIbcuH
02.09.22
✎
05:50
|
ВТ, где ВТ...
|
|||
12
Eugeneer
02.09.22
✎
06:54
|
Гений ..... не проще без всякой дрочи твоей один запрс по регистру сведений без среза. но модно поставить дату начала и дату конца (между)
Делаешь группировкой период и выводишь отчет - колонками даты (без времени в запросе). И получаешь ептить нормальный отчет по изменениям цен. чем та дикая дрочь шо ты тут устраиваешь |
|||
13
Eugeneer
02.09.22
✎
06:55
|
У меня отчеты по ценам на 10 000 позиций - 1 секунда.
На 100 000 - 7-10 секунд. У тебя какая то дрочь кривая на 3 000 позиций - 460 секунд... рука лицо. |
|||
14
Eugeneer
02.09.22
✎
07:00
|
Хоч можно даже календарь прилепить. получить недельные даты. и вывести отчет за последние две недели. как менялись цены понедельно. какая мин-макс-средняя цена была...
Неужели соображаловки не хватает что ты всякую уйню пытаешся сделать вместо нормальных решений |
|||
15
Гений 1С
гуру
02.09.22
✎
07:18
|
(13) запрос в студию, проверю скорость
|
|||
16
ufufu
02.09.22
✎
07:40
|
(15) см. пункт (12) все же понятно
|
|||
17
Гений 1С
гуру
02.09.22
✎
08:08
|
(16) понятно, что там неправильно.
|
|||
18
Конструктор1С
02.09.22
✎
08:14
|
(17) так и в твоём запросе дичь
|
|||
19
NorthWind
02.09.22
✎
08:20
|
(15) кому все это надо, если срезпоследних стопицот лет назад изобрели и встроили в систему. Время бы пожалели...
|
|||
20
Serg_1960
модератор
02.09.22
✎
08:27
|
Напоминаю правило форума №2: "Флейм и оффтопик в тематических разделах 1С и IT не допускается."
Хотя сегодня и пятница (можно потрындеть), но ветка - для обсуждается темы автора, а не автора темы. |
|||
21
Гений 1С
гуру
02.09.22
✎
08:33
|
(19) здесь срез последних не прокатит. Для каждой номенклатуры нужен срез на свою дату.
|
|||
22
Гений 1С
гуру
02.09.22
✎
08:34
|
(3) нет, ты ошибаешься. тут как раз сравнение последней и предпоследней цен. Если предпоследней цены нет, то этот товар не попадет в отчет, там отбор по NULL сработает. И это правильно.
|
|||
23
СеменовСемен
02.09.22
✎
08:38
|
А если так
|
|||
24
СеменовСемен
02.09.22
✎
08:39
|
колонки делать при выводе
|
|||
25
Serg_1960
02.09.22
✎
08:42
|
(22) "Если предпоследней цены нет, то этот товар не попадет в отчет" - соединение со справочником - излишнее. Я тебе сэкономил кучу времени, гы-гы :)
|
|||
26
СеменовСемен
02.09.22
✎
08:46
|
Хотя вот такие косяки нелепо делать
ЦТекущие.Номенклатура.Ссылка КАК Ссылка |
|||
27
Ботаник Гарден Меран
02.09.22
✎
09:15
|
Думал, что Гений "срез последних двух" навелосипедил.
Ан нет, не осилил еще. |
|||
28
Гений 1С
гуру
02.09.22
✎
09:16
|
(24) (23) задачу не ту решаешь. Нужно последнее изменение цены отловить. а не все
(25) ну типа того, да. |
|||
29
СеменовСемен
02.09.22
✎
09:18
|
(28) если нужно только те что цена менялась, то сгруппировать и МИН(Цена) <> Макс(Цена)
|
|||
30
Гений 1С
гуру
02.09.22
✎
09:18
|
(29) перечитай условие. Последняя и предпоследняя цена, короче, где произошло уменьшение цены, чтобы выставить поле "Старая цена" для сайта. При этом если давно поменялась цена, то сбросить это поле. Тольок свежие изменения
|
|||
31
НафНаф
02.09.22
✎
09:19
|
1.88 сек, строк 39243
ВЫБРАТЬ ТаблицаПериодов.Номенклатура КАК Номенклатура, ТаблицаПериодов.ПослПериод КАК ПослПериод, ПослЦеныНоменклатуры.Цена КАК ПослЦена, ТаблицаПериодов.ПредПериод КАК ПредПериод, ПредЦеныНоменклатуры.Цена КАК ПредЦена ИЗ (ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура КАК Номенклатура, МИНИМУМ(ЦеныНоменклатуры.Период) КАК ПредПериод, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПослПериод ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ВидЦены = &ВидЦены И ЦеныНоменклатуры.Период В (ВЫБРАТЬ ПЕРВЫЕ 2 ЦеныКрайние.Период ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныКрайние ГДЕ ЦеныКрайние.Номенклатура = ЦеныНоменклатуры.Номенклатура И ЦеныКрайние.ВидЦены = &ВидЦены УПОРЯДОЧИТЬ ПО ЦеныКрайние.Период УБЫВ) СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура ИМЕЮЩИЕ МИНИМУМ(ЦеныНоменклатуры.Период) <> МАКСИМУМ(ЦеныНоменклатуры.Период)) КАК ТаблицаПериодов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПредЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПредЦеныНоменклатуры.Номенклатура) И (ПредЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПредЦеныНоменклатуры.Период = ТаблицаПериодов.ПредПериод) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПослЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПослЦеныНоменклатуры.Номенклатура) И (ПослЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПослЦеныНоменклатуры.Период = ТаблицаПериодов.ПослПериод) |
|||
32
Гений 1С
гуру
02.09.22
✎
09:20
|
(31) о, кстати, а это идея, использовать первые X в предложении В, не знал о таком.
но там кстати, может не прокатить. т.к цены могут идти так 10, 20, 20. Получишь 20, 20, а надо 10, 20 |
|||
33
Гений 1С
гуру
02.09.22
✎
09:21
|
(32) хотя там просто добавить проверку на неравенство цене и будет работать
|
|||
34
НафНаф
02.09.22
✎
09:21
|
(32) ты перед тем как писать - читай внимательно, там первые 2 ПЕРИОДа
|
|||
35
НафНаф
02.09.22
✎
09:22
|
(33) и проверка там есть
|
|||
36
Гений 1С
гуру
02.09.22
✎
09:23
|
(34) ну вот тебе пример:
1 янв 10 2 янв 20 3 янв 20 4 янв 20 что у тебя выдаст? надо 1 янв 10 4 янв 20 |
|||
37
Гений 1С
гуру
02.09.22
✎
09:24
|
(31) кстати, а зачем внутри В упорядочить?
|
|||
38
СеменовСемен
02.09.22
✎
09:24
|
(36) направление задано, можно копать. прирост скорости на порядки
|
|||
39
Гений 1С
гуру
02.09.22
✎
09:24
|
(38) да, надо поэкспериментировать
|
|||
40
Гений 1С
гуру
02.09.22
✎
09:24
|
спасибо
|
|||
41
Dmitry1c
02.09.22
✎
09:24
|
Хорошо что пятница.
|
|||
42
НафНаф
02.09.22
✎
09:26
|
(37) догадайся
|
|||
43
yalex
02.09.22
✎
09:30
|
Если номенклатур много и цены часто меняются, то СрезПоследних() с Неопределённым периодом, будет обращаться к таблице итогов, что оптимально да.
Единственное возможно в ВТ рекомендуется положить Срез этот, не рекомендуется соединяться с виртуальными таблицами. |
|||
44
СеменовСемен
02.09.22
✎
09:31
|
(43) зачем таблицу итогов класть во временную?
|
|||
45
yalex
02.09.22
✎
09:34
|
(44) Поверять нужно, может и нет смысла.
|
|||
46
Kassern
02.09.22
✎
09:34
|
(0) ЦТекущие,ЦПрошлые...Вижу вам пошло на пользу чтение ИТС. Наблюдается небольшой прогресс в именах. Не удивлюсь если раньше писали просто ЦТ и ЦП)
|
|||
47
НафНаф
02.09.22
✎
09:35
|
(36) с добавлениями:
ВЫБРАТЬ ТаблицаПериодов.Номенклатура КАК Номенклатура, ТаблицаПериодов.ПослПериод КАК ПослПериод, ПослЦеныНоменклатуры.Цена КАК ПослЦена, ТаблицаПериодов.ПредПериод КАК ПредПериод, ПредЦеныНоменклатуры.Цена КАК ПредЦена ИЗ (ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура КАК Номенклатура, МИНИМУМ(ЦеныНоменклатуры.Период) КАК ПредПериод, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПослПериод ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ВидЦены = &ВидЦены И ЦеныНоменклатуры.Период В (ВЫБРАТЬ ПЕРВЫЕ 2 МАКСИМУМ(ЦеныКрайние.Период) КАК Период ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныКрайние ГДЕ ЦеныКрайние.Номенклатура = ЦеныНоменклатуры.Номенклатура И ЦеныКрайние.ВидЦены = &ВидЦены СГРУППИРОВАТЬ ПО ЦеныКрайние.Цена УПОРЯДОЧИТЬ ПО Период УБЫВ) СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура ИМЕЮЩИЕ МИНИМУМ(ЦеныНоменклатуры.Период) <> МАКСИМУМ(ЦеныНоменклатуры.Период)) КАК ТаблицаПериодов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПредЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПредЦеныНоменклатуры.Номенклатура) И (ПредЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПредЦеныНоменклатуры.Период = ТаблицаПериодов.ПредПериод) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПослЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПослЦеныНоменклатуры.Номенклатура) И (ПослЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПослЦеныНоменклатуры.Период = ТаблицаПериодов.ПослПериод) |
|||
48
Timon1405
02.09.22
✎
09:37
|
не знаю, считать ли это оффтопом, но в установке цен в УТ справа внизу есть команда "настроить=> показывать действующие цены". или тут тема про секундами померяться?
|
|||
49
НафНаф
02.09.22
✎
09:38
|
(48) необязательно это обрабатывается там
|
|||
50
СеменовСемен
02.09.22
✎
09:43
|
(48) это же печать ценников, а не установка цен
|
|||
51
mikecool
02.09.22
✎
09:52
|
я правильно понимаю - ТС опозорился?
|
|||
52
vde69
02.09.22
✎
09:58
|
(0) тут хитрость есть, мало протестить эти 2 варианта, надо тестировать массово на протяжении нескольких дней (при настроеном регламенте обновления статистики), только в этом случае ты получишь более менее нормальный результат.
Ибо план запроса первого запроса и тысячного могут очень сильно отличаться |
|||
53
Гений 1С
гуру
02.09.22
✎
09:58
|
(46) че-то я затупил, можно было ЦТек и ЦПред. Вот тут почитал и подобрались эти идентификаторы идеально
|
|||
54
Гений 1С
гуру
02.09.22
✎
09:59
|
(52) план запроса в файловой?
|
|||
55
vde69
02.09.22
✎
10:01
|
(54) ты пытаешься что-то оптимизировать для файловых баз?
брось это занятие, оно просто бессмысленно.... |
|||
56
vde69
02.09.22
✎
10:02
|
(55) +
я уверен, что в данном топике никому не пришло в голову, что ты ведешь речь о ФАЙЛОВЫХ базах. |
|||
57
Гений 1С
гуру
02.09.22
✎
10:04
|
(31) кстати, а сколько по времени отрабатывают у тебя два других варианта? Сейчас запущу на своей базе, посмотрю, как там.
|
|||
58
Kassern
02.09.22
✎
10:04
|
(53) гениальней только ц1 и ц2
|
|||
59
Гений 1С
гуру
02.09.22
✎
10:04
|
(56) (55) Почему бес-смысленной? Задача то реальная. Там не нужна особая скорость. Регл. задание отрабатиывает и ладно.
|
|||
60
НафНаф
02.09.22
✎
10:07
|
(59) как ты сразу съехал, что скорость не нужна
а накатал то https://geniy1s.ru/novyj-podhod-k-nestandartnomu-srezu-poslednih-vilka-fiksina/ |
|||
61
Гений 1С
гуру
02.09.22
✎
10:10
|
(60) и где там про то, что скорость нужна? в каком абзаце?
|
|||
62
СеменовСемен
02.09.22
✎
10:11
|
Ну и вообще - это не вилка фиксина, а коррелированный подзапрос
|
|||
63
Kassern
02.09.22
✎
10:12
|
(61) "Как видно, на больших объемах вилка работает несколько медленнее. Есть идеи как ускорить?" - если бы скорость была не нужно, то и этой строчки бы не было. Логично?
|
|||
64
СеменовСемен
02.09.22
✎
10:13
|
так вся тема как раз про то что новый БЫСТРЫЙ метод.
иначе зачем этот метод нужен |
|||
65
Гений 1С
гуру
02.09.22
✎
10:14
|
(63) принятнута за уши логика. Скорость вызывает у меня академический, а не практический интерес для конкретно данной задачи.
Запускать рег задание можно раз в час, скорость конкретно тут не важна. |
|||
66
Гений 1С
гуру
02.09.22
✎
10:14
|
(64) ну хотя бы тем, что он максимально прозрачно записывется в коде запроса.
|
|||
67
Гений 1С
гуру
02.09.22
✎
10:15
|
Сравни с текстом (31). Кстати, думаю, там быстро отработало из-за SQL, думаю на файловой этот запрос покажет удручающие результаты, он все еще считается, гггг
|
|||
68
Гений 1С
гуру
02.09.22
✎
10:17
|
Ну если восстановить последовательность, то.
Сначала я написал запрос вилкой. Потом переписал на классику. Зачем уже не помню. Потом мне показалось что вилка быстрее (на демо-базе УТ она быстрее шуршала). Но потом запустил на реальной, когда уже пост печатнул и увидел, что вилка медленнее. Такая цепочка. |
|||
69
НафНаф
02.09.22
✎
10:22
|
(67) свое всегда ближе к телу
|
|||
70
НафНаф
02.09.22
✎
10:25
|
так в (0) тоже не решает проблему одинаковых цен, а в (47) решает
|
|||
71
Гений 1С
гуру
02.09.22
✎
10:26
|
(31) Вынужден констатировать НафНаф, что вы ввели нас в заблуждение. Ваш код умер на моей базе. Правда, это не прод, а копия прода у меня на компьютере. Но уже минут 20 висит, так что не жду чудес от производительности. протестируйте ка на своей базе два других варианта, а то сравнивать результаты на разных базах не имеет смысла. Ггг..
Я купился на вашу дешевую разводку, как мамальчик. |
|||
72
Eugeneer
02.09.22
✎
10:29
|
еще в (12) написал нормальное решение...
|
|||
73
НафНаф
02.09.22
✎
10:30
|
(71) так ты и есть мальчик, обслуживающий ларьки
тестируем только нормальные сервера на SQL |
|||
74
Гений 1С
гуру
02.09.22
✎
10:31
|
(72) у этого решения есть два существенных недостатка:
1. Нет кода запроса. 2. Это решение не моей задачи, а какой-то другой |
|||
75
Мимохожий Однако
02.09.22
✎
10:31
|
Раз пошла такая пьянка....
Добавь в расширение регистр сведений Изменения цен и пиши в ресурсы две цены: Старая, Новая, а также Дату смены цены в разрезе измерений Номенклатура, Вид цены. И записывай при необходимости. Гениально же? |
|||
76
Гений 1С
гуру
02.09.22
✎
10:32
|
(73) увы, но получается что запросы от многоуважаемого НафНаф это фуфел, потому что он не сравнивал их производительность со скоростью классики и вилки. Так что продолжаем дискуссию.
(75) а не слишком ли это жирно для банальной маркетинговой задачи? а? ггг |
|||
77
Eugeneer
02.09.22
✎
10:34
|
(74) геня ты шутишь?)
Ты не можешь вывести регистр сведений по датам? |
|||
78
Мимохожий Однако
02.09.22
✎
10:34
|
(76) Тебе решать. Доступно и всерьёз ©1С
|
|||
79
1Сергей
02.09.22
✎
10:35
|
Бутылка Клейна, Ложка Фолькмана, Вилка Фиксина
|
|||
80
Eugeneer
02.09.22
✎
10:36
|
Я кстати для того чтобы не мучать регистр цен. Так как там могут записывать и перезаписывать одинаковые цены!!!!
У себя сделал регистр сведений ИсторияИзмененияЦен. И в момент проведения как раз делаю запрос по ценам доки и старым прошлым ценам. И ТОЛЬКО если есть отличие пишу в регистр иистории. В итоге получаю очень быстрый супер отчет. в котором исключительно изменения. и фактически видно когда была старая цена и новая стала. пропуская все где она не менялась |
|||
81
НафНаф
02.09.22
✎
10:38
|
(76) так у тебя решение не полное, проблему одинаковых цен не решает
|
|||
82
СвинТуз
02.09.22
✎
10:38
|
(0)
Глаз режет. Я бы так не стал. Но гению виднее. |
|||
83
СвинТуз
02.09.22
✎
10:39
|
(82)
На вскидку должно не так быстро работать как могло бы. |
|||
84
Гений 1С
гуру
02.09.22
✎
10:40
|
Ого, запрос от НафНаф ставит антирекорды скорости - 1999 секунд в сравнении с другими двумя это космос, конечно. Раза в 4 медленнее
|
|||
85
Гений 1С
гуру
02.09.22
✎
10:41
|
(82) что тебе режет? Декартово произведение? имхо, нормальный ход, зато прозрачный в отличии от максимумов разных
|
|||
86
Гений 1С
гуру
02.09.22
✎
10:41
|
(80) молодец. у себя - это где?
|
|||
87
Eugeneer
02.09.22
✎
10:42
|
(85) в мегапрайсе)
|
|||
88
СвинТуз
02.09.22
✎
10:42
|
(85)
Я так не делаю. Где тут декартово произведение? |
|||
89
Гений 1С
гуру
02.09.22
✎
10:43
|
(81) нашел до чего докопаться, а есть так? ггг
А? А! |
|||
90
СвинТуз
02.09.22
✎
10:43
|
(85)
Мы видимо под декартовыми произведениями разные вещи понимаем ) |
|||
91
Гений 1С
гуру
02.09.22
✎
10:44
|
(88) ну я ж писал, что большинство по классике идет. Не все готовы осознать извращения.
(88) Цпрошлые и Цвсе перемножаются декартом, если че. |
|||
92
Гений 1С
гуру
02.09.22
✎
10:45
|
(90) ты видимо считаешь декартовым произведением
Выбрать * ИЗ А LEFT JOIN A По ИСТИНА А я подразумеваю: Выбрать * ИЗ А LEFT JOIN A По любое условие. |
|||
93
НафНаф
02.09.22
✎
10:50
|
(89) тогда и в ЦВсе условия надо добавлять, жду готовый запрос в общем
|
|||
94
НафНаф
02.09.22
✎
10:50
|
(92) а надо было учиться, чтобы знать что такое "декартово произведение"
|
|||
95
Eugeneer
02.09.22
✎
10:51
|
Успокойтесь вы все..... ПРАВИЛЬНЫЙ ВАРИАНТ - одна строка кода условия
ВЫБРАТЬ ПЕРВЫЕ 1 ГДЕ ЦеныКрайние.Цена <> ЦеныНоменклатуры.Цена УПОРЯДОЧИТЬ ПО Период УБЫВ |
|||
96
Волшебник
02.09.22
✎
10:56
|
(95) Жаль, что нет ИЗ, а так бы сработало
|
|||
97
vde69
02.09.22
✎
10:59
|
попробуй так (у меня сейчас негде проверить, пишу без 1с, по этому там ошибок много)
ВЫБРАТЬ различные р.Номенклатура как номенклатура, Макс(р.Период) КАК Период поместить ВТ1 ИЗ РегистрСведений.ЦеныНоменклатуры КАК р индексировать по номенклатура группировать по р.Номенклатура; ВЫБРАТЬ различные р.Номенклатура как номенклатура, Макс(р.Период) КАК Период поместить ВТ2 ИЗ РегистрСведений.ЦеныНоменклатуры КАК р левое соединение ВТ1 по р.номенклатура = вт1.номенклатура и вт1.период > р.период индексировать по номенклатура группировать по р.Номенклатура; и дальше 2 джойна регистром цен по номенклатуре+периоду из ВТ |
|||
98
vde69
02.09.22
✎
10:59
|
(97) +
по любому будет быстрее сабжа |
|||
99
СвинТуз
02.09.22
✎
11:06
|
(97)
Различные зачем? ) |
|||
100
СвинТуз
02.09.22
✎
11:07
|
(97)
Тоже грязь из (0) глаз режет? ) |
|||
101
СвинТуз
02.09.22
✎
11:09
|
(92)
"А я подразумеваю: Выбрать * ИЗ А LEFT JOIN A По любое условие." Вот если любое условие кроме "Истина", то на мой ИМХО уже не декартово. Но я не уверен. В школе плохо учился, да и не гений я. |
|||
102
yalex
02.09.22
✎
11:09
|
(97) А какой смысл получать получать максимум по всей таблице если есть итоги?
|
|||
103
СвинТуз
02.09.22
✎
11:10
|
(92)
Волшебника спроси, он любит мудростью делиться. Мне лень. Да я и не уверен, что всегда прав. Просто действую как знаю. |
|||
104
Волшебник
02.09.22
✎
11:11
|
(103) Лучше спросите СвинТуза. Он всё знает.
|
|||
105
СвинТуз
02.09.22
✎
11:12
|
(103)
Не я туповат. С тобой как то общался. Производишь. Я если бы не был ленив тоже бы был ничего. |
|||
106
СвинТуз
02.09.22
✎
11:13
|
(104)
Я обычно при возникновении проблемы начитываю. Так плохо все помню. Есть энциклопедисты. Это не я ) |
|||
107
Гений 1С
гуру
02.09.22
✎
11:14
|
(101) это буквоедство, дружок. Есть такое
|
|||
108
СвинТуз
02.09.22
✎
11:16
|
(107)
Невежество лучше?) Есть общепринятые определения. Ты можешь думать по своему. Минус в том что большинство людей тебя не поймет. |
|||
109
СвинТуз
02.09.22
✎
11:17
|
У нас свободная страна.
Стой на своем, если не больно. ))) (107) |
|||
110
Eugeneer
02.09.22
✎
11:17
|
Быстрее всего будет выгрести весь этот регистр целиком и польностью - а в выборке вывести только то что надо
|
|||
111
СвинТуз
02.09.22
✎
11:18
|
(107)
Есть люди, которые не боятся показать свое невежество. Я понимаю. |
|||
112
СвинТуз
02.09.22
✎
11:20
|
(107)
У тебя же пачка сертификатов? Не покупал? Подарили? ) Зачем ты тут это все постишь? ) |
|||
113
yalex
02.09.22
✎
11:20
|
(97)
ВЫБРАТЬ ЦеныНоменклатурыСрезПоследних.Период КАК Период, ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура ПОМЕСТИТЬ ВТ1 ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(НЕОПРЕДЕЛЕНО) КАК ЦеныНоменклатурыСрезПоследних |
|||
114
Eugeneer
02.09.22
✎
11:21
|
+(110) на 3000 товаров такой отчет я думаю будет делаться 1 секунду
|
|||
115
Анцеранана
02.09.22
✎
11:23
|
(0) Вот что такое неподдельный гуру-тест для программиста 1С, а не то что вчера запостил юзер TormozIT! Тема рулит!
|
|||
116
НафНаф
02.09.22
✎
11:36
|
пока так
ВЫБРАТЬ ТаблицаПериодов.Номенклатура КАК Номенклатура, ТаблицаПериодов.ПослПериод КАК ПослПериод, ПослЦеныНоменклатуры.Цена КАК ПослЦена, ТаблицаПериодов.ПредПериод КАК ПредПериод, ПредЦеныНоменклатуры.Цена КАК ПредЦена ИЗ (ВЫБРАТЬ ЦеныНоменклатуры.Номенклатура КАК Номенклатура, МАКСИМУМ(ПредЦены.Период) КАК ПредПериод, ЦеныНоменклатуры.Период КАК ПослПериод ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПредЦены ПО ЦеныНоменклатуры.Номенклатура = ПредЦены.Номенклатура И (ПредЦены.ВидЦены = &ВидЦены) И ЦеныНоменклатуры.Период > ПредЦены.Период И ЦеныНоменклатуры.Цена <> ПредЦены.Цена СГРУППИРОВАТЬ ПО ЦеныНоменклатуры.Номенклатура, ЦеныНоменклатуры.Период) КАК ТаблицаПериодов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПредЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПредЦеныНоменклатуры.Номенклатура) И (ПредЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПредЦеныНоменклатуры.Период = ТаблицаПериодов.ПредПериод) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ПослЦеныНоменклатуры ПО (ТаблицаПериодов.Номенклатура = ПослЦеныНоменклатуры.Номенклатура) И (ПослЦеныНоменклатуры.ВидЦены = &ВидЦены) И (ПослЦеныНоменклатуры.Период = ТаблицаПериодов.ПослПериод) |
|||
117
Eugeneer
02.09.22
✎
11:53
|
Рубятки хватит дрочить регистр.
У Фиксина там 3к товаров... Даже если бы было 100к. Быстрее всего будет это выгрести весь регистр без среза. с нужными сортировками. ну и еще можно период сделать МЕЖДУ. И в выборке результата запроса уже простыми условиями отсеять все что не нужно. или все нужно. Получится нормальный отчет со всеми изменениями. Так как это регистр сведений - для него пофигу сколько там данных. хоть миллион. |
|||
118
Eugeneer
02.09.22
✎
11:54
|
Я думаю юзера вообще хрен интересует какие цены были год назад. Я вообще обработку написал удаления старых цен.
|
|||
119
Eugeneer
02.09.22
✎
11:58
|
Самое тормозное будет в этом деле будет на удивление
ТаблицаОтчета.Вывести(Секция); тормознее запроса на 100к товаров. |
|||
120
СеменовСемен
02.09.22
✎
12:21
|
(119) выводи не построчно, а группами по 3 например
|
|||
121
yalex
02.09.22
✎
12:25
|
(118) Бывают огромные регистры цен даже на небольшом периоде. 100к товаров и несколько видов цен, которые пересчитываются ежедневно.
(119) это то да |
|||
122
Гений 1С
гуру
02.09.22
✎
12:36
|
(119) в рамках данной задачи я не вывожу ничего пользователю. это чисто серверная задача.
|
|||
123
Eugeneer
02.09.22
✎
13:21
|
(121) как говорят преподаватели в учебном центре 1С - всегда есть компромисс.
Если вы видите что это не принесет время - то можно использовать. |
|||
124
Eugeneer
02.09.22
✎
13:21
|
не принесет вреда. Гораздо хуже запрос фигачить с нагрузками и вычислениями, чем просто получить данные.
|
|||
125
Eugeneer
02.09.22
✎
13:24
|
(121) сделай регистрацию только изменений. нафига каждый день фигачить однно и тоже.
|
|||
126
Курцвейл
02.09.22
✎
13:43
|
(116) Это изнасилование оптимизатора запроса. :)
|
|||
127
yalex
02.09.22
✎
13:57
|
(125) В том и дело что не одно и то же
|
|||
128
Гений 1С
гуру
02.09.22
✎
13:59
|
(127) тут фузина с ее декларативными триггерами была бы как нельзя кстати.
|
|||
129
PLUT
02.09.22
✎
14:02
|
(128) >тут фузина с ее декларативными триггерами была бы как нельзя кстати
Ах, если бы сбылась моя мечта, Какая жизнь настала бы тогда, Ах, если бы мечта сбылась, Какая жизнь тогда бы началась. Ах, если бы, ах, если бы, не жизнь была б, а песня бы, Ах, если бы, ах, если бы, не жизнь была б, а песня бы, Ах, если бы, ах, если бы, не жизнь была б, а песня бы, Ах, если бы, ах, если бы, не жизнь была б, а песня бы. © мультик про Летучий корабль |
|||
130
НафНаф
02.09.22
✎
14:15
|
(128) ну расскажи нам, что такое "декларативные триггеры"
|
|||
131
dangerouscoder
02.09.22
✎
14:19
|
(97) так же бы сделал через ВТ
|
|||
132
dangerouscoder
02.09.22
✎
14:20
|
(130) у клиентов г1с триггер только один - ЖАДНОСТЬ!
|
|||
133
uno-group
02.09.22
✎
15:34
|
Вместо того чтобы базу в порядок привести. Чтобы ситуаций типа цена 10;20;20; не было Простейшей проверкой что если цена не менялась ее не пишем, народ запрос пишет который на 2 порядка медленнее работает. Как итог база пухнет, запрос тормозит.
|
|||
134
Гений 1С
гуру
02.09.22
✎
16:56
|
(133) это лишнее.
|
|||
135
Волшебник
02.09.22
✎
17:12
|
(133) Писать надо всё, потому что отмена проведения предыдущего документа не должна влиять на более позднюю установку цен
|
|||
136
Гений 1С
гуру
05.09.22
✎
21:21
|
Подрихтовал чутка запрос, теперь выглядит так:
Это уже то, что пошло в продакшн. |
|||
137
Сергиус
06.09.22
✎
01:13
|
(136)ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦТекущие ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦПрошлые ПО (ЦПрошлые.ВидЦены = &ВидЦены) И (ЦПрошлые.Номенклатура = ЦТекущие.Номенклатура) И (ЦПрошлые.Период В (ВЫБРАТЬ МАКСИМУМ(Ц.Период) ИЗ РегистрСведений.ЦеныНоменклатуры КАК Ц ГДЕ Ц.Номенклатура = ЦТекущие.Номенклатура И Ц.ВидЦены = &ВидЦены И Ц.Цена <> ЦТекущие.Цена И Ц.Период < ЦТекущие.Период)) Не проверял, но разве доступны поля из вышестояшего соединения(ЦТекущие) во вложенном подзапросе? |
|||
138
Сергиус
06.09.22
✎
01:20
|
(137)Отбой - тормознул, всё ок.
|
|||
139
Лодырь
06.09.22
✎
06:44
|
(136) И что тут интересного? Обычный запрос. Решение в лоб, без изюминки. Может я не осознал гениальности замысла?
|
|||
140
Eugeneer
06.09.22
✎
06:46
|
(139) исходя и того что тема заведена 1 числа, типа найденное решение 5 числа поставлено в продакшн.
Итого 5 дней работы, по 4 часа в день, по 2000 час. Гений заработал минимум 40 тысяч за этот запрос |
|||
141
Лодырь
06.09.22
✎
06:57
|
(140) Ну, способность Фиксина зарабатывать некоторые деньги под сомнение не ставится ) Заглянул на мисту после долгого отсутствия, ожидал чего-то интересного. Оказалось, все по прежнему.
|
|||
142
Конструктор1С
06.09.22
✎
07:20
|
(139) решение не то что в лоб, а кривое. По мере роста регистра запрос будет замедляться. Скорее всего и сейчас не фонтан
(140) хошь сказать, что наш гурий один запрос писал несколько дней? |
|||
143
Гений 1С
гуру
06.09.22
✎
07:27
|
(140) неа. я там работаю после 19, когда юзвери уходят, ну можно в принципе, на копии дома делать. на выходных тоже не работал. Просто руки дошли.
|
|||
144
Гений 1С
гуру
06.09.22
✎
07:29
|
(142) ну вы всегда можете предложить решение, которое не будет зависеть от размера регистра. ;-) если оно существует в природе.
но такое решение наверняка потребует индексации и дополнительного регистра. |
|||
145
Конструктор1С
06.09.22
✎
07:30
|
(144) учи как работают индексы таблиц, учись пользоваться временными таблицами. И будет тебе щасте
|
|||
146
Гений 1С
гуру
06.09.22
✎
07:32
|
(145) и че, временне таблицы не зависят от размера регистра в этой задаче? гггг
|
|||
147
Конструктор1С
06.09.22
✎
07:33
|
(146) учись, и всё сам поймёшь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |