Как выбирать записи из регистра сведений на текущую дату

1. AleksandrLeshkov 18.08.22 22:19 Сейчас в теме
Добрый день! Есть периодический РС ЦеныНоменклатуры. Из него мне надо получать цены на текущую дату, но не могу понять как задать это самое условие в конструкторе запроса. Подскажите, пожалуйста, как задать период на текущую дату
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 18.08.22 22:39 Сейчас в теме
(1) СрезПоследних
Pavel Rodinchenko; Prikum; +2 Ответить
3. Prikum 3 18.08.22 22:50 Сейчас в теме
(1)
Выбрать * ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДату, УсловиеПоИзмерениям)
Alexponenta; Pavel Rodinchenko; +2 Ответить
4. AleksandrLeshkov 19.08.22 18:20 Сейчас в теме
(3)
&НаДату, УсловиеПоИзмерениям


А где задавать в конструкторе эти параметры?
7. Sashares 34 19.08.22 19:20 Сейчас в теме
(4)тут
Прикрепленные файлы:
12. dehro 5 20.08.22 15:40 Сейчас в теме
(1)Конструктор запроса очень неудобен.

Пиши запросы руками.
starik-2005; +1 Ответить
13. Prikum 3 20.08.22 23:21 Сейчас в теме
(12)Автор не знает как писать запросы не только руками, но и не умеет пользоваться конструктором запросов.
5. TAtiTO 19.08.22 18:42 Сейчас в теме
Просто в условие ГДЕ
Укажите Напрмер в
ГДЕ
Задать через параметр:
1.Дата= &Дата
Воспользоватья втроенным методом ДАТАВРЕМЯ.
2.Дата = ДатаВремя(2022,08,19)
если нужно период определенный отобрать также в ГДЕ:
Через параметры:
1.ДАТА Между &НачалоПериода и &КонецПериода
:через встроенный метод:
2.ДАТА Между ДатаВремя(2022,08,01) и ДатаВремя(2022,08,19)
6. AleksandrLeshkov 19.08.22 18:51 Сейчас в теме
(5)
Просто в условие ГДЕ
Укажите Напрмер в
ГДЕ
Задать через параметр:
1.Дата= &Дата
Воспользоватья втроенным методом ДАТАВРЕМЯ.
2.Дата = ДатаВремя(2022,08,19)
если нужно период определенный отобрать также в ГДЕ:
Через параметры:
1.ДАТА Между &НачалоПериода и &КонецПериода
:через встроенный метод:
2.ДАТА Между


А если надо на текущую дату, то в условиях ставлю ТекущаяДата()?
22. lefthander 22.08.22 17:45 Сейчас в теме
(6)Если на текущую дату, то можно не указывать дату, при пусто выдается последнее значение
8. Alexponenta 19.08.22 20:33 Сейчас в теме
(5) При обращении к РС лучше ГДЕ не использовать
9. karamazoff 96 19.08.22 22:04 Сейчас в теме
(8)Почему? просветите. Учитывая что это полуразовое мероприятие, речь о нагрузке на систему, думаю не идет
11. Alexponenta 20.08.22 12:07 Сейчас в теме
Если Вы обратитесь к СрезуПоследних через где

Например: ГДЕ КурсВалют < 40, вы можете получить пустую таблицу т.к. в срезе курс может быть больше 40,
поэтому в таком случае лучше брать не через ГДЕ а через параметры РС, тогда срез будет найден по условиям.

Я бы расписал пример подробнее, но книга у меня в данный момент не под рукой.
16. SlavaKron 22.08.22 15:12 Сейчас в теме
(11) Какой смысл такого запроса? Если нас интересует текущий курс валют меньше 40, то условие в параметрах – ошибка.
17. Alexponenta 22.08.22 15:25 Сейчас в теме
(16) Смысл не в запросе, смысл в том, что можно ошибку в запросе сделать так как на срез сильно влияет условие ГДЕ
15. Alexponenta 22.08.22 15:09 Сейчас в теме
(9)Нашел:
Вот два варианта обращения к РС через запрос:
ВЫБРАТЬ
КурсыВалют.Период,
КурсыВалют.Дата,
КурсыВалют.Курс
ИЗ
РС.КурсыВалют.СрезПоследних(,Валюта = &Евро И Курс < 40) КАК КурсыВалют

ВЫБРАТЬ
КурсыВалют.Период,
КурсыВалют.Дата,
КурсыВалют.Курс
ИЗ
РС.КурсыВалют.СрезПоследних(,Валюта = &Евро) КАК КурсыВалют
ГДЕ КурсыВалют.Курс < 40 
Показать


В первом случае найдет такой срез в котором валюта евро и курс меньше 40
Во втором случае найдет сначала срез последних, а потом отфильтрует его через ГДЕ - и если в срезе нет валюты меньше 40 - результат будет пустым
25. user1831019 22.08.22 17:50 Сейчас в теме
(15) Использовать неиндексируемые ресурсы в параметрах виртуальной таблицы - просто непрофессионально и недопустимо.
26. spacecraft 22.08.22 18:12 Сейчас в теме
(25) хмм...
Можно увидеть профессиональный подход к решению той же задачи?
27. user1831019 22.08.22 18:17 Сейчас в теме
(26) Какой задачи? Задача "узнать, когда в последний раз курс евро был < 40"?
А это точно надо в учетной торговой или бухгалтерской системе?

Не, ну если задача стоит именно так, и руководство использует учетную систему вместо аналитической - ради бога, фигачьте ресурсы в параметры виртуальной таблицы.

Вот только регистр "Курсы валют" предназначен несколько для других целей.
28. spacecraft 22.08.22 18:19 Сейчас в теме
(27)
А это точно надо в учетной торговой или бухгалтерской системе?

А, ну да. Сразу видно профессиональный подход... убедить, что это не нужно заказчику :)
29. user1831019 22.08.22 18:24 Сейчас в теме
(28) Понимаю вашу иронию. Но это просто регистр курсов валют маленький и незаметный. На больших регистрах с большим количеством таких запросов получите интересные тормоза в плане производительности.
30. spacecraft 22.08.22 18:26 Сейчас в теме
(29) так и высказывание было, что это вообще не допустимо, причем в контексте именно "маленького" регистра. Однако для "маленького" регистра все же можно?
31. user1831019 22.08.22 18:27 Сейчас в теме
(30) Можно и мордой борщ из кастрюли хлебать, и даже допустимо. Но зачем?
По теме - для таких случаев лучше использовать физическую таблицу, а не виртуальную.
32. spacecraft 22.08.22 18:29 Сейчас в теме
(31) пока другого решения не было озвучено, ну кроме как вообще не есть.
33. user1831019 22.08.22 18:30 Сейчас в теме
(32) Физическая таблица, я же написал (видимо я эту строку добавил уже после того, как вы начали писать свой ответ).
34. spacecraft 22.08.22 18:36 Сейчас в теме
(33) интересно. И можно пример запроса?
35. user1831019 22.08.22 18:38 Сейчас в теме
(34) Вам показать обычный запрос с условиями по валюте и курсу, с сортировкой по дате, и выбором первой записи?
36. spacecraft 22.08.22 18:45 Сейчас в теме
(35) еще желательно с замерами времени выполнения обоих вариантов. Это что бы было понятно, что выборка из физ. таблицы в данном случае не поможет.

PS. Вы предлагаете сделать дырку в кастрюле, чтобы не пить через край.
41. user1831019 22.08.22 18:50 Сейчас в теме
(36) Нет, я предлагаю использовать инструменты по их предназначению.
43. spacecraft 22.08.22 19:21 Сейчас в теме
(41) ок. Тогда я приведу примеры и аналитику:
Вариант1. Через СрезПоследних:
ВЫБРАТЬ
	КурсыВалютСрезПоследних.Период КАК Период,
	КурсыВалютСрезПоследних.Валюта КАК Валюта,
	КурсыВалютСрезПоследних.Курс КАК Курс,
	КурсыВалютСрезПоследних.Кратность КАК Кратность
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(
			,
			Валюта = &Валюта
				И Курс < 45) КАК КурсыВалютСрезПоследних
Показать

Аналитика плана выполнения запроса:
Statistics: RecordsScanned = 1373, ParseTime = 0, ExecuteTime = 3, BuffersMemory = 25940, ResultRecords = 1, RecordSize = 47

Вариант2. через физ. таблицу:
ВЫБРАТЬ ПЕРВЫЕ 1
	КурсыВалют.Период КАК Период,
	КурсыВалют.Валюта КАК Валюта,
	КурсыВалют.Курс КАК Курс,
	КурсыВалют.Кратность КАК Кратность
ИЗ
	РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
	КурсыВалют.Валюта = &Валюта
	И КурсыВалют.Курс < 45

УПОРЯДОЧИТЬ ПО
	Период УБЫВ
Показать

Аналитика плана выполнения запроса:
Statistics: RecordsScanned = 1339, ParseTime = 0, ExecuteTime = 15, BuffersMemory = 25940, ResultRecords = 1, RecordSize = 47

Даже на небольшом объеме данных видна разница времени выполнения.

Это еще не учитывая, что записей может потребоваться больше, если нужны данные по всем валютам.
Zevzm; Alexponenta; Prikum; RustamZz; +4 Ответить
44. user1831019 22.08.22 19:23 Сейчас в теме
(43)
что записей может потребоваться больше, если нужны данные по всем валютам.
Хотел бы я увидеть того идиота, который будет искать курс валюты < 40 одновременно для евро и для монгольского тугрика.
45. spacecraft 22.08.22 19:38 Сейчас в теме
(44) замените таблицу КурсыВалют на ЦеныНоменклатуры и вопрос уже не такой абстрактный получится.
52. user1826630 23.08.22 14:03 Сейчас в теме
(45) Тут есть простор для размышлений, согласен. Для фикспрайсов "Все по 100" это может быть актуальным.
50. Alexponenta 23.08.22 13:53 Сейчас в теме
(44) Это пример из книги по работе с консолью запросов. Поэтому да - с т.з. жизни - пример не жизнеспособен, тут только обращают внимание на то, что в срезе последних к ГДЕ нежелательно обращаться.
51. user1826630 23.08.22 14:02 Сейчас в теме
(50) Почему нет-то? Если надо наложить отбор на РЕАЛЬНЫЙ срез последних по ресурсу - то это надо делать именно через ГДЕ.
Например, если вам надо отобрать определенные текущие статусы документов (Статус - ресурс) - вы же не будете отбор по ресурсу запихивать в параметры виртуальной таблицы? Если вы так сделаете - у вас в результат попадут все документы, которые кода-либо имели такой статус (даже не смотря на то, что сейчас он другой).
46. SlavaKron 22.08.22 19:44 Сейчас в теме
(43) А если дату среза указать, какие результаты будут?
48. spacecraft 22.08.22 20:03 Сейчас в теме
(46) от 1 до 2 мс. Итоги не хранятся по всем значениям. Так мы принудительно уменьшаем выборку.
49. Alexponenta 23.08.22 13:49 Сейчас в теме
(48) к (43) а если в варианте 2 использовать срез последних? что по времени?
(да-да, результат будет не тот, который ожидаем), но вот время выполнения?
53. spacecraft 23.08.22 14:05 Сейчас в теме
(49) а тут и смотреть не надо. Время выполнения будет такое же, как и без секции ГДЕ. Отбор будет выполнен всего на одну единственную запись.
54. Alexponenta 23.08.22 14:10 Сейчас в теме
(53) но ведь если к срезу применить ГДЕ - не факт что запись будет. (если в срезе нет данных, удовлетворяющих секции ГДЕ
57. spacecraft 23.08.22 14:22 Сейчас в теме
(54)
но ведь если к срезу применить ГДЕ - не факт что запись будет. (если в срезе нет данных, удовлетворяющих секции ГДЕ

именно так. Об этом и говорится в особенностях применения виртуальной таблицы СрезПоследних.
55. Alexponenta 23.08.22 14:12 Сейчас в теме
(53)
+ я же правильно понимаю: что в случае среза выбирается 1 запись, удовлетворяющая условиям ВТ, а потом на нее накладывается где,

а если применять к РС, то выбираются ВСЕ записи, а потом на них накидывается условие ГДЕ

выбрана то будет одна запись, но не факт что она будет одна и та же
56. spacecraft 23.08.22 14:19 Сейчас в теме
(55)
я же правильно понимаю: что в случае среза выбирается 1 запись, удовлетворяющая условиям ВТ, а потом на нее накладывается где,

В общем случае это так, но тут может вносить свои коррективы оптимизатор sql. И итоговый запрос может отличаться.
58. user1831019 23.08.22 14:33 Сейчас в теме
(55)
а если применять к РС, то выбираются ВСЕ записи
При обращении к физической таблице - записи не выбираются в какой-то отдельный пул (типа выбрать все, а потом че-то с ними будем делать).
В данном случае условие сразу накладывается на исходную таблицу, и с этим SQL отлично справляется.
59. spacecraft 23.08.22 14:39 Сейчас в теме
(55)
а если применять к РС, то выбираются ВСЕ записи, а потом на них накидывается условие ГДЕ

Там все сложнее.
Если в секции ГДЕ есть отбор по индексированным полям и по не индексированным, то происходит отбор индексированным и уже по ним полный перебор для отбора по не индексированным.

PS. И да, тут оптимизатор может вмешаться и посчитать, что выгоднее сделать сразу полный перебор, если таблица небольшая и/или статистика не правильная (это еще один из факторов поддерживать статистику в актуальном состоянии).
37. Prikum 3 22.08.22 18:46 Сейчас в теме
(35)а что помешало сразу написать обычный запрос? Или любите отвечать вопросом на вопрос?
38. user1831019 22.08.22 18:48 Сейчас в теме
(37) Нет желания на телефоне писать запросы.
А вы у меня что-то спрашивали?
10. user1393353 11 20.08.22 05:39 Сейчас в теме
(8) Если отбор по измерению, как в данном случае ,то да. Но если отбор по ресурсу, то можете получить не то, что ожидали
SlavaKron; +1 Ответить
14. dehro 5 21.08.22 21:58 Сейчас в теме
(13) Руки должны идти вперёд.
Конструктор запроса годится только на то, чтобы отформатировать текст запроса и проверить синтаксис.
24. lefthander 22.08.22 17:47 Сейчас в теме
(14)
Руки должны идти вперёд.
Это извращение писать руками то что можно сделать в конструкторе...
Zevzm; Prikum; +2 Ответить
18. karamazoff 96 22.08.22 17:12 Сейчас в теме
Капец форум сдулся, обсуждаем как с РС срез последних снять...
Krotov_Valery; Painted; +2 Ответить
19. user1831019 22.08.22 17:14 Сейчас в теме
(18) Всем жалко купить книгу Радченко.
20. nikolasx 59 22.08.22 17:19 Сейчас в теме
(19) Для этого даже не нужно покупать, информации достаточно в интернете (просто набрав запрос в любом поисковике). Я думаю, наверно не знают что так можно, или лень поискать :(
21. karamazoff 96 22.08.22 17:38 Сейчас в теме
(19)Но ее еще прочитать надо, а это никто не хотит
23. user1831019 22.08.22 17:45 Сейчас в теме
(21) Да и понять неплохо было бы еще то, что прочитал.
60. AleksandrLeshkov 26.08.22 14:16 Сейчас в теме
(21) перечитал уже десятки книг и пересмотрел кучу уроков, ну не всё я понимаю с первого или даже с пятого раза из них, пока не покажут более простым языком. Во многих сферах разбираюсь хорошо, но конкретно программирование идёт тяжко для меня, поэтому и задаю порой вопросы первого класса, не могу по-другому, желание научиться-то есть
61. Prikum 3 26.08.22 14:30 Сейчас в теме
(60)
но конкретно программирование идёт тяжко для меня,
а может быть ну его нафик? ;)
62. AleksandrLeshkov 26.08.22 17:39 Сейчас в теме
(61)
(61)уже думал, но не сдаюсь)))
39. DesertPunk 22.08.22 18:49 Сейчас в теме
(19) А есть же еще совсем сакральная книга "Язык запросов "1С:ПРЕДПРИЯТИЯ 8" Хрусталевой. Но кому оно нужно... Про "Разработку сложных отчетов даже говорить уже бессмысленно"
47. starik-2005 3036 22.08.22 19:52 Сейчас в теме
(39)
еще совсем сакральная книга
Не читал, но осуждаю. Поэтому пишу запросы руками - это реально быстрее, т.к. скопипастить из дерева конфигуратора куда быстрее, чем накликать нужные мне поля.
40. Prikum 3 22.08.22 18:50 Сейчас в теме
(38) понятно, значит просто поговорить
42. user1831019 22.08.22 18:55 Сейчас в теме
(40) Как быстро вы раздаете оценки, прямо завидую вашему умению!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот