Вопросы на собеседовании 1С-программисту
Что спрашивают у джунов и мидлов в 1С: платформа и метаданные, запросы и регистры, проведение, управляемые формы и контекст выполнения, блокировки, БСП и обмен. У каждого вопроса — короткий ответ, в конце — типовая задача на запрос.
Платформа и объекты метаданных
-
Чем платформа отличается от конфигурации?
Платформа «1С:Предприятие 8» — среда исполнения: встроенный язык, работа с базой данных, интерфейс, клиент-серверный режим. Конфигурация — прикладное решение на платформе: объекты метаданных, модули, формы, роли. Платформу и конфигурацию обновляют отдельно.
-
Какие объекты метаданных вы знаете?
Константы, справочники, документы и журналы документов, перечисления, отчёты и обработки, планы видов характеристик, планы счетов, планы видов расчёта, регистры сведений, накопления, бухгалтерии и расчёта, бизнес-процессы и задачи, планы обмена. Плюс общие объекты: общие модули, роли, подписки на события, регламентные задания.
-
Чем справочник отличается от документа?
Справочник хранит условно-постоянные данные — номенклатуру, контрагентов, склады; он может быть иерархическим и подчинённым другому справочнику-владельцу. Документ отражает событие: у него есть номер, дата со временем, и он может проводиться — формировать движения по регистрам.
-
Чем перечисление отличается от справочника?
Значения перечисления задаёт разработчик в конфигураторе, пользователь их не меняет: статусы, виды операций. Справочник пользователи пополняют сами. Если в коде нужна проверка на конкретное значение, берут перечисление или предопределённый элемент справочника.
-
Что такое составной тип и чем он опасен?
Реквизит может хранить значения нескольких типов, например ссылку на один из трёх справочников. При обращении к полям такого реквизита через точку запрос соединяется с таблицами всех возможных типов. Если тип известен, его указывают явно:
ВЫРАЗИТЬ(Регистратор КАК Документ.РеализацияТоваров).Контрагент. -
Чем ссылка отличается от объекта?
Ссылка указывает на запись в базе: её хранят в реквизитах и сравнивают. Читать реквизиты через точку от ссылки можно, но платформа при этом считывает объект целиком, вместе с табличными частями. Объект (
ПолучитьОбъект()) нужен, чтобы изменить и записать данные. Отдельные реквизиты лучше читать запросом или функцией БСПОбщегоНазначения.ЗначенияРеквизитовОбъекта. -
Чем модуль объекта отличается от модуля менеджера?
Модуль объекта работает с конкретным экземпляром: события
ПередЗаписью,ОбработкаЗаполнения,ОбработкаПроведения. Модуль менеджера относится ко всему типу и вызывается без экземпляра:Документы.РеализацияТоваров.ИмяФункции()— печать, выбор формы, общие функции по этому виду документов.
Запросы
-
Почему нельзя выполнять запрос в цикле?
Каждый запрос — обращение к серверу СУБД, и на тысячах строк они складываются в заметное время. Правильно — один запрос на весь набор: передать массив параметром и отобрать через
В (&Список)или поместить данные во временную таблицу и соединиться с ней. -
Что такое временные таблицы и пакетный запрос?
ПОМЕСТИТЬсохраняет результат во временную таблицу, а пакет — несколько запросов через точку с запятой, где следующие используют таблицы предыдущих. Так сложный запрос разбивают на шаги и не соединяются с вложенными запросами. Чтобы таблицы были доступны в других запросах, нуженМенеджерВременныхТаблиц; по полям соединения их можноИНДЕКСИРОВАТЬ ПО. -
Что такое виртуальные таблицы регистров?
Таблицы, которые платформа строит при выполнении запроса:
Остатки,Обороты,ОстаткиИОборотыу регистров накопления,СрезПоследнихиСрезПервыху периодических регистров сведений. В физических таблицах лежат сами движения, а у регистров остатков — ещё и итоги. -
Где ставить отбор: в параметрах виртуальной таблицы или в ГДЕ?
Отборы по измерениям — в параметрах:
Остатки(&Дата, Склад = &Склад). Тогда условие применяется при построении таблицы, и платформа не считает лишнее.ГДЕфильтрует уже готовый результат. У среза последних меняется и смысл: условие по ресурсу в параметрах вернёт последнюю запись среди подходящих, а вГДЕотфильтрует сами последние записи. -
Как получить остатки на конец дня?
Остатки(&Дата)возвращает остатки на начало указанного момента, без движений в этот момент. Если передать дату со временем 00:00:00, движения этого дня не попадут. Нужна граница:Новый Граница(КонецДня(Дата), ВидГраницы.Включая). При проведении так же передаютНовый Граница(МоментВремени(), ВидГраницы.Включая), если нужны остатки с учётом движений самого документа. -
Как ведёт себя NULL после левого соединения?
Если справа нет пары, поля правой таблицы равны NULL, и арифметика с ними тоже даёт NULL. Поэтому их оборачивают в
ЕСТЬNULL(Цены.Цена, 0). Проверяют черезЕСТЬ NULL, а не сравнением через «=».
Регистры и проведение документов
-
Чем регистр накопления остатков отличается от оборотного?
Регистр остатков хранит приход и расход и позволяет получить остатки на любую дату и обороты за период — так учитывают товары на складах и взаиморасчёты. Оборотный хранит только обороты: продажи, выручку, затраты. Если вопрос «сколько есть сейчас» не имеет смысла, регистр оборотный.
-
Чем регистр сведений отличается от регистра накопления?
Регистр сведений хранит значения для сочетания измерений, а если он периодический — ещё и на дату: курсы валют, цены, адреса. Значения не складываются, актуальное берут срезом последних. Он бывает независимым или подчинённым регистратору. Регистр накопления всегда подчинён регистратору, и его ресурсы суммируются.
-
Для чего нужен регистр бухгалтерии?
Для проводок по плану счетов: корреспондирующие счета Дт и Кт, сумма, субконто — аналитика по счёту. Он опирается на план счетов, а виды субконто задаёт план видов характеристик. Основные виртуальные таблицы —
Остатки,Обороты,ОборотыДтКт,ОстаткиИОбороты,ДвиженияССубконто. -
Что такое регистратор и движения документа?
Регистратор — документ, создавший записи регистра. Движения формируют в
ОбработкаПроведениячерез наборыДвижения.ИмяРегистра. Набор записывается целиком по регистратору, поэтому при перепроведении старые движения заменяются новыми, а при отмене проведения удаляются — как именно, задаёт свойство документа «Удаление движений». -
Чем оперативное проведение отличается от неоперативного?
Оперативное — проведение «сейчас», документом с текущей датой: время документа становится текущим, и при проведении проверяют остатки, например, нельзя отгрузить больше, чем есть на складе. Неоперативное — задним числом: такое списание может уменьшить остатки, на которые уже опирались более поздние документы, поэтому их потом перепроводят.
-
Как сделать контроль остатков при проведении?
Распространённая схема: заблокировать нужные записи регистра управляемой блокировкой по складу и номенклатуре, записать движения, затем запросом проверить, не ушли ли остатки в минус по позициям этого документа. Если ушли — вывести сообщение и установить
Отказ = Истина: вся транзакция проведения откатится.
Управляемые формы и контекст выполнения
-
Чем &НаКлиенте отличается от &НаСервере и &НаСервереБезКонтекста?
Это директивы компиляции в модуле формы.
&НаКлиенте— код выполняется на клиенте: работа с элементами формы, диалоги.&НаСервере— на сервере с доступом к базе, при этом на сервер передаются данные формы.&НаСервереБезКонтекста— на сервере без данных формы: вызов легче, поэтому для чтения данных по ссылке берут его. -
Почему на клиенте нельзя выполнить запрос?
Тонкий и веб-клиент не работают с базой напрямую: запросы,
ПолучитьОбъект(), менеджеры справочников и документов доступны только на сервере. На клиенте есть данные формы, ссылки и примитивные типы. Данные получают серверным вызовом и стараются уложить всё нужное в один вызов, а не делать несколько подряд. -
Что такое реквизиты формы и как из них получить объект?
Данные управляемой формы хранятся в реквизитах формы. Основной реквизит
Объект— не сам ДокументОбъект, а его копия в виде данных формы. На сервере её превращают в объект черезРеквизитФормыВЗначение("Объект"), а обратно — черезЗначениеВРеквизитФормы(). -
В каком порядке вызываются события при проведении документа из формы?
На клиенте —
ПередЗаписьюформы, на сервере — проверка заполнения иПередЗаписьюНаСервере. Дальше в транзакции записи:ПередЗаписьюобъекта →ПриЗаписи→ОбработкаПроведения→ПриЗаписиНаСервереформы. После транзакции —ПослеЗаписиНаСервереиПослеЗаписина клиенте. Подписки на события выполняются после обработчиков модуля объекта. -
Зачем общему модулю флаги «Сервер», «Вызов сервера», «Клиент»?
Они определяют, где модуль доступен. «Сервер» — в серверном коде; «Вызов сервера» — экспортные процедуры серверного модуля можно вызывать с клиента; «Клиент (управляемое приложение)» — модуль работает на клиенте. «Привилегированный» выполняется без проверки прав, а «Повторное использование возвращаемых значений» кэширует результаты функций на время вызова или сеанса.
Транзакции, блокировки и производительность
-
Как устроены транзакции в 1С?
Запись объекта и проведение документа платформа сама выполняет в транзакции: если в
ПередЗаписью,ПриЗаписиилиОбработкаПроведенияустановитьОтказ = Истинаили возникнет исключение, откатится всё. Явно транзакцию открывают черезНачатьТранзакцию(), а фиксируют или отменяют в конструкцииПопытка … Исключение. После ошибки базы данных внутри транзакции работать с базой дальше нельзя — только откатить. -
Чем управляемые блокировки отличаются от автоматических?
В автоматическом режиме блокировки ставит СУБД, и часто шире, чем нужно, — отсюда ожидания и взаимоблокировки. В управляемом режиме блокировками управляет платформа: при записи она сама блокирует изменяемые данные, а для чтения с последующей записью, например остатков при проведении, разработчик ставит
БлокировкаДанных— исключительную или разделяемую — по нужным полям. Смысл такая блокировка имеет только внутри транзакции. -
Что такое взаимоблокировка и как её избежать?
Две транзакции ждут друг друга: первая держит A и ждёт B, вторая держит B и ждёт A, и одна из них завершается ошибкой. Помогает блокировать данные всегда в одном порядке, сразу ставить исключительную блокировку на то, что будете менять, вместо повышения разделяемой, и держать транзакции короткими.
-
Документ проводится медленно — что будете смотреть?
Замер производительности в конфигураторе покажет, какие строки кода тратят время, технологический журнал — долгие запросы и ожидания на блокировках. Частые причины: запрос или обращение через точку в цикле, виртуальные таблицы без отборов в параметрах, соединения с вложенными запросами, лишние серверные вызовы из формы.
БСП и обмен данными
-
Что такое БСП и что из неё вы использовали?
Библиотека стандартных подсистем — общие механизмы от 1С, на которых построены типовые конфигурации: пользователи и права, печать, дополнительные отчёты и обработки, обновление версии ИБ, присоединённые файлы, длительные операции, общие модули
ОбщегоНазначенияиОбщегоНазначенияКлиентСервер. Назовите то, что реально подключали: печатную форму, дополнительную обработку, команду в форме. -
Как дорабатывать типовую конфигурацию, чтобы не мешать обновлениям?
По возможности — расширениями: заимствовать объект и перехватить метод аннотациями
&Перед,&После,&Вместо,&ИзменениеИКонтроль, добавить свои реквизиты и формы. Ещё — подписки на события, дополнительные отчёты и обработки. Если правите основную конфигурацию, меняйте точечно и помечайте изменения комментариями: так проще объединять при обновлении. -
Какие способы обмена данными вы знаете?
Планы обмена с регистрацией изменений, включая распределённую ИБ; обмен в формате EnterpriseData по правилам конвертации; веб-сервисы (SOAP) и HTTP-сервисы, обычно REST с JSON; COM-соединение; файлы XML, JSON, CSV; внешние источники данных для работы с таблицами сторонних СУБД.
-
Как работает план обмена?
План обмена описывает узлы и состав данных. Когда объект записывается, платформа регистрирует изменение для узлов, если включена авторегистрация. При выгрузке зарегистрированные изменения уходят сообщением с номером; когда другая сторона подтверждает приём этого номера, регистрация удаляется.
-
Чем HTTP-сервис отличается от веб-сервиса?
Веб-сервис в 1С — это SOAP: XML-сообщения и описание в WSDL. HTTP-сервис обрабатывает произвольные HTTP-запросы по шаблонам URL — так делают REST API с JSON для сайтов и мобильных приложений. Оба публикуются на веб-сервере.
Типовая задача на запрос
-
Задача: вывести остатки товаров на складе с ценами
Остатки берём из регистра накопления, цены — срезом последних из регистра сведений. Отборы — в параметрах виртуальных таблиц, соединение левое, потому что цены может не быть, а NULL заменяем через
ЕСТЬNULL. Какую дату передать в&Дата, чтобы попали движения за весь день, — в вопросе об остатках на конец дня выше.ВЫБРАТЬ Остатки.Номенклатура КАК Номенклатура, Остатки.КоличествоОстаток КАК Количество, ЕСТЬNULL(Цены.Цена, 0) КАК Цена, Остатки.КоличествоОстаток * ЕСТЬNULL(Цены.Цена, 0) КАК Сумма ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЦены) КАК Цены ПО Остатки.Номенклатура = Цены.Номенклатура УПОРЯДОЧИТЬ ПО Номенклатура
Решая задачу на собеседовании, проговаривайте, почему пишете именно так: отбор в параметрах, а не в ГДЕ, левое соединение, а не внутреннее, один запрос вместо цикла. Если дадут разобрать готовый код, первым делом ищите запросы и обращения через точку внутри циклов. Как готовиться по дням — в материале «Как подготовиться к собеседованию». Язык запросов 1С во многом повторяет SQL, поэтому для разминки подойдёт и подборка вопросов по SQL.
Как отрепетировать ответы
Прочитать ответ и объяснить его интервьюеру — разные навыки. Выберите десяток вопросов, ответьте на каждый вслух за минуту, а запрос из задачи напишите с нуля и объясните каждую строку. Почувствовать темп живого собеседования поможет бесплатное трёхминутное демо «Первый звонок» в Суфлер AI: ИИ-интервьюер Анна задаёт теоретический вопрос, даёт задачу на live coding и код-ревью, а приложение показывает 2–3 тезиса ответа в окне, которого не видно при демонстрации экрана. Подробнее — на странице скрытого помощника на собеседовании.
Частые вопросы
Нужен ли сертификат «1С:Профессионал» или «1С:Специалист»?
Для джуна он не обязателен: знания проверят на собеседовании и в тестовом задании. «1С:Профессионал» — компьютерный тест на знание платформы, «1С:Специалист» — экзамен с практической задачей. В компаниях-партнёрах 1С сертификаты сотрудников важны для партнёрского статуса, поэтому там их часто просят получить в первые месяцы работы.
Что дают в тестовом задании?
Обычно небольшую конфигурацию с нуля или доработку: справочники, документы прихода и расхода с проведением по регистру остатков, контроль остатков, отчёт на СКД, иногда печатную форму или обмен. Смотрят на проведение, запросы, разделение кода между клиентом и сервером и на аккуратность.
Нужно ли знать бухгалтерский учёт?
Основы — да, если будете работать с типовыми решениями: что такое счёт, проводка, остатки и обороты, как отражаются поступление и продажа. Для зарплатных решений — основы расчёта зарплаты и кадрового учёта. Знать учёт как бухгалтер не нужно, но говорить с пользователями на их языке придётся.
Спросят ли про СКД?
Скорее всего: на системе компоновки данных построены отчёты типовых конфигураций. Нужно знать наборы данных (запрос, объект, объединение), ресурсы, параметры, вычисляемые поля, варианты и пользовательские настройки, а также как вывести отчёт программно через компоновщик макета и процессор компоновки.
Где практиковаться без доступа к рабочей базе?
В учебной версии платформы: она бесплатная, но с ограничениями. Соберите свою конфигурацию с документами, проведением по регистрам и отчётом на СКД или решайте задачи в формате экзамена «1С:Специалист» — это хорошая тренировка перед тестовым заданием.