Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 2. Синтаксис текста запроса

На данной странице задавайте вопросы по материалам и практическим заданиям второго модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».

Практические задания

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

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

  1. ThurisazGudleifr

    6 видео 2 модуля:

    Для ссылки сначала обращение к БД для вывода Ссылки, а потом еще обращение для вывода представления этой ссылки. Для получения виртуального поля Представление всего одно обращение, поэтому его и рекомендовано выводить в отчете?

    • Ольга Дмитриева

      Здравствуйте.
      Да, вы всё верно поняли.

  2. ThurisazGudleifr

    Такой запрос с методической точки зрения составлен неправильно?

    ВЫБРАТЬ
        РеализацияТоваров.Контрагент КАК Контрагент
    ИЗ
        Документ.РеализацияТоваров КАК РеализацияТоваров
    ГДЕ
        РеализацияТоваров.Товары.Номенклатура = &Номенклатура

    Почему Вы именно так его написали? Ведь и верхний вариант работает

    ВЫБРАТЬ
        РеализацияТоваровТовары.Ссылка.Контрагент КАК Контрагент
    ИЗ
        Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    ГДЕ
        РеализацияТоваровТовары.Номенклатура = &Номенклатура

    Так как, если бы задача стояла еще и номенклатуру вывести, то он был бы составлен некорректно?

    • Ольга Шапкина

      Добрый день!
      Рабочие оба варианта, но второй более производительный. В первом варианте вы для каждого документа РеализацияТоваров выбираете данные из ТЧ Товары и затем накладываете фильтр на вложенный запрос. Во втором варианте вы сразу работаете непосредственно с таблицей ТЧ. Последний вариант быстрее. Если бы стояла задача вывести дополнительно номенклатуру, то запрос выглядел бы так:

      ВЫБРАТЬ
      РеализацияТоваровТовары.Ссылка.Контрагент КАК Контрагент,
      РеализацияТоваровТовары.Номенклатура КАК Номенклатура
      ИЗ
          Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
      ГДЕ
          РеализацияТоваровТовары.Номенклатура = &Номенклатура
  3. ThurisazGudleifr

    Добрый день!
    Часто вижу, что разработчики помещают результат запроса в выборку, после чего обходят ее записи.

    1) Использование выборки более производительнее, чем выгрузка результата запроса в таблицу значений и дальнейший ее обход в цикле? По логике это ведь равнозначные операции?
    2) В каких ситуациях использовать выборку методически более правильно?

    Касаемо ТЗ на ум приходит то, что она в основном служит для передачи ее параметром в другие процедуры\функции, а также загрузки тз в табличную часть, а с записями выборки логичнее работать сразу после получения ее из запроса, например, для создания новых элементов справочника или модификации старых, верно?

    • Ольга Шапкина

      Добрый день!
      1) По производительности это практически равнозначные операции. Только при работе с ТЗ это будет два действия — поместить и обойти, а при работе с выборкой результата запроса — только обойти.
      2) Ну вы в принципе сами же и ответили на свой вопрос. ТЗ мы чаще используем, когда нужно «попридержать» данные для дальнейших каких-либо преобразований, передач и пр. Т.е. используем как промежуточное место хранения результата.
      Обход же выборки предполагает, что мы поработали с записью выборки и больше она нам не нужна — идем дальше. Существует несколько разных способов обхода выборки – в линейном порядке, в иерархическом порядке или по группировкам. Таких возможностей нет у ТЗ. Эти возможности особенно интересны и полезны при разработке отчетов.

  4. Andrey_Solovyev

    Добрый день
    Сработает ли конструкция НЕ Договор.Заказ В (&СписокЗаказов) для пустых ссылок или нужно отдельно Договор.Заказ = Значение(Справочник.Заказы.ПустаяСсылка) или НЕ Договор.Заказ В (&СписокЗаказов). Спасибо

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  5. Andrey_Solovyev

    Добрый вечер, Василий
    Может все же есть способ обращаться из конструктора запроса к значениям перечислений или предопределенным элементам конфигурации для добавление в функцию Значение()? Бывает что и запрос не свернуть и значение забудешь:-(

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  6. Tanja

    Добрый день! Подскажите, пожалуйста, как выделить сразу все документы продажи, чтобы, например, сделать все не проведенными?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  7. Artemka92

    После переопределения основного представления справочника «номенклатура», при обращении к этому справочнику и к любым полям, имеющим ссылку на этот справочник, вылезает ошибка «Преобразование значения к типу Число не может быть выполнено». С чем это связано и как исправить?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  8. Tanja

    Добрый день! Почему в УПОРЯДОЧИТЬ ПО, когда задаешь поле Цена, все прекрасно упорядочивается, а вот по полю Товар никак не хочет, скрины прилагаю!

    %D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%BF%D0%B8%D0%BD%D0%B5%D1%82%D0%BA%D0%B8%20%D0%B2%D1%8B%D1%88%D0%B5%20%D1%87%D0%B5%D0%BC%20%D0%BC%D0%BE%D0%BB%D0%BE%D0%BA%D0%BE.JPG%D0%A3%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%20%D1%86%D0%B5%D0%BD%D0%B5.JPG

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Tanja

        Применила АВТОУПОРЯДОЧИВАНИЕ на примере, где разбирала ключевое слово РАЗЛИЧНЫЕ, добавила АВТОУПОРЯДОЧИВАНИЕ и получила нужный результат, товары в алфавитном порядке, слово РАЗЛИЧНЫЕ убрала, чтобы видеть сметану по 48 руб, в повторяющихся строках. Еще раз, спасибо!

        %D0%90%D0%B2%D1%82%D0%BE%D1%83%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.JPG

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  9. knn

    Здравствуйте.
    После входа в «модельную» базу через несколько секунд выходит ошибка «обнаружено нарушение целостности системы».
    Ниже тест, если нажать «показать информацию для технической поддержки»:
    «Платформа: 1С:Предприятие 8.3 (8.3.13.1513)
    Конфигурация: Профессиональная разработка запросов в 1С:Предприятие 8 (1.1)
    Режим: Файловый (без сжатия)
    Приложение: Толстый клиент
    Локализация: Информационная база: русский (Россия), Сеанс: русский
    Вариант интерфейса: Версия 8.2

    Ошибки:
    ———————————————————————————
    02.01.2019 22:40:14
    Обнаружено нарушение целостности системы»
    После этого предлагается закрыть или перезапустить. В базе нельзя работать. Подскажите, пожалуйста, что с этим делать?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  10. Power_on

    Во 2 задании 2 модуля использую такой текст запроса:
    ВЫБРАТЬ ПЕРВЫЕ 1
    ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
    ПоступлениеТоваровТовары.Цена КАК Цена
    ИЗ
    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
    ГДЕ
    ПоступлениеТоваровТовары.Номенклатура = &Номенклатура
    И ПоступлениеТоваровТовары.Ссылка.Проведен
    УПОРЯДОЧИТЬ ПО
    Цена УБЫВ

    Он отличается от указанного в решении, где используется группировка и агрегатная функция.
    Какой запрос оптимальнее и почему?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Power_on

        Понял. Просто я просмотрел сначала всё видео модуля, а только потом стал делать ДЗ.

  11. Ян

    Решал задачу про телефоны, записанные некорректно, решил иначе, чем приведено в курсе
    (по опыту работы с базами..)
    А можно ли более компактно написать такой шаблон?
    Спасибо!

    %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA3.JPG

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  12. Ян

    Здравствуйте, Василий!
    Возникло два вопроса по консоли запросов..
    1) Почему-то в консоли запросов могу только вручную написать условие для цены. Это отличие версии или такой режим?
    2) Есть ли какая-то настройка, чтобы попасть в документ из результатов запроса (расшифровка)?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Ян

        Да, под тонкий клиент, оказывается. Спасибо!
        Про ссылку тоже понял.

  13. Елена

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

    %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA.JPG

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Елена

        Захожу под администратором — других пользователей в модельной базе нет… Просмотрела все установленные галочки для роли ПолныеПрава. Как проверить права на запись в каталог, указанный на скриншоте, не знаю. Научите, пожалуйста.
        Использую 1С:Предприятие 8.3, учебная версия (8.3.13.1644) и Модельную базу для решения практических заданий, приведенную на данной странице. Все настройки по умолчанию, ничего не меняла.

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  14. Елена

    Здравствуйте!
    Сегодня скачала с сайта ИТС обработку КонсольЗапросов для запуска в 1С:Предприятие версии 8.3. (дата ее изменения 31.01.2018). При вызове Конструктора запроса из поля «Текст запроса: » возникает ошибка. К сожалению, моих знаний на данный момент времени недостаточно, чтобы самостоятельно понять как исправить эту ошибку. Помогите, пожалуйста. Снимок с текстом ошибки прилагается. Спасибо.

    %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA.JPG

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  15. d.teremkov

    Спасибо огромное! Но возник следующий вопрос: в SQL Server Profiler все равно не удается получить один итоговый запрос, если в запросе 1С используется временные таблицы. Это уже по сути получается пакет запросов. Я так понимаю в этом случае и не получится получить запрос одним текстом как в 1С, а нужно из SQL Server Profiler вытаскивать создание каждой временной таблицы и конечный запрос, а потом выполнить их всех вместе в SQL Server Management Studio? Если это так, то подскажите по каким (хотя бы косвенным) признакам можно определить необходимые нам запросы, отделив их от служебных.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  16. d.teremkov

    Здравствуйте!
    Консоль запросов формирует следующий SQL-текст запроса:
    SELECT
    T1._IDRRef
    FROM dbo._Reference16 T1
    LEFT OUTER JOIN (SELECT
    T5._Fld2794_TYPE AS Fld2794_TYPE,
    T5._Fld2794_RTRef AS Fld2794_RTRef,
    T5._Fld2794_RRRef AS Fld2794_RRRef,
    T5._Fld2795RRef AS Fld2795RRef
    FROM (SELECT
    T4._Fld2794_TYPE AS Fld2794_TYPE,
    T4._Fld2794_RTRef AS Fld2794_RTRef,
    T4._Fld2794_RRRef AS Fld2794_RRRef,
    T4._Fld2795RRef AS Fld2795RRef,
    MAX(T4._Period) AS MAXPERIOD_
    FROM dbo._InfoRg2793 T4
    GROUP BY T4._Fld2794_TYPE,
    T4._Fld2794_RTRef,
    T4._Fld2794_RRRef,
    T4._Fld2795RRef) T3
    INNER JOIN dbo._InfoRg2793 T5
    ON T3.Fld2794_TYPE = T5._Fld2794_TYPE AND T3.Fld2794_RTRef = T5._Fld2794_RTRef AND T3.Fld2794_RRRef = T5._Fld2794_RRRef AND T3.Fld2795RRef = T5._Fld2795RRef AND T3.MAXPERIOD_ = T5._Period) T2
    LEFT OUTER JOIN dbo._Chrc280 T6
    ON T2.Fld2795RRef = T6._IDRRef
    ON ((0x08 = T2.Fld2794_TYPE AND 0x00000010 = T2.Fld2794_RTRef AND T1._IDRRef = T2.Fld2794_RRRef) AND (T6._Description = ?))
    p_0: ‘контролер’

    Этот запрос не выполняется в SQL Server Management Studio из-за того, что наименование свойства вынесено в самый низ запроса: p_0: ‘контролер’, а вместо него в тексте запроса стоит вопросительный знак. В чём причина такого формирования SQL-текста запроса? И есть ли способ получить SQL-текст запроса, который можно скопировать и без редактирования выполнить в SQL Server Management Studio (чтобы этот способ работал для запросов любой сложности)?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Василий Ханевич


        (текст комментария доступен только участникам Мастер-группы)

  17. elfnatal

    Василий, спасибо вам! Очень интересные лекции!
    Про объектную модель запроса вообще впервые слышу. Теперь буду использовать.
    Сформировала план запроса в конфигурации с включенным режимом совместимости с 8.2 и в конфигурации 8.3.11.
    Воочию увидела, что теперь используется таблица итогов для среза последних!
    А в 8.2 получался максимальный период из основной таблицы и присоединялся к основной таблице.

    %D0%BF%D0%BB%D0%B0%D0%BD%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%20%D0%B2%208.2%20%D0%B4%D0%BB%D1%8F%20%D0%A1%D1%80%D0%B5%D0%B7%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D1%85.png%D0%BF%D0%BB%D0%B0%D0%BD%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%20%D0%B2%208.3%20%D0%B4%D0%BB%D1%8F%20%D0%A1%D1%80%D0%B5%D0%B7%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B8%D1%85.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  18. elfnatal

    Вопрос по видео 11.
    По какому алгоритму рассчитывается в запросе разность дат в днях?
    Пробовала разное время задавать, так что получалось почти 1 день с секундой и почти 3 дня.
    Например: 05.02.2018 0:00:01 и 07.02.2018 23:59:59; 05.02.2018 23:59:59 и 07.02.2018 0:00:01

    Но результат все равно выдает 2 дня. Получается в данном случае часы и минуты вообще игнорируются? Во всех случаях результат:

    РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ)=2

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  19. elfnatal

    В задании 8 в качестве решения указано:

    НЕ Контрагенты.Телефон подобно "+7(___)___-__-__"

    Мне кажется более универсально будет учесть вариант, когда в номер случайно вбили букву вместо цифры:

    НЕ Контрагенты.Телефон подобно "+7([0123456789][0123456789][0123456789])[0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]"
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  20. elfnatal

    И еще вопрос. У меня база развернута из дт, приложенного к базе. Консоль запросов скачала с ИТС. Но в ней нет кнопочки выполнить, которую показывает ведущий. Почему? Прикладываю две картинки — как в видео и как у меня.

    %D0%BD%D0%B5%D1%82%20%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B8%20%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D1%8C.png%D0%B2%D0%B8%D0%B4%20%D0%BE%D0%BA%D0%BD%D0%B0%20%D1%83%20%D0%BC%D0%B5%D0%BD%D1%8F.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  21. elfnatal

    Как будет более оптимально?

    ТоварыНаСкладахОстатки.Номенклатура.Представление

    Или

    Представление(ТоварыНаСкладахОстатки.Номенклатура)

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

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  22. Denis74

    Здравствуйте!
    Хочу спросить, влияет ли порядок условий на скорость выполнения запроса? Например, на выборку документов нужно наложить 4 условия: ПометкаУдаления, Наименование (Подобно), а также два поля для которых значениями являются два массива допустимых значений (в первом массиве 2 значения; во втором 4). В каком порядке следует расположить эти условия, чтобы производительность была оптимальной????

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Denis74

        Спасибо! А где можно поподробнее ознакомится с возможностями оптимизатора? Есть какая-то дополнительная информация?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  23. MDaryaA

    Здравствуйте.

    А почему для решения практического задания №5 берем регистр накопления именно виртуальная таблица Обороты, а не просто регистр Продажи? В чем их отличие?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  24. ParhomchikAN

    День добрый.
    вопрос по работе с менеджером временных таблиц.
    допустим в запросе1 мы создали временную таблицу — ВТ_Тест с полями номенклатура и количество. к запросу подключали менеджер ВТ.
    далее, после выполнения запроса, создаем новый текст запроса, но хотелось бы обратиться к временной таблице ВТ_Тест, созданной в запросе1. Приходится вручную создавать описание временной таблицы с указанием наименования полей. А если в таблице десятки полей?
    существует ли способ, позволяющий облегчить данный процесс?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • ParhomchikAN

        Спасибо, нечто подобное применяется при варианте добавления табличной части объекта в запрос через параметр.
        Сначала делаем обычный запрос к необходимым полям табличной части документа, после завершения работы конструктора, в тексте запроса ручками меняем имя ТЧ на &параметр в который и будем передавать нашу табличную часть. Заходим в конструктор запроса, помещаем все во временную таблицу..

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  25. ParhomchikAN

    День добрый.
    1 Вопрос по конструкцию языка запросов «ВЫРАЗИТЬ».
    Используется, чтобы привести поле «Документ» к некоторому определенному типу. Это позволит избежать соединений с лишними таблицами.
    А как быть, если нужен не один определенный тип документа, а, например, два.
    поступление и реализация?

    2 Так же интересует вопрос: в параметрах виртуальной таблицы «ВЫРАЗИТЬ» дает прирост производительности? исключает лишние соединения?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  26. Сергей

    Как происходит сортировка табличных частей, если она не задана явно? Происходит ли сортировка по номеру строки или она может быть произвольной? Требуется ли указание явной сортировки по номеру строки, если в алгоритме требуется, чтобы строки были упорядочены? Есть ли описание этого момента где-то в документации?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Сергей

        А как можно объяснить то, что в подавляющем большинстве случаев строки оказываются в порядке номеров строк? Это какие-то особенности СУБД?
        И еще вопрос не совсем по запросам, но может вы ответите. А в случае объектной работы с табличной частью порядок тоже может быть произвольным? Например в случае использования «ТабЧасть.Выгрузить()», «Для Каждого Строка Из ТабЧасть Цикл». Или здесь уже происходит неявная сортировка?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  27. ParhomchikAN

    Василий, день добрый!
    мы не проходили в курсе метод запроса ВыполнитьПакет()?
    Может быть есть где ознакомиться подробнее с методом?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  28. ParhomchikAN

    Василий, день добрый.
    подскажите, пожалуйста, есть ли решение следующей задачи:
    необходимо средствами запроса добавлять к числовому полю строку. и получать на выходе строку.
    например кол-во проданного товара с единицами измерения?
    10 шт.
    30 кг.
    Не получается через функцию выразить, работает только со своим же типом. т.е. число нельзя выразить как строку.
    как быть?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  29. Eldrasil

    Я мб зря накинулся по 8 часов изучать на старте запросы, но что то мозг совсем буксанул на формулировке на 84 странице 2 модуля.

    «Если ограничение доступа установлено на конкретное поле, такое поле будет получено из базы, если ограничение выполняется.
    Если ограничение доступа установлено на Прочие поля, данные будут получены, если ограничение выполняется для всех полей объекта, участвующих в запросе.»

    Я раз 18 прочел и не понял, что именно подразумевалось. Допустим я менеджер продаж, сделал отчем с таблицами и полями на которые у меня ограничение, я не увижу вообще поле? Или ограничение на данные, которые я получу? В общем просьба понять два этих предложения, мб просто сформулировать их под другим углом. За ранее, спасибо.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  30. Frostier1958

    Василий, почему в результате запроса, который выводит моя консоль, число строк указывается равным нулю, хотя это не так на самом деле?

    %D1%81%D1%82%D1%80%D0%BE%D0%BA_%D0%BD%D0%B5%D1%82.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  31. Frostier1958

    Василий, 1. почему мой план запроса не такой как у Вас?
    2. Куда идет мой комментарий в этом форуме, после того, как я нажимаю кнопку «добавить коммент»? Почему я его не вижу?

    %D0%9F%D0%BB%D0%B0%D0%BD%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  32. Frostier1958

    Василий, почему мой план запроса выглядит не так как у Вас?

    %D0%9F%D0%BB%D0%B0%D0%BD%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  33. SeOz

    Здравствуйте.
    Практическое задание №18. Далее мое мнение, не претензия.

    Приведенное решение справедливо только для управляемого интерфейса. Было бы корректно отметить это и привести решение, подходящее и для обычного интерфейса. Запросы ведь в любом интерфейсе присутствуют.
    Переопределять представление справочника через модуль менеджера в рамках курса по запросам, на мой взгляд, нелогично.
    Скорее следовало бы разработать свой запрос, который в последствии можно использовать вместо стандартной обработки в нужных обработчиках. Например, такой:

    ВЫБРАТЬ ПЕРВЫЕ 50
    Номенклатура.Артикул + «-» + Номенклатура.Наименование КАК НовоеПредставление,
    Номенклатура.Наименование КАК Наименование
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ЭтоГруппа = 0
    АВТОУПОРЯДОЧИВАНИЕ

    По-моему, в некоторых типовых «старых» конфах подобная замена представления и сделана.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • SeOz

        Я точно не вспомню в какой именно конфигурации, под рукой нет, чтобы посмотреть, но Вы сами привели две возможные.
        «Анализируется, в какой текст запроса на уровне СУБД оно разворачивается.» — стал понятен смысл задания, благодарю за ответ.
        Я полагал, что смысл иной — получить в т.ч. с помощью запроса новое формирование Представления. Вопросов нет.

  34. SeOz

    Здравствуйте.

    Прошел первые два модуля курса.
    По-моему, есть неполная информация.
    В методичке несколько раз упоминается, что «на MS SQL Server существует ограничение, не позволяющее использовать более 256 таблиц в запросе». Стр. 82, 117, например.
    Это ведь актуально только для 2005-й версии, MS SQL 2008 и более поздних версий не имеет такого ограничения, я не прав?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  35. avtom1c

    День добрый! Скачана консоль с сайта итс для 8.3 запускаю в тонком и толстом клиенте пробовал, но почему то в
    «Условиях» нет установки произвольного запроса, прикрепляю скрин

    %D0%BA%D1%81.jpg

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  36. Frostier1958

    Модуль 2, задание 14 (Работа с иерархическим справочником). Добрый день, при проверке значения, которое хранится в ячейке поля Регион (то ли там нуль, то ли пустое значение, то ли пустая ссылка) открываем обработку в конфигураторе с целью перехватить событие в отладчике. Напротив условия ЕСЛИ ТипЗнч (расшифровка…) ставим точку отладчика , затем
    ПЕРЕКЛЮЧАЕМСЯ В ПОЛЬЗОВАТЕЛЬСКИЙ РЕЖИМ, СОВЕРШАЕМ ДВОЙНОЙ КЛИК В ЭТОМ ПОЛЕ, ОСТАНАВЛИВАЕМСЯ НА ТОЧКЕ ОСТАНОВА ….. У меня никакой остановки в точке останова не происходит. Точка как была красной, так и осталась. Стрелки на ней нет. Может быть я неправильно переключаюсь в пользовательский режим? Может еще что?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  37. MarinaNovichoc

    Добрый день!
    При выполнении практического задания №16 по модулю 2 (когда хочу показать план выполнения запроса) выходит ошибка (прилагаю файл).
    Как ее избежать?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  38. Sher

    Почему не открывается план выполнения запроса?

    %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202018-02-09%20%D0%B2%2019.00.26.png

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  39. Nikolay

    Задание 12
    Запрос

    ВЫБРАТЬ
        Номенклатура.Наименование КАК Наименование
    ИЗ
        Справочник.Номенклатура КАК Номенклатура
    ГДЕ
        Номенклатура.ВидНоменклатуры = Значение(Перечисления.ВидыНоменклатуры.Услуга)

    Выдает ошибку:

    Поле не найдено "Перечисления.ВидыНоменклатуры.Услуга"
    Номенклатура.ВидНоменклатуры = Значение(<<?>>Перечисления.ВидыНоменклатуры.Услуга)

    В чем может быть проблема?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Nikolay

        Добрий день. А почему Перечисление, а не Перечисления? В конфигураторе указано Перечисления.

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  40. vladislav

    Здравствуйте!

    Тренер при выполнении практического задания № 8 использует регулярное выражение вида «+7(___)___-__-__».
    Но такое выражение будет включать в себя любые символы, не только числовые.
    Подскажите, пожалуйста, как составить выражение, которое бы проверяло еще и тип символов.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  41. porynov-a

    При открытии в пользовательском режиме в толстом клиенте Конструктора запросов в консоли запросов, выходит ошибка. Как ее исправить?

    1.jpg2.jpg

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • porynov-a

        ПОПРОБУЮ. НО ВЕДЬ ДЕЛО ТО В ТОМ, что в других ИБ работает, а в вашей нет, это ИБ из выгрузки Query-Homework-Template. ЕЩЕ ВОПРОС по теме: Группировка результатов запроса

        СУММА(РасходТовараТовары.Количество) КАК Количество

        это и есть агрегатная функция?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

      • porynov-a

        Во общем такая ситуация. Я обработку добавлял в конфигурацию, устанавливал ее в ПОДСИСТЕМУ —ЗАПРОСЫ. Но при запуске в Пользовательском режиме в подсистеме обработку не наблюдал. Тогда я ее загружал из файла в пользовательском режиме. Поэтому и возникала такая ошибка. Я ее удалив из конфигуратора. Загружаю из файла в толстом клиенте, возникает теперь ошибка (как в скрине), загружаю из файла в Тонком клиенте. вроде проблем нет. У меня конечно есть консоль, вашего исполнения: Console_Spec8_RU ( Это из курса «Быстрый старт в профессию», но она не запускается, вероятно она из под старой версией 8.2

        1.jpg

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

  42. Sher

    Добрый день!
    Почему некоторые видео ответы не запускаются? При вводе ключа компьютер не реагирует

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


      (текст комментария доступен только участникам Мастер-группы)

  43. h6.62606896

    МОДУЛЬ 2, ЗАДАНИЕ 2 (Почему запрос выдает две строки, а не одну с максимальной ценой закупки?)
    —-
    ВЫБРАТЬ
    ПоступлениеТоваров.Товары.(
    Номенклатура КАК Номенклатура,
    МАКСИМУМ(Цена) КАК Цена
    ) КАК Товары
    ИЗ
    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    ГДЕ
    ПоступлениеТоваров.Товары.Номенклатура = &Номенклатура

    СГРУППИРОВАТЬ ПО
    ПоступлениеТоваров.Товары.(Номенклатура)

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  44. Akorg

    Сегодня при решении очередной реальной задачи для ЕРП столкнулся с необъяснимым для меня поведением системы. Суть проблемы следующая. Параметр ЦеноваяГруппа может иметь по условию значения двух типов: Справочник.Номенклатура и Справочник.ЦеновыеГруппы. Пишу в консоли такой запрос:

    ВЫБРАТЬ
        &ЦеноваяГруппа ССЫЛКА Справочник.Номенклатура
        //&ЦеноваяГруппа ССЫЛКА Справочник.ЦеновыеГруппы

    при этом тип параметра ЦеноваяГруппа определяю как Номенклатура (Справочник.Номенклатура). Выполняю, получаю ожидаемый результат — одна запись, со значением Истина.
    Теперь меняю комментарии:

    ВЫБРАТЬ
        //&ЦеноваяГруппа ССЫЛКА Справочник.Номенклатура
        &ЦеноваяГруппа ССЫЛКА Справочник.ЦеновыеГруппы

    Пытаюсь выполнить запрос. Результата вообще нет! (При этом в реальной обработке выводилось сообщение о несовместимых типах для ссылки). Как это понимать? (Интересно, что сравнение вида ТипЗначения(&ЦеноваяГруппа) = Тип(Справочник.ЦеновыеГруппы) дает верный результат при любом значении параметра).

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Akorg

        Т.е. это ошибка платформы и надо писать в 1С?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

          • Akorg

            Вот, что ответили в 1С.
            «Дело в том, что язык запросов выдает эту ошибку если в типе проверяемого выражения отсутствует ссылка на проверяемую таблицу.
            Например, если поле содержит ссылку только на справочник «номенклатура», то нельзя проверять его на ссылку на справочник «Ценовые группы»».
            Тогда у меня вопрос: если в обработке я объявил реквизит составного типа (содержащий два перечисленных выше типа), то какого типа будет параметр запроса, если в него передать значение такого реквизита? Подозрение, что он не будет составного типа! Потому что, скажем, если составной тип получить в результате запроса, то все работает корректно. Вот такой пример:

            ВЫБРАТЬ ПЕРВЫЕ 1
                Номенклатура.Ссылка КАК Ссылка
            ПОМЕСТИТЬ ВременнаяТаблица
            ИЗ
                Справочник.Номенклатура КАК Номенклатура
            ГДЕ
                НЕ Номенклатура.ЭтоГруппа

            ОБЪЕДИНИТЬ ВСЕ

            ВЫБРАТЬ ПЕРВЫЕ 1

                ЦеновыеГруппы.Ссылка
            ИЗ
                Справочник.ЦеновыеГруппы КАК ЦеновыеГруппы
            ;

            ////////////////////////////////////////////////////////////////////////////////
            ВЫБРАТЬ
                ВременнаяТаблица.Ссылка КАК Ссылка,
                ВременнаяТаблица.Ссылка ССЫЛКА Справочник.Номенклатура КАК ЭтоНоменклатура
            ИЗ
                ВременнаяТаблица КАК ВременнаяТаблица

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

            • Василий Ханевич


              (текст комментария доступен только участникам Мастер-группы)

              • Akorg

                Получается, что лучше вообще не использовать проблемный оператор Ссылка, а применять универсальную функцию ТипЗначения.

                • Василий Ханевич


                  (текст комментария доступен только участникам Мастер-группы)

  45. janit

    Здравствуйте, имеется вопрос/замечание по 18й практической задаче.

    Имеем проблемную строку:

    Представление = Данные.Артикул + " - " + Данные.Наименование;

    В вашем примере ошибок нет и представление формируется как null по той причине, что вызовов процедуры ОбработкаПолученияПредставления для групп номенклатуры нет. В вашем варианте порядок полей добавления в процедуре ОбработкаПолученияПолейПредставления такой:

    Поля.Добавить("Артикул");
    Поля.Добавить("Наименование");

    Но стоит поменять порядок полей в массиве:

    Поля.Добавить("Наименование");
    Поля.Добавить("Артикул");

    И запрос начинает вызывать процедуру ОбработкаПолученияПредставления для групп. Что мы имеем: для групп недоступен реквизит, т.к. он установлен только для элементов, соответственно в конкатенации строк значение первой переменной = NULL и возникает ошибка приведения:

    Преобразование значения к типу Число не может быть выполнено.

    Первый вопрос: В чем причина такого поведения платформы, почему всего лишь из-за порядка полей источников меняется алгоритм работы?

    Для исправления такой особенности я написал следующий код:

    Если НЕ (Данные.Свойство("Наименование") И Данные.Свойство("Артикул")) Тогда
       
            Возврат;
       
        КонецЕсли;
       
       
        Если ЗначениеЗаполнено(Данные.Наименование) и ЗначениеЗаполнено(Данные.Артикул) Тогда
           
            СтандартнаяОбработка = Ложь;
            Представление = Данные.Артикул + " - " + Данные.Наименование;
           
        КонецЕсли;

    Второй вопрос. В «боевых» условиях такой подход применим? Как бы Вы решили подобную проблему, если менять порядок полей нельзя и надо как-то работать с тем, что есть?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

      • Lankaster

        У меня произошёл сходный случай. Чтобы Представление корректно отображалось и для групп и для товаров с пустым артикулом, использовал такой код:

        Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
           
            Поля.Добавить("Артикул");
            Поля.Добавить("Наименование");
            СтандартнаяОбработка = Ложь;
           
        КонецПроцедуры

        Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
           
            СтандартнаяОбработка = Ложь;
           
            Представление = "";
           
            Если Данные.Артикул <> NULL И Не ПустаяСтрока(Данные.Артикул) Тогда
                Представление = Данные.Артикул + " - ";
            КонецЕсли;
           
            Представление = Представление + Данные.Наименование;
           
        КонецПроцедуры

        При этом, если использовать такой порядок получения полей

        Поля.Добавить("Артикул");
        Поля.Добавить("Наименование");

        то в результате представление для групп всё равно получается NULL (хотя отладка показывает, что в случае групп переменной «Представление» на выходе присвоено корректное значение, совпадающее с наименованием).

        Но стоит поменять строки местами и поставить Наименование перед Артикулом

        Поля.Добавить("Наименование");
        Поля.Добавить("Артикул");

        и всё встаёт на свои места и консоль уже отображает нормальное текстовое представление и для групп.

        Есть ли какие-то соображения по поводу такого поведения платформы?

        • Василий Ханевич


          (текст комментария доступен только участникам Мастер-группы)

      • Lankaster

        Забыл прикрепить скрин к своему комментарию…

        %D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.jpg

  46. janit

    Здравствуйте, скажите, пожалуйста, какую конструкцию для определения типа Вы используете на практике в работе?

    ТИПЗНАЧЕНИЯ(ТоварныеЗапасы.Регистратор) = ТИП(Документ.РасходТовара)
    или
    ТоварныеЗапасы.Регистратор ССЫЛКА Документ.РасходТовара)

    Есть ли между ними разница в плане производительности?

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  47. Владимир

    Здравствуйте.
    При попытке повторить действия тренера в тестовой базе, после открытия Консоли запроса, и попытки добавить РегистрНакопления.Продажи (или любой другой объект базы) возникает ошибка которая не позволяет проводить практические задания на тестовой базе. Платформа 8.3.1.2924.

    %D0%9D%D0%B0%D1%80%D1%83%D1%88%D0%B5%D0%BD%D0%B8%D0%B5%D0%A6%D0%B5%D0%BB%D0%BE%D1%81%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8%D0%91%D0%B0%D0%B7%D1%8B.jpg%D0%A2%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8F%D0%9F%D0%BE%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B5.jpg

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  48. Akorg

    Вопрос по задаче 16. На мой взгляд, в приведенном решении не хватает предложения Различные, ведь никто не запрещает пользователю продать в одном документе один и тот же товар.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  49. Akorg

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

    ВЫБРАТЬ
        Контрагенты.Ссылка КАК Ссылка
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    ГДЕ
        Контрагенты.Город ПОДОБНО "%" + &Город

    Хотя, он тоже не идеален, т.к. выведет записи типа Новый Смоленск. Использовал принцип: лучше вывести лишнее, чем пропустить необходимое.

    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

  50. Akorg

    Вернулся домой, начал сравнивать свои решения с эталонными. Возник вопрос по задаче 8. На мой взгляд, приведенное решение не совсем корректно. Ведь никто не запрещал пользователю вводить в поле Телефоны произвольный текст, например такой: +7(ааа)ббб-сс-ее, который этот запрос воспримет как правильный. Мой вариант решения такой:

    ВЫБРАТЬ
        Контрагенты.Ссылка КАК Ссылка,
        Контрагенты.Телефон
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
    ГДЕ
        НЕ Контрагенты.Телефон ПОДОБНО "+7([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"
    • Василий Ханевич


      (текст комментария доступен только участникам Мастер-группы)

Комментарии закрыты