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