← все вопросывопросы для собеседований · Язык запросов 1С

Вопросы по языку запросов 1С на собеседовании

Запросы спрашивают на любом собесе программиста 1С, и проверяют не синтаксис, а понимание: что станет с левым соединением, если условие на правую таблицу поставить в ГДЕ, почему отчёт падает на пустом периоде и чем ОБЪЕДИНИТЬ теряет деньги в сумме.

72 вопросов в банке·6 подтем·ниже разбор 9

Что спрашивают

Из чего состоит тема

Так тема разложена в тренажёре: движок ведёт прогресс по каждой подтеме отдельно и возвращает те, что просели.

Разборы подтем

Конспект по каждой: что это, как отвечать вслух, на чём валятся, плюс вопросы для самопроверки.

Примеры вопросов с разбором

  1. #oc_q_basics1 / 9
    Как в тексте запроса 1С обозначают параметр?
    A)&Дата
    B):Дата
    C)@Дата
    D)?Дата
    показать ответ и разбор
    +A)`&Дата`

    // разбор: Параметр в тексте запроса начинается с амперсанда: &Дата. Значение задают до выполнения: Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса()). Двоеточие и собака — синтаксис других СУБД и библиотек, в языке запросов 1С они не работают.

  2. #oc_q_functions2 / 9
    Что делает ЕСТЬNULL(Поле, 0)?
    A)Заменяет ноль в поле на NULL
    B)Проверяет поле на NULL и возвращает Истину
    C)Заменяет NULL нулём, остальное оставляет
    D)Удаляет строки, где поле NULL
    показать ответ и разбор
    +C)Заменяет NULL нулём, остальное оставляет

    // разбор: ЕСТЬNULL возвращает второй аргумент, когда первый NULL, и первый в остальных случаях. Чаще всего так обрабатывают поля из левого соединения и итоги, которые могут не прийти. Проверку на NULL в условии пишут иначе: Поле ЕСТЬ NULL.

  3. #oc_q_grouping3 / 9
    Чем ОБЪЕДИНИТЬ отличается от ОБЪЕДИНИТЬ ВСЕ?
    A)ОБЪЕДИНИТЬ ВСЕ убирает дубли
    B)ОБЪЕДИНИТЬ убирает одинаковые строки
    C)ОБЪЕДИНИТЬ соединяет таблицы по ключу
    D)Ничем, это синонимы
    показать ответ и разбор
    +B)ОБЪЕДИНИТЬ убирает одинаковые строки

    // разбор: Оба склеивают результаты запросов друг под другом. ОБЪЕДИНИТЬ дополнительно убирает полностью совпадающие строки, для этого СУБД сортирует или хэширует результат. ОБЪЕДИНИТЬ ВСЕ сохраняет все строки и работает быстрее, поэтому без нужды в дедупликации пишут его.

  4. #oc_q_joins4 / 9
    Чем ЛЕВОЕ соединение отличается от ВНУТРЕННЕГО?
    A)Различий нет, это синонимы
    B)Левое работает быстрее за счёт индексов
    C)Внутреннее сохраняет все строки обеих таблиц
    D)Левое сохраняет строки без пары
    показать ответ и разбор
    +D)Левое сохраняет строки без пары

    // разбор: Внутреннее соединение оставляет только строки, у которых нашлась пара по условию. Левое сохраняет все строки левой таблицы, а поля правой у строк без пары заполняются NULL. Строки обеих таблиц без пары сохраняет полное соединение.

  5. #oc_q_result5 / 9
    Как перебрать строки результата запроса?
    A)Для Инд = 0 По Результат.Количество() - 1
    B)Для Каждого Стр Из Результат Цикл
    C)Перебор коллекции Результат.Строки
    D)Выбрать() и Пока Следующий() Цикл
    показать ответ и разбор
    +D)`Выбрать()` и `Пока Следующий() Цикл`

    // разбор: Выбрать() даёт выборку, Следующий() перемещает её на очередную строку и возвращает Ложь в конце. Сам РезультатЗапроса не коллекция, его не обходят циклом Для Каждого. Для обхода как таблицы результат выгружают: Выгрузить().

  6. #oc_q_temp_tables6 / 9
    Что делает ПОМЕСТИТЬ ВТ в конце запроса?
    A)Кладёт результат во временную таблицу
    B)Сохраняет результат в регистр сведений ВТ
    C)Выводит результат пользователю в таблицу
    D)Создаёт индекс по полям результата
    показать ответ и разбор
    +A)Кладёт результат во временную таблицу

    // разбор: ПОМЕСТИТЬ записывает результат запроса во временную таблицу, к которой обращаются следующие запросы пакета: ИЗ ВТ КАК Т. Так тяжёлые части считают один раз и переиспользуют. Индекс по ней создаёт ИНДЕКСИРОВАТЬ ПО.

  7. #oc_q_basics7 / 9
    Какой порядок ключевых слов после ВЫБРАТЬ правильный?
    A)Порядок слов не важен
    B)ВЫБРАТЬ ПЕРВЫЕ 10 РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
    C)ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 10 РАЗРЕШЕННЫЕ
    D)ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 10
    показать ответ и разбор
    +D)`ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 10`

    // разбор: Синтаксис фиксирован: РАЗРЕШЕННЫЕ, затем РАЗЛИЧНЫЕ, затем ПЕРВЫЕ n. Другой порядок — синтаксическая ошибка. Конструктор запроса расставляет их сам, но на собесе часто просят написать текст руками.

  8. #oc_q_functions8 / 9
    Как в условии запроса проверить, что поле не заполнено (NULL)?
    A)Поле = NULL
    B)Поле ЕСТЬ NULL
    C)ЕСТЬNULL(Поле)
    D)Поле = НЕОПРЕДЕЛЕНО
    показать ответ и разбор
    +B)`Поле ЕСТЬ NULL`

    // разбор: Сравнение с NULL через равенство не даёт Истину ни для одной строки: NULL = NULL неизвестно. Для проверки есть отдельный оператор ЕСТЬ NULL и НЕ ... ЕСТЬ NULL. Неопределено — другое значение, им хранится пустой составной реквизит.

  9. #oc_q_grouping9 / 9
    Запрос группирует продажи по товару. Почему падает с ошибкой поле П.Покупатель в выборке?
    A)Поле не сгруппировано и не агрегат
    B)Покупатель нельзя выбирать в запросе
    C)Нужен РАЗЛИЧНЫЕ, чтобы убрать повторы
    D)Группировать можно только по одному полю
    показать ответ и разбор
    +A)Поле не сгруппировано и не агрегат

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

это 9 из 72

Ещё 63 вопросов по теме — в тренажёре, с движком повторения

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

Частые вопросы