Продвинутый курс. Мастер-группа Q&A. Block 1
Мы собрали лучшие вопросы участников предыдущих потоков курсов, которые будут полезны вам при изучении 1-го блока.
1. Использование временных таблиц.
Цитата
«При изучении соответствующей темы задался вопросом, а действительно ли всегда удобно использовать ВТ в запросах и, был неприятно удивлен. Эксперименты показали результаты:
Запрос без ВТ отрабатывает быстрее
Время без ВТ 0,002415
С временной таблицей 0,003377
В чем причина такого поведения?»
2. Оптимизатор запроса.
В первых уроках главы 9 блока №1 говорится о оптимизаторе запроса. Что представляет физически из себя данный объект? Как он реализован в файловом режиме? Где хранятся временные таблицы в файловом режиме?
3. Проведение документа.
В уроках говорится о том, что в документах при проведении нежелательно обращаться к напрямую к реквизиту документа.
Но при проведении, либо при открытии документа создается объект и следовательно считываются его реквизиты.
Получается в момент проведения мы уже имеем в кэше данные по объекту и обратившись к реквизиту вроде ничего не теряем.
Может я чего то недопонял?
4. Все действия в командной панели.
Пытаюсь перенести в командную панель формы списка (осн реквизит динамический список) стандартные кнопки из меню “все действия”, чтобы пользователь там их не искал.
При этом некоторые кнопки отображаются в ком панели в режиме предприятия , а некоторые нет.
Например, кнопки «провести» и «отмена проведения».
С чем это связано?
5. Коррелированный подзапрос.
Скажу честно – не до конца понимаю запросы RLS.Например, во втором шаблоне есть выражение: ГДЕ ТЧТовары.Номенклатура.Группа В(##ЗапрещенныеГруппы) И ТЧТовары.Ссылка = #Параметр(2).Ссылка т.е. получается, что #Параметр(2).Ссылка это ссылка на ОДИН КОНКРЕТНЫЙ документ.Смотрим теперь на ограничение для Поступления: ДокПоступление ГДЕ НЕ 1 В (#ВДокументеЕстьЗапрещенныеГруппы(«ПоступлениеТоваровИУслуг», «ДокПоступление»)) Из параметров, передаваемых в шаблон, получается что ДокПоступление это и есть этот один конкретный документ. Странно, я думал, что это имя (псевдоним) таблицы… Ведь если бы мы в обычном запросе написали ВЫБРАТЬ ДокПоступление.СсылкаИЗ Документ.ПоступлениеТоваровИУслуг КАК ДокПоступление…. то ДокПоступление.Ссылка – это вроде как ВСЕ документы из таблицы (в результате запроса в этой колонке были бы ссылки на ВСЕ документы), а в RLS получается что это только ссылка на ОДИН документ …
5. Конструктор для ссылочных типов.
В синтакс-помощнике в описании конструктора для ПланОбменаСсылка.< Имя плана обмена>(< УникальныйИдентификатор>) рекомендуется использовать второй вариант оператора Новый.
Судя по найденным примерам – в рекомендуемом варианте всегда указывается тип создаваемого значения.
Хотелось бы узнать об этом подробней, чем такой вариант лучше, почему рекомендуется именно он, поиск по синтакс-помощнику выдаёт 13 результатов – это исчерпывающий перечень случаев применения?
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.
Здравствуйте! Собираюсь делать ДЗ № 6 по первой главе первого блока продвинутого курса. Задание предполагает создание обработки администрирования. Но в первой главе про администрирование ничего не сказано, там про приемы работы в конфигураторе и про связи таблиц “один к одному”, “один ко многим”, “многие ко многим”.
Вопрос: Намекните пожалуйста какие уроки смотреть про администирование. Может это задание на повторение, а я что то пропустила?
Добрый день, Алена!
В самом тексте задания есть подсказка, куда нужно смотреть :)
Здравствуйте!
Хочу уточнить ещё один момент по поводу виртуальных таблиц (не важно какого регистра).
1. Если временные таблицы более эффективны в использовании, чем вложенные запросы, тогда почему при построении виртуальных таблиц выбрана стратегия использования вложенного запроса, а не временной таблицы?
2. А правильно ли я понимаю, что временные таблицы считаются более эффективными, чем вложенные запросы – за счёт того что:
при их создании подсчитывается количество записей (что гарантирует построение оптимального плана запроса);
присутствует возможность индексирования полей.
Добрый день, Дмитрий!
1. Хороший вопрос. Могу высказать только свои предположения, точного ответа у меня нет.
Первый факт. Механизм использования временных таблиц был заложен в версии 8.0. Тогда платформа не умела работать с временными таблицами.
Второй факт. СУБД вполне нормально может обработать один вложенный запрос, что собственно и делается при обращении к виртуальным таблицам.
Проблемы могут начаться при использовании нескольких вложенных запросов.
2. Да, здесь Вы правы.
Если СУБД знает количество записей в таблице, то она в состоянии выбрать оптимальный план выполнения запроса.
Здравствуйте!
Пытаюсь решить задачу по запросам. Возникла сложность при построении коррелированного подзапроса. По аналогии с уроком №5 составил запрос следующего вида:
//******************************************************************************
ВЫБРАТЬ
ДАТАВРЕМЯ(2012, 1, 26) КАК ДатаНачала,
ДАТАВРЕМЯ(2012, 1, 31) КАК ДатаОкончания
ПОМЕСТИТЬ Интервал
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ГрафикиРаботы.Дата
ПОМЕСТИТЬ График
ИЗ
РегистрСведений.ГрафикиРаботы КАК ГрафикиРаботы
ГДЕ
ГрафикиРаботы.Значение = 0
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
График.Дата
ИЗ
График КАК График
ГДЕ
График.Дата МЕЖДУ Интервал.ДатаНачала И Интервал.ДатаОкончания
//****************************************************************************
При попытке выполнить запрос, пишет что поля “Интервал.ДатаНачала” и “Интервал.ДатаОкончания” не найдены. Регистр сведений “графики” берётся из базы на которой выполняются наши ДЗ.
Подскажите пожалуйста в чём тут ошибка, и как её исправить???
Добрый день, Дмитрий!
Система сообщает об ошибке, поскольку не знает о том, что такое “Интервал” в последнем запросе.
Можно просто добавить ВТ “Интервал” в список таблиц (через запятую).
А можно сделать внутреннее соединение таблиц по условию “График.Дата МЕЖДУ Интервал.ДатаНачала И Интервал.ДатаОкончания”.
Кажется понял :)
Коррелированные запросы применяются только с использованием вложенных запросов. Т.е. внутри вложенного запроса можно обращаться к таблицам внешнего запроса из секции условий, а к виртуальным обращаться нельзя.
Верно :)