Найти в Дзене

Расширения | 1С в примерах

Вам когда-нибудь говорили: «Не трогай типовую, потом обновлять замучаешься»? И при этом заказчик хочет новую кнопку, новый реквизит и свой отчёт. Знакомая ловушка. Я лично попадал в неё раз пять, не меньше — и каждый раз это был один и тот же разговор с тимлидом и одни и те же страдания при обновлении. Расширения конфигурации в 1С — именно тот инструмент, который позволяет выйти из неё без потерь. Разберём на реальных примерах: что такое расширения, где они спасают, а где стреляют в ногу. Расширение конфигурации — это отдельный слой над основной конфигурацией. Вы добавляете объекты, реквизиты, модули — и всё это живёт отдельно от типовой. Обновление 1С:Бухгалтерии или ЗУП не трогает ваши доработки. До появления расширений (платформа 8.3.9+) у разработчика было два пути: Расширения дали третий путь: доработка встроена в конфигурацию, но не ломает обновления. Для тех, кто сопровождает типовые базы — это реально изменило правила игры. Типичные задачи, которые решают расширениями: Допусти
Оглавление
Расширения 1С
Расширения 1С

Расширения 1С: как добавить функционал без изменения типовой конфигурации — пошагово

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

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

Что такое расширения конфигурации 1С и зачем они нужны

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

До появления расширений (платформа 8.3.9+) у разработчика было два пути:

  • Влезть в типовой код и молиться при каждом обновлении
  • Написать внешнюю обработку и объяснять пользователям, где её найти

Расширения дали третий путь: доработка встроена в конфигурацию, но не ломает обновления. Для тех, кто сопровождает типовые базы — это реально изменило правила игры.

Типичные задачи, которые решают расширениями:

  • Добавить реквизит в справочник или документ
  • Вставить свою проверку при проведении документа
  • Добавить кнопку на форму
  • Переопределить поведение типового модуля
  • Добавить новый справочник или регистр

Как создать расширение в 1С — пример с добавлением реквизита

Допустим, заказчик хочет хранить в справочнике «Контрагенты» поле «Категория клиента» (VIP, обычный, проблемный). В типовой 1С:Бухгалтерии такого реквизита нет.

Открываем конфигуратор → меню «Конфигурация» → «Расширения конфигурации» → создаём новое расширение. Называем, например, «ДоработкиКлиент_v1».

Дальше в дереве расширения находим «Справочники» → добавляем «Контрагенты» (заимствуем объект). Добавляем реквизит «КатегорияКлиента» с типом «Строка».

Теперь добавляем логику. В модуле объекта расширения пишем:

// Расширение справочника Контрагенты
// Файл: РасширениеСправочникКонтрагенты.МодульОбъекта

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

Обратите внимание на аннотацию &ПередЗаписью — это ключевой момент расширений. Именно через аннотации вы встраиваетесь в типовые обработчики, не трогая исходный код.

Аннотации расширений 1С — главный инструмент разработчика

Аннотации определяют, как ваш код встраивается в типовой. Без понимания аннотаций расширение превратится в источник багов.

Основные аннотации:

  • &Перед — ваш код выполняется ДО типового. Можно поставить Отказ = Истина и прервать выполнение
  • &После — ваш код выполняется ПОСЛЕ типового. Удобно для логирования
  • &Вместо — ваш код ЗАМЕНЯЕТ типовой полностью. Осторожно: при обновлении типовой логики вы её не получите!

Пример с аннотацией &Вместо — переопределяем проверку заполнения:

&Вместо("ОбработкаПроверкиЗаполнения")
Процедура Расш_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Сначала вызываем типовую логику
ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);

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

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

Подводные камни расширений 1С — о чём молчат на курсах

Расширения — не серебряная пуля. За несколько лет работы с ними на реальных проектах я собрал список граблей, на которые наступают все.

Граблина №1: расширение не обновляется вместе с конфигурацией. Вы написали &Вместо для метода проведения. Вышло обновление типовой — в методе появилась важная логика. Вы её не получили. Итог: расхождение с типовой на несколько релизов, и никто не понимает почему.

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

Граблина №2: конфликт нескольких расширений. Два расширения подписались на один обработчик через &Вместо. Порядок выполнения непредсказуем. Особенно весело, когда расширения писали разные подрядчики.

Граблина №3: реквизиты расширения в запросах. Реквизиты, добавленные через расширение, доступны в запросах — но с нюансами:

// Запрос к реквизиту расширения — правильно
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка,
| Контрагенты.Наименование,
| Контрагенты.РасшДоработкиКлиент_КатегорияКлиента КАК Категория
|ИЗ
| Справочник.Контрагенты КАК Контрагенты";
// Префикс расширения добавляется автоматически!
// Формат: <ПрефиксРасширения>_<ИмяРеквизита>

Реквизиты расширения в запросах получают префикс имени расширения. Если вы переименуете расширение — все запросы сломаются. Называйте расширения сразу правильно и не меняйте имена.

Граблина №4: расширение с безопасным режимом. По умолчанию расширение работает в безопасном режиме — нет доступа к файловой системе, COM-объектам, внешним соединениям. Если нужен полный доступ — явно отключайте безопасный режим в свойствах расширения. Но это снижает безопасность, помните об этом.

Best Practice: как правильно организовать расширения в 1С

На проектах с несколькими расширениями хаос наступает быстро. Я видел базу одной производственной компании — 50 сотрудников, три подрядчика за два года — где в одном расширении «ВсёДляВсего» было намешано буквально всё: и продажи, и склад, и кадры. Отключить нельзя ничего, понять что к чему — нереально. Вот правила, которые реально работают:

  • Одно расширение — одна задача. Не валите всё в одно расширение «ДоработкиВсего». Лучше «ДоработкиПродажи», «ДоработкиСклад» — проще сопровождать и отключать
  • Соглашение об именовании. Префикс расширения = уникальный код проекта. Например «КДР» для Koderion. Все реквизиты будут «КДР_КатегорияКлиента» — сразу понятно, откуда
  • Избегайте &Вместо там, где можно обойтись &После или &Перед. Меньше &Вместо — меньше проблем при обновлении
  • Документируйте, что переопределено. Список всех &Вместо в README расширения — обязательно
  • Тестируйте расширение после каждого обновления типовой. Особенно методы, которые вы переопределили

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

// Пример правильного комментария в модуле расширения
// Расширение: КДР_ДоработкиКонтрагенты
// Автор: Иванов И.И., Koderion
// Дата: 2026-03-15
// Задача: Добавить категоризацию контрагентов (тикет #KDR-142)
// Переопределённые методы: ОбработкаПроверкиЗаполнения (&Вместо)
// При обновлении проверить: логику заполнения реквизитов в типовой

&Вместо("ОбработкаПроверкиЗаполнения")
Процедура КДР_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
// ... логика расширения
КонецПроцедуры

Итог: расширения 1С — мощно, но требует дисциплины

Расширения конфигурации — один из лучших инструментов современной разработки на 1С. Они реально решают проблему «типовая vs доработки», которая мучила всех годами.

Я считаю, что большинство проблем с расширениями — не технические, а организационные. Бесконтрольные расширения с десятками &Вместо, без документации и соглашений — это бомба замедленного действия. Через год никто не поймёт, почему документ не проводится. И это не преувеличение — именно такую картину я наблюдал в 3 из 5 проектов за последний год, куда приходил уже «на починку».

Используйте расширения осознанно: минимум &Вместо, чёткое именование, документация, git. Тогда это действительно работает.

Если вам нужен специалист, который умеет грамотно работать с расширениями и не превратит вашу базу в минное поле — загляните на koderion.ru. Там можно найти проверенных 1С-разработчиков с реальными кейсами, которые знают разницу между &После и &Вместо не из учебника.

А как вы организуете расширения на своих проектах? Используете одно большое или дробите по задачам? И сколько &Вместо в вашем самом «страшном» расширении? 😄 Пишите в комментариях — интересно сравнить подходы 👇