Какие вопросы и кейсы задают на собеседовании начинающему программисту 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Собеседование на позицию стажера или начинающего (Junior) разработчика 1С часто вызывает много вопросов у кандидатов. С одной стороны, от новичка не требуют глубоких знаний сложных бизнес-процессов или экспертной оптимизации высоконагруженных систем. С другой стороны, работодатели хотят видеть прочную теоретическую базу, понимание архитектуры платформы «1С:Предприятие 8» и развитое логическое мышление. Рассмотрим подробнее ключевые темы, конкретные вопросы, практические кейсы и логические задачи, с которыми вы можете столкнуться на интервью, а также разберем по шагам правильные ответы на них.

1. Архитектура платформы и прикладные объекты метаданных

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

Справочники и документы: в чем их ключевые различия?

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

  1. Назначение: Справочники предназначены для хранения условно-постоянной информации с редким изменением (список сотрудников, номенклатура товаров, контрагенты). Документы служат для отражения событий хозяйственной деятельности предприятия в хронологической последовательности (продажа, поступление денег, начисление зарплаты).
  2. Уникальность и идентификация: Справочники идентифицируются кодом и наименованием (а также уникальной ссылкой). Документы идентифицируются номером и датой.
  3. Проведение: Документы обладают уникальным свойством проведения. При проведении документ формирует движения по регистрам (записывает данные в таблицы учета). Справочники не проводятся и движений по регистрам самостоятельно не совершают.

Регистры сведений vs Регистры накопления

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

Кейс: Где хранить среднедневные показатели температуры по городам?

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

  1. Табличная часть документа не подходит, так как данные жестко привязываются к конкретному документу, их неудобно оперативно извлекать, анализировать и контролировать уникальность в разрезе дат и городов.
  2. Справочник не подходит, так как структура справочников тяжеловесна для хранения миллионов записей о ежедневных изменениях, и в справочниках нет встроенного платформенного механизма получения данных на определенный момент времени (среза последних).
  3. Регистр сведений идеально решает задачу. Измерениями будут Город, ресурсом — Температура. Сделав регистр периодическим (с периодичностью «День»), мы автоматически получаем встроенный контроль уникальности (нельзя записать две температуры для одного города за один день) и быстрый доступ к истории изменений с помощью виртуальных таблиц «СрезПоследних» и «СрезПервых».

Различия между универсальными коллекциями: Структура vs Соответствие

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

NULL, Неопределено и ПустаяСсылка: не путаем понятия

Посмотрим на различия этих трех типов, которые часто вызывают путаницу у новичков:

2. Клиент-серверная архитектура и управляемые формы

Современная платформа 1С работает по жесткой трехзвенной схеме «клиент — сервер приложений — СУБД». Понимание этого взаимодействия критически важно для эффективной разработки.

Кейс: Можно ли передавать Таблицу Значений с клиента на сервер?

Этот вопрос часто задают на собеседовании. Разберем его детально. Ответ: напрямую передавать объект типа ТаблицаЗначений между клиентом и сервером в управляемом приложении нельзя.

Причина кроется в том, что тип ТаблицаЗначений является мутабельным (изменяемым) и серверным. На тонком клиенте этого типа данных физически не существует в целях оптимизации трафика и безопасности. При попытке передать его через границу «клиент-сервер» платформа выдаст ошибку сериализации.

Как решить эту проблему на практике? Рассмотрим два пути:

  1. Использовать реквизиты формы. Если таблица должна отображаться на форме, мы создаем реквизит формы с типом «Таблица значений» (на клиенте он представлен типом ДанныеФормыКоллекция, который прекрасно передается между контекстами формы).
  2. Если данные нужны для программной обработки без вывода на форму, на сервере преобразуем ТаблицаЗначений в массив структур (или соответствий) и передаем на клиент уже этот массив, так как структуры и массивы поддерживают сериализацию и доступны на клиенте.

Директивы компиляции: &НаСервере vs &НаСервереБезКонтекста

Проанализируем разницу между этими директивами:

3. Базы данных, язык запросов 1С и оптимизация

Значительная часть работы программиста 1С связана с написанием запросов. На собеседованиях джуниоров часто тестируют на базовое понимание СУБД.

Левое, Внутреннее и Полное соединения в запросах

Разберем механику соединений на наглядном примере:

Разбор каверзного запроса: Выбрать Сумма(1) Из Справочник.Номенклатура

Посмотрим на пример запроса, который часто предлагают проанализировать на собеседовании:


ВЫБРАТЬ
    СУММА(1) КАК Результат
ИЗ
    Справочник.Номенклатура КАК Номенклатура

Что вернет этот запрос? Начинающие программисты часто путаются, предполагая, что запрос выдаст ошибку или единицу. На самом деле этот запрос вернет одну строку, содержащую число, равное общему количеству элементов в справочнике «Номенклатура» (включая группы, если не наложено условие на это). СУБД для каждой записи справочника подставит константу 1, а затем просуммирует эти единицы. По сути, это аналог конструкции КОЛИЧЕСТВО(*).

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

Важный нюанс оптимизации запросов:

Запросы в цикле — почему это под строгим запретом?

Один из первых вопросов на проверку стандартов разработки. Выполнение запроса внутри цикла (например, для каждой строки табличной части получать остатки товаров отдельным запросом) создает колоссальную нагрузку на СУБД за счет постоянных сетевых вызовов и компиляций планов запросов (проблема N+1). Правильный подход: сначала собрать все необходимые параметры (например, массив товаров) в цикле, передать их в один общий запрос, выполнить его, выгрузить результат в таблицу или соответствие, а затем обработать в цикле.

Фильтрация в виртуальных таблицах

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


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

Второй вариант:


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

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

4. Практические задачи по кодингу и расчетные алгоритмы

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

Задача: Поменять местами значения двух числовых переменных без использования третьей

Это классический математический фокус, проверяющий понимание базовых арифметических операций. Пусть у нас есть переменные А и Б.

Реализуем алгоритм:


А = А + Б; // Теперь в А хранится сумма обоих чисел
Б = А - Б; // Из суммы вычитаем исходное Б, получаем исходное А и записываем его в Б
А = А - Б; // Из суммы (которая в А) вычитаем новое Б (там теперь исходное А), получаем исходное Б

Проанализируем на примере: пусть А = 5, а Б = 10.

  1. А = 5 + 10 = 15
  2. Б = 15 - 10 = 5 (в Б теперь лежит 5)
  3. А = 15 - 5 = 10 (в А теперь лежит 10)

Задача решена, значения успешно поменялись местами.

Задача: Расчет НДС из суммы «в том числе НДС»

Начинающему программисту 1С обязательно нужно ориентироваться в базовой финансовой математике. Разберем формулу расчета величины НДС из полной суммы (с НДС) при ставке 20%.

Математически формула выглядит так:

НДС = СуммаСНДС * Ставка / (100 + Ставка)

Посмотрим на пример реализации на языке 1С:


СтавкаНДС = 20;
СуммаНДС = СуммаСНДС * СтавкаНДС / (100 + СтавкаНДС);
СуммаБезНДС = СуммаСНДС - СуммаНДС;

Для быстрой проверки в уме часто используют сокращенную формулу: СуммаСНДС * 20 / 120 (или СуммаСНДС * 18 / 118 для старой ставки 18%). Выделение суммы без НДС в одно действие выглядит как СуммаСНДС / 1.20.

Задача: Генерация последовательности чисел от 1 до 1000 в запросе без использования таблиц БД

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

Рассмотрим пример кода запроса:


ВЫБРАТЬ 0 КАК Цифра ПОМЕСТИТЬ Т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9;

ВЫБРАТЬ
    (Десятки.Цифра * 10 + Единицы.Цифра + 1) КАК Число
ИЗ
    Т1 КАК Единицы
    СОЕДИНЕНИЕ Т1 КАК Десятки ПО ИСТИНЕ

Данный пример генерирует числа от 1 до 100. Если мы добавим еще одно соединение с таблицей сотен (Сотни.Цифра * 100), то легко получим последовательность до 1000.

5. Логические задачи на собеседованиях

Для оценки аналитических способностей кандидата часто применяются логические кейсы, не связанные напрямую с кодом.

Логический кейс: 8 монет и фальшивка

Условие: у нас есть 8 монет, одна из которых фальшивая (она тяжелее остальных). В вашем распоряжении чашечные весы без гирь. Нужно найти фальшивую монету ровно за 2 взвешивания.

Разберем алгоритм решения по шагам:

  1. Первое взвешивание: Делим монеты на три кучки: две кучки по 3 монеты и одну кучку с 2 монетами. Кладем на чаши весов кучки по 3 монеты.
    • Сценарий А (весы в равновесии): Это значит, что фальшивая монета находится среди оставшихся 2 монет. Переходим ко второму взвешиванию: взвешиваем эти 2 монеты между собой, более тяжелая — фальшивая.
    • Сценарий Б (одна из чаш перевесила): Фальшивая монета находится в той кучке из 3 штук, которая оказалась тяжелее.
  2. Второе взвешивание (для Сценария Б): Берем из потяжелевшей кучки (3 монеты) любые две монеты и кладем по одной на чаши весов.
    • Если весы равны, то фальшивая — третья оставшаяся монета, которую мы не взвешивали.
    • Если одна из чаш перевесила, то на ней и лежит фальшивая монета.

Понятие FIFO на пальцах

Вас могут попросить объяснить суть метода FIFO (First In, First Out — «первым пришел, первым ушел»). На собеседовании важно показать понимание этого процесса на физическом уровне.

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

Советы по подготовке и прохождению интервью

В завершение разберем несколько важных моментов касательно того, как вести себя на собеседовании:

← На главную