Собеседование на позицию стажера или начинающего (Junior) разработчика 1С часто вызывает много вопросов у кандидатов. С одной стороны, от новичка не требуют глубоких знаний сложных бизнес-процессов или экспертной оптимизации высоконагруженных систем. С другой стороны, работодатели хотят видеть прочную теоретическую базу, понимание архитектуры платформы «1С:Предприятие 8» и развитое логическое мышление. Рассмотрим подробнее ключевые темы, конкретные вопросы, практические кейсы и логические задачи, с которыми вы можете столкнуться на интервью, а также разберем по шагам правильные ответы на них.
Понимание назначения и внутренних механизмов работы объектов метаданных — это фундамент, без которого невозможно начать разработку. Собеседующие обязательно проверят, насколько осознанно вы используете базовые сущности платформы.
Справочники и документы: в чем их ключевые различия?
Это классический вопрос, на который недостаточно ответить: «Справочники хранят информацию, а документы ее проводят». Проанализируем ситуацию глубже:
Регистры сведений vs Регистры накопления
Выясним причину существования различных типов регистров и принципиальные отличия между ними:
Кейс: Где хранить среднедневные показатели температуры по городам?
Рассмотрим практическую задачу: нам нужно выбрать объект метаданных для хранения истории температур. Выбираем между справочником, табличной частью документа и регистром сведений. Правильный ответ: периодический независимый регистр сведений. Разберем почему:
Город, ресурсом — Температура. Сделав регистр периодическим (с периодичностью «День»), мы автоматически получаем встроенный контроль уникальности (нельзя записать две температуры для одного города за один день) и быстрый доступ к истории изменений с помощью виртуальных таблиц «СрезПоследних» и «СрезПервых».Различия между универсальными коллекциями: Структура vs Соответствие
Кандидату важно понимать разницу между ключевыми объектами для работы с данными в памяти:
Структура ключом может выступать только строка, удовлетворяющая правилам создания идентификаторов в 1С (без пробелов, спецсимволов и не начинающаяся с цифры). К значениям структуры можно обращаться через точку (например, Параметры.Ширина).Соответствие ключом может быть абсолютно любой тип данных (ссылка на элемент справочника, число, дата, документ и т.д.). Обращение к элементам возможно только через квадратные скобки.NULL, Неопределено и ПустаяСсылка: не путаем понятия
Посмотрим на различия этих трех типов, которые часто вызывают путаницу у новичков:
NULL — это специальное системное значение, означающее полное отсутствие данных. Обычно возникает в запросах при левых/правых соединениях таблиц, когда в правой таблице нет подходящей записи для левой.Неопределено — это пустой тип данных, обозначающий, что значение переменной или реквизита составного типа еще не задано или не определено.ПустаяСсылка — это объектное значение конкретного типа данных (например, Справочники.Номенклатура.ПустаяСсылка()). Это вполне реальное значение, указывающее, что поле заполнено типом «Ссылка на справочник Номенклатура», но указывает на пустой (невыбранный) элемент.Современная платформа 1С работает по жесткой трехзвенной схеме «клиент — сервер приложений — СУБД». Понимание этого взаимодействия критически важно для эффективной разработки.
Кейс: Можно ли передавать Таблицу Значений с клиента на сервер?
Этот вопрос часто задают на собеседовании. Разберем его детально. Ответ: напрямую передавать объект типа ТаблицаЗначений между клиентом и сервером в управляемом приложении нельзя.
Причина кроется в том, что тип ТаблицаЗначений является мутабельным (изменяемым) и серверным. На тонком клиенте этого типа данных физически не существует в целях оптимизации трафика и безопасности. При попытке передать его через границу «клиент-сервер» платформа выдаст ошибку сериализации.
Как решить эту проблему на практике? Рассмотрим два пути:
ДанныеФормыКоллекция, который прекрасно передается между контекстами формы).ТаблицаЗначений в массив структур (или соответствий) и передаем на клиент уже этот массив, так как структуры и массивы поддерживают сериализацию и доступны на клиенте.Директивы компиляции: &НаСервере vs &НаСервереБезКонтекста
Проанализируем разницу между этими директивами:
&НаСервере на сервер передается весь контекст формы (все реквизиты, элементы управления, состояние). Это тяжелая операция, нагружающая сеть и сервер.&НаСервереБезКонтекста контекст формы на сервер не передается. Передаются только те параметры, которые вы явно указали при вызове процедуры. Это работает значительно быстрее и является стандартом качественной разработки по требованиям 1С.Значительная часть работы программиста 1С связана с написанием запросов. На собеседованиях джуниоров часто тестируют на базовое понимание СУБД.
Левое, Внутреннее и Полное соединения в запросах
Разберем механику соединений на наглядном примере:
NULL.NULL.Разбор каверзного запроса: Выбрать Сумма(1) Из Справочник.Номенклатура
Посмотрим на пример запроса, который часто предлагают проанализировать на собеседовании:
ВЫБРАТЬ
СУММА(1) КАК Результат
ИЗ
Справочник.Номенклатура КАК Номенклатура
Что вернет этот запрос? Начинающие программисты часто путаются, предполагая, что запрос выдаст ошибку или единицу. На самом деле этот запрос вернет одну строку, содержащую число, равное общему количеству элементов в справочнике «Номенклатура» (включая группы, если не наложено условие на это). СУБД для каждой записи справочника подставит константу 1, а затем просуммирует эти единицы. По сути, это аналог конструкции КОЛИЧЕСТВО(*).
ОБЪЕДИНИТЬ vs ОБЪЕДИНИТЬ ВСЕ
Важный нюанс оптимизации запросов:
ОБЪЕДИНИТЬ производит неявную группировку и исключает дублирующиеся строки из итоговой выборки. Это требует от СУБД дополнительных ресурсов памяти и процессорного времени.ОБЪЕДИНИТЬ ВСЕ просто склеивает результаты запросов «как есть», без проверок на дубли. Работает в разы быстрее. На практике всегда следует использовать ОБЪЕДИНИТЬ ВСЕ, кроме случаев, когда удаление дублей действительно необходимо по бизнес-логике.Запросы в цикле — почему это под строгим запретом?
Один из первых вопросов на проверку стандартов разработки. Выполнение запроса внутри цикла (например, для каждой строки табличной части получать остатки товаров отдельным запросом) создает колоссальную нагрузку на СУБД за счет постоянных сетевых вызовов и компиляций планов запросов (проблема N+1). Правильный подход: сначала собрать все необходимые параметры (например, массив товаров) в цикле, передать их в один общий запрос, выполнить его, выгрузить результат в таблицу или соответствие, а затем обработать в цикле.
Фильтрация в виртуальных таблицах
Допустим, нам нужно получить остатки по конкретной номенклатуре. Разберем два варианта написания запроса. Первый вариант:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.ВНаличииОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ГДЕ
Остатки.Номенклатура = &ПараметрНоменклатура
Второй вариант:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.ВНаличииОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &ПараметрНоменклатура) КАК Остатки
Второй вариант является единственно правильным. В первом случае СУБД сначала рассчитает остатки по всему регистру для всех товаров (что может повесить систему на больших базах), а затем отфильтрует результат. Во втором случае фильтр передается в параметры виртуальной таблицы, и расчет итогов будет производиться СУБД только по конкретной номенклатуре, что работает мгновенно.
В этой секции рассмотрим классические алгоритмические задачи, которые любят давать на практических испытаниях.
Задача: Поменять местами значения двух числовых переменных без использования третьей
Это классический математический фокус, проверяющий понимание базовых арифметических операций. Пусть у нас есть переменные А и Б.
Реализуем алгоритм:
А = А + Б; // Теперь в А хранится сумма обоих чисел
Б = А - Б; // Из суммы вычитаем исходное Б, получаем исходное А и записываем его в Б
А = А - Б; // Из суммы (которая в А) вычитаем новое Б (там теперь исходное А), получаем исходное Б
Проанализируем на примере: пусть А = 5, а Б = 10.
А = 5 + 10 = 15Б = 15 - 10 = 5 (в Б теперь лежит 5)А = 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.
Для оценки аналитических способностей кандидата часто применяются логические кейсы, не связанные напрямую с кодом.
Логический кейс: 8 монет и фальшивка
Условие: у нас есть 8 монет, одна из которых фальшивая (она тяжелее остальных). В вашем распоряжении чашечные весы без гирь. Нужно найти фальшивую монету ровно за 2 взвешивания.
Разберем алгоритм решения по шагам:
Понятие FIFO на пальцах
Вас могут попросить объяснить суть метода FIFO (First In, First Out — «первым пришел, первым ушел»). На собеседовании важно показать понимание этого процесса на физическом уровне.
Представим склад в виде узкой трубы. Первый зашедший в трубу товар (партия) выйдет из нее тоже первым. При списании себестоимости по FIFO система сортирует остатки партий по дате поступления (по возрастанию). Сначала списывается товар из самой старой партии. Если его не хватает, остаток берется из следующей по дате партии, и так далее, пока вся потребность в списании не будет удовлетворена.
В завершение разберем несколько важных моментов касательно того, как вести себя на собеседовании: