← Назад к вопросам

Можно ли делать транзакцию на клиенте в 1С?

1.8 Middle🔥 131 комментариев
#Блокировки и транзакции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Транзакции на клиенте в 1С: прямой ответ

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

Почему это ограничение

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

  1. Транзакции работают только на сервере — все ACID операции обрабатываются на стороне сервера
  2. Клиент изолирован от БД — в архитектуре «толстого клиента» весь доступ идёт через серверные методы
  3. Сетевые ограничения — транзакция требует синхронного выполнения на одном процессе, клиент работает асинхронно

Как правильно использовать транзакции

Транзакции нужно переносить в серверные методы:

// ❌ НЕПРАВИЛЬНО — на клиенте
НачатьТранзакцию();
Справочник.Товары.Создать();
ЗафиксироватьТранзакцию();
// ✅ ПРАВИЛЬНО — вызов серверного метода
Результат = СоздатьТоварНаСервере(Наименование, Цена);

В модуле сервера:

&НаСервере
Функция СоздатьТоварНаСервере(Наименование, Цена)
    
    НачатьТранзакцию();
    Попытка
        НовыйТовар = Справочник.Товары.Создать();
        НовыйТовар.Наименование = Наименование;
        НовыйТовар.Цена = Цена;
        НовыйТовар.Записать();
        
        ЗафиксироватьТранзакцию();
        Возврат НовыйТовар.Ссылка;
    Исключение
        ОтменитьТранзакцию();
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции

Когда нужны транзакции на сервере

  • Множественные изменения — когда нужно либо полностью применить изменения, либо откатить всё
  • Проверка условий — перед записью объекта проверяем наличие связанных данных
  • Исключения — гарантируем откат при ошибке

Альтернативы для клиента

Если нужна группировка операций на клиенте, используй:

  • Пакетная обработка — собери данные на клиенте и отправь в один вызов сервера
  • Единая служба обновления — одна серверная функция делает все изменения атомарно
  • Предварительная валидация — проверь данные на клиенте до отправки на сервер

Важный момент про WebSocket и тонкий клиент

В тонком клиенте ситуация подобна: браузер не может начать транзакцию напрямую, но серверная логика остаётся той же. Всё решается на стороне сервера через REST API или RPC методы.

Вывод: Транзакции в 1С — это серверный механизм. Клиент может только инициировать операцию через вызов серверного метода, где уже обрабатывается вся логика с транзакциями, откатами и проверками.