Разработка и Конфигурация · 11 мин
Как упорядочить код в 1С: практическое руководство для разработчика
Практическое руководство по упорядочиванию кода в 1С: структура модулей, именование, области, рефакторинг и контроль качества без риска сломать конфигурацию.
Беспорядок в коде 1С проявляется постепенно: сначала в общем модуле появляется «лишняя» процедура, затем обработчики формы разрастаются до сотен строк, а через год никто уже не помнит, зачем нужна функция ПолучитьДанные2(). Упорядочить код — значит привести его к предсказуемой структуре, где каждый фрагмент лежит на своём месте, назван понятно и может быть изменён без страха сломать смежную логику.
Главный инструмент наведения порядка — не разовая «чистка», а набор правил: куда помещать код, как называть объекты, как дробить длинные процедуры и как проверять результат. В типовых конфигурациях эти правила частично заданы стандартами разработки фирмы «1С», но и в самописных решениях их можно применять выборочно, начав с самых болезненных мест.
Перед любыми изменениями работающей конфигурации сделайте выгрузку в файл .dt или убедитесь, что база подключена к хранилищу конфигурации и актуальная версия зафиксирована. Рефакторинг без резервной копии — самая частая причина аварийных восстановлений.
Разберитесь, какой код где должен лежать
Первый источник хаоса — код, размещённый не в том модуле. В 1С место размещения определяет область видимости и время жизни кода, поэтому перенос процедуры «куда попало» меняет поведение системы. Базовое правило: серверная бизнес-логика живёт в модулях объектов и общих модулях, клиентская — в модулях форм и общих клиентских модулях.
Общие модули стоит группировать по прикладным областям, а не по типу операций. Правильно: РаботаСНоменклатурой, ОбменСБанком. Неправильно: ОбщегоНазначения, Утилиты, Вспомогательные — такие модули неизбежно превращаются в свалку, куда попадает всё подряд.
Обработчики событий формы и объекта должны оставаться тонкими: получить параметры, вызвать прикладную процедуру, обработать результат. Если в обработчике ПриЗаписи больше десятка строк логики — это признак того, что логику нужно вынести в отдельную процедуру модуля объекта или общего модуля.
Настройте общие модули по правилам
Каждый общий модуль должен иметь чёткое назначение, отражённое в имени, и корректно выставленные флаги контекста. Модуль с серверной логикой не должен компилироваться на клиенте: это и замедляет запуск, и провоцирует ошибки при обращении к недоступным в клиентском контексте объектам.
Для модулей, вызываемых с клиента, включайте флаг «Вызов сервера» и помечайте экспортными только те процедуры, которые действительно нужны снаружи. Всё остальное оставляйте без Экспорт — это формирует понятный программный интерфейс модуля и защищает внутренние функции от случайного использования.
Повторно используемые значения, которые не меняются в течение сеанса, размещайте в модулях с флагом «Повторное использование возвращаемых значений». Это ускоряет работу и одновременно дисциплинирует: в такой модуль нельзя поместить функцию с побочными эффектами.
Приведите имена к единому стандарту
Имена процедур, функций и переменных — это документация, которую читают чаще всего. Правила просты: имя функции отвечает на вопрос «что возвращает?» (ОстатокТовараНаСкладе), имя процедуры — «что делает?» (СформироватьОтчетПоПродажам). Сокращения допустимы только общеупотребимые.
Переменные именуйте по содержимому, а не по типу: ТаблицаЗаказов вместо ТЗ1, ТекущийПользователь вместо ТекПольз. Однобуквенные и транслитерированные имена (Spisok, Kol) — верный признак кода, который через полгода не поймёт и сам автор.
Не меняйте имена экспортных процедур и функций в доработанных типовых конфигурациях без крайней необходимости: при обновлении конфигурации сопоставление идёт по именам, и массовое переименование превратит каждое обновление в ручную работу.
Разбейте длинные процедуры
Процедура на 200–300 строк, в которой перемешаны проверки, запросы, циклы и формирование результата, — главный кандидат на упорядочивание. Признаки того, что метод пора делить: трудно придумать ему короткое имя, внутри есть блоки, отделённые пустыми строками и комментариями-заголовками, одни и те же фрагменты повторяются с небольшими вариациями.
Выделяйте фрагменты по принципу «один метод — одно действие»: проверка входных данных, получение данных запросом, обработка, формирование результата. Каждый выделенный метод получает говорящее имя и параметры вместо использования переменных «сверху». В результате основной метод читается как оглавление.
- 1Сделайте копию исходной процедуры или зафиксируйте версию в хранилище
- 2Найдите логически цельный фрагмент (например, блок запроса) и вынесите его в новую функцию с параметрами
- 3Замените фрагмент вызовом новой функции, выполните синтаксическую проверку модуля
- 4Повторите для остальных блоков, после каждого шага проверяя компиляцию
- 5Прогоните сценарий, который использует эту процедуру, и сравните результат с поведением до изменений
Не стремитесь переписать всё за один раз. Разумная тактика — «правило бойскаута»: каждый раз, когда вы дорабатываете процедуру по задаче, заодно приводите в порядок именно её. За несколько месяцев такой работы кодовая база заметно выравнивается без отдельного рискованного проекта «большого рефакторинга».
Устраните дублирование и мёртвый код
Скопированные фрагменты — скрытый источник ошибок: исправление вносится в одну копию и забывается в трёх других. Найдите дубли поиском характерных строк по всей конфигурации и замените копии вызовом одной процедуры общего модуля. Если копии слегка отличаются — выносите различия в параметры.
Мёртвый код — процедуры, которые никто не вызывает, закомментированные блоки «на всякий случай», неиспользуемые переменные. Закомментированный код удаляйте без сожаления: история изменений хранится в хранилище конфигурации, и восстановить фрагмент при необходимости можно оттуда.
Используйте области и комментарии осмысленно
Директивы #Область помогают ориентироваться в больших модулях. Типовая структура общего модуля: «ПрограммныйИнтерфейс» (экспортные методы), «СлужебныеПроцедурыИФункции» (внутренняя реализация). В модулях форм добавляются области обработчиков событий. Такое деление позволяет свернуть служебную часть и видеть «лицо» модуля.
Комментарии должны объяснять «почему», а не «что». Комментарий // увеличиваем счётчик на 1 бесполезен, а // пропускаем первую строку — в файле заголовок колонок экономит время следующему разработчику. У каждой экспортной процедуры общего модуля полезно держать короткое описание назначения и параметров.
#Область ПрограммныйИнтерфейс
// Возвращает остаток товара на складе на дату.
//
// Параметры:
// Номенклатура - СправочникСсылка.Номенклатура
// Склад - СправочникСсылка.Склады
// НаДату - Дата
//
// Возвращаемое значение:
// Число - количество в базовой единице измерения.
//
Функция ОстатокТовараНаСкладе(Номенклатура, Склад, НаДату) Экспорт
// ...
КонецФункции
#КонецОбластиПроверяйте результат и закрепляйте порядок
Любое упорядочивание завершается проверкой. Минимум — синтаксический контроль модулей в конфигураторе (меню «Конфигурация — Проверка конфигурации») с проверкой всех режимов, включая тонкий и веб-клиент, если они используются. Затем — прогон сценариев, затронутых изменениями: проведение документов, формирование отчётов, обмены.
Чтобы порядок не распадался, зафиксируйте договорённости в коротком внутреннем документе: правила именования, структура общих модулей, требования к комментариям. Для команды полезны регулярные проверки кода при помещении в хранилище и использование инструментов статического анализа, если в вашем цикле разработки применяется EDT или внешние проверки.
Как проверить, что порядок наведён
У каждого модуля понятная прикладная область и корректные флаги
Модули «ОбщегоНазначения», «Утилиты» с сотнями разнородных функций
Большинство методов умещается на 1–2 экрана и имеет одно назначение
Процедуры на 200+ строк с блоками-комментариями внутри
Повторяющаяся логика вынесена в общие процедуры
Одинаковые фрагменты встречаются в нескольких объектах
Проверка конфигурации без ошибок, ключевые операции работают как раньше
Ошибки в редко используемых режимах, изменилось поведение отчётов
Частые вопросы
С чего начать упорядочивание старой конфигурации, где беспорядок повсюду?
Начните с объектов, которые дорабатываются чаще всего: обычно это несколько документов, отчётов и два-три общих модуля. Применяйте «правило бойскаута» — приводите в порядок тот код, который трогаете по текущим задачам. Попытка переработать всё сразу почти всегда заканчивается незавершённым проектом и новыми ошибками.
Можно ли переименовывать процедуры в типовой конфигурации?
Технически можно, но делать этого не стоит: при обновлении типовой конфигурации сопоставление объектов и сравнение модулей опирается на имена, и массовые переименования превратят каждое обновление в трудоёмкую ручную работу. Свои доработки лучше выносить в отдельные общие модули с префиксом, например Преф_РаботаСЗаказами.
Как найти процедуры, которые больше никто не вызывает?
Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по имени процедуры. Учитывайте, что поиск не находит вызовы через Выполнить, ОбщегоНазначения.ВызватьФункциюКонфигурации и подписки на события — перед удалением проверьте эти механизмы. Надёжнее пометить сомнительную процедуру комментарием «кандидат на удаление» и понаблюдать за работой системы некоторое время.
Чем отличается рефакторинг от исправления ошибок?
Рефакторинг меняет только структуру кода — имена, разбиение, расположение — и не должен менять поведение системы. Исправление ошибок меняет поведение. Смешивать их в одном изменении опасно: если после правки что-то сломалось, вы не сможете быстро понять, виновата структурная правка или изменение логики. Выполняйте их раздельно и фиксируйте в хранилище отдельными версиями.
Сколько процедур должно быть в одном общем модуле?
Жёсткого ограничения нет, ориентир — единство прикладной области. Если модуль посвящён одной задаче (например, обмену с конкретным сервисом), даже несколько десятков процедур в нём уместны. Тревожный признак — когда в модуле соседствуют функции про склад, кадры и отправку почты: это повод разделить его по областям.
Нужно ли комментировать каждую строку кода?
Нет. Избыточные комментарии, дублирующие код словами, только добавляют шума и устаревают при первой же правке. Комментируйте неочевидные решения, обходные пути, причины ограничений и назначение экспортных процедур. Хорошо названная функция из десяти строк часто не нуждается в комментариях вовсе.
Что важно запомнить
Порядок в коде 1С держится на четырёх опорах: правильное размещение процедур по модулям, единый стандарт именования, короткие методы с одной ответственностью и отсутствие дублей. Работайте только через хранилище или резервную копию, не смешивайте рефакторинг с изменением логики и проверяйте результат синтаксическим контролем и прогоном ключевых сценариев.