Вопросы на собеседовании 1С-программисту

Что спрашивают у джунов и мидлов в 1С: платформа и метаданные, запросы и регистры, проведение, управляемые формы и контекст выполнения, блокировки, БСП и обмен. У каждого вопроса — короткий ответ, в конце — типовая задача на запрос.

Платформа и объекты метаданных

  1. Чем платформа отличается от конфигурации?

    Платформа «1С:Предприятие 8» — среда исполнения: встроенный язык, работа с базой данных, интерфейс, клиент-серверный режим. Конфигурация — прикладное решение на платформе: объекты метаданных, модули, формы, роли. Платформу и конфигурацию обновляют отдельно.

  2. Какие объекты метаданных вы знаете?

    Константы, справочники, документы и журналы документов, перечисления, отчёты и обработки, планы видов характеристик, планы счетов, планы видов расчёта, регистры сведений, накопления, бухгалтерии и расчёта, бизнес-процессы и задачи, планы обмена. Плюс общие объекты: общие модули, роли, подписки на события, регламентные задания.

  3. Чем справочник отличается от документа?

    Справочник хранит условно-постоянные данные — номенклатуру, контрагентов, склады; он может быть иерархическим и подчинённым другому справочнику-владельцу. Документ отражает событие: у него есть номер, дата со временем, и он может проводиться — формировать движения по регистрам.

  4. Чем перечисление отличается от справочника?

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

  5. Что такое составной тип и чем он опасен?

    Реквизит может хранить значения нескольких типов, например ссылку на один из трёх справочников. При обращении к полям такого реквизита через точку запрос соединяется с таблицами всех возможных типов. Если тип известен, его указывают явно: ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваров).Контрагент.

  6. Чем ссылка отличается от объекта?

    Ссылка указывает на запись в базе: её хранят в реквизитах и сравнивают. Читать реквизиты через точку от ссылки можно, но платформа при этом считывает объект целиком, вместе с табличными частями. Объект (ПолучитьОбъект()) нужен, чтобы изменить и записать данные. Отдельные реквизиты лучше читать запросом или функцией БСП ОбщегоНазначения.ЗначенияРеквизитовОбъекта.

  7. Чем модуль объекта отличается от модуля менеджера?

    Модуль объекта работает с конкретным экземпляром: события ПередЗаписью, ОбработкаЗаполнения, ОбработкаПроведения. Модуль менеджера относится ко всему типу и вызывается без экземпляра: Документы.РеализацияТоваров.ИмяФункции() — печать, выбор формы, общие функции по этому виду документов.

Запросы

  1. Почему нельзя выполнять запрос в цикле?

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

  2. Что такое временные таблицы и пакетный запрос?

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

  3. Что такое виртуальные таблицы регистров?

    Таблицы, которые платформа строит при выполнении запроса: Остатки, Обороты, ОстаткиИОбороты у регистров накопления, СрезПоследних и СрезПервых у периодических регистров сведений. В физических таблицах лежат сами движения, а у регистров остатков — ещё и итоги.

  4. Где ставить отбор: в параметрах виртуальной таблицы или в ГДЕ?

    Отборы по измерениям — в параметрах: Остатки(&Дата, Склад = &Склад). Тогда условие применяется при построении таблицы, и платформа не считает лишнее. ГДЕ фильтрует уже готовый результат. У среза последних меняется и смысл: условие по ресурсу в параметрах вернёт последнюю запись среди подходящих, а в ГДЕ отфильтрует сами последние записи.

  5. Как получить остатки на конец дня?

    Остатки(&Дата) возвращает остатки на начало указанного момента, без движений в этот момент. Если передать дату со временем 00:00:00, движения этого дня не попадут. Нужна граница: Новый Граница(КонецДня(Дата), ВидГраницы.Включая). При проведении так же передают Новый Граница(МоментВремени(), ВидГраницы.Включая), если нужны остатки с учётом движений самого документа.

  6. Как ведёт себя NULL после левого соединения?

    Если справа нет пары, поля правой таблицы равны NULL, и арифметика с ними тоже даёт NULL. Поэтому их оборачивают в ЕСТЬNULL(Цены.Цена, 0). Проверяют через ЕСТЬ NULL, а не сравнением через «=».

Регистры и проведение документов

  1. Чем регистр накопления остатков отличается от оборотного?

    Регистр остатков хранит приход и расход и позволяет получить остатки на любую дату и обороты за период — так учитывают товары на складах и взаиморасчёты. Оборотный хранит только обороты: продажи, выручку, затраты. Если вопрос «сколько есть сейчас» не имеет смысла, регистр оборотный.

  2. Чем регистр сведений отличается от регистра накопления?

    Регистр сведений хранит значения для сочетания измерений, а если он периодический — ещё и на дату: курсы валют, цены, адреса. Значения не складываются, актуальное берут срезом последних. Он бывает независимым или подчинённым регистратору. Регистр накопления всегда подчинён регистратору, и его ресурсы суммируются.

  3. Для чего нужен регистр бухгалтерии?

    Для проводок по плану счетов: корреспондирующие счета Дт и Кт, сумма, субконто — аналитика по счёту. Он опирается на план счетов, а виды субконто задаёт план видов характеристик. Основные виртуальные таблицы — Остатки, Обороты, ОборотыДтКт, ОстаткиИОбороты, ДвиженияССубконто.

  4. Что такое регистратор и движения документа?

    Регистратор — документ, создавший записи регистра. Движения формируют в ОбработкаПроведения через наборы Движения.ИмяРегистра. Набор записывается целиком по регистратору, поэтому при перепроведении старые движения заменяются новыми, а при отмене проведения удаляются — как именно, задаёт свойство документа «Удаление движений».

  5. Чем оперативное проведение отличается от неоперативного?

    Оперативное — проведение «сейчас», документом с текущей датой: время документа становится текущим, и при проведении проверяют остатки, например, нельзя отгрузить больше, чем есть на складе. Неоперативное — задним числом: такое списание может уменьшить остатки, на которые уже опирались более поздние документы, поэтому их потом перепроводят.

  6. Как сделать контроль остатков при проведении?

    Распространённая схема: заблокировать нужные записи регистра управляемой блокировкой по складу и номенклатуре, записать движения, затем запросом проверить, не ушли ли остатки в минус по позициям этого документа. Если ушли — вывести сообщение и установить Отказ = Истина: вся транзакция проведения откатится.

Управляемые формы и контекст выполнения

  1. Чем &НаКлиенте отличается от &НаСервере и &НаСервереБезКонтекста?

    Это директивы компиляции в модуле формы. &НаКлиенте — код выполняется на клиенте: работа с элементами формы, диалоги. &НаСервере — на сервере с доступом к базе, при этом на сервер передаются данные формы. &НаСервереБезКонтекста — на сервере без данных формы: вызов легче, поэтому для чтения данных по ссылке берут его.

  2. Почему на клиенте нельзя выполнить запрос?

    Тонкий и веб-клиент не работают с базой напрямую: запросы, ПолучитьОбъект(), менеджеры справочников и документов доступны только на сервере. На клиенте есть данные формы, ссылки и примитивные типы. Данные получают серверным вызовом и стараются уложить всё нужное в один вызов, а не делать несколько подряд.

  3. Что такое реквизиты формы и как из них получить объект?

    Данные управляемой формы хранятся в реквизитах формы. Основной реквизит Объект — не сам ДокументОбъект, а его копия в виде данных формы. На сервере её превращают в объект через РеквизитФормыВЗначение("Объект"), а обратно — через ЗначениеВРеквизитФормы().

  4. В каком порядке вызываются события при проведении документа из формы?

    На клиенте — ПередЗаписью формы, на сервере — проверка заполнения и ПередЗаписьюНаСервере. Дальше в транзакции записи: ПередЗаписью объекта → ПриЗаписи → ОбработкаПроведения → ПриЗаписиНаСервере формы. После транзакции — ПослеЗаписиНаСервере и ПослеЗаписи на клиенте. Подписки на события выполняются после обработчиков модуля объекта.

  5. Зачем общему модулю флаги «Сервер», «Вызов сервера», «Клиент»?

    Они определяют, где модуль доступен. «Сервер» — в серверном коде; «Вызов сервера» — экспортные процедуры серверного модуля можно вызывать с клиента; «Клиент (управляемое приложение)» — модуль работает на клиенте. «Привилегированный» выполняется без проверки прав, а «Повторное использование возвращаемых значений» кэширует результаты функций на время вызова или сеанса.

Транзакции, блокировки и производительность

  1. Как устроены транзакции в 1С?

    Запись объекта и проведение документа платформа сама выполняет в транзакции: если в ПередЗаписью, ПриЗаписи или ОбработкаПроведения установить Отказ = Истина или возникнет исключение, откатится всё. Явно транзакцию открывают через НачатьТранзакцию(), а фиксируют или отменяют в конструкции Попытка … Исключение. После ошибки базы данных внутри транзакции работать с базой дальше нельзя — только откатить.

  2. Чем управляемые блокировки отличаются от автоматических?

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

  3. Что такое взаимоблокировка и как её избежать?

    Две транзакции ждут друг друга: первая держит A и ждёт B, вторая держит B и ждёт A, и одна из них завершается ошибкой. Помогает блокировать данные всегда в одном порядке, сразу ставить исключительную блокировку на то, что будете менять, вместо повышения разделяемой, и держать транзакции короткими.

  4. Документ проводится медленно — что будете смотреть?

    Замер производительности в конфигураторе покажет, какие строки кода тратят время, технологический журнал — долгие запросы и ожидания на блокировках. Частые причины: запрос или обращение через точку в цикле, виртуальные таблицы без отборов в параметрах, соединения с вложенными запросами, лишние серверные вызовы из формы.

БСП и обмен данными

  1. Что такое БСП и что из неё вы использовали?

    Библиотека стандартных подсистем — общие механизмы от 1С, на которых построены типовые конфигурации: пользователи и права, печать, дополнительные отчёты и обработки, обновление версии ИБ, присоединённые файлы, длительные операции, общие модули ОбщегоНазначения и ОбщегоНазначенияКлиентСервер. Назовите то, что реально подключали: печатную форму, дополнительную обработку, команду в форме.

  2. Как дорабатывать типовую конфигурацию, чтобы не мешать обновлениям?

    По возможности — расширениями: заимствовать объект и перехватить метод аннотациями &Перед, &После, &Вместо, &ИзменениеИКонтроль, добавить свои реквизиты и формы. Ещё — подписки на события, дополнительные отчёты и обработки. Если правите основную конфигурацию, меняйте точечно и помечайте изменения комментариями: так проще объединять при обновлении.

  3. Какие способы обмена данными вы знаете?

    Планы обмена с регистрацией изменений, включая распределённую ИБ; обмен в формате EnterpriseData по правилам конвертации; веб-сервисы (SOAP) и HTTP-сервисы, обычно REST с JSON; COM-соединение; файлы XML, JSON, CSV; внешние источники данных для работы с таблицами сторонних СУБД.

  4. Как работает план обмена?

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

  5. Чем HTTP-сервис отличается от веб-сервиса?

    Веб-сервис в 1С — это SOAP: XML-сообщения и описание в WSDL. HTTP-сервис обрабатывает произвольные HTTP-запросы по шаблонам URL — так делают REST API с JSON для сайтов и мобильных приложений. Оба публикуются на веб-сервере.

Типовая задача на запрос

  1. Задача: вывести остатки товаров на складе с ценами

    Остатки берём из регистра накопления, цены — срезом последних из регистра сведений. Отборы — в параметрах виртуальных таблиц, соединение левое, потому что цены может не быть, а NULL заменяем через ЕСТЬNULL. Какую дату передать в &Дата, чтобы попали движения за весь день, — в вопросе об остатках на конец дня выше.

    ВЫБРАТЬ
        Остатки.Номенклатура КАК Номенклатура,
        Остатки.КоличествоОстаток КАК Количество,
        ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
        Остатки.КоличествоОстаток * ЕСТЬNULL(Цены.Цена, 0) КАК Сумма
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЦены) КАК Цены
            ПО Остатки.Номенклатура = Цены.Номенклатура
    УПОРЯДОЧИТЬ ПО
        Номенклатура

Решая задачу на собеседовании, проговаривайте, почему пишете именно так: отбор в параметрах, а не в ГДЕ, левое соединение, а не внутреннее, один запрос вместо цикла. Если дадут разобрать готовый код, первым делом ищите запросы и обращения через точку внутри циклов. Как готовиться по дням — в материале «Как подготовиться к собеседованию». Язык запросов 1С во многом повторяет SQL, поэтому для разминки подойдёт и подборка вопросов по SQL.

Как отрепетировать ответы

Прочитать ответ и объяснить его интервьюеру — разные навыки. Выберите десяток вопросов, ответьте на каждый вслух за минуту, а запрос из задачи напишите с нуля и объясните каждую строку. Почувствовать темп живого собеседования поможет бесплатное трёхминутное демо «Первый звонок» в Суфлер AI: ИИ-интервьюер Анна задаёт теоретический вопрос, даёт задачу на live coding и код-ревью, а приложение показывает 2–3 тезиса ответа в окне, которого не видно при демонстрации экрана. Подробнее — на странице скрытого помощника на собеседовании.

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

Нужен ли сертификат «1С:Профессионал» или «1С:Специалист»?

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

Что дают в тестовом задании?

Обычно небольшую конфигурацию с нуля или доработку: справочники, документы прихода и расхода с проведением по регистру остатков, контроль остатков, отчёт на СКД, иногда печатную форму или обмен. Смотрят на проведение, запросы, разделение кода между клиентом и сервером и на аккуратность.

Нужно ли знать бухгалтерский учёт?

Основы — да, если будете работать с типовыми решениями: что такое счёт, проводка, остатки и обороты, как отражаются поступление и продажа. Для зарплатных решений — основы расчёта зарплаты и кадрового учёта. Знать учёт как бухгалтер не нужно, но говорить с пользователями на их языке придётся.

Спросят ли про СКД?

Скорее всего: на системе компоновки данных построены отчёты типовых конфигураций. Нужно знать наборы данных (запрос, объект, объединение), ресурсы, параметры, вычисляемые поля, варианты и пользовательские настройки, а также как вывести отчёт программно через компоновщик макета и процессор компоновки.

Где практиковаться без доступа к рабочей базе?

В учебной версии платформы: она бесплатная, но с ограничениями. Соберите свою конфигурацию с документами, проведением по регистрам и отчётом на СКД или решайте задачи в формате экзамена «1С:Специалист» — это хорошая тренировка перед тестовым заданием.