Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 4. Использование нескольких таблиц в запросе: вложенные запросы, соединение, объединение

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

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

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

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

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

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

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

  1. cyberandr

    Добрый день!
    У меня есть два варианта запроса на выборку табличной части документов
    ВЫБРАТЬ
    | ПлатежноеПоручениеИсходящееРаботники.Физлицо,
    | 0,
    | СУММА(ВЫРАЗИТЬ(ПлатежноеПоручениеИсходящееРаботники.Сумма КАК ЧИСЛО(19, 2)))
    |ИЗ
    | Документ.ПлатежноеПоручениеИсходящее.Работники КАК ПлатежноеПоручениеИсходящееРаботники
    |ГДЕ
    | ПлатежноеПоручениеИсходящееРаботники.Ссылка.Проведен = ИСТИНА
    | И НЕ ПлатежноеПоручениеИсходящееРаботники.Ссылка.детскиеПособия
    и
    ВЫБРАТЬ
    | ПлатежноеПоручениеИсходящееРаботники.Физлицо КАК Физлицо,
    | ПлатежноеПоручениеИсходящееРаботники.Сумма КАК Сумма,
    | 0 КАК ПремияМежРасчет
    |ПОМЕСТИТЬ ФизЛица
    |ИЗ
    | Документ.ПлатежноеПоручениеИсходящее.Работники КАК ПлатежноеПоручениеИсходящееРаботники
    |ГДЕ
    | ПлатежноеПоручениеИсходящееРаботники.Ссылка В
    | (ВЫБРАТЬ
    | ПлатежноеПоручение.Ссылка
    | ИЗ
    | Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручение
    | ГДЕ
    | ПлатежноеПоручение.Проведен
    | И НЕ ПлатежноеПоручение.детскиеПособия
    | И ПлатежноеПоручение.Организация = &Организация)
    Какой более верный?.

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


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

      • cyberandr

        спасибо.
        Это не СКД, а запрос с выводом в табличный документ . Мне необходимо вывести список сотрудников из табличной части документа (движений по регистрам он не делает поэтому по документам) Изначально я использовал фильтр вроде как
        ГДЕ
        Документ.ПлатежноеПоручениеИсходящее.Работники.Ссылка.ДетскиеВыплаты =ЛОЖЬ и Документ.ПлатежноеПоручениеИсходящее.Работники.Ссылка.ДатаПеречисления=&НашаДата.
        Однако в выборку попадали не верные данные, поэтому я использовал тогда 2 вариант через
        | ПлатежноеПоручениеИсходящееРаботники.Ссылка В
        | (ВЫБРАТЬ
        | ПлатежноеПоручение.Ссылка
        | ИЗ
        | Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручение
        | ГДЕ
        | ПлатежноеПоручение.ДатаПеречисления = &НашаДата
        | И НЕ ПлатежноеПоручение.детскиеПособия

        и хотел уточнить почему такой фильтр через ссылку не работает. Но возможно тут просто не учел некоторые факторы и получил не верный результат.

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


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

  2. Andrey Shchelkunov

    Добрый день. Скажите ВНУТРЕННЕЕ соединение по ИСТИНА это и есть ДЕКАРТОВО произведение?

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


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

  3. Radagast_nsk

    Приветствую!
    Видеоурок. Особенность левого соединения (4-2-11)
    Хочу добавить ясности:
    Если при левом соединении добавить условие на поле правой таблицы….то соединение НЕ становится Внутренним, а так и остается Левым с выборкой по полю ГДЕ,
    но вот результат запроса Эквивалентен внутреннему соединению таблиц.

    • Калиниченко Дмитрий


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

  4. alexanderdan

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

    %D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81.jpg

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


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

  5. andrewkop85

    В видеоуроке «Как соединить две таблицы, если у них нет общего поля» используется полное соединение. Но почему именно оно? Ведь в в примере можно было использовать и левое, получилось бы то же самое.

    • Калиниченко Дмитрий


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

  6. andrewkop85
    ВЫБРАТЬ
        РеализацияТоваровТовары.Номенклатура КАК Номенклатура,
        РеализацияТоваровТовары.Цена КАК Цена,
        РеализацияТоваровТовары.Сумма КАК Сумма
    ИЗ
        Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
    ГДЕ
        (РеализацияТоваровТовары.Номенклатура, РеализацияТоваровТовары.Цена) В
                (ВЫБРАТЬ
                    ПоступлениеТоваровТовары.Номенклатура КАК Номенклатура,
                    ПоступлениеТоваровТовары.Цена КАК Цена
                ИЗ
                    Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары)

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

    • andrewkop85

      Проверил. Порядок точно влияет (ну и тип разумеется). Наименование поля нет. Переименовал номенклатуру в ТЧ поступления в товар, запрос после правки отработал нормально.

    • Калиниченко Дмитрий


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

      • andrewkop85

        Если в условии заменить

        (РеализацияТоваровТовары.Номенклатура, РеализацияТоваровТовары.Цена) В

        на

        (РеализацияТоваровТовары.Цена, РеализацияТоваровТовары.Номенклатура) В

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

        • Калиниченко Дмитрий


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

            • Алексей Катеринич

              Пожалуйста!
              Интересного обучения!

  7. poryadkovma

    Здравствуйте. У меня не получается открыть конструктор запроса в произвольном выражении условия. Система выдает ошибку (скриншоты во вложении), 2-ой — после нажатия кнопки «Подробно». И ключевые слова вроде В, ПОДОБНО цветом не выделяются, может это как-то связано. Как мне быть?

    1.png2.png

    • poryadkovma

      Еще раз здравствуйте, нашел ответ на аналогичный вопрос ниже. Скачал консоль для версии 8.2, открыл в режиме толстого клиента — все работает.

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


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

  8. Денис Медведев

    Добрый день. Запросом получаю данные из регистра бухгалтерии «Хозрасчетный».
    В запросе используются ВТ — ХозрасчетныйОстаткиИОбороты, ХозрасчетныйДвиженияССубконто
    Не могу понять, как получить Остаток Дт или Остаток Кт (выделено красным) на Дату оплаты (выделено черным), при этом период, счет и контрагент задается пользователем. Отчет простой, сформирован на СКД.
    Задача, получить остаток задолженности по документу реализации на дату оплаты, для последующего расчета пеней по просрочке платежа.
    Спасибо.

    %D0%9E%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA.png

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


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

      • Денис Медведев

        Доброе утро. А без использования СКД эту задачу можно решить в рамках этого курса?
        Досмотрел 7 модуль, 3 глава, про регистры бухгалтерии, много нового для себя почерпнул, но для решения своей задачи там ничего похожего нет. Конечно, курс СКД я приобрету, но хотелось бы до конца разобраться с этим курсом и понять, где можно обойтись чистыми запросами, а где использовать более сложные механизмы, типа СКД.
        Спасибо.

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


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

          • Денис Медведев

            Василий, спасибо, за развернутый ответ.

            • Алексей Катеринич

              Пожалуйста!
              Интересного обучения!

          • Денис Медведев

            В продолжение моей задачи. У меня получилось сделать так как Вы написали. Теперь уменя сложность в следующем. Есть контрагент, договор, реализация. И есть несколько оплат от разных дат, которые гасят задолженность.
            Запросом получаю данные Дог Реал ДатаРеал ДатаОплаты:
            Дог……Реал…..ДатаРеал….ДатаОплаты…………Период
            N5…..N1234….04.09.19…….01.11.19…………04.09.19 — 01.11.19
            N5…..N1234….04.09.19…….06.11.19…………01.11.19 — 06.11.19
            N5…..N1234….04.09.19…….15.11.19…………06.11.19 — 15.11.19
            Как можно получить указаные данные в столбце Период?
            С получением периода в первой строке нет проблем. Проблема с пониманием, как получить периоды в строке 2 и 3. Спасибо.

            • Денис Медведев

              Вот более наглядно. Выделенное красным, период не правильный, надо 08.11.2019 — 11.11.2019.
              Соответственно и «Дни просрочки» для второй строки не правильно считаются.

              %D0%9F%D0%B5%D1%80%D0%B8%D0%BE%D0%B4.png

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


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

                • Денис Медведев

                  Оплаты то как раз правильно соотнесены,я это уже проверил и перепроверил. Проблема в другом.
                  Поясню. Задача ставилась юристом для расчета пеней по просрочке платежей. Ему надо формировать расчетный период следующим образом (это для случаев нескольких оплат по документу реализации).
                  Отталкиваться начинаем от Срока оплаты.
                  1-я оплата 08.11.19
                  2-я оплата 11.11.19
                  Юрист хочет получить расчетный период:
                  для 1-ой оплаты 16.10.19 — 08.11.19 — это получается
                  для 2-ой оплаты 08.11.19 — 11.11.19 — а это нет, как получить?
                  Т.е. чтобы посчитать количество дней просрочки.
                  Другими словами, если оплата полностью гасит задолженность, то проблемы получить нужный расчетный период нет, если же оплат несколько, то возникает тупик, у меня по крайней мере, как получить нужные даты для 2-ой, 3-ей и т.д. оплаты.

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


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

                    • Денис Медведев

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

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


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

                    • Денис Медведев

                      Василий, все получилось. Спасибо.

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


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

                    • Денис Медведев

                      Добрый день. Подскажите пожалуйста почему так происходит. В выражении дата получается 30.11.2019 23:59:59, а по факту 30.11.2019 00:00:00.
                      Не помогает, даже если все обернуть в КонецДня(). Переменная все равно получается на начало дня. Соответственно и в запрос уходит параметр неправильный.
                      Спасибо.
                      Все разобрался. Одинаковые имена переменной и значения.

                      %D0%9F%D0%B5%D1%80%D0%B8%D0%BE%D0%B4.png%D0%9F%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%9A%D0%BE%D0%BD%D0%B5%D1%86%D0%94%D0%BD%D1%8F.png

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


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

  9. Taala

    Добрый день, в обработке «Консоль запросов» не появляется пункт меню «Конструктор запросов» как показано в видео уроке Query-4-1-Nested-2 при нажатии правой кнопки мышки, на вкладке «Условия» в произвольном выражении в скобках выделен пробел .

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


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

      • Taala

        У меня ссылка на скачивание только консоли запросов для управляемых форм, где мне скачать консоль запросов обычную? На сайте its.1c есть еще обработка для 8.2 , но там тоже при редактировании произвольного выражения недоступен конструктор запросов

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


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

          • Taala

            Скачала обработку по ссылке для 8.2 выдается сообщение при открытии конструктора запросов в главном окне «Конструктор запроса доступен только в режиме толстого клиента» и не запустить даже первый конструктор в главном окне

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


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

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


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

  10. mbespalov

    Видео 12. Автоматическая подстановка соединения в конструкторе запроса. При автоматической подстановке на первом месте в левом соединении стоит табличная часть либо подчиненный справочник, а не основная таблица. Если на первое место поставить основную таблицу, результат получится таким же. Имеет ли значение, какая таблица устанавливается первой в левом соединении в запросе?

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


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

      • mbespalov

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

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


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

  11. mbespalov

    Практическое задание 20. Вложенный запрос по полю ПоступлениеТоваров.Склад. Есть смысл дополнительно группировать по этому полю. Будет ли при этом запрос выполняться быстрее? Т.е. вложенный запрос в таком виде:
    ВЫБРАТЬ
    ПоступлениеТоваров.Склад КАК Склад
    ИЗ
    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
    СГРУППИРОВАТЬ ПО
    ПоступлениеТоваров.Склад

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


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

  12. Andrey Popovskiy

    Здравствуйте! Пытаюсь решить учебную задачу на нумерацию строк запроса с упорядочиванием по нескольким полям. Вот текст задачи:
    «Пронумеровать строки таблицы, полученной путем выборки данных из РегистраСведений Оборудование в следующем порядке: Производитель в порядке убывания числа производимых им моделей (при одинаковом числе моделей Наименование производителя в алфавитном порядке по возрастанию), Код модели (по возрастанию).
    Вывод: Номер (в соответствии с заданным порядком), Производитель (Наименование), Модель.»
    я сделал такой запрос

     ВЫБРАТЬ
        Оборудование.Производитель КАК Производитель,
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Оборудование.Модель) КАК КоличествоМоделей,
        Оборудование1.Модель КАК Модель,
        Оборудование1.Модель.Код КАК МодельКод
    ПОМЕСТИТЬ ВТ
    ИЗ
        РегистрСведений.Оборудование КАК Оборудование
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Оборудование КАК Оборудование1
            ПО Оборудование.Производитель = Оборудование1.Производитель

    СГРУППИРОВАТЬ ПО
        Оборудование.Производитель,
        Оборудование1.Модель,
        Оборудование1.Модель.Код
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        КОЛИЧЕСТВО(ВТ1.Модель) КАК Номер,
        ВТ.Производитель.Наименование КАК Производитель,
        ВТ.Модель
    ИЗ
        ВТ КАК ВТ
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1
            ПО ВТ.Модель >= ВТ1.Модель

    СГРУППИРОВАТЬ ПО
        ВТ.Модель,
        ВТ.Производитель.Наименование,
        ВТ.КоличествоМоделей,
        ВТ.МодельКод

    УПОРЯДОЧИТЬ ПО
        ВТ.КоличествоМоделей УБЫВ,
        ВТ.Производитель.Наименование,
        ВТ.МодельКод

    Упорядочение по заданию прошло корректно, но вот нумерация строк, так как она привязана к модели и идет по возрастанию номера модели, выстроилась неправильно

    Номер Производитель Код
    2 А 1232
    3 А 1233
    9 А 1276
    5 А 1298
    12 А 1401
    13 А 1408
    8 А 1752
    4 Е 1260
    11 Е 1434
    16 Е 2112
    15 Е 2113
    1 Б 1121
    7 Б 1750
    14 Д 1288
    10 Д 1433
    6 Ц 1321

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


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

      • Andrey Popovskiy

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

        «oliage пишет:
        С нумерацией строк запроса все ОК, 1…16 по порядку. Но внутреннее соединение «портит» порядок — «производитель по числу моделей, (внутри по алфавиту), код модели». Т.е. я пошла по пути «сначала получили правильный набор строк, потом пытаемся их пронумеровать», но тут, видимо нужно правильный набор строк получать внутри запроса с внутренним соединением :?:
        Путь такой: сначала получи конечную таблицу и неважно какой там у нее порядок строк, а потом сделай внутреннее соединение так, чтобы от правой таблицы попадало в функцию запроса Количество(ПраваяТаблица.ЛюбаяКолонка) количество элементов равное порядковому номеру и как следствие месту этой строки после сортировки.

          Выбрать  
        ЛеваяТаблица.КакаяТоКолонка,
        Количество(ПраваяТаблица.ЛюбаяКолонка) как Номер  
         
        из ЛеваяТаблица
        внутреннее соединение ПраваяТаблица  
         
        По
        ЛеваяТаблица.КакаяТоКолонка <= ПраваяТаблица.КакаяТоКолонка <----- вот что делает порядковый номер и как следствие сортировку !!!
         
        Сгруппировать по  
        ЛеваяТаблица.КакаяТоКолонка
         
        Упорядочить по Номер
          ВЫБРАТЬ
           1 КАК Цифра,
           "А" КАК Буква
        ПОМЕСТИТЬ Таблица1

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

        ВЫБРАТЬ
           1,
           "Б"

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

        ВЫБРАТЬ
           2,
           "А"

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

        ВЫБРАТЬ
           2,
           "Б"
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
           КОЛИЧЕСТВО(Таблица11.Цифра) КАК Номер,
           Таблица1.Цифра,
           Таблица1.Буква
        ИЗ
           Таблица1 КАК Таблица1
              ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица11
              ПО (Таблица1.Цифра = Таблица11.Цифра   И Таблица1.Буква <= Таблица11.Буква)
                 ИЛИ  
                     Таблица1.Цифра > Таблица11.Цифра)

        СГРУППИРОВАТЬ ПО
           Таблица1.Буква,
           Таблица1.Цифра

        УПОРЯДОЧИТЬ ПО
           Номер

        По запросу выше, Левая и правая таблица это одна и та же таблица и содержит в колонке КакаяТоКолонка буквы А,Б,В,Г.
        В любойКолонке, что угодно — ссылки, цифры, буквы.
        Вместо ЛюбойКолонки, в функции Количество(ПраваяТаблица.ЛюбаяКолонка), может быть и КакаяТоКолонка, главное чтобы в этой колонке не было пустых значений, то есть надо чтобы было что считать.
        И не надо делать так — Количество(Различные ПраваяТаблица.ЛюбаяКолонка), потому что в ЛюбойКолонке могут быть повторяющиеся значения, которые посчитаются как 1.

        В момент выполнения запроса происходит следующее, запрос стоит по левой таблице на букве А и сверяет ее с буквой А правой таблицы, А<=А да, соответственно в функцию количество попадает элемент из колонки ЛюбаяКолонка правой таблицы и номер становится равен 1.

        Следующим шагом запрос по левой таблице остается на А по правой таблице переходит на Б, проверяем условие А<=Б да, соответственно в функцию количество попадает элемент из колонки ЛюбаяКолонка правой таблицы и номер становится равен 2.

        Следующим шагом запрос по левой таблице остается на А по правой таблице переходит на В, проверяем условие А<=В да, соответственно в функцию количество попадает элемент из колонки ЛюбаяКолонка правой таблицы и номер становится равен 3.

        Следующим шагом запрос по левой таблице остается на А по правой таблице переходит на Г, проверяем условие А<=Б да, соответственно в функцию количество попадает элемент из колонки ЛюбаяКолонка, правой таблицы и номер становится равен 4.

        Потом запрос по левой таблице переходит на букву Б, а по правой начинает все сначала Б<=А нет, номер остается равен 0.
        Б<=Б, да, номер равен 1.
        Б<=В, да, номер равен 2
        Б<=Г, да, номер равен 3

        Потом по левой соответственно у буквы В номер равен 2 по понятным причинам, а у Г номер становится равен 1, потому что больше Г в таблице букв нет.

        Итак мы получаем А — 4, Б — 3, В — 2, Г = 1, у порядочиваем по возрастанию получаем Г,В,Б,А.

        А вот если в условии запроса "ЛеваяТаблица.КакаяТоКолонка = ПраваяТаблица.КакаяТоКолонка», то после запроса получим обратную картину А — 1, Б — 2, В — 3, Г = 4 и после сортировки получаем А,Б,В,Г.

        Вот такой вот метод сортировки с помощью внутреннего соединения.
        Дальше есть задача круче, примерно так: отсортируйте по названию поставщика (по возрастанию) и по названию оборудования(по убыванию) которое этот поставщик продает.
        Выведете всю таблицу но название поставщика только для первого элемента оборудования этого поставщика.
        »

        Задачу по разнонаправленной сортировке букв и цифр я решил таким образом

          ВЫБРАТЬ
            4 КАК Цифра,
            "Г" КАК Буква
        ПОМЕСТИТЬ Таблица1

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

        ВЫБРАТЬ
            2,
            "Б"

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

        ВЫБРАТЬ
            3,
            "В"

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

        ВЫБРАТЬ
            1,
            "А"
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            КОЛИЧЕСТВО(Таблица11.Цифра) КАК Номер,
            Таблица1.Цифра
        ПОМЕСТИТЬ ВТ
        ИЗ
            Таблица1 КАК Таблица1
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица11
                ПО Таблица1.Цифра >= Таблица11.Цифра

        СГРУППИРОВАТЬ ПО
            Таблица1.Цифра
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            КОЛИЧЕСТВО(Таблица11.Буква) КАК Номер,
            Таблица1.Буква
        ПОМЕСТИТЬ ВТ1
        ИЗ
            Таблица1 КАК Таблица1
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица11
                ПО Таблица1.Буква <= Таблица11.Буква

        СГРУППИРОВАТЬ ПО
            Таблица1.Буква
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            ВТ.Номер КАК Номер,
            ВТ.Цифра,
            ВТ1.Буква
        ИЗ
            ВТ КАК ВТ
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ1
                ПО ВТ.Номер = ВТ1.Номер

        УПОРЯДОЧИТЬ ПО
            Номер

        А вот с основной задачей никак. При чем, я знаю, что как минимум 231 человек до меня ее решил на том ресурсе на котором она выложена

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


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

          • Andrey Popovskiy

            Спасибо Вам большое за наводку! Покопаю в этом направлении

  13. asmut

    Добрый день.

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

    Указание Различные ускорит процесс выборки или не имеет смысла?

    Как я понимаю:
    Сначала будет сформирован массив складов из Поступление где «Различные» сразу отсеивает дубликаты и получаем большую производительность, а затем уже запрос самих складов

    ИЛИ я неверно понимаю механизм, и:
    На скорость работы это не повлияет, а только на результат (понятно что здесь он одинаков в обоих случаях с «Различные» и без )

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


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

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


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

  14. Markus

    Добрый День!

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

    — Вопрос, по сути, схож с вашим примером (крайнее видео в 4ом модуле) – почему вы сделали объединение, ведь можно было выбрать всю номенклатуру и через виртуальные таблицы соединить сначала с приходом, а потом с расходом?
    Что касается моего случая:
    Почему ВТ_Итоговая (там, где мы добавляем цены) сделаны через объединение, ведь можно было сделать через соединение, добавив каждый вид цены в новой ВТ соответственно добавляя по одной колонке «цена» каждый раз. Пока у меня ответ только – «дело в оптимизации и чем больше ВТ тем дольше формируется отчет». Подскажите, пожалуйста – прав ли я? И это действительно оптимальное решение?

    — Почему в ВТ_Продажи и ВТ_Приход стоят параметры – «Номенклатура в ВТ_Номенклатура»? Ведь потом они все равно соединяются в ВТ_ОстаткиПродажи по номенклатуре и характеристике, а в регистре сведений Аналитика Номенклатуры присутствует вся номенклатура. Я добавил колонку остатки и не стал добавлять параметры, отчет отрабатывает правильно, то есть остатки показывает на текущую дату, а список товаров не меняется. Подскажите, пожалуйста – это правильно или нужно сделать по аналогии с «ВТ_Продажи» и «ВТ_Приход»? Если да, то почему?

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


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

  15. Дмитриенко Сергей

    день добрый, у преподавателя в ответе на практическое задание 20, можно сделать конструктор запроса, а у меня такого пункта даже нет. это на 57 секунде в решение видео с практическим 20. это зависит от версии 1с?

    2222.png

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


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

  16. ZhenyBash

    Добрый день! Очень часто пользователи просят, чтобы значение в интересующей колонке выходило не пустым, а «0». Можно ли как-то результат запроса с типом NULL привести к такому значению? Получается только привести к типу Строка.

    ЕСТЬNULL(Поле, "0")
    • Калиниченко Дмитрий


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

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


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

  17. toliman778

    добрый день, можно ли было решить План-фактную задачу методом Соединения таблиц? использовать полное соединение и колонку товары склеить в одну через естьNull().

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


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

  18. Ponomalena

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

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


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

  19. Andrey_Solovyev

    Добрый день
    Как сгруппировать результат объединения запросов по одному и томе же регистратору? Я результат объединения помещаю во временную таблицу и группирую по регистратору уже в ней. Может есть более простой способ? Спасибо

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

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

  20. Andrey_Solovyev

    Добрый вечер
    При соединении двух таблиц несколькими связями иногда задваиваються данные, в общих чертах понятно почему это происходит. Есть ли какие-нибудь рекомендации как этого можно избежать и делать правильно? И где более правильно и оптимально по производительности накладывать дополнительные условия при соединении таблиц: на закладке «Связи» или «Условия» ? Спасибо

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


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

  21. sergeya_2000

    Добрый день.
    Можно ли так связывать таблицы – второе левое соединение – и как это работает
    (Т3 левое соединение к Т1 по Т2.поле = Т3.поле):
    ВЫБРАТЬ ПЕРВЫЕ 100
    СпрНоменклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикиНоменклатуры,
    ТоварыНаСкладахОстатки.КоличествоОстаток
    ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
    ПО СпрНоменклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    ПО (ВЫБОР ТоварыНаСкладахОстатки.Номенклатура.ВестиУчетПоХарактеристикам
    КОГДА ИСТИНА
    ТОГДА ХарактеристикиНоменклатуры.Ссылка = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
    ИНАЧЕ СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
    КОНЕЦ)
    ГДЕ
    НЕ СпрНоменклатура.ЭтоГруппа
    Заранее Спасибо

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


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

      • sergeya_2000

        Огромное спасибо, а в материалах курса рассматривается подобный пример?

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


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

  22. bromanna2

    Добрый день!
    Для решения заданий использую базу Query-Homework-Template. Судя по тексту на стартовой странице это должна быть обновленная 16.01.2018 база.
    В конфигурации нет справочника «Регионы». Соответственно, в справочнике «Контрагенты» нет реквизита «Регион».
    А в видеоуроках используется справочник «Регионы». Я не ошиблась с базой ? Может быть где-то лежит база соответствующая той, которая используется в видеоуроках ?

    ВОПРОС СНЯТ. Прочла предыдущие комментарии

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


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

  23. MDaryaA

    По объединению таблиц:

    В методическом пособии описана работа, если в одной таблице получаем таблицу, и когда в другой её нет, то пользуемся ПУСТАЯТАБЛИЦА. А что делать с реквизитами типа ссылка?

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


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

      • MDaryaA

        Я имела в виду:
        Если в одной таблице есть поле Поставщик, а в другой нет — как прописать пустой реквизит?

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


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

  24. MDaryaA

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

    Возникли сложности в понимании…

    В конфигурации Розница 2.2, например, нужно в отчете отразить движения номенклатуры без учета оприходования и списания в оборотах. Бывает, что поставщиков у товара несколько. Как правильно отобрать какого-то одного, например, который последний поставлял? Или который поставил больше товара?

    Запрос в данном случае так выглядит:

    ВЫБРАТЬ
        ЗакупкиТоваровОбороты.Номенклатура КАК Номенклатура,
        0 КАК НачальныйОстаток,
        ЗакупкиТоваровОбороты.КоличествоОборот КАК Приход,
        0 КАК Расход,
        0 КАК КонечныйОстаток,
        ЗакупкиТоваровОбороты.СуммаОборот КАК СуммаПриход,
        0 КАК СуммаРасход
    ПОМЕСТИТЬ Данные
    ИЗ
        РегистрНакопления.ЗакупкиТоваров.Обороты(&ДатаН, &ДатаК, , ) КАК ЗакупкиТоваровОбороты

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

    ВЫБРАТЬ
        ПродажиОбороты.Номенклатура,
        0,
        0,
        ПродажиОбороты.КоличествоОборот,
        0,
        0,
        ПродажиОбороты.СтоимостьОборот
    ИЗ
        РегистрНакопления.Продажи.Обороты(&ДатаН, &ДатаК, , ) КАК ПродажиОбороты

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

    ВЫБРАТЬ
        ТоварыНаСкладахОстатки.Номенклатура,
        ТоварыНаСкладахОстатки.КоличествоОстаток,
        0,
        0,
        0,
        0,
        0
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаН, ) КАК ТоварыНаСкладахОстатки

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

    ВЫБРАТЬ
        ТоварыНаСкладахОстатки.Номенклатура,
        0,
        0,
        0,
        ТоварыНаСкладахОстатки.КоличествоОстаток,
        0,
        0
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаК, ) КАК ТоварыНаСкладахОстатки
    ;

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

    СГРУППИРОВАТЬ ПО
        Данные.Номенклатура,
        ВложенныйЗапрос.Поставщик
    • Василий Ханевич


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

      • MDaryaA

        Спасибо вам огромное! Теперь всё стало понятно.

  25. MDaryaA

    Добрый вечер.

    У меня почему-то в конструкторе запросов (управляемое приложение) в условиях по нажатию правой кнопки мыши не предлагает открыть конструктор запросов(

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


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

  26. KOMPO

    Добрый день, создал реквизит составного типа (Строка, Число), но значение в запросе не отображается, как «неопределено», более того, по отладчику оно равно 0, подскажите почему?

    %D0%9D%D0%B5%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BE%D0%92%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B5.jpg

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


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

      • KOMPO

        Я разобрался в чём причина. Если изначально поставить не составной тип данных, а «число», обновиться, а затем сделать состовной «Строка, Число» и обновиться, тогда все значения будут нулями при отладке, а не неопределено.

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


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

  27. evg61

    Здравствуйте, Василий!
    Подскажите, пожалуйста, как правильно в запросе посчитать итоги по данным, имеющим тип «Характеристика.ДополнительныеРеквизитыИСведения»?
    В документе «ЗаказКлиента» (конфигурация КА2) есть табличная часть «ДополнительныеРеквизиты», реквизит «СуммаКредита», по которому нужно получить итоги, имеет этот самый тип.

    Спасибо!

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


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

  28. Василий Ханевич


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

    • vikirini

      Добрый день! Я вроде бы снимала вопрос. Да, вот такой запрос в первом приближении дает верный результат. Задача — посмотреть, до какой даты у нас сверены данные с поставщиком (м.б. несколько договоров). У меня возник еще вопрос, как получить ссылку на документ сверки и дату начала периода? Три функции МАКСИМУМ в общем случае могут и не относиться к одному документу сверки, а мне охота в отчет вывести и ссылку на документ сверки и период сверки из этого документа.
      Уроки смотрю по порядку, до 9 еще не дошла. Данный вопрос возник после просмотра данного модуля, ведь сразу же пытаешься соотнести просмотренный материал с имеющейся базой. Если далее есть нечто подобное — отвечать не надо. А за оперативный ответ — спасибо.


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

      СГРУППИРОВАТЬ ПО
      Контрагенты.Наименование,
      СверкаВзаиморасчетов.Договор

      УПОРЯДОЧИТЬ ПО
      Наименование

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


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

  29. vikirini

    Здравствуйте! У меня возник вопрос по видеоуроку “Особенность левого соединения”. А как изменится запрос, если документов продажи будет много, а я хочу видеть только последний?

  30. evg61

    Здравствуйте, Василий!
    На практике в КА 2 хотел применить способ объединения запросов из последнего видео в 4м модуле.
    Требуется отобрать суммы платежей наличными и безналом. Получил запросами 2 таблицы, объединил. Ожидал, что в по одному и тому же заказу клиента в одной строке будут стоять 2 суммы нал и безнал, если оплата по нему проводилась по частям обоими способами. Но получил такой результат:
    Период Заказ Нал Безнал
    24.03.2018 15:14:18 Заказ клиента ВЮ00-002970 от 24.03.2018 14:48:37 3 800
    24.03.2018 15:14:41 Заказ клиента ВЮ00-002970 от 24.03.2018 14:48:37 20 000

    Если можно, подскажите, пожалуйста, что делаю не так?
    Спасибо!
    Текст запроса таков:
    ВЫБРАТЬ
    ВложенныйЗапрос.Период КАК Период,
    ВложенныйЗапрос.ЗаказКлиента КАК ЗаказКлиента,
    СУММА(ВложенныйЗапрос.ОплатаНаличными) КАК ОплатаНаличными,
    СУММА(ВложенныйЗапрос.ОплатаБезнал) КАК ОплатаБезнал
    ИЗ
    (ВЫБРАТЬ
    РасчетыСКлиентами.Период КАК Период,
    РасчетыСКлиентами.ЗаказКлиента КАК ЗаказКлиента,
    СУММА(РасчетыСКлиентами.Сумма) КАК ОплатаНаличными,
    СУММА(0) КАК ОплатаБезнал
    ИЗ
    РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
    ГДЕ
    РасчетыСКлиентами.Период МЕЖДУ &Начало И &Конец
    И НЕ РасчетыСКлиентами.ВидДвижения = &ВидДвижения
    И РасчетыСКлиентами.ХозяйственнаяОперация = &ХозяйственнаяОперацияНал
    И РасчетыСКлиентами.ФормаОплаты = &ФормаОплатыНал

    СГРУППИРОВАТЬ ПО
    РасчетыСКлиентами.Период,
    РасчетыСКлиентами.ЗаказКлиента

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    РасчетыСКлиентами.Период,
    РасчетыСКлиентами.ЗаказКлиента,
    СУММА(0),
    СУММА(РасчетыСКлиентами.Сумма)
    ИЗ
    РегистрНакопления.РасчетыСКлиентами КАК РасчетыСКлиентами
    ГДЕ
    РасчетыСКлиентами.Период МЕЖДУ &Начало И &Конец
    И НЕ РасчетыСКлиентами.ВидДвижения = &ВидДвижения
    И РасчетыСКлиентами.ХозяйственнаяОперация = &ХозяйственнаяОперацияБезНал
    И РасчетыСКлиентами.ФормаОплаты = &ФормаОплатыБезНал

    СГРУППИРОВАТЬ ПО
    РасчетыСКлиентами.Период,
    РасчетыСКлиентами.ЗаказКлиента) КАК ВложенныйЗапрос

    СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.ЗаказКлиента,
    ВложенныйЗапрос.Период

    УПОРЯДОЧИТЬ ПО
    Период

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


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

      • evg61

        Спасибо! А можно ли это как то обойти? Если да, то подскажите, пожалуйста, как?

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


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

  31. evg61

    Здравствуйте!
    Делаю 20 задание в 4 модуле
    Использую консоль запросов для 8.3 (скачивал по ссылке из материалов по этому курсу)
    Повторяю решение задания. Не вызывается 2й конструктор запроса как в решении. Скриншот во вложении.

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

    Можете указать ссылку на консоль запросов которое использовалось при решении задач?

    Спасибо!

    %D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC%204%20%D0%BF%D0%BE%20%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0%D0%BC%2002.jpg

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


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

      • evg61

        Спасибо!
        Пробовал с консолью 8.2 в не открывался конструктор запроса. Теперь всё наладилось.
        А как доработать консоль под 8.3? В методическом материале доработка приводилась, это о ней идёт речь?

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


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

  32. Виктор

    ВЫБРАТЬ
    ПоДокументамРасчетов.Контрагент КАК Контрагент,
    ПоДокументамРасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ПоДокументамРасчетов.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности КАК ДнейКредита,
    ПоДокументамРасчетов.Регистратор КАК Документ,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК ОстатокНаНачало,
    ПоДокументамРасчетов.Регистратор.СуммаДокумента КАК СуммаДокумента,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК ОстатокНаКонец,
    ДвиженияДенежныхСредствОбороты.СуммаОборот КАК СуммаОборот
    ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов КАК ПоДокументамРасчетов
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Авто, , ) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты
    ПО ПоДокументамРасчетов.ДоговорКонтрагента = ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДвиженияДенежныхСредствОбороты
    ПО ПоДокументамРасчетов.ДоговорКонтрагента = ДвиженияДенежныхСредствОбороты.ДоговорКонтрагента
    ГДЕ
    ПоДокументамРасчетов.Контрагент В ИЕРАРХИИ(&Контрагент)
    И ТИПЗНАЧЕНИЯ(ПоДокументамРасчетов.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг)
    И ПоДокументамРасчетов.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

    СГРУППИРОВАТЬ ПО
    ПоДокументамРасчетов.ДоговорКонтрагента,
    ПоДокументамРасчетов.Регистратор,
    ПоДокументамРасчетов.Контрагент,
    ПоДокументамРасчетов.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности,
    ПоДокументамРасчетов.Регистратор.СуммаДокумента,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток,
    ДвиженияДенежныхСредствОбороты.СуммаОборот

    УПОРЯДОЧИТЬ ПО
    ПоДокументамРасчетов.Контрагент.Наименование,
    Документ
    ИТОГИ
    СУММА(ОстатокНаНачало),
    СУММА(СуммаДокумента),
    СУММА(ОстатокНаКонец),
    СУММА(СуммаОборот)
    ПО
    ОБЩИЕ,
    Контрагент ИЕРАРХИЯ,
    ДоговорКонтрагента

    Добрый день. Решаю данную задачу. Проблема как выбрать из регистра ДвиженеиДенежныхСредствОбороты суммаоборот, так что бы в итогах, выходила именно эта сумма, а то она выводится, но суммируется столько раз сколько выбирает документов.

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


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

  33. ids79

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

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


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

      • ids79

        Спасибо. А то занимаюсь с 1С уже больше 10 лет, а многими полезными фишками не пользуюсь

  34. ids79

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

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


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

  35. alisaah

    Добрый день!

    ВЫБРАТЬ
        СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
        ПРЕДСТАВЛЕНИЕ(СвободныеОстаткиОстатки.Номенклатура) КАК НоменклатураПредставление,
        ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
        СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток
    ИЗ
        РегистрНакопления.СвободныеОстатки.Остатки(&Период, ) КАК СвободныеОстаткиОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних
            ПО (СвободныеОстаткиОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
    ГДЕ
        ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены
        И СвободныеОстаткиОстатки.Склад = &Склад
        И СвободныеОстаткиОстатки.Номенклатура = &Номенклатура

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

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


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

  36. Владимир

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

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

    Верным ли будет такого рода решение ?

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


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

  37. Akorg

    Ознакомился с видеоуроками модуля и хочу поделиться интересным примером на тему сравнений в запросах. Он нарушает все базовые принципы классической логики, гласящей что выражение: А или не А — всегда истинно. Я в свое время на реальной задаче весь мозг себе сломал, пока не понял причину. Итак первый простой запрос (на учебной БД):

    ВЫБРАТЬ
        СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
    -------------------------------------
    результат: 285

    Теперь накладываем условие на эту выборку по контрагенту «Техника и Электроника ООО»:

    ВЫБРАТЬ
        СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
    ГДЕ
        ТоварыНаСкладахОбороты.Регистратор.Контрагент = &Контрагент
    -------------------------------------
    результат: 55

    Наконец, накладываем отрицание этого условия, ожидая получить 285-55=230

    ВЫБРАТЬ
        СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
    ГДЕ
        Не ТоварыНаСкладахОбороты.Регистратор.Контрагент = &Контрагент
    --------------------------------------
    Результат: 216 !!! Куда пропали 14 штук???

    Ну, погоди, машина! Сейчас я тебя поймаю! Накладываем условие, которое по правилам логики всегда истинно.

    ВЫБРАТЬ
        СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Обороты(, , Регистратор, ) КАК ТоварыНаСкладахОбороты
    ГДЕ
        Не ТоварыНаСкладахОбороты.Регистратор.Контрагент = &Контрагент Или ТоварыНаСкладахОбороты.Регистратор.Контрагент = &Контрагент
    ----------------------------------------
    Результат: 271. Как так???

    Есть желающие объяснить этот парадокс?

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


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

      • Akorg

        Понятно, что причина в регистраторе без Контрагента. Но проблема-то сидит глубже. Хорошо, нам сказано, что сравнение Контрагент = Null всегда ложно. Обозначим это высказывание через А. По правилам логики тогда высказывание Не А — должно быть всегда истинно! А в 1С и Контрагент = Null и Не (Контрагент = Null) — всегда ложны! Есть какая-нибудь информация для чего придумана такая парадоксальная логика, приводящая к проблемам в приведенном примере?

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


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

  38. dr.mescalero

    День добрый.
    В консоли запросов в редакторе произвольных выражений при выделенном пробеле по нажатию правой кнопки мыши нет пункта «Конструктор запроса». Синтаксис тоже не подсвечивается — ни операторы, ни функции, ни параметры — всё черным цветом.
    И еще на закладке «Условия» нет возможности переключать вид условия с произвольного на другой. Всегда только произвольный вид.
    1С запущена от имени администратора (в пользовательском ситуация аналогична).
    В конфигураторе всё работает как надо, в консоли — вышеописанные проблемы.
    Консоль для версии 8.3.
    С версией для 8.2 нет таких проблем.
    Но почему с 8.3 такое?

    %D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B9.png%D0%91%D0%B5%D0%B7%D1%8B%D0%BC%D1%8F%D0%BD%D0%BD%D1%8B%D0%B92.png

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


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

  39. Akorg

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

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


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

  40. Mr.Smoke27

    Вопрос по особенностям левого соединения.

    ВЫБРАТЬ
        Контрагенты.Ссылка КАК Ссылка,
        РеализацияТоваров.Ссылка КАК Ссылка1
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
            ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров
            ПО (РеализацияТоваров.Контрагент = Контрагенты.Ссылка)
            И (РеализацияТоваров.Организация = &Организация)
    //ГДЕ
    //  РеализацияТоваров.Организация = &Организация ИЛИ РеализацияТоваров.Организация IS NULL

    Собственно вот запрос, если выполнить его таким образом, то количество элементов одно, но если убрать из условия связи отбор по организации и перенести его в блок УСЛОВИЯ и добавить проверку на NULL, то количество записей в запросе становится меньше. Чисто логически, условие отбора вроде как одно и тоже. Причем пропадают контрагенты, по которым есть как раз документы, а контрагенты, по которым нет движений выводятся. Или же при таком условии, включается внутреннее соединение по записям которые подподают под условие, а на остальные записи данное условие не распространяется ? Даже если добавить проверку на неопределено это не помогает. (База для практических заданий) Просто не понимаю почему он начинает выводить контрагентов, о которым вообще нет движений, если включается внутреннее соединение, то почему оно не распространяется и на них?

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


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

  41. Наталья Яковлева

    1. Спасибо за прием. Оказывается, я давно-давно его использую. Но не работала с конструктором запроса таким образом.
    2. Практику сделала. Единственное отличие созданного мною запроса от решения тренера- это условие
    ГДЕ
    ПоступлениеТоваров.Ссылка ЕСТЬ NULL
    Так же можно? результат один в один.
    3. Пожелание. База для запросов Модуля 4 отличается от базы тренера — нет регионов, названия документов другие, чем в практическом задании и уроках. Все есть в демке «Управляемое приложение» (взяла эту базу с диска ИТС — из раздела разработчикам и программистам), но отличается по данным. Просто есть опыт написания запросов и вопросов не возникло, а если б я была новичок, начинающий программист?
    4. Спасибо за еще один взгляд на Консоль запросов» — просто как на инструмент, который программист настраивает под свои запросы. Тоже дорабатывала сейчас во время просмотра уроков внешнюю обработку для 8.3 «ИнструментыРазработчикаКонсольЗапроса» — ну очень стала удобной она!

    Спасибо.
    С наступающим Новым Годом! Здоровья, Счастья, Благополучия и Процветания!

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


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

  42. Наталья Яковлева

    А у меня все таки возник вопрос. Когда нужно выделить через ВЫРАЗИТЬ несколько документов (обычно 2-4) как правильно это сделать?

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


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

  43. Akorg

    Я просмотрел весь файл с теоретическим материалом и не нашел в нем описания языка плана запроса. Не подскажите в каком уроке это детально разбирается?

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


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

      • Akorg

        Вот как?! А я так надеялся разобраться в этом под руководством профессионалов… А для PostgreSQL есть материалы?

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


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

          • Akorg

            И последний вопрос по этой теме. А по планировщику файловой БД есть описание, или он похож на что-то?

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


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

  44. Akorg

    Вопрос по порядку следования левых соединений. Имеет ли он значение? Провел ряд экспериментов в тестовой БД. Получил, скажем, что следующие 2 запроса дают одинаковый результат.

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

    и

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

    Это, действительно, одинаковые запросы?

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


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

      • Akorg

        А с точки зрения производительности есть разница?

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


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

          • Akorg

            Попробовал получить планы для этих двух вариантов запроса. Сразу скажу, что я мало пока в них что понимаю (научиться разбираться в них — одна из моих целей этого изучения курса, надеюсь, где-то это будет подробно рассматриваться). Вот они:

            SELECT
            T1.Ссылка,
            T1.Номенклатура,
            T3.Город,
            T1.Количество
            FROM Документ.РеализацияТоваров.Товары T1
            LEFT OUTER JOIN Справочник.Номенклатура T2
            ON (T1.Номенклатура = T2.Ссылка)
            LEFT OUTER JOIN Справочник.Контрагенты T3
            ON (T2.Поставщик = T3.Ссылка)
            WHERE (T1.Ссылка = 0xB2F2001F160DE72A11E444F2378D2BEB
            ---------------------------------------------------
            Fields:(
                T1.Ссылка,
                T1.Номенклатура,
                T3.Город,
                T1.Количество
            )
            _DOCUMENT38_VT53 (T1) RANGE SCAN USING INDEX (_DOCUMENT38_VT53_INTKEYIND) (1 fields)

            NESTED OUTER LOOP
            Справочник.Номенклатура (T2) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
            WHERE
                    (T1.Номенклатура = T2.Ссылка)
            NESTED OUTER LOOP
            _REFERENCE19 (T3) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
            WHERE
                    (T2.Поставщик = T3.Ссылка)

            Statistics: RecordsScanned = 8, ParseTime = 0, ExecuteTime = 0, BuffersMemory = 33214, ResultRecords = 3, RecordSize = 247

            и второй

            SELECT
            T1.Ссылка,
            T1.Номенклатура,
            T3.Город,
            T1.Количество
            FROM Документ.РеализацияТоваров.Товары T1
            LEFT OUTER JOIN Справочник.Номенклатура T2
            LEFT OUTER JOIN Справочник.Контрагенты T3
            ON (T2.Поставщик = T3.Ссылка)
            ON (T1.Номенклатура = T2.Ссылка)
            WHERE (T1.Ссылка = 0xB2F2001F160DE72A11E444F2378D2BEB
            ------------------------------------------------------
            Fields:(
                T1.Ссылка,
                T1.Номенклатура,
                T3.Город,
                T1.Количество
            )
            _DOCUMENT38_VT53 (T1) RANGE SCAN USING INDEX (_DOCUMENT38_VT53_INTKEYIND) (1 fields)

            NESTED OUTER LOOP BY SELECT RANGE SCAN USING INDEX (AUTOINDEX) (1 fields)

            (
                Fields:(
                    T2.Ссылка,
                    T3.Город
                )
                Справочник.Номенклатура (T2) FULL SCAN USING INDEX (_IDRREFIDX)

                NESTED OUTER LOOP
                _REFERENCE19 (T3) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
                WHERE
                        (T2.Поставщик = T3.Ссылка)

            )
            WHERE
                    (T1.Номенклатура = T2.Ссылка)

            Statistics: RecordsScanned = 10045, ParseTime = 0, ExecuteTime = 10, BuffersMemory = 33214, ResultRecords = 3, RecordSize = 247

            Меня смущает колоссальная разница в количестве просмотренных записей: (8 и 10045).

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


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

              • Akorg

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

                Запрос: Документ.РеализацияТоваров.Товары (Записей в результате: 0)
                Ссылка Номенклатура Регион Количество
                Реализация товаров 000000008 от 17.07.2014 12:00:00 Молоко 1,5% Москва 2
                Реализация товаров 000000008 от 17.07.2014 12:00:00 Кефир 2,5% Санкт-Петербург 3
                Реализация товаров 000000008 от 17.07.2014 12:00:00 Сметана 15% 1

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


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

                  • Akorg

                    Я провел тестирование проблемы на нашей реальной БД ЕРП. Сравнивал 3 запроса.
                    Вариант 1 (множественная ссылка через точку)

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

                    Вариант2 (разыменование, как это по умолчанию предлагает сделать конструктор запроса)

                    ВЫБРАТЬ
                        РеализацияТоваровУслугТовары.Номенклатура,
                        РеализацияТоваровУслугТовары.Характеристика,
                        РеализацияТоваровУслугТовары.Количество,
                        Производители.Наименование
                    ИЗ
                        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
                                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Производители КАК Производители
                                ПО Номенклатура1.Производитель = Производители.Ссылка
                            ПО РеализацияТоваровУслугТовары.Номенклатура = Номенклатура1.Ссылка
                    ГДЕ
                        РеализацияТоваровУслугТовары.Ссылка = &Ссылка

                    Вариант 3 (разыменование, полученное из предыдущего перестановкой соединений)

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

                    Результаты получились следующие. Варианты 1 и 3 транслировались в идентичные планы запросов и выполнялись быстрее, чем Вариант 2. Правда планы запросов выглядели совсем не так, как в БД из курса и не показывали количество просканированных записей:

                    "nested loop left join  (cost=0.85..165.62 rows=17 width=87) (actual time=0.060..0.878 rows=59 loops=1)
                      ->  nested loop left join  (cost=0.70..162.64 rows=17 width=65) (actual time=0.045..0.657 rows=59 loops=1)
                            ->  index scan using Документ.РеализацияТоваровУслуг.Товары_intkeyind on Документ.РеализацияТоваровУслуг.Товары t1  (cost=0.42..37.33 rows=17 width=45) (actual time=0.024..0.071 rows=59 loops=1)
                                  index cond: ((ОбластьДанныхОсновныеДанные = 0::numeric) and (Ссылка = '\\x8b4ae8de2700f96d11e7d4cce0014713'::bytea))
                            ->  index scan using Справочник.Номенклатураhpk on Справочник.Номенклатура t2  (cost=0.28..7.36 rows=1 width=40) (actual time=0.008..0.008 rows=1 loops=59)
                                  index cond: ((ОбластьДанныхОсновныеДанные = 0::numeric) and (t1.Номенклатура = Ссылка))
                      ->  index scan using Справочник.Производителиhpk on Справочник.Производители t3  (cost=0.14..0.17 rows=1 width=62) (actual time=0.003..0.003 rows=1 loops=59)
                            index cond: ((ОбластьДанныхОсновныеДанные = 0::numeric) and (t2.Производитель = Ссылка))
                    planning time: 1.517 ms
                    execution time: 0.961 ms
                    ",rowsaffected=59

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

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


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

                    • Akorg

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

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


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

  45. Akorg

    Возник вопрос по примеру разыменования ссылочных полей из теоретических материалов курса:

    ВЫБРАТЬ
    РасходТовараТовары.Ссылка,
    РасходТовараТовары.Товар,
    РасходТовараТовары.Товар.Поставщик.Регион КАК Регион,
    РасходТовараТовары.Количество
    ИЗ Документ.РасходТовара.Товары КАК РасходТовараТовары

    Сообщается что данный запрос развернется в:

    ВЫБРАТЬ
    РасходТовараТовары.Ссылка,
    РасходТовараТовары.Товар,
    Регионы.Ссылка КАК Регион,
    РасходТовараТовары.Количество
    ИЗ Документ.РасходТовара.Товары КАК РасходТовараТовары
     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
     ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Регионы КАК Регионы
         ПО Контрагенты.Регион = Регионы.Ссылка
     ПО Товары.Поставщик = Контрагенты.Ссылка
     ПО РасходТовараТовары.Товар = Товары.Ссылка

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

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


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

      • Akorg

        Тогда у меня такой вопрос: это пример реальной трансляции исходного запроса в запрос к БД или просто код, набранный человеком?

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


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

  46. dante11

    Подскажите пожалуйста не очень понял сущности видов соединений внутреннее и внешнее,бывает ли внутреннее левое? Зачем пишут левое внутренее если оно одно? Хотел бы поподробнее узнать этот момент.

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


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

  47. avbolshakov

    Добрый вечер.
    Не очень понял про объединить и объединить все

    ВЫБРАТЬ 1
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ 1

    Получим
    1
    1
    Логично. Выбрали 1, объединяем со сл запросом, но говорим — дубли не нужны, потом объединяем с третьим, но уже можно и дубли, поэтому и появляется еще одна строка.

    ВЫБРАТЬ 1
    ОБЪЕДИНИТЬ ВСЕ
    ВЫБРАТЬ 1
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1

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

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


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

  48. leklerk375

    Добрый вечер! У меня вопрос по видеоуроку «Видеоурок. NULL для реквизитов битой ссылки» (видео-файл «Query-4-2-Join-8»). Там показано на примере запроса, что в значениях полей битой ссылки стоит Null. Вот этот запрос:

    ВЫБРАТЬ
        РасходТовараТовары.Ссылка,
        РасходТовараТовары.Товар.Артикул КАК Артикул,
        РасходТовараТовары.Товар,
        РасходТовараТовары.Количество КАК Количество
    ИЗ
        Документ.РасходТовара.Товары КАК РасходТовараТовары

    Однако, если в отладчике запустить запрос на базе Query-Homework-Template (предварительно создав битую ссылку номенклатуры)

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

    и передать в параметр Ссылка интересующий нас документ с битой ссылкой, то в отладчике, нажимая «Вычислить выражение» можно увидеть, что в поле Артикул содержится не Null, а пустая строка. Как объяснить это противоречие?

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


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

      • leklerk375

        Спасибо за ответ! Скажите, а что все-таки содержится в полях битой ссылки на самом деле?

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


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

  49. Yulunga

    Здравствуйте.
    В связи с тем, что стандартный отчёт из 1С(БП 2.0, обычные формы) иногда работает неправильно, поставили задачу написать отчёт как в приложенной картинке.
    Посему такой вопрос : каким образом писать такие отчёты-запросы ? разбить на подзадачки и идти справа налево ? сначала найти все оплаты+суммы с параметром реализация, потом все реализации с параметром счёт, потом…
    ?
    или это простой запрос и не надо огород городить ? существует какой-нибудь шаблон для решения таких задач ?
    Спасибо.

    %D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C%D0%9E%D1%82%D1%87%D1%91%D1%82.JPG

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


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

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