Имя: Пароль:
1C
 
НАЧАЛОПЕРИОДА в запросе (задание на экзамене по платформе)
,
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) а как звучит вопрос с экзамена? А то может быть в регистре нет поля ПериодРегистрации, а мы тут развели обсуждение.