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

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

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

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

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

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

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

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

  1. Павел Черкасский

    Доброго времени суток. Решил 21 задание немного другим образом. Есть ли принципиальная разница в практическом применении Вашего способа и указанного на практике, в чем выражается?

    ВЫБРАТЬ
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Период) КАК Период,
        МАКСИМУМ(КурсыВалют.Курс) КАК Курс
    ПОМЕСТИТЬ ВТ_МаксКурс
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ_МаксКурс.Валюта КАК Валюта,
        ВТ_МаксКурс.Период КАК Период,
        ВТ_МаксКурс.Курс КАК Курс,
        МАКСИМУМ(КурсыВалют.Период) КАК Период1,
        МИНИМУМ(КурсыВалют.Курс) КАК Курс1
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют,
        ВТ_МаксКурс КАК ВТ_МаксКурс
    ГДЕ
        КурсыВалют.Валюта В (ВТ_МаксКурс.Валюта)

    СГРУППИРОВАТЬ ПО
        ВТ_МаксКурс.Валюта,
        ВТ_МаксКурс.Период,
        ВТ_МаксКурс.Курс
    • Василий Ханевич


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

      • Павел Черкасский

        Добрый день, откорректировал текст запроса в части соединения таблиц (изначальный вариант делал в КЗ, во время обучения писал запросы вручную, по большей мере, поэтому ошибся). Получил результат с общей максимальной датой и общим максимальным курсом в первом пакете, во втором пакете – максимальная дата и минимальный курс (сначала не додумался свериться с регистром или сравнить результаты в решении). Мой вопрос был как раз об этом, уместно ли в подобном запросе использовать такую конструкцию с группировкой максимум/минимум в одном пакете.
        Теперь понял, почему нужно несколько соединений, спасибо!

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


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

  2. dimon1210

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

    В связи с этим вопрос: при каком примерном количестве строк нужно индексировать ВТ?
    Имеет ли смысл индексировать, если в ВТ будет до 100 строк?

    Где то попадалась рекомендация, что нужно индексировать при наличии от 1000 стр.

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


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

  3. Doremi_2020

    За преподавателем создала обработку для распечатки товаров из ТЧ различных типов документов. Распечатывает, но товары не ограничены указанным документом, распечатываются либо все поступления, либо все расходы. В чём ошибка?

    &НаСервере
    Процедура ПолучитьТоварыНаСервере(ВыбДок)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЧТовары.Номенклатура КАК Номенклатура,
    | ТЧТовары.Количество КАК Количество
    |ИЗ
    | &Товары_ТЧ КАК ТЧТовары";

    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Товары_ТЧ", "Документ."+ ВыбДок.Метаданные().Имя +".Товары");
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "ТМЦ "+ВыборкаДетальныеЗаписи.Номенклатура + " - " +ВыборкаДетальныеЗаписи.Количество;
    Сообщение.Сообщить();
    КонецЦикла;

    КонецПроцедуры

    &НаКлиенте
    Процедура ПолучитьТовары(Команда)
    ПолучитьТоварыНаСервере(ВыбДок);
    КонецПроцедуры

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


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

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


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

  4. Doremi_2020

    Добрый день! В видео 6-08 преподаватель после Запрос.Выполнить() изменяет текст запроса, указывая из ТЧ какого документа надо выбрать товары. Что очерёдность здесь не важна? Логичнее было бы сформировать полный текст, потом выполнять запрос.

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


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

      • Doremi_2020

        Проглядела. Действительно, ниже текст был вынесен раньше Выполнить(). Спасибо.

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


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

  5. Жибек Абдылдаева

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

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


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

  6. Рустам

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

    ВЫБРАТЬ
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Курс) КАК КурсМакс,
        МИНИМУМ(КурсыВалют.Курс) КАК КурсМин
    ПОМЕСТИТЬ Курсы
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Курсы.Валюта КАК Валюта,
        Курсы.КурсМакс КАК КурсМакс,
        Курсы.КурсМин КАК КурсМин,
        МАКСИМУМ(КурсыВалютМакс.Период) КАК ПериодМакс,
        МАКСИМУМ(КурсыВалютМин.Период) КАК ПериодМин
    ИЗ
        Курсы КАК Курсы
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМин
            ПО Курсы.Валюта = КурсыВалютМин.Валюта
                И Курсы.КурсМин = КурсыВалютМин.Курс
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМакс
            ПО Курсы.Валюта = КурсыВалютМакс.Валюта
                И Курсы.КурсМакс = КурсыВалютМакс.Курс

    СГРУППИРОВАТЬ ПО
        Курсы.Валюта,
        Курсы.КурсМакс,
        Курсы.КурсМин
    • Василий Ханевич


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

  7. baronoleg

    Модуль 6 видео 8 – при добавлении условия в условной конструкции Если нужно тогда ещё установить параметр &ПараметрУсловие, я так понимаю?

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


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

  8. baronoleg

    Модуль 6 урок 5 – по памяти вводим 2 поля во временную таблицу, а если там не два поля а 20?

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


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

  9. Юлия Чубукова

    Здравствуйте.
    Как с помощью временных таблиц решить Практическое задание №20?

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


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

  10. Юлия Чубукова

    Здравствуйте.
    Не понятно как работает метод ВыполнитьПакет().

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


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

  11. Sergun29

    Добрый день, при выполнении задания № 24, у меня программа ругается на деление на 0, с ошибкой SQL сервера. Если ставлю ВЫБОР и оговариваю что если делитель не равен 0, иначе 0, то поле Наценка вообще пустое

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


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

      • Sergun29

        При таком коде – ошибка и результата нет, если оговаривать 0, то колонка наценки пустая

        ВЫБРАТЬ
            ВЛЗапрос.Номенклатура КАК Номенклатура,
            СУММА(ВЛЗапрос.ЦенаЗакуп) КАК ЦенаЗакуп,
            СУММА(ВЛЗапрос.ЦенаРозн) КАК ЦенаРозн,
            СУММА(100 * (ВЛЗапрос.ЦенаРозн - ВЛЗапрос.ЦенаЗакуп) / ВЛЗапрос.ЦенаЗакуп) КАК Наценка
        ИЗ
            (ВЫБРАТЬ
                ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакуп,
                0 КАК ЦенаРозн
            ИЗ
                РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен.Наименование ПОДОБНО "%Закупочная%") КАК ЦеныНоменклатурыСрезПоследних
           
            ОБЪЕДИНИТЬ ВСЕ
           
            ВЫБРАТЬ
                ЦеныНоменклатурыСрезПоследних.Номенклатура,
                0,
                ЦеныНоменклатурыСрезПоследних.Цена
            ИЗ
                РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен.Наименование ПОДОБНО "%Розничная%") КАК ЦеныНоменклатурыСрезПоследних) КАК ВЛЗапрос

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


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

          • Sergun29

            Спасибо за подробный и понятный ответ!

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


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

  12. Sergun29

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

    &НаСервере
    Процедура ВывестиНаСервере()
        МВТ = Новый МенеджерВременныхТаблиц;        
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МВТ;
        Запрос.УстановитьПараметр("Табличка",РеквизитФормыВЗначение("ТаблицаЗнач"));
        Запрос.Текст =
            "ВЫБРАТЬ
            |   Табличка.Документ КАК Документ,
            |   Табличка.Количество КАК Количество
            |ПОМЕСТИТЬ ВТ_МояТаблица
            |ИЗ
            |   &Табличка КАК Табличка";
       
        Запрос.Выполнить();
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МВТ;
        Запрос.Текст = "ВЫБРАТЬ
                       |    ВТ_МояТаблица.Документ КАК Документ,
                       |    ВТ_МояТаблица.Количество КАК Количество
                       |ИЗ
                       |    ВТ_МояТаблица КАК ВТ_МояТаблица";
       
       
        РезультатЗапроса = Запрос.Выполнить();
       
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить("Документ - " + ВыборкаДетальныеЗаписи.Документ + "Количество - " + ВыборкаДетальныеЗаписи.Количество);
    КонецЦикла;
       
       
    КонецПроцедуры

    &НаСервере
    Функция ПросмотрВТ(Запрос, ИмяВнутреннийТаблицы) Экспорт
        ЗапросВТ = Новый Запрос ("ВЫБРАТЬ * ИЗ" + ИмяВнутреннийТаблицы);
        ЗапросВТ.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц;
        ЗапросВТ.Выполнить();
        Возврат ЗапросВТ.Выгрузить();
       
       
    КонецФункции
    • Василий Ханевич


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

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


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

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


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

  13. Аким Аверин

    Добрый день. Практическое задание 21 – Решил практическую задачу несколько иначе от решения преподавателя – не делал 2 соединения с таблицей курсов и получил период через выбрать. Результат решения совпадает с задачей. Верно ли такое решение?

    ВЫБРАТЬ
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Курс) КАК КурсМАКС,
        МИНИМУМ(КурсыВалют.Курс) КАК КурсМИН
    ПОМЕСТИТЬ ВТ
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта

    ИНДЕКСИРОВАТЬ ПО
        Валюта
    ;

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

    СГРУППИРОВАТЬ ПО
        ВТ.Валюта,
        ВТ.КурсМАКС,
        ВТ.КурсМИН

    УПОРЯДОЧИТЬ ПО
        Валюта
    • Василий Ханевич


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

  14. Жернаков Алексндр

    Добрый день. При решение 21 задачи возник вопрос, написал два решение одно основанное на срезе последних

    ВЫБРАТЬ
        КурсыВалютМакс.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалютМакс.Курс) КАК КурсМакс,
        МИНИМУМ(КурсыВалютМин.Курс) КАК КурсМин
    ПОМЕСТИТЬ Т0
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалютМакс
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМин
            ПО КурсыВалютМакс.Валюта = КурсыВалютМин.Валюта

    СГРУППИРОВАТЬ ПО
        КурсыВалютМакс.Валюта
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Т0.Валюта КАК Валюта,
        КурсыВалютСрезПоследнихМакс.Курс КАК КурсМакс,
        КурсыВалютСрезПоследнихМакс.Период КАК ПериодМакс,
        КурсыВалютСрезПоследнихМин.Курс КАК КурсМин,
        КурсыВалютСрезПоследнихМин.Период КАК ПериодМин
    ИЗ
        Т0 КАК Т0
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(
                    ,
                    (Валюта, Курс) В
                        (ВЫБРАТЬ
                            Т0.Валюта КАК Валюта,
                            Т0.КурсМин КАК КурсМин
                        ИЗ
                            Т0 КАК Т0)) КАК КурсыВалютСрезПоследнихМин
            ПО Т0.Валюта = КурсыВалютСрезПоследнихМин.Валюта
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(
                    ,
                    (Валюта, Курс) В
                        (ВЫБРАТЬ
                            Т0.Валюта КАК Валюта,
                            Т0.КурсМакс КАК КурсМакс
                        ИЗ
                            Т0 КАК Т0)) КАК КурсыВалютСрезПоследнихМакс
            ПО Т0.Валюта = КурсыВалютСрезПоследнихМакс.Валюта

    УПОРЯДОЧИТЬ ПО
        Валюта

    Второе на работе с физической таблицей

     ВЫБРАТЬ
        КурсыВалютМакс.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалютМакс.Курс) КАК КурсМакс,
        МИНИМУМ(КурсыВалютМин.Курс) КАК КурсМин          
    ПОМЕСТИТЬ Т0
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалютМакс
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМин
            ПО КурсыВалютМакс.Валюта = КурсыВалютМин.Валюта

    СГРУППИРОВАТЬ ПО
        КурсыВалютМакс.Валюта
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Т0.Валюта КАК Валюта,
        КурсВалютМакс.Курс КАК КурсМакс,
        МАКСИМУМ(КурсВалютМакс.Период) КАК ПериодМакс,
        КурсыВалютМин.Курс КАК КурсМин,
        МАКСИМУМ(КурсыВалютМин.Период) КАК ПериодМин
    ИЗ
        Т0 КАК Т0
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМин
            ПО Т0.Валюта = КурсыВалютМин.Валюта
                И Т0.КурсМин = КурсыВалютМин.Курс
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсВалютМакс
            ПО Т0.КурсМакс = КурсВалютМакс.Курс
                И Т0.Валюта = КурсВалютМакс.Валюта

    СГРУППИРОВАТЬ ПО
        Т0.Валюта,
        КурсВалютМакс.Курс,
        КурсыВалютМин.Курс

    УПОРЯДОЧИТЬ ПО
        Валюта

    Какое из них быстрее отработает и корректен использовать, если оба запроса возвращают одни и те же данные?

    • AlexeyDubrovin

      В обоих вариантах лучше убрать в первом запросе левое соединение. Достаточно просто написать

      ВЫБРАТЬ
          КурсыВалютМакс.Валюта КАК Валюта,
          МАКСИМУМ(КурсыВалютМакс.Курс) КАК КурсМакс,
          МИНИМУМ(КурсыВалютМакс.Курс) КАК КурсМин          
      ПОМЕСТИТЬ Т0
      ИЗ
          РегистрСведений.КурсыВалют КАК КурсыВалютМакс
       
      СГРУППИРОВАТЬ ПО
          КурсыВалютМакс.Валюта

      Оптимальнее будет использовать запрос с обычной таблицей.

      • Алексндр

        Спасибо за рекомендацию (относительно левого соединения в первом запросе) и ответ

  15. toliman778

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МИНИМУМ(КурсыВалют.Курс) КАК КурсМин,
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Период) КАК ПериодМин
    ПОМЕСТИТЬ ВТМинДатаКурс
    ИЗ
        ВТМинимум КАК ВТМинимум
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
            ПО (КурсыВалют.Валюта = ВТМинимум.Валюта)
                И (КурсыВалют.Курс = ВТМинимум.Курс)

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта
    ;
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(КурсыВалют.Курс) КАК Курс,
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Период) КАК Период
    ПОМЕСТИТЬ ВТМаксДатаКурс
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют
    ГДЕ
        (КурсыВалют.Курс, КурсыВалют.Валюта) В
                (ВЫБРАТЬ
                    ВТМакс.Курс,
                    ВТМакс.Валюта
                ИЗ
                    ВТМакс)

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта
    ;
    • Василий Ханевич


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

  16. ThurisazGudleifr

    Добрый вечер, Василий.
    В курсе рассказывается, что временная таблица живет, пока живет МВТ. МВТ можно закрыть с помощью метода Закрыть(), соответственно уничтожатся все ВТ.

    1) После каждого запроса рекомендуется ли закрывать МВТ, т.к это доп.нагрузка на систему? Или на это не стоит обращать внимания? В какой момент она уничтожится автоматически?

    2) Когда только познакомился с Запросами в 1С и ВТ, никогда не создавал МенеджерВременныхТаблиц, а писал запрос, помещал данные в ВТ, далее работал уже с ВТ, используя соединения и тому подобное. То, что МВТ хранит в себе все ВТ это понятно, но для чего он еще используется на практике, какие задачи могут возникнуть, где необходимо работать непосредственно с МВТ?

    3) Пишу запрос к БД. Помещаю данные в ВТ, далее из ВТ выбираю несколько полей. МВТ не создавал. Запрос отработал корректно, результат получен. Ради интереса в отладке в конце кода обращаюсь к свойству Запрос.МенеджерВременныхТаблиц и вижу, что он равен Неопределено. Как тогда система работает с ВТ, если МВТ не определен? Или где-то на “низком” уровне он все же существует?

    4) Создаю описание ВТ, добавил Поле, указал в колонке Тип значения необходимый тип, но при повторном редактировании ВТ тип значения пустой, но запрос отрабатывает верно, также, если изначально не задавать Тип значения все будет работать. Пробовал на разных релизах – все аналогично. Т.е можно не задавать тип значения? Или существует ряд тонкостей, которые следует учесть, когда создаем описание?

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


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

  17. elfnatal

    Вопрос по параграфу “Универсальный запрос”.
    В связи с появлением СхемыЗапроса было бы интересно узнать четвертый вариант решения этой задачи. Как с помощью схемы сделать запрос получения данных из разных типов документов, в зависимости от переданной ссылки?

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


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

  18. MDaryaA

    Добрый день!

    Очень не хватает практических заданий в модуле, чтобы закрепить полученные знания)

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


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

      • MDaryaA

        Имела в виду, что в данном модуле не хватает для закрепления работы с тем же Менеджером временных таблиц

  19. MDaryaA

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

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

    • Сергей Калинкин

      Добрый день! Индексирование увеличивает скорость поиска по таблице.

  20. ParhomchikAN

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

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


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

      • ParhomchikAN

        спасибо, теперь все встало на свои места.

  21. Akorg

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

    • Вячеслав Вязигин

      День добрый!

      Ответ на этот вопрос очень индивидуальный. Один и тот же запрос в синтаксисе 1С может очень разно проявить себя на различных стендах. Каким образом будет построен план запроса и как отработает оптимизатор SQL заранее предсказать нельзя.

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

      • Akorg

        Вот результаты экспериментов на реальной БД. Вместо дат минимального и максимального курсов ищу даты продаж заданной номенклатуры по минимальной и максимальной цене за месяц в документах реализации товаров и услуг. (Вид цены Прайс 3 соответствует минимальной цене, Прайс 2 – максимальной).
        Вот аналог запроса из решения:

        ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаМин,
            ЦеныНоменклатурыСрезПоследних1.Цена КАК ЦенаМакс
        ПОМЕСТИТЬ МинМакс
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                    ,
                    ВидЦены = &Прайс3
                        И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                        ,
                        ВидЦены = &Прайс2
                            И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних1
                ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних1.Номенклатура
        ;

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

        СГРУППИРОВАТЬ ПО
            МинМакс.Номенклатура,
            МинМакс.ЦенаМин,
            МинМакс.ЦенаМакс

        А вот мой вариант:

        ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаМин,
            ЦеныНоменклатурыСрезПоследних1.Цена КАК ЦенаМакс
        ПОМЕСТИТЬ МинМакс
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                    ,
                    ВидЦены = &Прайс3
                        И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                        ,
                        ВидЦены = &Прайс2
                            И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних1
                ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних1.Номенклатура
        ;

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

        СГРУППИРОВАТЬ ПО
            МинМакс.Номенклатура,
            МинМакс.ЦенаМин
        ;

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

        СГРУППИРОВАТЬ ПО
            МинМакс.Номенклатура,
            МинМакс.ЦенаМакс
        ;

        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            МаксЦены.Номенклатура,
            МинЦены.ЦенаМин,
            МинЦены.МинДата,
            МаксЦены.ЦенаМакс,
            МаксЦены.МаксДата
        ИЗ
            МинЦены КАК МинЦены
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксЦены КАК МаксЦены
                ПО МинЦены.Номенклатура = МаксЦены.Номенклатура

        Результаты работы планов запросов оказались просто несравнимы.

        Для первого варианта:
        planning time: 1.404 ms
        execution time: 3542.869 ms
        ‘,rowsaffected=1

        Для второго:
        planning time: 0.140 ms
        execution time: 0.109 ms
        ‘,rowsaffected=1

        Вывод (по крайней мере, для БД PostgreSQL). На больших объемах данных категорически нельзя связывать две несгруппированные таблицы, как в решении, а группировку выполнять потом. Надо сначала выполнять группировку и лишь потом связывать.

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


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

        • janit

          А я вот не согласен с Вашими выводами. В Вашем примере не аналогичный запрос. Я создал 1643598 записей (разные курсы для трёх валют на каждый день с 1000 года н.э. до 2500 года н.э) в регистре сведений КурсВалют. Создал именно аналогичные запросы. Так вот – количество сканируемых записей = одинаковое, время выполнения также одинаковое. Привожу примеры, еще раз подчеркиваю, аналогичных запросов:

          Запрос №1

          ВЫБРАТЬ
              МИНИМУМ(КурсыВалют.Курс) КАК Курс,
              КурсыВалют.Валюта КАК Валюта,
              МАКСИМУМ(КурсыВалют.Курс) КАК Курс1
          ПОМЕСТИТЬ ВременнаяТаблица
          ИЗ
              РегистрСведений.КурсыВалют КАК КурсыВалют

          СГРУППИРОВАТЬ ПО
              КурсыВалют.Валюта
          ;

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

          СГРУППИРОВАТЬ ПО
              ВременнаяТаблица.Валюта,
              ВременнаяТаблица.Курс,
              ВременнаяТаблица.Курс1

          Статистика плана запроса №1

          Statistics: RecordsScanned = 1643598, ParseTime = 0, ExecuteTime = 1569, BuffersMemory = 26392, ResultRecords = 3, RecordSize = 36
          Statistics: RecordsScanned = 3287199, ParseTime = 0, ExecuteTime = 3847, BuffersMemory = 25552, ResultRecords = 3, RecordSize = 66

          Запрос №2

          ВЫБРАТЬ
              МИНИМУМ(КурсыВалют.Курс) КАК КурсМин,
              КурсыВалют.Валюта КАК Валюта,
              МАКСИМУМ(КурсыВалют.Курс) КАК КурсМакс
          ПОМЕСТИТЬ ВременнаяТаблица
          ИЗ
              РегистрСведений.КурсыВалют КАК КурсыВалют

          СГРУППИРОВАТЬ ПО
              КурсыВалют.Валюта
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ВременнаяТаблица.КурсМин КАК КурсМин,
              ВременнаяТаблица.Валюта КАК Валюта,
              МАКСИМУМ(КурсыВалют.Период) КАК ПериодМин
          ПОМЕСТИТЬ ЦенаМин
          ИЗ
              ВременнаяТаблица КАК ВременнаяТаблица
                  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
                  ПО ВременнаяТаблица.Валюта = КурсыВалют.Валюта
                      И ВременнаяТаблица.КурсМин = КурсыВалют.Курс

          СГРУППИРОВАТЬ ПО
              ВременнаяТаблица.Валюта,
              ВременнаяТаблица.КурсМин
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ВременнаяТаблица.Валюта КАК Валюта,
              ВременнаяТаблица.КурсМакс КАК КурсМакс,
              МАКСИМУМ(КурсыВалют.Период) КАК ПериодМакс
          ПОМЕСТИТЬ ЦенаМакс
          ИЗ
              ВременнаяТаблица КАК ВременнаяТаблица
                  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
                  ПО (ВременнаяТаблица.Валюта = КурсыВалют.Валюта)
                      И (ВременнаяТаблица.КурсМакс = КурсыВалют.Курс)

          СГРУППИРОВАТЬ ПО
              ВременнаяТаблица.Валюта,
              ВременнаяТаблица.КурсМакс
          ;

          ////////////////////////////////////////////////////////////////////////////////
          ВЫБРАТЬ
              ЦенаМин.Валюта КАК Валюта,
              ЦенаМин.КурсМин КАК КурсМин,
              ЦенаМин.ПериодМин КАК ПериодМин,
              ЦенаМакс.КурсМакс КАК КурсМакс,
              ЦенаМакс.ПериодМакс КАК ПериодМакс
          ИЗ
              ЦенаМин КАК ЦенаМин
                  ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЦенаМакс КАК ЦенаМакс
                  ПО (ЦенаМакс.Валюта = ЦенаМин.Валюта)

          Статистика плана запроса №2

          Statistics: RecordsScanned = 1643598, ParseTime = 0, ExecuteTime = 1583, BuffersMemory = 26392, ResultRecords = 3, RecordSize = 36
          Statistics: RecordsScanned = 1643601, ParseTime = 0, ExecuteTime = 1942, BuffersMemory = 26132, ResultRecords = 3, RecordSize = 42
          Statistics: RecordsScanned = 1643601, ParseTime = 0, ExecuteTime = 1884, BuffersMemory = 26132, ResultRecords = 3, RecordSize = 42
          Statistics: RecordsScanned = 9, ParseTime = 0, ExecuteTime = 0, BuffersMemory = 25552, ResultRecords = 3, RecordSize = 66

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

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


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

  22. dante11

    Подскажите пожалуйста какое сочетание клавиш использует программист чтобы текст платформа дописывала.
    Он пишет допустим Пока дальше выскакивает окно условие и дописывает остальное платформа пока цикл конеццикла.
    Как он это делает? Конкретно в 6 разделе он пишет сооб и дальше у него сразу много строк сообщение = новый
    Очень удобная вещь не не знаю как ее вызывать.

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


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

      • dante11

        У меня ничего не происходит при нажатии ctrl + Q,может что то включить нужно где то?

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


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

  23. Hayce

    Здравствуйте! Прошу прощения за вопрос не связанный с темой.
    В учебнике я не нашел ничего о закладке “Построитель” (может плохо искал… если так то извиняюсь, еще не весь курс прошел). По работе довольно часто сталкиваюсь с запросами в которых он используется, пока не понял какой в нем смысл, не могли бы немного рассказать о нем. Спасибо.

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


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

  24. kit_kor

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

    P.S.: Скачал консоль запросов с сайта ИТС, она отличается от вашей версии в видео. Например, очень неудобно сделана работа на закладке “Связи” (см.скриншот) – непонятно какая таблица к какой и по какому условию соединяется и условия связи выбрать из списка нельзя, приходится вручную писать. Плюс не получается вызвать конструктор запроса внутри конструктора запроса через контекстное меню выделением пробела. Подскажите, где нормальную взять.

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


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

      • Наталья Яковлева

        Делюсь результатом: А я доработала консоль запросов 8.3 под себя и связи легко и быстро стала настраивать. Просто с этой внешней обработкой делала то, что делал тренер во время уроков.Картинка заменила в форме на Картинка+Текст и обработка стала удобной.

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


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

        • Shvalev.maxim

          А в каком уроке это было не подскажете? я видимо просмотрел.

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


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

  25. Hayce

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

    ВЫБРАТЬ
        МАКСИМУМ(КурсыВалют.Период) КАК ПериодМакс,
        КурсыВалют.Валюта,
        КурсыВалют.Курс КАК КурсМакс,
        ДАТАВРЕМЯ(1, 1, 1) КАК ПериодМин,
        0 КАК КурсМин
    ПОМЕСТИТЬ ВТ
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют
    ГДЕ
        КурсыВалют.Курс В
                (ВЫБРАТЬ
                    МАКСИМУМ(КурсыВалют.Курс) КАК Курс
                ИЗ
                    РегистрСведений.КурсыВалют КАК КурсыВалют
                СГРУППИРОВАТЬ ПО
                    КурсыВалют.Валюта)

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта,
        КурсыВалют.Курс

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

    ВЫБРАТЬ
        ДАТАВРЕМЯ(1, 1, 1),
        КурсыВалют.Валюта,
        0,
        МАКСИМУМ(КурсыВалют.Период),
        КурсыВалют.Курс
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют
    ГДЕ
        КурсыВалют.Курс В
                (ВЫБРАТЬ
                    МИНИМУМ(КурсыВалют.Курс) КАК Курс
                ИЗ
                    РегистрСведений.КурсыВалют КАК КурсыВалют
                СГРУППИРОВАТЬ ПО
                    КурсыВалют.Валюта)

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта,
        КурсыВалют.Курс
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ.Валюта,
        МАКСИМУМ(ВТ.ПериодМакс) КАК ПериодМакс,
        СУММА(ВТ.КурсМакс) КАК КурсМакс,
        МАКСИМУМ(ВТ.ПериодМин) КАК ПериодМин,
        СУММА(ВТ.КурсМин) КАК КурсМин
    ИЗ
        ВТ КАК ВТ

    СГРУППИРОВАТЬ ПО
        ВТ.Валюта

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

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


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

  26. Klinval

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

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

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

    СГРУППИРОВАТЬ ПО
        Валюты.Ссылка
    ;

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

    СГРУППИРОВАТЬ ПО
        ВТ_МаксимальныйИМинимальныеКурсы.Валюта,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМакс,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМин

    Результат идентичный. В запросе есть отличии. Просто я хотел вывести в любом случае валюту, даже если её нет ни разу в регистре курсов. Во второй части запроса исходя из этих-же побуждений я использовал Левое соединение,а не Внутреннее.
    Я просто немного расширенно понял задачу, но не суть в этом. Меня больше заинтересовал другой вопрос: что быстрее отрабатывает Левое или Внутреннее соединение? Просто если решать как вы, то результат по-любому будет одинаков и вопрос только в скорости:

    ВЫБРАТЬ
        КурсыВалют.Валюта КАК Валюта,
        МАКСИМУМ(КурсыВалют.Курс) КАК КурсМакс,
        МИНИМУМ(КурсыВалют.Курс) КАК КурсМин
    ПОМЕСТИТЬ ВТ_МаксимальныйИМинимальныеКурсы
    ИЗ
        РегистрСведений.КурсыВалют КАК КурсыВалют

    СГРУППИРОВАТЬ ПО
        КурсыВалют.Валюта
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТ_МаксимальныйИМинимальныеКурсы.Валюта,
        МАКСИМУМ(КурсыВалют.Период) КАК ПериодМакс,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМакс,
        МАКСИМУМ(КурсыВалютМинимум.Период) КАК ПериодМин,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМин
    ИЗ
        ВТ_МаксимальныйИМинимальныеКурсы КАК ВТ_МаксимальныйИМинимальныеКурсы
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют//Или ЛЕВОЕ?
            ПО ВТ_МаксимальныйИМинимальныеКурсы.Валюта = КурсыВалют.Валюта
                И ВТ_МаксимальныйИМинимальныеКурсы.КурсМакс = КурсыВалют.Курс
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалютМинимум//Или ЛЕВОЕ?
            ПО ВТ_МаксимальныйИМинимальныеКурсы.КурсМин = КурсыВалютМинимум.Курс
                И ВТ_МаксимальныйИМинимальныеКурсы.Валюта = КурсыВалютМинимум.Валюта

    СГРУППИРОВАТЬ ПО
        ВТ_МаксимальныйИМинимальныеКурсы.Валюта,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМакс,
        ВТ_МаксимальныйИМинимальныеКурсы.КурсМин
    • Василий Ханевич


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

  27. derek

    Добрый день Василий. Вопрос по отбору. Соединяю несколько таблиц. Отчет на СКД. По каждой из таблиц в настройках отчета (в режиме предприятия) устанавливаю отбор по контрагенту. Для каждой таблицы свой Контрагент. Возникает ситуация когда отбор применяемый к второй таблице влияет на результат первой. Почему? Что не так?

    ВЫБРАТЬ РАЗЛИЧНЫЕ
        ПоступлениеТоваровУслугТовары.Ссылка,
        ПоступлениеТоваровУслугТовары.Номенклатура,
        ПоступлениеТоваровУслугТовары.Количество,
        ПоступлениеТоваровУслугТовары.Цена,
        ПоступлениеТоваровУслугТовары.Сумма,
        ПоступлениеТоваровУслугТовары.СтавкаНДС
    ПОМЕСТИТЬ ВТ_Товары
    ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
    ГДЕ
        ПоступлениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
        И ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        ПоступлениеТоваровУслугТовары.Номенклатура,
        ПоступлениеТоваровУслугТовары.Количество КАК Количество,
        ПоступлениеТоваровУслугТовары.Цена КАК Цена,
        ПоступлениеТоваровУслугТовары.Сумма КАК Сумма,
        ПоступлениеТоваровУслугТовары.СтавкаНДС КАК СтавкаНДС,
        ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
        ПоступлениеТоваровУслугТовары.Ссылка.Дата КАК Дата
    ПОМЕСТИТЬ ВТ_ТоварыПредпоследние
    ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Товары КАК ВТ_Товары
            ПО ПоступлениеТоваровУслугТовары.Номенклатура = ВТ_Товары.Номенклатура
    ГДЕ
        ПоступлениеТоваровУслугТовары.Ссылка.Дата < &Дата1
        И ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        МАКСИМУМ(ВТ_ТоварыПредпоследние.Ссылка) КАК Ссылка,
        ВТ_ТоварыПредпоследние.Номенклатура
    ПОМЕСТИТЬ ВТ_МаксДокумент
    ИЗ
        ВТ_ТоварыПредпоследние КАК ВТ_ТоварыПредпоследние

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

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        ВТ_Товары.Ссылка КАК ДокументПоследний,
        ВТ_Товары.Номенклатура,
        ВТ_Товары.Количество КАК КоличествоПоследнее,
        ВТ_ТоварыПредпоследние.Ссылка КАК ДокументПредпоследний,
        ВТ_ТоварыПредпоследние.Количество КАК КоличествоПредпоследнее,
        ВТ_ТоварыПредпоследние.Ссылка.Дата КАК ДатаПредпоследнего,
        ВТ_ТоварыПредпоследние.Ссылка.Номер КАК НомерПредпоследнего,
        ВТ_Товары.Ссылка.Дата КАК ДатаПоследнегоДок,
        ВТ_Товары.Ссылка.Номер КАК НомерПоследнегоДок,
        ВТ_Товары.Ссылка.Контрагент КАК КонтрагентПоследний,
        ВТ_ТоварыПредпоследние.Ссылка.Контрагент КАК КонтрагентПредпоследний,
        ВТ_ТоварыПредпоследние.СтавкаНДС КАК СтавкаНДСПредпоследняя,
        ВТ_Товары.СтавкаНДС КАК СтавкаНДСПоследняя,
        ВТ_Товары.Цена КАК ЦенаПоследняя,
        ВТ_Товары.Сумма КАК СуммаПоследняя,
        ВТ_ТоварыПредпоследние.Цена КАК ЦенаПредпоследняя,
        ВТ_ТоварыПредпоследние.Сумма КАК СуммаПредпоследняя,
        ВТ_Товары.Цена - ВТ_ТоварыПредпоследние.Цена КАК Разница,
        ВЫБОР
            КОГДА ВТ_ТоварыПредпоследние.Цена > 0
                ТОГДА (ВТ_Товары.Цена / ВТ_ТоварыПредпоследние.Цена - 1) * 100
        КОНЕЦ КАК Процент,
        ВТ_Товары.Номенклатура.Артикул КАК Артикул,
        ВТ_Товары.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзм
    ИЗ
        ВТ_Товары КАК ВТ_Товары
            ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТоварыПредпоследние КАК ВТ_ТоварыПредпоследние
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксДокумент КАК ВТ_МаксДокумент
                ПО ВТ_ТоварыПредпоследние.Номенклатура = ВТ_МаксДокумент.Номенклатура
                    И ВТ_ТоварыПредпоследние.Ссылка = ВТ_МаксДокумент.Ссылка
            ПО (ВТ_ТоварыПредпоследние.Номенклатура = ВТ_Товары.Номенклатура)
    • Василий Ханевич


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

  28. Lucia_

    Добрый день!

    1. Есть ли какое-то ограничение по количеству временных таблиц для одного запроса? Чтобы в попытках упрощения не перейти некую грань, когда произойдет обратный эффект.
    2. Правильно ли я понимаю. Если мне нужно получить некий результат запросом, я использую временные таблицы, больше 6. Но в то же время мне нужен промежуточный результат из одной временной таблицы. Лучше воспользоваться менеджером временных таблиц и получить дополнительным запросом, после того как, эту информацию. Или сделать пакетный запрос и получить инфу нужную отдельно. Но тогда я получу пакетом целый массив всего, а возьму только одну временную таблицу и один основной запрос. Как лучше сделать?
    3. А какой индекс создается на временную таблицу из конструктора? С точки зрения SQL.

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


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

      • Lucia_

        Вот те раз…С индексами-то какая штука интересная)

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


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

  29. AxiLLes

    Добрый вечер)
    Вопрос по решенному домашнему заданию: трижды используется обращение к физической таблице РегистрСведений.КурсыВалют, не лучше ли предварительно поместить данные физической таблицы во временную и использовать ее 3 раза в дальнейшем?

    Заранее хочется сказать что немного анализировал такой подход к написанию, увеличения производительности не заметил
    • Василий Ханевич


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

      • AxiLLes

        Согласен с вами. Если требуется соединение/объединение нескольких таблиц, и нужно такое соединение/объединение использовать 2-3 раза, то обращаться к таблицам БД будет менее производительно и еще получаем вероятность ошибки.
        На примере одной таблицы у меня такая мысль, что это же трижды обращение к базе данных. А если Курсы Валют поместить во временную таблицу мы вроде как 1 раз обратились к БД и уже работаем с временной таблицей.
        Видимо на примерах с одной таблицей это сильно не критично) т.к даже в типовых решениях ЗУП очень часто перемалывается и соединяется одна и та же таблица РегистрСведений.РаботникиОрганизаций.

  30. ForgetMeNot

    Добрый день!
    1. Вопрос по уроку “Передача внешней таблицы в запрос”.
    А зачем Вы дважды устанавливаете свойство МенеджерВременныхТаблиц объекта Запрос: Запрос.МенеджерВременныхТаблиц=МВТ, при помещении таблицы значений в запрос и при запросе к временной таблице. Это опечатка или в этом есть какой-то смысл?
    2. Вопрос по уроку “Работа с временными таблицами в отладчике”
    Почему в функцию ПросмотрВТ Вы передаете Запрос, а не МенеджерВременныхТаблиц. В теле процедуры ведь используется только МенеджерВременныхТаблиц?
    3. Можно ли как-то посмотреть какие временные таблицы описаны в данном экземпляре МенеджераВременныхТаблиц? Например в МенеджерВременныхТаблиц какие-то таблицы добавлялись, какие-то удалялись и в конкретной точке кода можно ли как-то увидеть какие таблицы есть в этом МенеджерВременныхТаблиц?

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


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

      • ifkerri

        Добрый день!

        Просматриваю курс, возник тот же вопрос по временным таблицам:

        “3. Можно ли как-то посмотреть какие временные таблицы описаны в данном экземпляре МенеджераВременныхТаблиц? Например в МенеджерВременныхТаблиц какие-то таблицы добавлялись, какие-то удалялись и в конкретной точке кода можно ли как-то увидеть какие таблицы есть в этом МенеджерВременныхТаблиц?”

        Вы писали что в версии 8.3.7 планируются такие доработки. Сейчас вышла уже версия 8.3.9
        Есть ли какие – то новости? :)

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


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

          • ifkerri

            Круто! Спасибо.

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

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

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


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

  31. katakuna88

    Добрый день. Подскажите по двум вопросам:
    1.Возможно ли в консоли запросов проверять выполнение запроса частями? Например просмотреть только результат вложенного запроса или пакетный запрос по частям для анализа?
    2.Не совсем понял 7 урок в блоке 6.
    Добавил функцию
    &НаСервере
    Функция ПросмотрВТ(Запрос, ИмяВнутреннейТаблицы) ЭКСПОРТ
    ЗапросТМП = Новый Запрос(“ВЫБРАТЬ *ИЗ”+ИмяВнутреннейТаблицы);
    ЗапросТМП.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц);
    Возврат ЗапросТМП.Выполнить().Выгрузить();

    КонецФункции

    Откуда сюда передаются параметры (Запрос, ИмяВнутреннейТаблицы)?

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


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

  32. Igor

    Про уничтожение – во втором видео сказано что команды Закрыть уничтожает менеджер временных таблиц. Что в данном случае подразумевается под уничтожением менеджера ВТ? По отладчику после МВТ.Закрыть() МВТ все равно доступна и имеет тип МенеджерВременныхТаблиц.
    Спасибо.

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


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

      • Igor

        Теперь понятно. Просто в видео сказано что Закрыть() уничтожает и менеджер временных таблиц и сами временнные таблицы.

  33. Панфилов Александр

    Вопрос по индексации временных таблиц. Как выполняется выражение:
    ИНДЕКСИРОВАТЬ ПО Контрагент, Товар
    Создаются два “простых” индекса (отдельно по Контрагент, отдельно по Товар)?
    Как создать “составной” индекс по, например, Номенклатура+СерияНоменклатуры+ХарактеристикаНоменклатуры? Часто использую запросы, в которых практически все исходные таблицы оперируют именно со “святой троицей”, а не отдельно с Номенклатурой, отдельно Серией…. Поэтому и соединения таблиц проходят, в основном, по совпадению всех ТРЕХ полей.

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


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

  34. spv

    Добрый день

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

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


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

  35. Vit

    Добрый день!
    Василий помогите разобраться. При выполнении запроса 1й раз:
    “ВЫБРАТЬ ПЕРВЫЕ 50
    | Номенклатура.Наименование КАК Наименование
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ВТ.Наименование
    |ИЗ
    | ВТ КАК ВТ”

    В sql profiler получаю запрос –
    CREATE TABLE #tt4 (_Q_001_F_000 NVARCHAR(100) COLLATE DATABASE_DEFAULT)
    INSERT INTO #tt4 WITH(TABLOCK) (_Q_001_F_000) SELECT TOP 50
    T1._Description
    FROM dbo._Reference32 T1 WITH(NOLOCK)
    SELECT
    T1._Q_001_F_000
    FROM #tt4 T1 WITH(NOLOCK)

    При повторном исполнении-
    INSERT INTO #tt4 WITH(TABLOCK) (_Q_001_F_000) SELECT TOP 50
    T1._Description
    FROM dbo._Reference32 T1 WITH(NOLOCK)
    SELECT
    T1._Q_001_F_000
    FROM #tt4 T1 WITH(NOLOCK)
    TRUNCATE TABLE #tt4

    Выпоняя первый запрос в sql я получаю ошибку “Msg 2714, Level 16, State 6, Line 1
    There is already an object named ‘#tt4’ in the database.” т.к. таблица уже была создана, 2й запрос отрабатывает правильно. У меня вопрос, как переписать 1С запрос с временными таблицами в sql, так чтобы отрабатывал без ошибок или для этого необходимо использовать вложенные запросы?

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


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

      • Vit

        Спасибо за ответ, при выполнении запроса на стороне 1С ошибок нет. Интересно было рассмотреть возможность получения sql запроса для его использования не из 1С. Например, используя веб-сервис 1С я вывожу цены номенклатуры на сайт, бывает что веб-сервис недоступен, а база 1С доступна. Как можно преобразовать 1С запрос, используемый на веб-сервисе в sql запрос. Проблема именно в том, что в 1С запросе используются временные таблицы и текст sql запроса полученный в консоли отрабатывает в sql без ошибок только 1 раз. Или получать данные таким образом неправильно и может привести к неработоспособности базы?

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


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

  36. annamv

    Добрый день!
    В каких случаях используется конструкция “ГДЕ ЛОЖЬ” в условии запроса?

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


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

      • annamv

        Добрый день!
        такое условие встречала в объединении нескольких временных таблиц с пустой таблицей,
        например
        Если ПолучатьПлановыеНачисления Тогда
        ТекстЗапроса = …
        Иначе
        ТекстЗапроса = ТекстЗапроса +
        “////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        | NULL КАК Сотрудник,
        | NULL КАК Физлицо,
        | NULL КАК ВидРасчета,
        | NULL КАК Показатель1,
        | NULL КАК Показатель2,
        | NULL КАК Показатель3,
        | NULL КАК Показатель4,
        | NULL КАК Показатель5,
        | NULL КАК Показатель6,
        | NULL КАК Валюта1,
        | NULL КАК Валюта2,
        | NULL КАК Валюта3,
        | NULL КАК Валюта4,
        | NULL КАК Валюта5,
        | NULL КАК Валюта6,
        | NULL КАК ДатаДействия
        |ПОМЕСТИТЬ НачисленияСотрудника
        |ГДЕ
        | ЛОЖЬ
        |;
        |”;

        КонецЕсли;
        теперь понятно

  37. AlexPC

    Чисто для удобства будущих слушателей курса можно поместить файлы практических занятий 6 модуля в архиве в папку “Модуль 6. Использование временных таблиц и пакетных запросов-Практические задания” или созвучную, как в остальных модулях :)

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


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

  38. kamalion

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

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


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

  39. tekhneryadov

    Многие используют явное удаление временных таблиц методом УНИЧТОЖИТЬ абсолютно во всех модулях. Аргументируют это тем, что сама система не всегда корректно это самое удаление производит. Так ли это? Можно ли как-то заранее определить, требуется ручное удаление или нет?

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


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

  40. DasTPID

    Добрый день!

    1) Ни разу не использовал уничтожение временных таблиц, хотя и знаю что такая возможность есть – само ведь очистится когда нужно будет. Можете описать ситуацию, при которой уничтожение вт будет оправдано?
    2) Ни разу не использовал менеджер временных таблиц, гораздо проще с моей точки зрения написать

    Запрос.Текст = "
    выбрать * поместить А из ...   ;
    выбрать * поместить Б из ...   ;
    выбрать * из А левое соединение Б по ...    ";
    Запрос.Выполнить();

    Он (МВТ), наверное, и в моём случае неявно создаётся, так что технически, скорее всего, разницы никакой. Но мне мой вариант кажется более читаемым. Или всё же есть разница?

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


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

  41. Mortiferus

    не распаковывается rar’овский файл с решением.

    • Татьяна Гужавина

      Добрый день!
      Попробуйте скачать архив и распаковать с помощью WinRAR (другие архиваторы могут выдавать ошибки).
      Если проблема не будет устранена, напишите на support@kursy-po-1c.ru

  42. sam1c55r

    Хочу использовать в одном запросе 2 ранее созданные временные таблицы. Как правильно создать 2 временные таблицы, а затем использовать их в 3-м запросе?

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


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

  43. dron

    Добрый день. Возник такой вопрос:
    Предположим в ходе выполнения какой либо процедуры у нас есть типизированная таблица значений(Контрагент}Номенклатура|Количество). Запросом мы её помещаем в ВТ и далее в следующем пакете запроса соединяем с другими данными по контрагенту.
    Возможно ли как то получить на выходе запроса следующую ТЗ(и к примеру заполнить ей табличную часть): Контрагент|номенклатура|ВИДНО_МЕНКЛАТУРЫ|Количество, где ВИДНО_МЕНКЛАТУРЫ-реквизит справочника номенклатура? сложность в том что из номенклатуры в запросе нельзя получить реквизит справочника через точку.
    Первое что приходит в голову перед помещением в ВТ, создать еще колонку в ТЗ и заполнить ви_номенклатуры обходом. Существуют какие-то другие методы?

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


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

      • dron

        Спасибо, действительно работает, смутило то что конструктор запроса ошибку выдает

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


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

      • Панфилов Александр

        Если в первом запросе указать явно:

        Выразить(ТЗ.Номенклатура Как Справочник.Номенклатура) Как Номенклатура,

        то должно работать…

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


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

  44. FreeArcher

    Добрый день!

    А что за время показывает “Время выполнение” в консоли запросов с ИТС?
    Т.к. по времени ожидание запрос может секунды 3-5 выполнятся, а время пишется 0,11 сек. Или так долго вывод работает?
    (В запросе 2 временные таблицы и соединение, результат 1000 строк без итогов)

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


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

  45. Dmitry K

    Поправьте текст задания №21 в методичке. Он не соответствует решению. Фокус с применением функций МАКСИМУМ к периоду понятен, но сделан не в рамках текста задания. Ведь речь идет о всех возможных датах когда курс был в крайних значениях, а в таблице из pdf только по 1-й дате.
    При самостоятельном решении я дошел до этого, но это была “подгонка запроса под решение в методичке”.

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


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

      • Dmitry K

        Да. Думаю это проще чем переписать видео-ответ.
        Написать в задании например “..получить даты когда курсы принимали минимальное и максимальное значение, если таких дат несколько – получить любое одно значения дат (самые первые или последние даты)…”.
        Тогда задание будет соответствовать табличке в pdf и видео-ответу.

        p.s. Может возьмете меня в пилотную группу по новым курсам? :) Готов обеспечить конструктивной критикой и подробными отзывами.

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


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

          • Ренат

            Таки не уточнили.
            Тоже пришлось вникать, что в каком же именно варианте нужно получить результат.

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


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

  46. is69

    Здравствуйте. По предыдущим модулям вопросов нет.
    По 6 модулю вопросы:
    1. Из учебного материала понял, что временные таблицы могут использоваться для повышения производительности запроса и для читабельности запроса. Других причин использования временных таблиц нет ?
    2. Знаю, что временными таблицами рекомендуют не злоупотреблять, т.к. они могут задействовать значительные вычислительные ресурсы. А есть какие то количественные критерии, определяющие оптимальность/неоптимальность использования временных таблиц (исходя из прогнозируемого количества получаемых записей во ВТ, объема оперативной памяти на компьютере, дискового пространства, режима работы (файловый, клиент-серверный) и т.д.) ?
    3. В решении практического задании № 21 в запросе используется соединение по полю «Курс» регистра сведений «КурсыВалют». Это поле не индексировано. Можно ли предположить, что в таком запросе получится не самое производительное решение ? Ведь это задание можно решить и другими запросами.

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


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

  47. rut-marina

    Спасибо за ответы :-)
    Наверно, последний вопрос по 6 модулю: в ходе выполнения пакетного запроса (аналогичного указанному в решении) при нажатии в Консоль на кн. выполнить не возвращается ни 1 строки. Однако, если нажимать на кн. со стрелкой, видима и ВТ, и корректный результат запроса, в чем м.б. причина?

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


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

      • rut-marina

        Да, действительно во 2-м запросе тоже помещение в ВИ, спасибо, вопрос снят.

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


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

  48. rut-marina

    Здравствуйте! Спасибо за оперативные ответы на вопросы :)
    Сейчас интересует следующая вещь: Допустим, в некой процедуре мы создали временную таблицу, и не обозначили в коде ни ее удаление, ни удаление МВТ. Что произойдет после выхода из процедуры? Память, которая была занята ВТ сама почистится, или в ней так и будут болтаться значения? Если не почистится, то когда это произойдет: после завершения сеанса 1С, через какое-то время, или другие варианты?

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


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

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


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

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