Паттерн Repository — один из ключевых инструментов, который помогает разработчикам 1С разделять бизнес-логику и доступ к данным. Этот подход широко используется в классическом .NET и Java, а в 1С он становится актуальным при построении сложных прикладных решений: ERP, документооборот, интеграции с CRM.
В статье мы разберём:
- что такое Repository в контексте 1С,
- как его реализовать,
- примеры кода,
- подводные камни,
- и как использовать этот подход в реальных проектах в России и Казахстане.
Что такое Repository и зачем он нужен
Repository — это прослойка между предметной областью (Domain) и хранилищем данных (обычно база SQL, но в случае 1С — это объекты платформы).
Задача репозитория — скрыть детали хранения и предоставить чистый интерфейс для работы с данными.
Пример на пальцах
- Без Repository: модуль документа напрямую делает запросы к базе.
- С Repository: документ обращается к объекту-репозиторию, а тот уже сам решает, как получить данные (через
Запрос,ВыборкуИзРегистрили API).
Структура Repository в 1С
Обычно реализация включает:
- Интерфейс — контракт методов (
НайтиПоКоду,Сохранить,Удалить). - Класс-репозиторий — реализует интерфейс.
- Domain-логика — использует репозиторий, не зная, как именно данные хранятся.
Пример реализации Repository в 1С
Создадим репозиторий для работы с клиентами.
Интерфейс (условно)
Интерфейс IКлиентыRepository
Функция НайтиПоИНН(ИНН) Экспорт;
Процедура Сохранить(Клиент) Экспорт;
КонецИнтерфейса
Реализация
ОбщийМодуль КлиентыRepository
Функция НайтиПоИНН(ИНН) Экспорт
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Клиенты.Ссылка,
| Клиенты.Наименование
|ИЗ Справочник.Клиенты КАК Клиенты
|ГДЕ Клиенты.ИНН = &ИНН");
Запрос.УстановитьПараметр("ИНН", ИНН);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Ссылка;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Процедура Сохранить(Клиент) Экспорт
НовыйКлиент = Справочники.Клиенты.СоздатьЭлемент();
НовыйКлиент.Наименование = Клиент.Наименование;
НовыйКлиент.ИНН = Клиент.ИНН;
НовыйКлиент.Записать();
КонецПроцедуры
Использование в бизнес-логике
Клиент = Новый Структура("Наименование,ИНН", "ООО Ромашка", "7701234567");
КлиентыRepository.Сохранить(Клиент);
Найденный = КлиентыRepository.НайтиПоИНН("7701234567");
Если Найденный <> Неопределено Тогда
Сообщить("Клиент найден: " + Найденный.Наименование);
КонецЕсли;
Таблица: плюсы и минусы Repository в 1С
| Преимущество | Недостаток |
|---|---|
| Чистая архитектура: бизнес-код не зависит от БД | Увеличение количества модулей |
| Легче тестировать: можно подменять репозитории | Для маленьких проектов избыточно |
| Упрощает миграцию и интеграции | Требует дисциплины команды |
| Код становится понятнее новым разработчикам | Ошибки проектирования приводят к дублированию |
Подводные камни внедрения в 1С
- Смешивание слоёв
Репозиторий не должен заниматься бизнес-логикой — только доступом к данным. - Избыточность
Для простых справочников и документов избыточно создавать репозитории. - Отсутствие интерфейсов в платформе
В 1С нет строгих интерфейсов, поэтому чаще используют общие модули и соглашения по именованию. - Трудности с обновлением типовых конфигураций
Если внедрять Repository в нетиповую доработку, нужно учитывать совместимость с обновлениями.
Где полезен Repository
- Крупный ритейл: интеграции 1С:УТ с e-commerce (Bitrix, InSales, Shopify).
- Промышленные предприятия: 1С:ERP с несколькими базами данных.
- Медицина и образование: хранение карточек пациентов и студентов в разных подсистемах.
- Финансы: работа с большими объёмами транзакций, где нужна чёткая прослойка.
Паттерн Repository в 1С помогает сделать архитектуру более гибкой и поддерживаемой. Но использовать его стоит там, где система действительно сложная. В небольших проектах проще оставить доступ к данным напрямую.
Главный совет: не перегружайте архитектуру, но и не бойтесь внедрять современные практики — 1С отлично их поддерживает.