← К карте курса 1С

СПРИНТ 01 / ПОДГОТОВКА К ИНТЕРВЬЮ

Собеседование 1С.
50 вопросов для практики.

Проверь, как ты объясняешь теорию и решаешь задачи. Сначала свой ответ — потом разбор.

25 теория25 практика
5 раундов · По 10 вопросов125 уточнений к практическим задачам
Как работать с банком

Состав: 25 теоретических вопросов и 25 самостоятельных практических задач. Банк разделён на пять раундов. В каждом сначала идут 5 вопросов по теории, затем 5 практических задач. Нумерация общая: от 1 до 50. Ранее выбранные вопросы сохранены, случайный порядок внутри двух категорий сохранён при распределении по раундам.

Все теоретические вопросы приведены полностью в этом файле. Практические задачи оформлены как условие → задание → пять уточняющих вопросов. Всего 125 уточнений: они входят в соответствующие задачи и не считаются отдельными пунктами банка. Под каждым теоретическим вопросом есть закрытый блок «Показать ответ»: раскройте его после собственного ответа. Блоков «Усложнение» нет.

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

Сначала предложите решение, затем ответьте на уточнения. Объясняйте причины выбора и способы проверки. Если условие не определяет бизнес-правило или необходимую настройку среды, обозначьте вопрос или допущение.

Раунд Теория Практика
1 1–5 6–10
2 11–15 16–20
3 21–25 26–30
4 31–35 36–40
5 41–45 46–50

ПОДГОТОВКА К ИНТЕРВЬЮ

Раунд 1

01 — 10из 50 вопросов

Теория

5 вопросов · Ответы внутри
№ 01Запросы и индексы.

Как правильно обрабатывать NULL-значения в запросах?

Показать ответ

Короткий ответ. В запросах NULL означает отсутствие значения, например на стороне левого соединения, где не нашлось соответствующей строки. Для проверки используют ЕСТЬ NULL, а для замены — ЕСТЬNULL(Выражение, ЗначениеЗамены).

// Замена отсутствующего остатка нулём в списке выбираемых полей:
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток

// Проверка отсутствия совпадения в условии:
Остатки.Номенклатура ЕСТЬ NULL

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

№ 02Справочники и документы.

Какие основные недостатки поиска НайтиПоНаименованию()?

Показать ответ

Короткий ответ. НайтиПоНаименованию() удобно для простого поиска, но наименование может повторяться и изменяться. Метод возвращает одну ссылку, поэтому по нему нельзя надёжно установить соответствие при неоднозначных данных.

  • По умолчанию точное соответствие не включено: возможен поиск по началу наименования. Для точного поиска передают второй параметр Истина.
  • При отсутствии совпадения возвращается пустая ссылка, а не Неопределено. Результат нужно проверить до работы с объектом.
  • Найденная ссылка не является объектом для изменения: для записи реквизитов нужен объект, например полученный через ПолучитьОбъект().
  • Массовый поиск в цикле может создавать много обращений к базе.

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

№ 03Язык, модули и клиент-серверное взаимодействие.

В чем разница между ДанныеФормыВЗначение и ЗначениеВДанныеФормы?

Показать ответ

Короткий ответ. ДанныеФормыВЗначение() преобразует данные управляемой формы в прикладное значение, например объект документа или таблицу значений. ЗначениеВДанныеФормы() выполняет обратное преобразование: переносит данные значения в существующие данные формы.

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

Обычный сценарий: получить из данных формы объект, выполнить его метод заполнения и перенести результат обратно в форму. Само преобразование ничего не записывает в базу: запись — отдельное действие.

Соседние методы РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы() работают с реквизитом формы по его имени. Это другой способ адресовать преобразуемые данные.

№ 04Отчёты и СКД.

Что такое СКД?

Показать ответ

Короткий ответ. СКД — система компоновки данных, механизм платформы для построения отчётов на основе описания источников данных и правил их обработки и вывода.

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

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

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

№ 05Запросы и индексы.

Как правильно использовать конструкцию ВЫРАЗИТЬ в запросах?

Показать ответ

Короткий ответ. ВЫРАЗИТЬ приводит выражение к указанному типу. Важный случай в 1С — уточнение типа составной ссылки перед обращением к её реквизитам.

ВЫРАЗИТЬ(
    Продажи.Регистратор
    КАК Документ.РеализацияТоваровУслуг
).Номер

Если регистратор допускает много видов документов, получение Регистратор.Номер может потребовать соединений с несколькими таблицами. Явное приведение ограничивает тип, из таблицы которого требуется получить номер.

Приведение не заменяет отбор строк. Если нужны только реализации, дополнительно задают условие Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг.

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

Практика

5 задач · По 5 уточняющих вопросов
№ 06Общие модули и клиент-серверное взаимодействие.

Серверная операция общего модуля

Условие. Команда управляемой формы должна вызывать процедуру общего модуля РаботаСЗаказамиСервер. Процедура получает ссылку на записанный заказ, выполняет пересчёт и сохраняет результат с учётом прав текущего пользователя. Контекст формы для вычислений не требуется. Заказ должен быть сохранён до вызова операции.

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

Уточняющие вопросы:

  1. Какие свойства определяют место выполнения модуля и возможность обращения к нему с клиента?
  2. Как объявить процедуру, чтобы она была доступна внешнему вызывающему коду?
  3. Какие дополнительные флаги не нужны для этого сценария и почему нельзя включать привилегированный режим только для устранения ошибки прав?
  4. Как обеспечить работу с последними изменениями пользователя, если серверная операция читает заказ по ссылке?
  5. Как обновить представление результата на форме и не показать сообщение об успехе после неудачной записи?
№ 07Транзакции и исключения.

Атомарная запись набора документов

Условие. Обработка подготавливает 100 новых документов на сервере. Требование: либо записать все, либо не записать ни одного. До начала операции активной транзакции нет. При записи любого документа возможна ошибка базы или проверки данных. Вызывающий код должен отличать успех от неудачи, а причина ошибки должна сохраняться для диагностики.

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

Уточняющие вопросы:

  1. Какие действия должны входить в общую транзакцию, чтобы выполнить требование «всё или ничего»?
  2. Почему после ошибки записи нельзя просто пропустить документ и продолжить ту же транзакцию?
  3. В каком порядке выполнять отмену транзакции и последующую диагностику ошибки?
  4. Как проверить сбой в начале, середине и конце набора и отсутствие частично сохранённых документов?
  5. Что пересмотреть, если документов станет значительно больше, а требование атомарности останется прежним?
№ 08Запросы и периодические регистры.

Курс валюты на дату каждого документа

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

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

Уточняющие вопросы:

  1. Почему один общий срез на конец периода не решает эту задачу?
  2. Как определить последнюю подходящую запись регистра для каждой пары «документ, валюта»?
  3. Как отличить отсутствие курса от нулевой суммы самого документа?
  4. Как сохранить документы, для которых курс появился только после их даты?
  5. Какими данными проверить несколько изменений курса, несколько валют и документ точно в момент изменения курса?
№ 09События объектов и валидация.

Проверка данных при любом способе записи

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

Задание. Определить место обязательных проверок, обработку отказа и взаимодействие с формой. Описать серверный каркас проверки и тесты ручной и программной записи.

Уточняющие вопросы:

  1. Какие проверки полезны в форме для удобства, а где обеспечить обязательность правила при программной записи?
  2. Как отличить вывод сообщения от фактического запрета записи?
  3. В каком событии и модуле проверять данные до сохранения и почему выбор события важен?
  4. Как сообщить сразу о нескольких ошибочных строках, если это требуется пользователю?
  5. Как изменится решение, если пустой склад разрешат для черновика, но запретят при проведении?
№ 10Запросы и объём данных.

Последние двадцать документов контрагента

Условие. В базе миллион реализаций. По выбранному контрагенту нужны только последние 20 документов: ссылка, дата, номер и сумма. «Последние» определяются по дате по убыванию. При одинаковой дате порядок должен быть устойчивым; дополнительный ключ нужно определить. Отбор и ограничение размера результата должны выполняться на сервере.

Задание. Составить запрос и описать передачу результата вызывающему коду. Обеспечить нужный отбор, сортировку и предел выдачи без выгрузки всей истории.

Уточняющие вопросы:

  1. Как соотносятся отбор по контрагенту, сортировка и ограничение первых строк?
  2. Какой дополнительный ключ даст устойчивый порядок при одинаковой дате и почему номера документа может быть недостаточно?
  3. Какие поля действительно нужно выбрать и какие затраты создаёт лишняя выгрузка?
  4. Что вернётся, если документов меньше 20 или нет совсем?
  5. Как проверить запрос на большом контрагенте и убедиться, что он не выбирает сначала 20 чужих документов?

ПОДГОТОВКА К ИНТЕРВЬЮ

Раунд 2

11 — 20из 50 вопросов

Теория

5 вопросов · Ответы внутри
№ 11Регистры.

Какие существуют виды регистров накопления в 1С? Объясните разницу между регистрами остатков и оборотов и перечислите их основные виртуальные таблицы

Показать ответ

Короткий ответ. У регистра накопления два вида: остатки и обороты.

Вид регистра Назначение Виртуальные таблицы
Остатки Учитывать увеличение и уменьшение ресурсов и получать их остаток на момент времени Остатки, Обороты, ОстаткиИОбороты
Обороты Накапливать показатели деятельности за период без расчёта остатка Обороты

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

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

№ 12Запросы и индексы.

Как правильно использовать параметризованные запросы?

Показать ответ

Короткий ответ. В тексте запроса указывают параметр с &, а значение передают методом УстановитьПараметр(). Значение пользователя не вставляют в текст конкатенацией строк.

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", ИскомоеНаименование);
Результат = Запрос.Выполнить();

Это сохраняет тип переданного значения и избавляет от ручного экранирования кавычек и форматирования дат. Для нескольких значений можно использовать В (&Список); параметры также применяют в виртуальных таблицах.

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

№ 13Отчёты и СКД.

Как получить процент строки по группировке? Знаете ли функцию «ВычислитьВыражение»?

Показать ответ

Короткий ответ. Долю строки получают как значение строки / итог нужной группировки × 100. В выражениях СКД функция ВычислитьВыражение() позволяет вычислить знаменатель в контексте нужной группировки, а не только текущей строки.

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

Например, в группе склада продажи товаров составляют 700 и 300. Итог группы — 1 000, доли — 70% и 30%. Для нулевого знаменателя нужно явно определить результат, чтобы не получить деление на ноль.

Если пользователь меняет группировки, расчёт доли должен учитывать настройки компоновки. Фиксированный процент, заранее рассчитанный в запросе для другого разреза, уже не даст нужного результата.

№ 14Запросы и индексы.

Кластерный, некластерный индекс, в чём отличие?

Показать ответ

Короткий ответ. В терминологии строковых таблиц Microsoft SQL Server листовой уровень кластерного индекса содержит сами данные таблицы. Некластерный индекс — отдельная структура с ключами и указателями на строки.

Кластерный индекс у таблицы может быть один, некластерных — несколько. Указатель некластерного индекса ведёт к строке кучи либо содержит ключ кластерного индекса. Если все нужные поля есть в некластерном индексе, запрос может обойтись без дополнительного чтения базовой строки. Документация Microsoft.

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

В 1С физическую структуру создаёт платформа по метаданным. Это описание SQL Server нельзя без оговорок переносить на все поддерживаемые СУБД. Независимо от индекса, гарантированный порядок результата задают сортировкой в запросе.

№ 15Права, блокировки и транзакции.

Что такое транзакции, есть ли в 1С вложенные транзакции?

Показать ответ

Короткий ответ. Транзакция объединяет изменения в одну атомарную операцию: они либо фиксируются вместе, либо отменяются. В 1С нет независимых вложенных транзакций, которые можно было бы отдельно зафиксировать или частично откатить.

Повторный НачатьТранзакцию() внутри уже открытой транзакции увеличивает счётчик вложенности, а не создаёт новую независимую транзакцию. Внутренний вызов ЗафиксироватьТранзакцию() не фиксирует её отдельно; окончательная фиксация связана с завершением внешнего уровня. Платформа также может открывать транзакции неявно, например при записи документа. Документация 1С о транзакциях.

Нельзя рассчитывать, что отмена внутреннего уровня затронет только его изменения: работа относится к общей транзакции. Поэтому границы начала, фиксации и отмены согласуют между вызываемыми процедурами. Атомарность также не заменяет продуманную защиту бизнес-правил при параллельной работе.

Практика

5 задач · По 5 уточняющих вопросов
№ 16Запросы и производительность.

Заполнение цен большого документа

Условие. В документе 1 000 строк товаров, часть номенклатуры повторяется. Нужно заполнить цены на дату документа для выбранного вида цены. Есть независимый периодический регистр сведений ЦеныНоменклатуры с измерениями Номенклатура, ВидЦены и ресурсом Цена. Если цена хотя бы одного товара не найдена, проведение запрещено; молча сохранять старую цену нельзя.

Задание. Предложить получение цен одним запросом для нужного набора товаров и алгоритм заполнения строк. Описать обработку отсутствующих цен и проверку результата на большом документе.

Уточняющие вопросы:

  1. Как выбрать значение, действовавшее на дату документа, если в регистре есть более поздние записи?
  2. Как передать список товаров и вид цены, не формируя запрос для каждой строки?
  3. Как сопоставить результат строкам, если один товар встречается несколько раз?
  4. Как отличить отсутствие цены от существующей цены со значением ноль?
  5. Какие показатели сравнить при проверке производительности и какие данные использовать для замера?
№ 17Запросы и соединения.

Все товары с остатком, включая отсутствующие

Условие. Справочник Номенклатура неиерархический. Регистр накопления ОстаткиТоваров имеет измерения только Склад, Номенклатура и ресурс Количество. Нужно вывести все товары и их остатки на выбранном складе на заданную дату. При отсутствии записи остатка показывать ноль; отрицательные остатки также должны попадать в результат.

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

Уточняющие вопросы:

  1. Какая таблица должна определять полный список строк результата и какой вид соединения подходит?
  2. Где задать склад и дату для расчёта остатков?
  3. Как возникает NULL и как представить его нулём в числовом поле?
  4. Какие условия после соединения могут исключить товары, которые требуется сохранить?
  5. Что пересмотреть, если в регистр добавят измерение Качество, но отчёт должен остаться одной строкой на товар?
№ 18Отчёты и система компоновки данных.

Отчёт по продажам на СКД

Условие. В оборотном регистре Продажи измерения — Контрагент, Номенклатура, ресурсы — Количество, Сумма. Все суммы в одной валюте. Нужен отчёт за период с итогами по контрагентам и товарам. Пользователь может менять группировки и необязательно ограничивать отчёт одним контрагентом. Отсутствие выбранного контрагента означает все доступные пользователю данные.

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

Уточняющие вопросы:

  1. Как выбрать источник данных и ограничить период без потери нужной детализации?
  2. Какие поля будут ресурсами, а какие — разрезами, и где задаются итоговые выражения?
  3. Как реализовать необязательный отбор по контрагенту, не подменяя отсутствие отбора поиском пустой ссылки?
  4. Что нужно учесть, чтобы пользователь мог поменять порядок группировок без переписывания запроса?
  5. Как убедиться, что сумма отчёта совпадает с исходными данными и не включает недоступные пользователю записи?
№ 19Запросы.

Документы с шестью и более различными товарами

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

Задание. Составить запрос на языке 1С, возвращающий ссылку на документ и количество различных товаров. Передать границы периода параметрами. Привести данные для проверки результата.

Уточняющие вопросы:

  1. Чем подсчёт строк табличной части отличается от подсчёта различных товаров?
  2. На каком уровне нужно отбирать документы по дате и признаку проведения, а на каком — по количеству товаров?
  3. Какой результат ожидается для десяти строк с одним товаром и для шести разных товаров?
  4. Что изменится, если бизнес попросит учитывать только строки с положительным количеством?
  5. Как проверить границы периода и не включить документ, дата которого равна конечной границе?
№ 20Формы и клиент-серверное взаимодействие.

Получение ИНН из управляемой формы

Условие. На управляемой форме документа пользователь выбирает Контрагент типа СправочникСсылка.Контрагенты. По кнопке нужно получить его ИНН и показать пользователю. Выбор контрагента может ещё не быть записан в базу вместе с документом. Приложение работает в тонком клиенте.

Задание. Предложить разделение кода между клиентом и сервером, параметры и результат серверного вызова. Показать каркас процедур или функций и обработку пустого выбора.

Уточняющие вопросы:

  1. Как передать серверу именно текущее значение поля формы, если документ ещё не записан?
  2. Чем для этой задачи различаются контекстный и внеконтекстный серверные вызовы?
  3. Почему для чтения одного реквизита не обязательно передавать все данные формы?
  4. Что увидит пользователь, если контрагент не выбран или данные недоступны по правам?
  5. Как организовать получение ИНН сразу для нескольких контрагентов без множества серверных вызовов?

ПОДГОТОВКА К ИНТЕРВЬЮ

Раунд 3

21 — 30из 50 вопросов

Теория

5 вопросов · Ответы внутри
№ 21Права, блокировки и транзакции.

Как правильно организовать обработку ошибок в транзакциях?

Показать ответ

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

Типовой каркас для операции, которая сама начинает транзакцию:

НачатьТранзакцию();
Попытка
    // Проверка и запись связанных данных.
    ЗафиксироватьТранзакцию();
Исключение
    ОтменитьТранзакцию();
    // Здесь зарегистрировать подробности ошибки.
    ВызватьИсключение;
КонецПопытки;

После ошибки обращения к базе не следует продолжать работу в той же транзакции как после обычного пропуска строки. Сначала выполняют отмену; последующие действия учитывают восстановленное состояние операции.

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

№ 22Язык, модули и клиент-серверное взаимодействие.

В чем разница между модулем объекта и модулем менеджера?

Показать ответ

Короткий ответ. Модуль объекта описывает поведение конкретного экземпляра, а модуль менеджера — операции, связанные с видом объектов и не требующие экземпляра как контекста вызова.

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

Экспортный метод модуля объекта вызывают через переменную объекта: ТоварОбъект.ПроверитьДанные(). Экспортный метод менеджера — через менеджер: Справочники.Товары.ПолучитьТоварыГруппы(Группа).

Решает назначение операции и её контекст. Сам факт передачи ссылки параметром не делает функцию методом объекта: менеджеру тоже можно передать ссылку, если этого требует его операция.

№ 23Регистры.

Какие существуют способы определения подчиненности регистра?

Показать ответ

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

Проверить можно тремя способами:

  1. Посмотреть режим записи в конфигураторе.
  2. Проверить наличие поля Регистратор и перечень разрешённых документов-регистраторов.
  3. Прочитать свойство режима записи из метаданных регистра программно.

У независимого регистра сведений записи не привязаны к документу-регистратору. У подчинённого записи входят в наборы, связанные с регистратором. Для регистров накопления, бухгалтерии и расчёта независимый режим, аналогичный регистру сведений, не выбирается: их записи связаны с регистраторами.

Не следует смешивать это с ведущим измерением регистра сведений: оно задаёт другую связь записей с объектом и не превращает справочник в регистратор.

№ 24Платформа и расширения.

Какие существуют способы переопределения методов в расширениях?

Показать ответ

Короткий ответ. В расширении применяют аннотации перехвата методов. Основные варианты:

  • &Перед("ИмяМетода") — выполнить дополнительный код перед исходным методом.
  • &После("ИмяМетода") — выполнить дополнительный код после него.
  • &Вместо("ИмяМетода") — заменить выполнение перехваченного метода; при необходимости продолжить цепочку вызовов через ПродолжитьВызов().
  • &ИзменениеИКонтроль("ИмяМетода") — внести точечные изменения в копию метода с контролем соответствия исходному тексту, если механизм доступен в используемой версии и режиме совместимости.

Если достаточно добавить действие, обычно удобнее сохранить стандартную логику через «Перед» или «После». Полная замена требует особенно внимательно проверять изменения поставщика после обновления.

Сигнатуру перехвата и допустимость применения проверяют для конкретного метода. Эти аннотации управляют расширением поведения; директивы вроде &НаСервере определяют место выполнения кода и решают другую задачу.

№ 25Формы и параметры сеанса.

Как правильно использовать параметры сеанса?

Показать ответ

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

К ним обращаются через ПараметрыСеанса.ИмяПараметра. Для инициализации используют модуль сеанса и обработчик УстановкаПараметровСеанса, учитывая запрошенные параметры. Доступ на получение и установку регулируется правами.

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

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

Практика

5 задач · По 5 уточняющих вопросов
№ 26Запросы и объединения.

Продажи двух каналов в одном наборе

Условие. В двух оборотных регистрах ПродажиМагазина и ПродажиСайта хранятся факты продаж с полями Период, Товар, Количество, Сумма. Суммы в одной валюте. Даже строки с одинаковыми выбранными значениями могут быть разными продажами. Нужно получить общий набор за период с указанием канала, затем итог количества и суммы по товару.

Задание. Составить запрос или пакет запросов, сохраняющий все факты и рассчитывающий итоги. Указать, как одинаковые продажи из разных источников участвуют в результате.

Уточняющие вопросы:

  1. Как выбрать вид объединения с учётом требования сохранить все продажи?
  2. Какие требования предъявляются к составу и типам колонок объединяемых выборок?
  3. Где добавить признак канала и где применять границы периода?
  4. На каком этапе сгруппировать результат и как проверить две полностью совпадающие продажи?
  5. Если один и тот же заказ ошибочно попал в оба источника, каких идентификаторов не хватает для корректного устранения повторного учёта?
№ 27Тестирование и валидация.

Проверки формы заявки

Условие. В учебной конфигурации документ Заявка содержит имя, возраст, телефон и признак согласия. Согласованы правила: имя после удаления пробелов по краям — от 2 до 60 символов; возраст — целое число от 18 до 120; телефон хранится строкой из ровно 11 цифр; согласие обязательно для записи. Некорректные заявки нельзя сохранять как через форму, так и программно. Других правил формата в условии нет.

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

Уточняющие вопросы:

  1. Какие значения выбрать для проверки каждой границы имени и возраста?
  2. Как проверить пробелы, пустые значения и дробный возраст, не добавляя несогласованных правил?
  3. Какие проверки телефона подтвердят длину, допустимые символы и сохранение ведущего нуля?
  4. Как убедиться, что ошибка отображается понятно и действительно препятствует записи?
  5. Как проверить обход формы программной записью и убедиться, что правильные данные по-прежнему сохраняются?
№ 28Права доступа и RLS.

Доступ к документам своего подразделения

Условие. Обычный менеджер может читать и изменять документы только своего подразделения. Руководитель видит несколько согласованных подразделений. У документа есть реквизит Подразделение; принадлежность пользователя подразделениям хранится на сервере. Ограничение должно работать в списках, отчётах и программных обращениях, а не только в одной форме.

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

Уточняющие вопросы:

  1. Как разделить назначение роли, RLS и пользовательского отбора списка?
  2. Какие сведения хранить в параметрах сеанса и откуда безопасно получать допустимые подразделения?
  3. Как проверить попытку изменить у документа подразделение на недоступное пользователю?
  4. Какие обращения через общие модули, фоновые задания или привилегированный режим потребуют отдельного внимания?
  5. Как подобрать тесты, подтверждающие и запрет чужих данных, и доступ к своим без лишних ограничений?
№ 29Запросы и временные таблицы.

Реализации и общий лимит контрагента

Условие. Нужно показать реализации за выбранный период и общий лимит контрагента каждого документа. В непериодическом регистре сведений Лимиты измерения — Контрагент, Договор, ресурс — Сумма. Несколько договоров одного контрагента дают несколько записей. Реализации без установленного лимита также нужны в отчёте; отсутствие лимита должно отличаться от установленного нулевого лимита.

Задание. Предложить пакет запросов с подготовкой промежуточных данных. Обеспечить одну строку на реализацию, корректное суммирование лимита и сохранение документов без лимита.

Уточняющие вопросы:

  1. На каком уровне нужно агрегировать лимиты до соединения с документами?
  2. Как избежать размножения реализаций из-за нескольких договоров?
  3. Какие поля временной таблицы рассмотреть для индекса и почему?
  4. Как ограничить подготовку лимитов нужными контрагентами, не изменив смысл суммы?
  5. Как сравнить вариант с временной таблицей и вложенным запросом, не предполагая заранее, что один всегда быстрее?
№ 30Управляемые формы и данные объекта.

Форма контрагента с постоянным и временным комментарием

Условие. В справочник Контрагенты нужно добавить постоянное примечание. На форме также нужен временный комментарий для текущей проверки, который не сохраняется в базе. Пользователь редактирует наименование, постоянное примечание и временный комментарий; стандартная команда записи должна сохранять данные контрагента.

Задание. Определить реквизиты справочника и формы, тип и назначение основного реквизита. Описать размещение полей и ожидаемое поведение после записи, закрытия и повторного открытия формы.

Уточняющие вопросы:

  1. Где должны храниться постоянное примечание и временный комментарий?
  2. Как основной реквизит связывает стандартную запись формы с объектом контрагента?
  3. Чем тип СправочникОбъект.Контрагенты отличается от СправочникСсылка.Контрагенты в этом сценарии?
  4. Влияет ли имя основного реквизита на его назначение и что задаётся отдельным свойством?
  5. Какие изменения должны сохраниться или исчезнуть при закрытии формы без записи и при повторном открытии после записи?

ПОДГОТОВКА К ИНТЕРВЬЮ

Раунд 4

31 — 40из 50 вопросов

Теория

5 вопросов · Ответы внутри
№ 31Регистры.

В чём разница между регистром накопления и регистром сведений?

Показать ответ

Короткий ответ. Регистр накопления предназначен для учёта числовых изменений и получения итогов: остатков или оборотов. Регистр сведений хранит значения в разрезе измерений и при необходимости историю их изменения во времени.

Примеры:

  • остатки товаров по складам — регистр накопления вида «Остатки»;
  • суммы продаж за период — оборотный регистр накопления;
  • цена товара на дату или ответственный за склад — регистр сведений.

Ресурсы регистра накопления числовые. У регистра сведений ресурсы могут иметь и другие типы; он не выполняет автоматическое накопление по принципу прихода и расхода.

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

№ 32Тестирование.

Что такое позитивное и негативное тестирование, в чём их различие? Приведите по два примера для каждого типа

Показать ответ

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

Два позитивных примера:

  1. Провести поступление 10 единиц товара при нулевом начальном остатке и проверить, что остаток стал 10.
  2. Записать контрагента с корректно заполненными обязательными данными и проверить сохранённые значения повторным чтением.

Два негативных примера:

  1. Попытаться записать документ с количеством −1, если правило задачи требует положительное количество: ожидаются отказ и понятное сообщение.
  2. Попытаться записать документ без обязательного склада: запись должна быть отклонена, частичные изменения не должны сохраниться.

Негативный тест успешен, когда система правильно обработала недопустимую ситуацию, а не когда в программе произошёл необработанный сбой.

№ 33Справочники и документы.

В чем преимущество использования регистров сведений перед табличными частями?

Показать ответ

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

Табличная часть представляет строки конкретного документа или элемента справочника. Она естественна, когда строки составляют содержимое этого объекта и изменяются вместе с ним: например, товары документа.

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

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

№ 34Производительность.

Какие методы оптимизации производительности приложения вы можете предложить?

Показать ответ

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

Основные направления:

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

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

№ 35Язык, модули и клиент-серверное взаимодействие.

В чем разница между NULL, Неопределено и пустой ссылкой?

Показать ответ

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

Значение Что означает Пример
NULL Отсутствующее значение в результате работы с данными Не нашлась правая строка левого соединения
Неопределено Значение встроенного языка, обозначающее отсутствие назначенного результата По отсутствующему ключу соответствия не получено значение
Пустая ссылка Значение конкретного ссылочного типа, не указывающее на объект базы Не выбран контрагент в поле ссылочного типа

В запросе NULL проверяют через ЕСТЬ NULL. В коде для Неопределено применяют сравнение с Неопределено; для пустой ссылки — соответствующую пустую ссылку или проверку заполненности, когда она подходит по смыслу.

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

Практика

5 задач · По 5 уточняющих вопросов
№ 36Отладка и производительность.

Локализация медленного проведения

Условие. Пользователь сообщает, что проведение документа на 1 000 строк занимает примерно минуту. На небольших документах проблема незаметна. Иногда задержка появляется только при одновременной работе нескольких пользователей. Причина не установлена; готового замера и плана запросов нет.

Задание. Составить последовательный план воспроизведения, измерения и локализации причины. Назвать инструменты, проверяемые гипотезы и критерии подтверждения исправления.

Уточняющие вопросы:

  1. Какие сведения о документе, пользователе, времени и нагрузке собрать до изменения кода?
  2. Как выполнить замер одной операции и исключить влияние точек останова?
  3. Как совместно анализировать суммарное время строки, количество вызовов и время вызываемых ею процедур?
  4. Как отличить длительное вычисление или запрос от ожидания блокировки?
  5. Как сравнить результат до и после на сопоставимых данных и проверить правильность движений, а не только время?
№ 37Документы, регистры и блокировки.

Проведение расхода с контролем остатков

Условие. Регистр накопления ОстаткиТоваров вида «Остатки» имеет измерения Склад, Номенклатура и ресурс Количество. Документ расхода содержит склад и табличную часть товаров. Отрицательные остатки запрещены; при недостатке любого товара весь документ не проводится. Пользователи могут проводить документы одновременно; режим блокировок управляемый.

Задание. Описать подготовку потребности, формирование движений, проверку остатков и синхронизацию конкурирующих операций. Указать, в каком модуле выполняется алгоритм, и привести проверки проведения и перепроведения.

Уточняющие вопросы:

  1. Как учесть повтор одного товара в нескольких строках документа?
  2. Как поведёт себя решение при остатке 10 и двух одновременных расходах на 7 и 6 единиц?
  3. Как связаны проверка остатков, запись движений, транзакция и блокировка?
  4. Как выбрать момент проверки остатков с учётом даты документа и порядка документов внутри одной секунды?
  5. Что нужно проверить при перепроведении, изменении склада и отмене проведения?
№ 38Платформа и расширения.

Дополнительный реквизит типовой конфигурации

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

Задание. Предложить план реализации и проверки: какие сведения о среде получить, какие объекты затронуть, как проверить форму, хранение данных и совместимость после обновления.

Уточняющие вопросы:

  1. Какие возможности и ограничения нужно проверить до обещания реализации через расширение?
  2. Чем отличается добавление поля только на форму от добавления сохраняемого реквизита документа?
  3. Как организовать имена и минимальный состав заимствованных объектов?
  4. Что проверить после обновления основной конфигурации и изменения её формы?
  5. Какие условия хранения данных и возврата к предыдущей версии нужно определить до отключения или удаления расширения?
№ 39Печатные формы и макеты.

Печатная форма реализации

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

Задание. Описать макет с областями, получение данных и последовательность формирования табличного документа. Определить, где выполнять подготовку данных и как пользователь запускает печать.

Уточняющие вопросы:

  1. Какие области макета нужны и какие из них выводятся один раз, а какие — для каждой строки?
  2. Как передавать данные в параметры областей и контролировать порядок вывода?
  3. Как избежать множества отдельных чтений реквизитов товаров при подготовке печати?
  4. Как определить поведение при несохранённых изменениях на открытой форме документа?
  5. Как проверить нулевые значения, длинные наименования, переносы страниц и совпадение итога с данными документа?
№ 40Индексы и производительность.

Индекс под отбор по складу и качеству

Условие. Частый запрос получает остатки всех товаров определённого качества на одном складе. В регистре измерения идут в порядке Склад, Номенклатура, Качество. Для обсуждения рассматривается составной индекс с таким же порядком ключей. Другие физические индексы и фактический план ещё не исследованы. Важен также быстрый поиск по складу и номенклатуре; запись движений интенсивная.

Задание. Предложить план диагностики и варианты индексирования под нагрузку. Объяснить компромиссы между запросами и стоимостью записи. Указать, какие сведения нужны до изменения метаданных.

Уточняющие вопросы:

  1. Какая часть рассматриваемого индекса полезна для отбора по складу и качеству?
  2. Что меняет отсутствие условия по номенклатуре между двумя используемыми полями?
  3. Влияет ли порядок условий в тексте запроса на порядок ключей индекса?
  4. Как проверить влияние нового индекса или порядка измерений на остальные запросы и проведение документов?
  5. Почему порядок измерений в конфигураторе не заменяет проверку физической структуры и SQL-плана?

ПОДГОТОВКА К ИНТЕРВЬЮ

Раунд 5

41 — 50из 50 вопросов

Теория

5 вопросов · Ответы внутри
№ 41Запросы и индексы.

В чем разница между внутренним и полным соединением таблиц?

Показать ответ

Короткий ответ. Внутреннее соединение возвращает пары строк, соответствующие условию ПО. Полное соединение возвращает эти пары и дополнительно строки обеих сторон, для которых соответствия нет. У отсутствующей стороны поля заполняются NULL.

Например, слева ключи A и B, справа B и C. При соединении по равенству ключа внутреннее даст только B, полное — A, B и C; у A не будет данных правой стороны, у C — левой.

Соединение не устраняет повторы. Если одному ключу соответствует несколько строк с каждой стороны, будут получены все подходящие пары; это может размножить суммы.

Вид соединения выбирают по тому, какие несовпавшие строки нужны результату. Условия в ГДЕ после соединения тоже влияют на сохранение строк с NULL.

№ 42Платформа и расширения.

Как правильно использовать механизм расширений для доработки форм?

Показать ответ

Короткий ответ. Нужную форму заимствуют в расширение, затем добавляют или изменяют её элементы, реквизиты, команды и обработчики в пределах поддерживаемых возможностей. Визуальные изменения можно делать в редакторе формы; программная доработка — тоже доступный вариант, а не единственный разрешённый способ. Описание механизма расширений форм от 1С.

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

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

№ 43Формы и параметры сеанса.

Как правильно настроить параметры открытия формы с отбором?

Показать ответ

Короткий ответ. В ОткрытьФорму() вторым параметром передают структуру параметров. Для формы списка, поддерживающей стандартный параметр Отбор, его значением служит структура с именами полей и значениями отбора.

// Контрагент — выбранная пользователем ссылка.
Отбор = Новый Структура("Контрагент", Контрагент);
ПараметрыОткрытия = Новый Структура("Отбор", Отбор);

ОткрытьФорму(
    "Документ.ЗаказПокупателя.ФормаСписка",
    ПараметрыОткрытия);

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

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

№ 44Справочники и документы.

В чем разница между ПередЗаписью и ПриЗаписи?

Показать ответ

Короткий ответ. Для событий модуля объекта ПередЗаписью вызывается до записи данных объекта, а ПриЗаписи — после записи, но ещё внутри транзакции этой операции. Это не то же самое, что окончательное успешное завершение записи. Последовательность записи объекта в документации 1С.

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

Простое изменение реквизита в ПриЗаписи не записывает это новое значение автоматически: основной этап записи уже прошёл. При этом Отказ = Истина может отменить операцию, поскольку транзакция ещё не завершена.

Не смешивайте эти события с обработчиками управляемой формы. Обязательные правила объекта должны работать также при программной записи, когда форма не открывается.

№ 45Язык, модули и клиент-серверное взаимодействие.

Какие директивы компиляции используются в модулях форм?

Показать ответ

Короткий ответ. В модуле управляемой формы применяются четыре директивы:

Директива Где выполняется код Контекст формы
&НаКлиенте На клиенте Доступен
&НаСервере На сервере Доступен
&НаСервереБезКонтекста На сервере Недоступен
&НаКлиентеНаСервереБезКонтекста На стороне вызова: клиенте или сервере Недоступен

Без указанной директивы метод формы считается серверным. При контекстном серверном вызове платформа синхронизирует данные формы; внеконтекстный вызов работает с переданными параметрами и не получает контекст формы автоматически.

Двойная директива означает наличие метода на обеих сторонах, а не автоматический переход с клиента на сервер. Отдельная директива &НаКлиентеНаСервере относится к модулю команды и не является пятой директивой модуля формы. Таблица доступности директив в руководстве 1С.

Инструкции препроцессора #Если ... #КонецЕсли решают другую задачу — включение фрагментов исходного кода при компиляции.

Практика

5 задач · По 5 уточняющих вопросов
№ 46Справочники и обработка данных.

Загрузка артикулов по внешнему идентификатору

Условие. Из файла приходят ВнешнийИдентификатор, Наименование, Артикул. Нужно обновить артикулы существующих товаров. Во внутреннем справочнике хранится внешний идентификатор, но его уникальность пока не обеспечена. Наименования могут повторяться и меняться. Неизвестные и неоднозначные идентификаторы следует включить в отчёт ошибок, не создавая товары автоматически.

Задание. Предложить проверку входных данных, сопоставление с базой и обновление найденных объектов. Учесть большой файл и подготовить итог по обновлённым и пропущенным строкам.

Уточняющие вопросы:

  1. Почему наименование нельзя использовать как единственный устойчивый идентификатор товара?
  2. Как обработать несколько внутренних товаров с одним внешним идентификатором?
  3. Как заранее получить нужные соответствия, чтобы не выполнять поиск для каждой строки файла?
  4. Как поступить с двумя строками файла для одного идентификатора и разными артикулами?
  5. Какими проверками подтвердить, что обновлён правильный объект и ошибки не скрыты сообщением об общем успехе?
№ 47Модули и организация кода.

Размещение логики между модулями

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

Задание. Распределить операции по модулям, определить параметры и доступность методов. Показать примеры вызовов и объяснить, где экземпляр объекта необходим, а где нет.

Уточняющие вопросы:

  1. Чем отличаются задачи модуля объекта и модуля менеджера в предложенных операциях?
  2. Почему для получения общего списка не требуется создавать служебный элемент справочника?
  3. Где оставить реакцию на кнопку и как отделить её от обязательной проверки данных?
  4. Когда вспомогательной функции подходит общий модуль и какой контекст ей нужен?
  5. Как изменится контракт операции, если она должна учитывать несохранённые данные конкретного объекта?
№ 48Запросы и составные типы.

Номер и дата регистратора составного типа

Условие. Регистр накопления Продажи допускает 16 видов документов-регистраторов. В отчёт нужны только движения документов РеализацияТоваровУслуг: номер и дата документа, контрагент, количество и стоимость. Поля Контрагент, Количество, Стоимость находятся в регистре; номер и дата — в документе.

Задание. Составить запрос с явным ограничением нужного вида регистратора. Объяснить получение его реквизитов и способ проверки потенциально лишних соединений.

Уточняющие вопросы:

  1. Чем чтение самой ссылки на регистратор отличается от получения её номера и даты через точку?
  2. Какие соединения может потребовать обращение к реквизитам ссылки из 16 возможных типов?
  3. Как различаются назначения ССЫЛКА и ВЫРАЗИТЬ в этой задаче?
  4. Что придётся изменить, если в отчёт потребуются движения всех видов документов?
  5. Почему получение номера и даты отдельными вызовами в цикле может создать другую проблему производительности?
№ 49Запросы из кода.

Поиск контрагентов по параметрам

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

Задание. Предложить текст запроса и каркас функции, передающей параметры и возвращающей результат серверному вызывающему коду. Не подставлять значения пользователя непосредственно в текст запроса.

Уточняющие вопросы:

  1. Как передать список значений и булевый отбор, не создавая цепочку условий из строк?
  2. Где обработать пустой список, чтобы не получить все записи вместо пустого результата?
  3. Как проверить наименование с кавычками, пустой строкой и несколькими совпадениями?
  4. Когда вызывающему коду удобнее выборка, а когда таблица значений?
  5. Что пересмотреть, если результат этой функции потребуется показать в управляемой форме на клиенте?
№ 50Запросы и агрегация.

Суммы товаров и оплат по заказу

Условие. У документа ЗаказПокупателя две табличные части: Товары с полем Сумма и Оплаты с полем Сумма. Нужно вывести каждый заказ, сумму товаров и сумму оплат. В заказе может быть несколько строк в обеих частях; заказы без товаров или оплат тоже должны быть видны, отсутствующая сумма отображается нулём.

Задание. Предложить запрос с одной строкой на заказ. Объяснить подготовку двух наборов данных и проверку итогов без размножения сумм при соединении.

Уточняющие вопросы:

  1. Что произойдёт при прямом соединении трёх строк товаров с двумя строками оплат по ссылке заказа?
  2. На каком уровне требуется группировка каждой табличной части?
  3. От какой таблицы начать, чтобы сохранить заказы без строк в обеих частях?
  4. Почему одинаковые суммы разных оплат нельзя считать дубликатами только по значению суммы?
  5. Какой минимальный набор заказов проверит пустые части, несколько строк и одинаковые суммы?
Материалы курса

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

  • Платформа и расширения.
  • Язык, модули и клиент-серверное взаимодействие.
  • Справочники и документы.
  • Регистры.
  • Запросы и индексы.
  • Формы и параметры сеанса.
  • Отчёты и СКД.
  • Права, блокировки и транзакции.
  • Производительность.
  • Тестирование.
  • Практические задания курса.
  • Расширения конфигурации.
  • Печатные формы: макет и программная работа.
  • Система компоновки данных.
  • Позитивное и негативное тестирование.
Открыть карту курса →