|
НАЧАЛОПЕРИОДА в запросе (задание на экзамене по платформе) | ☑ | ||
---|---|---|---|---|
0
NIGHTHUNTER
17.03.22
✎
04:27
|
Необходимо было сделать что бы в отчете, выбирались данные только за один какой либо месяц.
Не знал как это можно сделать. Но выявил, что делают это так, - ГДЕ ДополнительныеНачисления.ПериодРегистрации = НАЧАЛОПЕРИОДА(&НачалоМесяца, МЕСЯЦ) И ДополнительныеНачисления.Активность как в данном случае, работает функция НАЧАЛОПЕРИОДА в условии запроса? |
|||
1
DEVIce
17.03.22
✎
05:41
|
Писать надо было так:
ГДЕ НАЧАЛОПЕРИОДА(ДополнительныеНачисления.ПериодРегистрации, МЕСЯЦ) = &НачалоМесяца И ДополнительныеНачисления.Активность |
|||
2
NIGHTHUNTER
17.03.22
✎
11:58
|
(1) Не совсем понятно. Что будет в &НачалоМесяца ? И как это будет работать?
А в (0) Это не отработает? |
|||
3
hhhh
17.03.22
✎
12:03
|
(2) функция НАЧАЛОПЕРИОДА(&НачалоМесяца, МЕСЯЦ) находит начало месяца от любой даты.
|
|||
4
Kassern
17.03.22
✎
12:04
|
(0) вы что передаете в &НачалоМесяца ?
|
|||
5
Жан Пердежон
17.03.22
✎
12:14
|
(1) за такое надо бить, можно даже ногами
|
|||
6
NIGHTHUNTER
17.03.22
✎
12:55
|
(4) пользователь может выбрать любую дату
задача в том что, отбираться должен один месяц, который есть в этой дате решает ли это код в (0) ? |
|||
7
acht
17.03.22
✎
13:02
|
(6) > решает ли это код
За 8 часов от старта темы можно было бы и самому проверить. |
|||
8
trad
17.03.22
✎
13:07
|
(6) "месяц, который есть в этой дате"
как месяц может быть в дате? Это дата может быть в месяце |
|||
9
Галахад
гуру
17.03.22
✎
13:08
|
Можно по старинке:
|
|||
10
Галахад
гуру
17.03.22
✎
13:09
|
Период между НАЧАЛОПЕРИОДА(&Д1, Месяц) И КОНЕЦПЕРИОДА(&Д2, Месяц)
|
|||
11
Конструктор1С
17.03.22
✎
13:10
|
(0) убери НАЧАЛОПЕРИОДА из запроса, вынеси его в вычисление параметров СКД. С таким выражением можно мимо индекса пролететь
(1) а это уже совсем ахтунг, тут запрос с индексом гарантированно обделается |
|||
12
Галахад
гуру
17.03.22
✎
13:13
|
(11) Не стоит, наверное про индекс...
|
|||
13
NIGHTHUNTER
17.03.22
✎
13:23
|
Запрос вот такой. И условие по которому я задал вопрос звучит так Отчет должен быть построен только за определенный календарным месяц.
Это тогда нужно делать как в (10) ? ГДЕ ДополнительныеНачисления.ПериодРегистрации МЕЖДУ ... ? ВЫБРАТЬ ДополнительныеНачисления.Сотрудник КАК Сотрудник, ДополнительныеНачисления.Подразделение КАК Подразделение, ДополнительныеНачисления.Результат КАК СуммаПремии, ДополнительныеНачисления.Параметр КАК ПроцентПремии ИЗ РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления ГДЕ ДополнительныеНачисления.ПериодРегистрации = НАЧАЛОПЕРИОДА(&МесяцОтчета, МЕСЯЦ) И ДополнительныеНачисления.Активность |
|||
14
Serg_1960
17.03.22
✎
13:28
|
(13) Вы не указали конфигурацию - это не есть хорошо :( Почему? Потому, что в УПП, например, всегда используется конструкция "НАЧАЛОПЕРИОДА(ДополнительныеНачисления.ПериодРегистрации, МЕСЯЦ)" в условиях с параметром. Чтобы не заморачиваться с датами со временем и без времени.
|
|||
15
Гипервизор
17.03.22
✎
13:40
|
(14) А в УПП эталонный код? )
|
|||
16
vde69
17.03.22
✎
13:42
|
НАЧАЛОПЕРИОДА в запросах довольно медленная операция.... не советую так делать
|
|||
17
Вафель
17.03.22
✎
13:43
|
(16) сама операция конечно же НЕ медленная.
Медленное это когда изза нее в индекс не попадают |
|||
18
Serg_1960
17.03.22
✎
13:45
|
(15) А если у автора ветки именно мамонт времён УПП? Или в ЗУПе 3 есть ДополнительныеНачисления? Эх, ма... "эталонный код" - нет, сынок, это фантастика :)
|
|||
19
Гипервизор
17.03.22
✎
13:50
|
(18) Вопрос про эталонность был риторическим. Надо писать как в конфигурации?
|
|||
20
Serg_1960
17.03.22
✎
13:59
|
(19) Угу :( Надо использовать те-же алгоритмы и конструкции :(
|
|||
21
Гипервизор
17.03.22
✎
14:15
|
(20) Поясните позицию. Может у ТС внешний отчёт.
И одно дело использовать существующие алгоритмы и конструкции, например, не изобретая имеющиеся в общих модулях функции, а другое дело - писать свои доработки. Если в УПП повсеместно в коде глЗначениеПеременной("глТекущийПользователь"), будет ошибкой написать ПараметрыСеанса.ТекущийПользователь? А если в старой конфигурации работа с хешем, джейсоном и т.д. будет реализована через костыльные функции, не следует использовать возможности 8.3. при написании своего кода? |
|||
22
Serg_1960
17.03.22
✎
15:56
|
(21) Я не буду рассказывать про права доступа, про кэши, про режим совместимости и т.д. Просто оставлю ссылку:
"Использование параметров сеанса" https://its.1c.ru/db/v8std/content/413/hdoc |
|||
23
Гипервизор
17.03.22
✎
16:08
|
(22) Действительно, про это мне рассказывать не надо. Только к чему это было, не понял? Есть возможности 8.3, прекрасно работающие в режиме совместимости 8.2.
Вот перестанет сайт ИТС тупить - обязательно прочитаю. Но в любом случае это будет ответ на конкретный пример. А я просил пояснить позицию. |
|||
24
Serg_1960
17.03.22
✎
16:25
|
Sorry, а при чём тут "возможности 8.3, прекрасно работающие в режиме совместимости 8.2." если я говорил о правах доступа пользователя к параметрам сеанса и о чтении кэшированных данных? :(
|
|||
25
Гипервизор
17.03.22
✎
16:29
|
(24)А, это просто я неправильно понял упоминание режима совместимости..
|
|||
26
Serg_1960
17.03.22
✎
17:29
|
(25) А, ну да, согласен, не совсем к месту упомянул среди прочего. Просто хотел намекнуть, что не весь функционал платформы 8.3 можно использовать в полной мере, когда(если) он ограничивается режимом совместимости.
|
|||
27
NIGHTHUNTER
18.03.22
✎
01:46
|
(14) Это билет 4, задача по СПР, на экзамен по платформе.
|
|||
28
NIGHTHUNTER
18.03.22
✎
01:50
|
(14) Для правильности используется конструкция МЕЖДУ ?
Что значит всегда используется конструкция НАЧАЛОПЕРИОДА(ДополнительныеНачисления.ПериодРегистрации, МЕСЯЦ) ? Мне нужно что бы выборка была за календарный месяц. Получается это делается с оператором МЕЖДУ, никак не без него. (16) Это для решения относительной задачи. Не для практического использования. А каким ещё образом, можно сделать что бы в выборке были только данные одного месяца? |
|||
29
NIGHTHUNTER
18.03.22
✎
03:46
|
так будет тогда?
ВЫБРАТЬ ДополнительныеНачисления.Сотрудник КАК Сотрудник, ДополнительныеНачисления.Подразделение КАК Подразделение, ДополнительныеНачисления.Результат КАК СуммаПремии, ДополнительныеНачисления.Параметр КАК ПроцентПремии ИЗ РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления ГДЕ ДополнительныеНачисления.ПериодРегистрации МЕЖДУ НАЧАЛОПЕРИОДА(&МесяцОтчета, МЕСЯЦ) И КОНЕЦПЕРИОДА(&МесяцОтчета, МЕСЯЦ) И ДополнительныеНачисления.Активность |
|||
30
DEVIce
18.03.22
✎
04:01
|
(11) Задачи про оптимизацию не стояло. Человек спросил почему не работает, я ему дал рабочий код. Оптимизирует потом пусть сам.
|
|||
31
DEVIce
18.03.22
✎
04:03
|
(29) Да, тоже вариант.
|
|||
32
DEVIce
18.03.22
✎
04:04
|
(29) А можно двумя параметрами &НачПериода и &КонПериода, где у тебя уже сразу граничные даты и тогда в запросе не нужны НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА.
|
|||
33
NIGHTHUNTER
18.03.22
✎
04:17
|
(32) Да, и как говорят в (11) это между, нужно вынести на уровень параметров СКД . Не в запросе что бы.
|
|||
34
DEVIce
18.03.22
✎
04:21
|
(33) Херню они говорят. Все зависит от задачи. В СКД тоже куча разных вариантов. В СКД я бы завел свой отдельный параметр с типом СтандартныйПериод, который был бы доступен пользователю, от него бы заполнял параметры &НачПериода и &КонПериода, а они бы использовались в запросе в МЕЖДУ.
|
|||
35
NIGHTHUNTER
18.03.22
✎
05:33
|
(34) Да, не сказать что они не то говорят.
Они про оптимизацию имеют ввиду. Jчевидно правильнее делать это на уровне СКД. Это да, 2 параметра на форме. Но тут именно задача, что пользователь, должен например на форме видеть список со значениями месяцев и годов. Что бы он не выбрал, отчет должен быть за месяц. По этому тут вижу как верный вариант (29), пользователь выбирает любую дату, а от нею идет расчет отбора на необходимый в выборке месяц. Как правильнее сделать (11) ? http://joxi.ru/4AkMw4vujMY7Dm |
|||
36
NIGHTHUNTER
18.03.22
✎
05:43
|
Как вот эти параметры перенести на уровень СКД, то есть вопрос, -
ВЫБРАТЬ ДополнительныеНачисления.Подразделение КАК Подразделение, ДополнительныеНачисления.Сотрудник КАК Сотрудник, ДополнительныеНачисления.Параметр КАК Параметр, ДополнительныеНачисления.Результат КАК Результат ИЗ РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления ГДЕ ДополнительныеНачисления.ПериодРегистрации МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоМесяца, МЕСЯЦ) И КОНЕЦПЕРИОДА(&НачалоМесяца, МЕСЯЦ) И ДополнительныеНачисления.Активность |
|||
37
1Снег
18.03.22
✎
06:21
|
(36) Например так:
Запрос: ВЫБРАТЬ ПриходнаяНакладная.Ссылка КАК Ссылка, ПриходнаяНакладная.Номер КАК Номер, ПриходнаяНакладная.Дата КАК Дата ИЗ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная ГДЕ ПриходнаяНакладная.Дата МЕЖДУ &ДатаНач И &ДатаКон На закладке Параметры: https://ibb.co/F6MyMD8 |
|||
38
ILM
модератор
18.03.22
✎
06:21
|
1)
ГДЕ НАЧАЛОПЕРИОДА(ДополнительныеНачисления.ПериодРегистрации, МЕСЯЦ) = НАЧАЛОПЕРИОДА(&ДатаОтчета, МЕСЯЦ) И ДополнительныеНачисления.Активность 2) ГДЕ ГОД(ДополнительныеНачисления.ПериодРегистрации) *100 + МЕСЯЦ(ДополнительныеНачисления.ПериодРегистрации) = &ГГГГММ |
|||
39
1Снег
18.03.22
✎
06:23
|
(38) Ну вам же уже писали знаючие товарищи выше, НЕ ИСПОЛЬЗУЙТЕ функции в условии, поиск по индексу тогда не выполняется
|
|||
40
DEVIce
18.03.22
✎
07:11
|
(39) Это только в том случае, если индекс есть на этом реквизите, а не вообще универсально везде.
|
|||
41
Вафель
18.03.22
✎
07:13
|
Условие без функции завсегда лучше условия с функцией
|
|||
42
NIGHTHUNTER
18.03.22
✎
07:35
|
(37) Да. Спасибо! По снимку ясно что в выражениях это нужно задать!!!!
|
|||
43
NIGHTHUNTER
18.03.22
✎
07:36
|
(38) Эти махинации сразу не доходят. нужно вникать.
В (37) все предельно ясно. Аналог (36), с параметрами в СКД. |
|||
44
ILM
модератор
18.03.22
✎
12:03
|
(39) Функции обработки дат, строк и чисел работают нативно в SQL, до выполнения запроса, функция используется к выражению индекса.
Разница исполнения запроса будет заметна на 10ч млн записей. У ТС явно нет такого объема. |
|||
45
Said_We
18.03.22
✎
12:49
|
(0) Если это ЗиУП 2.5, то период регистрации в регистре расчета всегда помесячно. Т.е. в поле "ПериодРегистрации" всегда хранится начало какого-то месяца. Ни больше и не меньше даже на секунду, а всегда 01.хх.уууу 00:00:00.
Не надо тут ничего ни куда приводить. Параметр передавать как начало месяца и не усё. |
|||
46
Said_We
18.03.22
✎
12:52
|
ГДЕ
ДополнительныеНачисления.ПериодРегистрации = &НачалоМесяца_Какого_то |
|||
47
hhhh
18.03.22
✎
13:11
|
(43) а как звучит вопрос с экзамена? А то может быть в регистре нет поля ПериодРегистрации, а мы тут развели обсуждение.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |