Справедлива ли оценка выполнения тестового задания? Разбор типичных ошибок 1С-разработчика

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

Оптимизация запросов и работа с виртуальными таблицами

Одной из главных претензий к коду автора стала «проблема с оптимизацией в запросе». Проанализируем исходный текст запроса. Мы видим, что автор использует временные таблицы (ВТ), что само по себе является хорошей практикой, но допускает ряд критических промахов.

Во-первых, индексация временных таблиц. В коде полностью отсутствует инструкция ИНДЕКСИРОВАТЬ ПО. Когда мы создаем временную таблицу, которая в дальнейшем будет участвовать в соединении (например, ВТ_КлючиАналитикиУчетаНоменклатуры или ВТ_КлючиАналитикиУчетаПоПартнерам), СУБД должна быстро находить соответствующие записи. Без индексов на больших объемах данных время выполнения запроса растет экспоненциально. Всегда индексируйте поля, по которым планируется СОЕДИНЕНИЕ.

Во-вторых, работа с виртуальными таблицами. В коде мы видим соединение виртуальной таблицы оборотов с временными таблицами:


|ИЗ
|    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоПериода, &ОкончаниеПериода, , ) КАК ВыручкаИСебестоимостьПродажОбороты
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КлючиАналитикиУчетаПоПартнерам КАК ВТ_КлючиАналитикиУчетаПоПартнерам
|        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам = ВТ_КлючиАналитикиУчетаПоПартнерам.Ссылка

Это классическая ошибка. Согласно стандартам 1С, условия отбора должны передаваться в параметры виртуальной таблицы, а не накладываться через СОЕДИНЕНИЕ или ГДЕ. Если мы уже получили массив ключей аналитики, их нужно передать в третий параметр таблицы Обороты. Это позволит платформе построить максимально эффективный SQL-запрос, который отсечет лишние данные еще на этапе обращения к таблицам итогов.

В-третьих, использование конструкции В ИЕРАРХИИ. Для справочника Номенклатура, который может содержать сотни тысяч записей, такой отбор крайне тяжел для СУБД. В реальных задачах рекомендуется сначала программно получить список всех ссылок внутри группы и передать их в запрос как массив через оператор В.

Методологические ошибки и логика данных

Рассмотрим ситуацию с фильтром И НЕ Номенклатура.ПометкаУдаления. На первый взгляд, это кажется логичным — не показывать удаленные объекты. Однако в отчетах по продажам это грубая ошибка. Если товар был успешно продан полгода назад, а сегодня менеджер пометил его на удаление (например, товар снят с производства), то отчет за прошлый период не покажет эти продажи. В управленческом учете данные об оборотах должны быть достоверными независимо от текущего состояния объекта в справочнике.

Также проанализируем способ получения юридического адреса. Автор использует соединение с табличной частью КонтактнаяИнформация и выбирает МАКСИМУМ(НомерСтроки). Это крайне ненадежный метод:

  1. Структура хранения контактной информации (КИ) в современных конфигурациях (ERP, УТ 11) часто выносится в отдельные регистры или скрывается за сложной логикой.
  2. Для получения адреса необходимо использовать программный интерфейс БСП. Например, функцию модуля УправлениеКонтактнойИнформацией. Прямое обращение к табличным частям справочников для получения КИ считается «устаревшим стилем» и нарушает принцип инкапсуляции данных в БСП.
  3. В современных базах адрес имеет период действия (поле ДействуетС). Использование номера строки для определения актуальности — верный способ получить неверный адрес в базе с богатой историей изменений.

Механизмы вывода данных: Построитель отчета vs СКД

Использование объекта ПостроительОтчета в управляемых формах — это анахронизм. Этот объект пришел из эпохи 1С 8.1 и обычных форм. В современных условиях (УТ 11, ERP, КА 1.1) стандартом является Система компоновки данных (СКД). Даже для самой простой таблицы ожидается использование СКД по следующим причинам:

Использование БСП при выводе на печать

Работодатель справедливо заметил отсутствие БСП при выводе. Для внешней обработки это означает два момента:

  1. Регистрация: Наличие функции СведенияОВнешнейОбработке() в модуле объекта, чтобы обработку можно было подключить через справочник «Дополнительные отчеты и обработки».
  2. Печать: Вместо создания ТабличногоДокумента вручную или через Построитель, рекомендуется использовать подсистему «Печать». Это включает создание макета печатной формы, описание команды печати и использование менеджера печати. Такой подход позволяет администратору системы редактировать макет прямо в пользовательском режиме, не привлекая программиста.

Рассмотрим пример того, как должен выглядеть фрагмент кода для формирования ТЗ с учетом индексации (правильный подход):


// Создаем ВТ с индексацией для последующего соединения
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = 
    "ВЫБРАТЬ Ссылка ПОМЕСТИТЬ ВТ_Номенклатура ИЗ Справочник.Номенклатура 
    |ГДЕ Ссылка В (&МассивСсылок) ИНДЕКСИРОВАТЬ ПО Ссылка";
Запрос.УстановитьПараметр("МассивСсылок", ПолучитьМассивСсылокИерархично(ОтборНоменклатуры));
Запрос.Выполнить();

Подведем итоги

Разгромный отзыв часто является следствием не того, что программа «не работает», а того, что она написана без учета современных требований к производительности и масштабируемости. В больших системах (ERP, УТ 11) каждый неоптимальный запрос или отказ от стандартных механизмов БСП ведет к деградации производительности всей базы. Чтобы успешно проходить подобные тесты, мы рекомендуем:

Помните, что тестовое задание — это не просто проверка на умение «написать код, который выдает результат», а демонстрация вашего знакомства с актуальной культурой разработки в экосистеме 1С.

← На главную