Сегодня 23 апреля 2022 года 9 часов 37 минут, +8
Всем доброго дня!
Продолжаем разбирать вопросы на собеседовании.
Начало:
Ведущий программист 1С: вопросы на собеседовании и ответы на них (УФ)
СКД
Что такое СКД?
Система компоновки данных
Какие наборы данных вы знаете?
запрос
объект
объединение
может быть вопрос зачем они нужны
Какие встроенные функции группировки ресурсов вам известны?
да, бывают и такие вопросы. Достаточно вспомнить какие в принципе существуют в запросах
сумма
среднее
максимум
минимум
количество
количество (различные...)
Для чего нужны вычисляемые поля?
Вычисляемые поля нужны для расчета данных из уже существующих полей и получение их в запросе нерационально
Запросы
Часто, чтобы поставить в тупик, задается такой вопрос:
Что такое запрос?
Запрос - это специальный объект в платформе, который используется для формирования и выполнения запросов к таблицам базы данных в системе.
еще более убойный вопрос:
Для чего нужны запросы?
Запрос — это мощнейший инструмент, служащий для быстрого (по сравнению со всеми другими способами) получения и обработки данных, содержащихся в различных объектах информационной базы
вопрос повышенной сложности
Как получить курс валюты на каждый день?
приведу пример кода
ВЫБРАТЬ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаМесяц
ПОМЕСТИТЬ ДатаМесяцВТ
ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ
МАКСИМУМ(КурсыВалют.Период) КАК Период,
КурсыВалют.Валюта,
ДатаМесяцВТ.ДатаМесяц
ПОМЕСТИТЬ МаксДатаКурсВТ
ИЗ
ДатаМесяцВТ КАК ДатаМесяцВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ДатаМесяцВТ.ДатаМесяц >= КурсыВалют.Период
ГДЕ КурсыВалют.Валюта = &Валюта
СГРУППИРОВАТЬ ПО
КурсыВалют.Валюта,
ДатаМесяцВТ.ДатаМесяц ;
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ
МаксДатаКурсВТ.Период,
МаксДатаКурсВТ.ДатаМесяц,
МаксДатаКурсВТ.Валюта,
КурсыВалют.Курс,
КурсыВалют.Кратность
ИЗ
МаксДатаКурсВТ КАК МаксДатаКурсВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО МаксДатаКурсВТ.Валюта = КурсыВалют.Валюта И МаксДатаКурсВТ.Период = КурсыВалют.Период
УПОРЯДОЧИТЬ ПО ДатаМесяц
тут вся суть сводится к тому, что мы должны реализовать логику работы среза последних. Получить курс валюты на ближайший к требуемой дате по принципу меньше или равно.
Этого объяснения может быть недостаточно, поскольку эксперт ждет определенной ключевой фразы
в моем случае правильный ответ был:
группировка даты курса по МАКСИМУМ()
Чем отличаются соединения левое, правое, внутреннее, полное?
Левое соединение - это внутреннее соединение, результат которого выбранные поля обеих таблиц (полностью первой - главной таблицы + совпадающие по ключам соединения второй), количество строк больше или равно количеству в первой таблице (условие соединения может вызывать дубли, если в правой таблице поля соединения дублируются)
Правое соединение - это внутреннее соединение, результат которого выбранные поля обеих таблиц (полностью второй - главной таблицы + совпадающие по ключам соединения первой), количество строк больше или равно количеству во второй таблице (условие соединения может вызывать дубли, если в левой таблице поля соединения дублируются)
Полное соединение - это левое соединение + правое соединение, в результате которых, получается одна таблица, содержащая все выбранные колонки, число строк обычно равняется количеству совпадающих строк по ключам + все несовпадающие.
Внутреннее соединение - это соединение, результат которого выбранные поля обеих таблиц , которые смогли соединиться по заданному условию.
Как обратиться к определенному типу составного поля в запросе?
Выразить(<> как <>).реквизит КАК <ИмяПоля>
Можно ли использовать ИЛИ в запросе?
можно, но не нужно. Предпочтительнее ОБЪЕДИНИТЬ в запросе
Всегда ли нужно использовать индексирование полей временной таблицы в запросе?
нет не всегда, только когда это дает заметный прирост производительности
часто встречаются вопросы касательно производительности с левым соединением. Так вот правая таблица при этом должна быть максимально обрезана и лучше, чтобы это была временная таблица.
Бывают вопросы и такого характера. Вам дают запрос, говорят, что там 26 ошибок, нужно найти хотя бы 15
ну там полный бред, даже на вскидку этот запрос тупо нерабочий.
Чем отличаются временные и виртуальные таблицы?
Один из вопросов, когда необходимо четко понимать о чем идет речь. Если речь все еще о СКД, то тоже надо отвечать однозначно.
У меня был случай, когда я начал отвечать на этот вопрос с точки зрения SQL (подумал, что с СКД уже закончили да и этот вопрос имеет больше отношение к SQL, нежели к СКД), чем вызвал неописуемую ярость великого эксперта. Его интересовал ответ исключительно с точки зрения 1С.
временные таблицы используются для сбора промежуточных результатов подзапросов, после их использования рекомендуется их удалять.
виртуальные таблицы - это вспомогательные таблицы платформы 1С
срез последних
срез первых
остатки
движения и др.
(View - представления) по факту можно делать и свои виртуальные таблицы, но они удалятся при обновлении конфигурации 1С. Это тоже можно обойти регламентным заданием SQL- job, создавая эти таблицы при отсутствии. Но в данном случае об этом не следует говорить "дабы не смущать начальство своим разумением..."
#ведущий программист 1с #скд #запросы #временные таблицы #виртуальные таблицы