Оценка квалификации разработчика 1С на собеседовании часто осложняется тем, что типовые теоретические вопросы легко заучиваются, а простые задачи быстро гуглятся в интернете. Чтобы быстро отличить специалиста с практическим опытом разработки от новичка, изучившего базовую теорию, целесообразно использовать компактные задачи и контрольные вопросы с неочевидными нюансами поведения платформы. Разберем наиболее эффективные практические кейсы, алгоритмические задачи и темы для экспресс-тестирования.
Рассмотрим популярную задачу на проверку уверенного владения языком запросов 1С: необходимо определить все пары товаров, которые покупались вместе в рамках одного документа за указанный период, а также подсчитать частоту их совместного появления.
Здесь проверяется умение кандидата работать со связыванием таблицы самой с собой, исключать дубликаты пар (чтобы пара «Товар А — Товар Б» не дублировалась как «Товар Б — Товар А») и корректно группировать данные.
Проанализируем пример реализации такого запроса:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ТабТовары.Ссылка КАК Документ,
ТабТовары.Номенклатура.Код КАК Код
ПОМЕСТИТЬ ВТ_Товары
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК ТабТовары
ГДЕ
ТабТовары.Ссылка.Проведен = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ1.Код + " - " + ВТ2.Код КАК ПараТоваров,
ВТ1.Документ КАК Документ
ПОМЕСТИТЬ ВТ_Пары
ИЗ
ВТ_Товары КАК ВТ1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Товары КАК ВТ2
ПО ВТ1.Документ = ВТ2.Документ
И ВТ1.Код > ВТ2.Код
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Пары.ПараТоваров КАК ПараТоваров,
КОЛИЧЕСТВО(ВТ_Пары.Документ) КАК КоличествоСлучаев
ИЗ
ВТ_Пары КАК ВТ_Пары
СГРУППИРОВАТЬ ПО
ВТ_Пары.ПараТоваров
УПОРЯДОЧИТЬ ПО
КоличествоСлучаев УБЫВ
Обратим внимание на ключевой момент в условии соединения: использование строгого неравенства ВТ1.Код > ВТ2.Код исключает повторный учет перевернутых пар и объединение товара с самим собой.
Разберем нестандартную задачу для системы компоновки данных. Имеется неиерархический справочник, у которого добавлен реквизит Родитель (ссылка на этот же справочник). Требуется вывести дерево элементов в отчете средствами СКД.
Кандидат без глубокого понимания СКД попытается вручную соединять таблицы в запросе с ограничением по уровням вложенности. Опытный специалист сразу применит встроенный механизм связей наборов данных:
Ссылка с полем Родитель.NULL).Выясним частую проблему при формировании реестра документов: требуется вывести документы за период и пересчитать суммы в другую валюту по курсу на дату каждого конкретного документа.
Новички часто пытаются использовать виртуальную таблицу РегистрСведений.КурсыВалют.СрезПоследних, передавая туда дату документа, либо пытаются выполнить запрос в цикле выборки документов. Опытный разработчик знает, что виртуальная таблица среза последних принимает только одну фиксированную дату на весь запрос, и реализует срез на каждую дату через соединение с максимальной датой курса или через механизм периодических регистров в реальных таблицах.
Рассмотрим контрольные вопросы, ответы на которые позволяют за 5–10 минут определить глубину понимания механизмов платформы:
Регистратор.Контрагент)? Опытный разработчик ответит, что это порождает неявные левые соединения со всеми таблицами типов, входящими в состав реквизита, что приводит к сильному замедлению запроса. Для решения проблемы применяется явное ограничение типа функцией ВЫРАЗИТЬ(... КАК ...).ГДЕ без проверки на ЕСТЬ NULL? Такое условие фактически превращает ЛЕВОЕ СОЕДИНЕНИЕ во ВНУТРЕННЕЕ СОЕДИНЕНИЕ, отсекая строки левой таблицы, для которых нет соответствия справа.ГДЕ? Условие в параметрах накладывается на уровне СУБД до расчета итогов, а блок ГДЕ выполняет постобработку всей полученной таблицы остатков.ОБЪЕДИНИТЬ без ВСЕ выполняет неявную группировку и устранение дубликатов строк, создавая избыточную нагрузку на сервер. По стандарту разработки следует всегда использовать ОБЪЕДИНИТЬ ВСЕ, если дубликаты допустимы или их отсутствие гарантировано.ВЫРАЗИТЬ(Поле КАК Строка(100)).Проанализируем простую прикладную задачу: распределить общую сумму пропорционально коэффициентам или долям строк в табличной части.
Специалист с практическим опытом сразу обратит внимание на проблему округления: сумма округленных значений по строкам почти никогда не сходится с исходной суммой ровно в копейку. Решение этой проблемы показывает знание прикладных стандартов разработки: остаток округления («копейка») относится на первую или последнюю строку табличной части либо распределяется по строкам с наибольшими долями.
Эффективный метод тестирования — моделирование реальной ошибки в тестовой базе. Кандидату предоставляется база данных с готовым сценарием:
Данный подход наглядно демонстрирует, насколько быстро специалист ориентируется в типовых конфигурациях, умеет пользоваться отладчиком и читать чужой программный код.