Обработки — классический подход
Обработка — это внешний файл, который добавляет новую функциональность без изменения самой конфигурации.
Когда использовать обработки:
bsl// Пример: обработка "Групповое изменение цен" // Обработка не меняет типовые объекты, а работает с ними "снаружи" &НаСервере Процедура ИзменитьЦеныНаСервере() // Выбираем товары по условию Запрос = Новый Запрос; Запрос.Текст = " | ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Цена | ИЗ | Справочник.Номенклатура КАК Номенклатура | ГДЕ | Номенклатура.Группа = &Группа"; Запрос.УстановитьПараметр("Группа", ВыбраннаяГруппа); Результат = Запрос.Выполнить().Выбрать(); // Изменяем цены Пока Результат.Следующий() Цикл НовыйОбъект = Результат.Ссылка.ПолучитьОбъект(); НовыйОбъект.Цена = НовыйОбъект.Цена * 1.1; // +10% НовыйОбъект.Записать(); КонецЦикла; КонецПроцедуры
Плюсы обработок:
-
✅ Не мешают обновлению — при обновлении конфигурации обработки не затрагиваются
-
✅ Быстрая разработка — можно быстро сделать прототип
-
✅ Простота переноса — легко перенести в другую базу
-
✅ Изоляция — ошибка в обработке не сломает всю систему
Минусы обработок:
-
❌ Ограниченная интеграция — сложно встроить в типовые формы и процессы
-
❌ Дублирование кода — одна логика может понадобиться в разных местах
-
❌ Сложность поддержки — при изменении типовых объектов нужно править обработки
Расширения — современный подход
Расширение — это отдельный конфигурационный файл, который добавляет функциональность прямо в типовые объекты.
Когда использовать расширения:
bsl// Пример: расширение для документа "Заказ покупателя" // Добавляем новый реквизит "Срочность" и логику его использования // В модуле расширения документа &Вместо("ПриЗаписи") Процедура ПриЗаписиРасширение(Отказ) // Вызываем оригинальный метод СтандартнаяОбработка = False; Эталон.ПриЗаписи(Отказ, СтандартнаяОбработка); // Добавляем свою логику Если Объект.Срочность = Перечисления.Срочности.Срочный Тогда Объект.СрокПоставки = РабочаяДата() + 1; // Завтра КонецЕсли; КонецПроцедуры // Добавляем новую процедуру &После("Провести") Процедура ПослеПроведения() Если Объект.Срочность = Перечисления.Срочности.Срочный Тогда // Отправляем уведомление менеджеру ОтправитьУведомлениеОСрочномЗаказе(Объект.Ссылка); КонецЕсли; КонецПроцедуры
Плюсы расширений:
-
✅ Глубокая интеграция — можно менять формы, модули, реквизиты
-
✅ Единая логика — код находится в одном месте
-
✅ Прозрачность — пользователь не видит разницы между типовой и доп. функциональностью
-
✅ Легкость сопровождения — вся доработка в одном месте
Минусы расширений:
-
❌ Сложность обновления — при обновлении типовой конфигурации могут возникнуть конфликты
-
❌ Требует квалификации — нужно понимать архитектуру расширений
-
❌ Риск поломки — ошибка может повлиять на работу типовых объектов
Практические примеры выбора
Пример 1: Отчет для отдела маркетинга
bsl// ЛУЧШЕ ОБРАБОТКА - потому что: // - Отчет не связан с бизнес-логикой // - Нужен только одному отделу // - Часто меняются требования // Обработка "Анализ продаж по регионам" // Простое подключение, легкие изменения
Пример 2: Дополнительные поля в документе
bsl// ЛУЧШЕ РАСШИРЕНИЕ - потому что: // - Нужно интегрировать в типовой процесс // - Поля должны быть везде где используется документ // - Логика связана с бизнес-процессом // Расширение документа "Реализация" // Добавляем реквизиты: "Менеджер", "Источник заказа" // Добавляем логику расчета бонусов менеджеру
Пример 3: Сложный расчет
bsl// НЕЙТРАЛЬНО - можно оба варианта // Вариант 1: Обработка "Калькулятор цен" // + Быстро сделать, легко тестировать // - Нужно отдельно запускать // Вариант 2: Расширение для справочника "Номенклатура" // + Интегрировано в рабочий процесс // - Сложнее разрабатывать и отлаживать
Сравнительная таблица
| Критерий | Обработки | Расширения |
|---|---|---|
| Влияние на обновление | Минимальное | Возможны конфликты |
| Скорость разработки | Быстро | Медленнее |
| Интеграция с системой | Поверхностная | Глубокая |
| Сложность сопровождения | Проще | Сложнее |
| Гибкость | Высокая | Ограниченная |
| Безопасность | Выше | Ниже |
Чек-лист выбора
Выбирайте ОБРАБОТКУ когда:
-
Функциональность нужна временно
-
Задача решается "рядом" с основной системой
-
Пользователи сами решают когда использовать
-
Нужно быстро протестировать идею
-
Часто меняются требования
Выбирайте РАСШИРЕНИЕ когда:
-
Функциональность становится частью системы
-
Нужно изменить типовые формы или процессы
-
Доработка критична для бизнеса
-
Требуется глубокая интеграция
-
Изменения постоянные и стабильные
Советы по миграции
Из обработки в расширение:
bsl// Было в обработке: Процедура РассчитатьСтавкиВОбработке() // Код расчета... КонецПроцедуры // Стало в расширении: &Вместо("РассчитатьСтавки") Процедура РассчитатьСтавкиРасширение() // Старая логика из обработки + интеграция СтандартнаяОбработка = Ложь; Эталон.РассчитатьСтавки(СтандартнаяОбработка); // Дополнительная логика Если Не СтандартнаяОбработка Тогда РассчитатьДополнительныеСтавки(); КонецЕсли; КонецПроцедуры
Заключение
Золотые правила:
-
Начинайте с обработок для прототипов и временных решений
-
Переходите на расширения когда функциональность стабилизировалась
-
Думайте об обновлениях — чем сложнее доработка, тем вероятнее конфликты
-
Учитывайте компетенции команды — расширения требуют больше опыта
Правильный выбор между обработками и расширениями сэкономит вам сотни часов на поддержке и обновлениях. Начинайте с простого, усложняйтесь постепенно!
