Писать код руками - моветон | infolimp.ru

Писать код руками - моветон

3 июля 2026 · infolimp.ru

Тренд на low-code и автоматизацию генерации кода захватил экосистему 1С. Но за красивой обёрткой «не пиши руками» скрывается ловушка: слепое доверие генераторам и конструкторам часто приводит к неоптимальным решениям, которые невозможно поддерживать. Рассматриваем, когда ручной код остаётся единственно верным выбором, а когда его использование — действительно моветон.

Контекст и ситуация

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

Ключевой тезис: «Писать код руками — моветон» — это не про отказ от автоматизации, а про осознанный выбор инструмента под задачу. Бездумное использование генераторов — такой же моветон, как и написание всего с нуля.

Опытный специалист 1С должен понимать, где проходит граница между эффективной автоматизацией и вредным упрощением. Рассмотрим три типовые ситуации, в которых ручной код не просто оправдан, а необходим.

Ловушка №1: Генерация запросов — скрытые блокировки и неоптимальные планы

Когда конструктор запроса врёт

Конструктор запроса в конфигураторе или EDT генерирует синтаксически корректный текст, но часто не учитывает особенности индексов и статистики. Например, при соединении таблиц через ЛЕВОЕ СОЕДИНЕНИЕ с условием в ГДЕ конструктор может создать неявное преобразование типов, которое приводит к полному сканированию таблицы.

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

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

Предупреждение: Никогда не доверяйте автоматически сгенерированному запросу без анализа плана выполнения. Используйте Выполнить() с выводом плана через ПолучитьПланЗапроса() (доступно в режиме отладки).

Ловушка №2: Автогенерация форм — потеря контроля над событиями

Когда расширение формы становится «чёрным ящиком»

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

// Пример: ручное управление событием ПриОткрытии
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Ручной код: инициализация параметров, которые не поддерживаются генератором
    Параметры.Вставить("РежимПросмотра", Истина);
    Если Параметры.Свойство("ДокументОснование") Тогда
        Элементы.ДокументОснование.Видимость = Истина;
    КонецЕсли;
КонецПроцедуры

Генератор форм часто создаёт пустые обработчики, которые потом «затираются» при обновлении конфигурации. Ручное размещение кода в процедурах с явным указанием &НаКлиенте / &НаСервере и отказ от автосоздания форм (режим «Не создавать автоматически») даёт полный контроль.

Опыт: В одном из проектов автоматически сгенерированная форма документа содержала 12 неиспользуемых реквизитов и 3 пустых обработчика. После ручной чистки производительность открытия выросла на 40%.

Практическое руководство: когда писать руками — норма, а когда — моветон

Чек-лист принятия решения

  1. Критичная производительность — ручной код обязателен (запросы с временными таблицами, управление блокировками, пакетная обработка).
  2. Нестандартная бизнес-логика — генераторы не умеют обрабатывать сложные ветвления и исключения.
  3. Интеграция с внешними системами — HTTP-запросы, работа с файлами, криптография требуют ручного контроля.
  4. Обновляемость — если вы пишете код в расширении, а не в конфигурации, ручной подход позволяет точнее контролировать совместимость.

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

Типичные ошибки

Что делать прямо сейчас

  1. Проведите аудит существующего кода: найдите места, где используется автоматическая генерация (формы, запросы, обработчики).
  2. Для каждого такого места оцените, можно ли заменить генерацию на ручной код с явным управлением.
  3. Внедрите правило: любой сгенерированный код перед сдачей в релиз должен быть проверен на наличие неявных преобразований и избыточных вызовов.
  4. Используйте профилировщик производительности (замер времени выполнения запросов, открытия форм) для сравнения ручного и автоматического подходов.

Итог: Тренд «не пиши руками» — это не догма, а призыв к осмысленной автоматизации. Опытный разработчик 1С должен уметь в нужный момент отключить генератор и написать код, который будет работать быстрее, надёжнее и легче сопровождаться. Моветон — не ручной код, а отсутствие выбора.

Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.

Попробовать НОПик →