Процедуры работы с транзакциями
Понятие транзакций соответствует общепринятому пониманию транзакций баз данных. В системе 1С:Предприятие транзакции активно используются самой системой при записи различной информации. Транзакция гарантирует неизменность информации в базе данных для других пользователей до ее завершения и целостное сохранение информации.
Возможность использования транзакций в языке должна применяться только в тех программных модулях, которые выполняют запись изменений в информационной базе (в справочниках, константах, документах). Их не следует использовать в алгоритмах формирования движений документов. Транзакции также не стоит использовать при одиночных записях. Типичный пример когда следует использовать транзакции – это процедура, которая будет во всех элементах справочника менять некоторый параметр.
Для начала транзакции используется процедура НачатьТранзацию. Для фиксации сделанных в процессе выполнения изменений применяется процедура ЗафиксироватьТранзакцию. Для отмены изменений, сделанных в процессе выполнения транзакции – процедура ОтменитьТранзакцию. Таким образом, все действия с базой данных, выполняемые внутри скобок: НачатьТранзакцию – ЗафиксироватьТранзацию собственно и являются транзакцией.
Действия, заключенные в транзакцию, выполняются быстрее. Особенно существенно разница проявляется в многопользовательском режиме и особенно существенна разница для операций, связанных с изменением содержимого базы данных, хотя и для операций только чтения разница может быть в разы.
Замечание. В Модуле документа (при проведении документов) в предопределенных процедурах ОбработкаПроведения и ОбработкаУдаленияПроведения система сама по умолчанию выполняет все действия через транзакцию, поэтому никаких специальных действий в этих предопределенных процедурах предпринимать не нужно.
Транзакция, выполняемая одним пользователем может мешать выполнению транзакций другими пользователями. Таким образом, важно соизмерять получающееся ускорение от применения транзакций с возможными побочными эффектами. Другими словами, возможно, что ускорение таково, что операция начинает выполняться столь быстро, что можно пренебречь влиянием на других пользователей (например, ожидание секунду – другую), а может это будет приводить к конфликтам – все зависит от конкретного алгоритма конфигурации.
При обработке транзакции (в том числе в Модуле документа) не следует использовать элементы интерактивного управления (например, операторы Предупреждение, Вопрос, ВвестиЧисло и т. п.), т. к. в этом случае при открытой транзакции система ожидает отклика пользователя, а это может препятствовать нормальной работе других пользователей (в результате документы у всех остальных пользователей в этот момент могут не проводиться). Если в конфигурации необходимо при проведении документа выдавать пользователю некоторые сообщения, то следует использовать операторы Сообщить или Состояние.