Можно ли делать транзакцию на клиенте в 1С?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Транзакции на клиенте в 1С: прямой ответ
Нет, нельзя начинать транзакцию на толстом клиенте. Попытка выполнить НачатьТранзакцию() в модуле формы или стандартного модуля клиента приведёт к ошибке: «Операция не поддерживается в контексте клиента».
Почему это ограничение
Транзакции — это серверный механизм управления целостностью данных БД. Клиент не имеет прямого доступа к БД и работает через серверный сеанс. Поэтому:
- Транзакции работают только на сервере — все ACID операции обрабатываются на стороне сервера
- Клиент изолирован от БД — в архитектуре «толстого клиента» весь доступ идёт через серверные методы
- Сетевые ограничения — транзакция требует синхронного выполнения на одном процессе, клиент работает асинхронно
Как правильно использовать транзакции
Транзакции нужно переносить в серверные методы:
// ❌ НЕПРАВИЛЬНО — на клиенте
НачатьТранзакцию();
Справочник.Товары.Создать();
ЗафиксироватьТранзакцию();
// ✅ ПРАВИЛЬНО — вызов серверного метода
Результат = СоздатьТоварНаСервере(Наименование, Цена);
В модуле сервера:
&НаСервере
Функция СоздатьТоварНаСервере(Наименование, Цена)
НачатьТранзакцию();
Попытка
НовыйТовар = Справочник.Товары.Создать();
НовыйТовар.Наименование = Наименование;
НовыйТовар.Цена = Цена;
НовыйТовар.Записать();
ЗафиксироватьТранзакцию();
Возврат НовыйТовар.Ссылка;
Исключение
ОтменитьТранзакцию();
Возврат Неопределено;
КонецПопытки;
КонецФункции
Когда нужны транзакции на сервере
- Множественные изменения — когда нужно либо полностью применить изменения, либо откатить всё
- Проверка условий — перед записью объекта проверяем наличие связанных данных
- Исключения — гарантируем откат при ошибке
Альтернативы для клиента
Если нужна группировка операций на клиенте, используй:
- Пакетная обработка — собери данные на клиенте и отправь в один вызов сервера
- Единая служба обновления — одна серверная функция делает все изменения атомарно
- Предварительная валидация — проверь данные на клиенте до отправки на сервер
Важный момент про WebSocket и тонкий клиент
В тонком клиенте ситуация подобна: браузер не может начать транзакцию напрямую, но серверная логика остаётся той же. Всё решается на стороне сервера через REST API или RPC методы.
Вывод: Транзакции в 1С — это серверный механизм. Клиент может только инициировать операцию через вызов серверного метода, где уже обрабатывается вся логика с транзакциями, откатами и проверками.