Все правильно, но результат не тот… – или чем отличаются условия в запросе от условий в параметрах виртуальной таблицы :)

В работе с 1С нужна определенная осторожность и внимательность :)

Порой даже стандартные, рекомендуемые методы могут привести к некорректному результату.

Вот пример про запросы:

Простая задача: нужно отобрать из регистра сведений информацию о сотрудниках и их должностях.

Каковы стандартные рекомендации? – использовать условия отбора через параметры виртуальной таблицы, потому что это быстрее.

Логично? – Да.

Но результат может оказаться в корне неверным.

Сегодняшнее видео – как раз про такой случай.

Рассмотрим два способа решения задачи выше:
  • задать отбор в параметрах виртуальной таблицы
  • выполнить отбор через обычное условие в запросе

И мы на примере увидим, что хотя первый вариант работает быстрее, но результат может быть неправильным.

А второй вариант, хотя в целом работает медленнее – но дает нам именно то, что просили.

Хотя, безусловно, в 1С нет правильного и неправильного, есть инструментарий, которым нужно уметь пользоваться : )

Итак, предлагаем за 9 минут разобрать – в чем отличие между исполнением отбора через условие в запросе или условие в параметрах виртуальной таблице.

Приятного просмотра!

Ключевые моменты видео:
  • 00:00 – Общее описание задачи по работе с параметрами виртуальных таблиц (ВТ)
  • 00:26 – Задание отбора в параметрах ВТ и в условиях запроса
  • 01:15 – Демонстрация отличий в отборах через условия и через параметры ВТ
  • 04:06 – Объяснение результатов
  • 06:04 – Последовательность выполнения действий в рамках запроса
  • 08:00 – Как делать правильно: ставить параметры в условиях запроса или в параметрах виртуальных таблиц?

P.S.

Понимать, как работают запросы и уметь их строить - обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
Программа, стоимость, условия и регистрация в группу: «Запросы в 1С 8.3, Базовый курс (с нуля до уровня Специалист по платформе)» Для всех, кто внедряет и дорабатывает 1С.

Комментарии / обсуждение (45):

  1. adamx

    Отлично. На таблицу регистра наложили условие ( убрали часть строк – часть истории по сотруднику) и сделали запрос среза последних. В итоге неверный результат.
    А в каких случаях надо делать и не надо так делать и почему так произошло – ни слова :-))).

    Для наглядности можно строки было бы подсветить, которые уберутся из за первого условия к виртуальной таблице… А так – поняли те, кто и так понимает как все работает….

    • Дмитрий Аксенов

      Добрый день.
      Рассмотрите следующую аналогию:
      Я рассказал в курсе про два разных механизма: соединения и объединения, но не сказал, в каких случаях надо делать и не надо так делать. Причина в том, что это 2 разных механизма, в каждом конкретном случае надо думать, какой способ использовать.
      Я рассказал про два разных механизма установки условий. Пример наглядно показывает, что условия можно ставить двумя разными способами, и работать будет по разному. В каждом конкретном случае надо думать, какой использовать.
      Почему произошло – по причине того, что в разном порядке запросе обрабатываются условие отбора и соединение таблиц. В ролике об этом сказано.

  2. SnowMan83

    По моему, эту особенность разбирал Евгений еще лет 10 назад, толи в профессиональном курсе, толи в бесплатках каких то к нему еще на старом сайте. Евгений вообще давал столько материала, что видео нужно пересматривать каждые полгода. Теперь таких курсов уже нет, победил маркетинг… старые курсы уже не в продаже. Тема по запросам уже настолько баянистая, что сложно найти свежий вопрос в этой теме. Может кортежи? А может и их раньше рассматривали. Ну тогда дали бы рекомендации по применению реальной таблицы среза последних или не применения ее, например, чисто из-за некоторой новизны данной вазможности

    • Юлия Толстых

      Алексей, тут не в маркетинге дело :)

      Нельзя же записать курс 10 лет назад и забыть обо всем. Любой новый человек откроет видео, увидит формы и даты 2012-го года – и закроет в ужасе. Почему? Потому что это выглядит откровенно устаревшим. И говорить “нет-нет, все работает так же” – это такое…

      И это Вы помните, что было 10 лет назад, а есть масса людей, которые пришли в профессию в этом году – повториться для них не будет лишним :)

      Плюс, как ни крути, платформа тоже не стоит на месте.

      Поэтому старые курсы снимаются с продаж, записываются новые – по мере сил и свободной воли авторов.
      Можно, конечно, попробовать приковать Евгения к батарее и заставить переписать курсы 2010-2013 годов – только он не дается :)) Свободная воля и все такое.

      По поводу рекомендации по применению реальной таблицы среза последних или не применения ее услышали, автору передадим, спасибо! : )

  3. mrvaldem

    Особенностей тут никаких нет).
    1. Нужно понимать различие между измерениями и ресурсами.
    2. Понимать как получается срез последних – фактический это левое соединение. Есть исключение, когда используется фактическая таблица среза.
    Урок про “запомните и делайте так”. А нужно рассказать механизм получения и тогда все станет понятно.

    • Дмитрий Аксенов

      Добрый день. Цель ролика показать различие в механизмах запроса. Что параметры виртуальной таблицы не дублируют условие запроса.

  4. philipenko77

    Тем кто эту тонкость знали приятно почувствовать себя крутым.
    Те кто не знали вряд ли поняли причину)
    Автору в любом случае спасибо.
    Активностью публики поражен)

  5. axae

    Считаю, что очень зря автор уходит от упоминания ресурсов и измерений – именно эти понятия и определяют структуру виртуальной таблицы “СрезПоследних”. Измерения не меняются в срезах, поэтому на них можно накладывать отборы, для того, чтобы получить значение ресурса на момент “СЕЙЧАС”, как сказано в условиях задачи. А вот ресурсы меняются в виртуальной таблице, поэтому нужно понимать, что отбор по ресурсу в отборах виртуальной таблицы делает результат выборки некорректным по отношению к условию задачи.

    Вроде как раньше, в прежних версиях платформы, нельзя было в виртуальной таблице делать отбор по ресурсам, это какое-то новомодное веяние.

    • Дмитрий Аксенов

      Добрый день. Цель была показать различия в механизмах, что отборы в параметрах ВТ не дублируют условие в запросе. Как и зачем этим пользоваться потом, это отдельная тема, связанная уже не с запросами, а с регистрами.

  6. Анна

    Зря потраченные 9 минут. Цель ролика заманить на курс, а не объяснить причины расхождений.

    • Кузьмин Сергей

      Цель ролика – показать, что следование правилам без понимания иногда приводит к потере времени на удивление. Да, он ‘новичковый”, но мы все когда-то были новичками.

  7. Александр Терентьев

    Рассказали бы почему такая “особенность”: что запрос к виртуальной таблице – это фактически 2 запроса к реальной таблице, и условие, которое указано в скобках накладывается на одну из таблиц, поэтому при их соединении получается такой результат, а условие ГДЕ накладывается на записи уже после соединения этих таблиц.
    А не просто “есть особенность”…

    • Дмитрий Аксенов

      Цель ролика это не объять необъятное, а обратить внимание на разницу в работе. Что есть 2 разных механизма, они работают по-разному. Каждый из них “правильный” если применяется к месту.

  8. Анатолий

    Все таки стоило объяснить, что оба запроса не просто правильные, а в чем смысл логики результата каждого.
    в одном – кто сейчас занимает должность
    в другом – кто последним занимал должность

    • Дмитрий Аксенов

      Да нет тут смысла. Есть 2 разных механизма запроса и пример, который эту разницу демонстрирует. Если Вы эту разницу видите, то цель ролика достигнута.

      • Александр Терентьев

        Видимо, цель ролика – просто показать, что это «не баг, а фича», а не рассказать почему так получается..

        • Дмитрий Аксенов

          Да. Дать первичное представление достаточное для начала дальнейшего изучения. И проиллюстрировать наглядно те формальные требования, которые есть при работе с регистрами.

  9. Михаил Морокин

    Автор не делает различия между измерением (Сотрудник) и ресурсом (Должность).
    Не кажется странным вообще накладывать отбор по ресурсу в параметрах виртуальной таблицы?
    Сама логика регистра сведений это хранить некий результат (ресурс) в разрезе измерений. А в видео мы на результат, который хотим получить, заранее накладываем определенный отбор.
    Кстати, для программного варианта СрезПоследних в синтакс-помощнике упоминаются только измерения и реквизиты.

    (необязательный)
    Тип: Структура.
    Структура, содержащая отбор по измерениям и реквизитам регистра.

    Тема, на мой взгляд, раскрыта не до конца.

    • Дмитрий Аксенов

      Автор специально уходит от упоминания ресурсов или измерений. Смысл ролика в том, что есть 2 разных механизма запроса и пример, который эту разницу демонстрирует. Если Вы эту разницу видите, значит либо цель ролика достигнута, либо Вы и так это знали.

      • Олег

        Михаил хотел сказать, что параметрами виртуальной таблицы необходимо пользоваться, когда надо наложить отборы именно по измерениям, а уже потом из получившегося множества записей отобрать нужные по ресурсу.
        и зачем автор специально уходит от понимания измерения и ресурсов? это как раз-таки тут и важно! он должен был бы сделать акцент именно на это!

        • Дмитрий Аксенов

          Есть причина, а есть следствие. Причина это то, что в запросах 2 разных механизма. Следствие этого отбор по измерениям в параметрах вт. Ролик про причины. И на уровне таблиц, с которыми работает запрос, понятия измерений, ресурсов и реквизитов в данном случае не важны. Так же, например, когда делается соединение. Соединение происходит по полям вне зависимости от того измерение это или нет.

  10. Светлана

    Мне кажется, это пример не по заявленной теме. Это нюанс работы регистра сведений. При чем, если измерений больше одного. Ясно, что срез.. работает по совокупности измерений.

    • Дмитрий Аксенов

      Пример показывает работу 2х разных механизмов. Это не зависит от количества измерений и вида регистра. Есть 2 разных механизма, они работают по разному. Надо брать тот, который в данном конкретном случае нужен.

  11. Евгений

    Добрый день.
    Так может просто не стоит использовать отбор в виртуальной таблице по ресурсам?

    • Дмитрий Аксенов

      Посмотрите пример. Показаны варианты, когда в одном случае надо использовать параметры ВТ, а в другом случае надо использовать условие запроса. 2 разных механизма, каждый нужен для своих целей

      • Евгений

        И для какой цели может понадобится делать отбор в виртуальной таблице среза по ресурсу?

        • Дмитрий Аксенов

          Да какая разница, ресурс или нет? Есть 2 разных механизма, надо понимать разницу в их работе. Здесь эта разница явно видна разница. Всё. Точка. На этом пример закончен. Нельзя рассказать всё в рамках одного короткого ролика.

          • Роман

            Так это правильное замечание, что тему имело смысл чуть раскрыть и дополнить, что без отбора по изменениям надо задуматься стоит ли делать отбор по ресурсу. Редко встречал задачи корректным результатом которых будет отбор по ресурсу без отбора по изменениям в параметрах Вирт таблицы периодического регистра сведений. Ну а в целом видео действительно полезное, чтобы каждый кто посмотрел задумался и закрепил знания.

            • Дмитрий Аксенов

              Я специально ухожу от понятий измерения и ресурсы. Эти понятия связаны со структурой объекта, которую надо отдельно разбирать. Данный же курс посвящен запросам, причем большей частью для людей, которые не очень глубоко в теме вообще. Поэтому цель была именно обратить внимание на то, что есть разные возможности, они все “правильные”. Только это предполагает изучение еще большого числа сопутствующих тем, чтобы понять, когда и какой механизм применять

              • Евгений

                Так возможности и будут разными от того, по измерению или ресурсу будет отбор. Человек должен понимать, что он делает в запросе, а не просто тыкать во все возможные поля в конструкторе. Возможности есть разные и некоторые из них как раз таки “неправильные”.

                • Дмитрий Аксенов

                  Нет. Не правильно. Зависит не от того, ресурс это или измерение, а от того, что работает по разному.

          • Олег

            Дмитрий, никогда не пробовали рассматривать регистр сведений как некий многомерный (многоуровневый) массив?
            я прекрасно понял, что Вы упор делаете на то, что в одном случае сначала делается срез, а потом отбор; а в другом – сначала отбор, а потом срез.
            на мой взгляд это само собой следует из самих этих виртуальных таблиц, что сначала выполняется условие (отбор), который накладывается на ВТ, а потом уже происходит срез, остатки или что-то ещЁ из полученного множества после отбора.
            я думаю, в данном видео нужно обратить внимание зрителей на то, где какие данные хранятся в представленном регистре сведений, то есть измерения и ресурсы. и демонстративно показать, что накладывать условия отбора в ВТ на ресурсы технически можно, но в таком случае результат будет отличным от ожидаемого. и следом же сказать, что различия между двумя способами отбора.

            • Дмитрий Аксенов

              Курс посвящен работе с запросами. Поместить в один курс все невозможно. Ролик демонстрирует очевидный для Вас момент, но очевиден он далеко не всем. Цель ролика показать что есть 2 разных механизма, это не дублирование и не случайность. Все остальное это отдельная большая тема связанная с устройством объектов, с методологией их использования. Но это уже не имеет прямого отношения к запросам!

  12. Алекс

    Интересно, конечно, но в начале длительное вступление. в конце тоже затянули.
    в периодическом регистре сведений в срезе последних делать условие в таблице на реквизит это вообще не по-христиански

    • Дмитрий Аксенов

      Реквизиты вообще не используются. Эти “затянутые” начало и конец в моем понимании представляют главную ценность ролика

      • Melkiy

        А если наложить отбор на параметры ВТ, а потом еще на секцию где, у нас получается 2 таблицы СрезПоследних: первая из ВТ с параметрами, а потом из нее делаем так же срез и условие в секции где?

        • Дмитрий Аксенов

          Добрый день. Не очень понятен вопрос, о чем вообще идет речь?
          Виртуальная таблица формируется платформой на основании данных регистра. Построить виртуальную таблицу на основании каких – то других данных невозможно. Откуда и как получаются две таблицы непонятно.
          Что и с какой целью Вы хотите сделать?

          • Melkiy

            Хочу наложить отборы на параметры ВТ и в секции ГДЕ. Как будет работать запрос в таком случае?

            • Дмитрий Аксенов

              Добрый день. В начале будет с формирована виртуальная таблица, согласно условиям в ее параметрах. После этого к ней применится условие, описанное в секции ГДЕ.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.