Собственно вопрос хотелось бы рассмотреть на примере.
Последовательность действий:
1. Начинаем транзакцию.
2. Создаём новый элемент справочника/документа.
3. Записываем.
4. До завершения транзакции ставим точку остановки.

А хохма вот в чём. Этот записанный элемент справочника/документа мы можем найти в базе и более того, я бы мог понять если бы он был бы доступен только из сеанса который начал транзакцию, но почему он доступен даже из другого сеанса?
Как то не корректно получается:
1. Начинается транзакция (пусть будет долгая по времени).
2. Записываются какие то элементы.
3. Ничего не подозревающий пользователь, видит допустим новый элемент справочника и устанавливает его в документ, документ проводит.
4. Транзакция по каким то причинам отменяется.
5. Получается битая ссылка в документе.

Релиз платформы: 1С:Предприятие 8.2 (8.2.19.116).

Знает кто по этому поводу что то?

p/s/ Около года назад делал похожие тесты, записанные элементы до завершения транзакции нельзя было получить из базы.
---
DoctorRoza,
Частично правильный,
да проблема грязного чтения налицо.
Но управлять должна в данном случае платформа, не зависимо от уровня изоляции.

Вообщем в 8.2, платформа при отображении элемента транслирует запросы с NOLOCK
8.3 без NOLOCK. Поэтому в 8.2 мы видим этот элемент, в 8.3 нет.

Соответственно косяк платформы. Так как разработчик не должен вручную указывать управляемую блокировку на такие объекты, платформа должна сама отрабатывать (как в 8.3)
---
Xatori111,
Глобальный контекст.НачатьТранзакцию (Global context.BeginTransaction)
Глобальный контекст (Global context)
НачатьТранзакцию (BeginTransaction)
Синтаксис:

НачатьТранзакцию(<РежимБлокировок>)
Параметры:

<РежимБлокировок> (необязательный)

Тип: РежимУправленияБлокировкойДанных.
Уста..... яемый.
Значение по умолчанию: Автоматический.
Описание:

Открывает транзакцию. Транзакция предназначена для записи в информационную базу согласованных изменений. Все изменения, внесенные в информационную базу после начала транзакции, будут затем либо целиком записаны, либо целиком отменены.

Похоже, работает только на отмену изменений.
---
Ну а если вместо отладки в обычном режиме попробовать до завершения транзакции вывести модальное окно и проверить под другим пользователем наличие объекта?
---
PetroP, Присутствует. Ставил пустой цикл на 2 минуты и пробовал получить из другого сеанса элемент справочника.
---
Добавлю вознаграждение за знания :).
---
Конфа хоть не типовая или не на БСП?
---
PetroP, Вряд ли имеет значение конфа (Управление производственным предприятием, редакция 1.3 (1.3.57.1), переписанная вдоль и поперёк, но обновляется регулярно), имхо это платформа косячит.
---
Xatori111, ну почему же? Может там транзакция фиксируется в модуле объекта или еще где. Попробовал на своей тестовой - проблема не подтвердилась.
---
а код можете выложить?
---
Babuin, Кода мало, не стоит даже внимания :)
Процедура КнопкаВыполнитьНажатие(Кнопка)
 НачатьТранзакцию();
 НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
 НовыйЭлемент.Записать();
 // Суда добавлял цикл идущий 2 минуты, для того что бы не ставить остановку и всё прошло в штатном режиме.
      ЗафиксироватьТранзакцию(); // Точка остановки
КонецПроцедуры

(9) PetroP, Сделали как я я написал?
Какая разница где транзакция фиксируется если процесс поиска осуществляется до её фиксирования или отмены.
---
Xatori111, 8.2.19.116, сделал обработку:

```1c
    НачатьТранзакцию();
    справочник1 = Справочники.Справочник1.СоздатьЭлемент();
    справочник1.Код = "000000006";
    справочник1.Наименование = "Тест";
    справочник1.Записать();
    Если Вопрос("зафиксировать?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
    ЗафиксироватьТранзакцию();
    Иначе
    ОтменитьТранзакцию();
    КонецЕсли;
```

Обработку запускаю под "юзер1". Пока висит вопрос, в сеансе пользователя "юзер2" открываю справочник1 - нет создаваемого элемента. Сеансы не в режиме отладки.
---
PetroP, Код ваш, изменил наименование только. Результат на скрине.
---
Xatori111, еще раз проверил также в режиме отладки, также менял свойства конфигурации "режим управления блокировками данных" - результат один: проблема не подтверждается. Еще надо добавить, что база у меня файловая.
Так что, думаю, надо копать код, который выполняется в обработчиках событий. Либо протестировать на клиент-серверном варианте. Позже попробую на скл и постгре.
---
PetroP, У меня клиент-сервер, за файловую не могу сказать, не тестировал.
---
В любом случае надо увидеть код.
---
Да подтверждаю в 8.2.19.116

НачатьТранзакцию();

НовыйОбъект = Справочники.Тест.СоздатьЭлемент();
НовыйОбъект.Наименование = "TEST";
НовыйОбъект.Записать();

-------------Элемент создан

ЗафиксироватьТранзакцию();

такой же код в 8.3 показывал что элемент создается только после
ЗафиксироватьТранзакцию();
---
Babuin, о 8.3 речи не идёт (там всё нормально), я написал версию платформы как раз за этим.

Причём мало того что элемент создан, он доступен из других сеансов, в этом и косяк.
---
Xatori111,

я собственно и подтвердил что да в в 8.2.19.116 элемент создается и отображается в других сеансах. В 8.3 все ок. Соответственно косяк платформы.
Причем если смотреть на уровне бд, то действия ничем не отличаются
BEGIN TRAN
INSERT
SELECT
COMMIT
на обоих платформах одинаково.
---
((12) Xatori111, А какой сервер БД используется, или это на файловой версии?
---
Воспроизводится на 8.3.5.1383. Созданный элемент был выбран в документе до отмены транзакции. После отмены его представление в форме сохраняется, при попытке открытия система выдает сообщение "Объект не найден!". В регистрах битая ссылка.
---
Степной, у меня на 8.3.5.1248 все ок. Элемент создается только после ЗафиксироватьТранзакцию();
---
Не знаю. Проверил еще раз, воспроизводится.
---
В 8.3 в управляемом режиме используется READ COMMITTED SNAPSHOT, а в 8.2 READ COMMITTED. В 8.2 управляемом режиме нужно использовать s блокировку, т.е. запретить чтение остальным пользователям до конца транзакции.
---
Пост (18) - это правильный ответ! "Грязное" чтение.
---
DoctorRoza,
Частично правильный,
да проблема грязного чтения налицо.
Но управлять должна в данном случае платформа, не зависимо от уровня изоляции.

Вообщем в 8.2, платформа при отображении элемента транслирует запросы с NOLOCK
8.3 без NOLOCK. Поэтому в 8.2 мы видим этот элемент, в 8.3 нет.

Соответственно косяк платформы. Так как разработчик не должен вручную указывать управляемую блокировку на такие объекты, платформа должна сама отрабатывать (как в 8.3)
---
Babuin, это не косяк платформы, это грязное чтение. Так организовано чтение в списках (и отчетах) в клиент-серверном варианте на 8.2. В противном случае получались бы ожидания на блокировках. В 8.3 по умолчанию используется Read Committed Snapshot, читается версия данных на момент перед открытием транзакции с записью, и поэтому в 8.3 такое поведение не воспроизводится. Кстати, 8.2 тоже можно перевести в Read Committed Snapshot.
---
newgluk, да согласен, упустил момент что 8.3 по умолчанию в SHAPSHOT работает.
(32) транзакциями SQL рулит SQL, транзакция 1С нет такой сущности.
---
Предположу...
НовыйЭлемент.Записать(); открывает "вложенную" транзакцию, которая корректно завершается и фиксируется и возможно в этот момент происходит запись непосредственно в БД со снятием исключительной блокирвки, а не в транзакционный кэш. Так как 1С не поддерживает в полном смысле вложенности транзакций, то при откате внешней транзакции откатывается так же внутренняя, которая тем не менее была как-то зафиксированна.
---
SPID, и я то же подозреваю. Надо проверить на не типовой.
---
SPID, (26) PetroP,
НовыйЭлемент.Записать() не отрывает вложенную транзакцию. Там одна транзакция, можете проверить в профайлере.
---
Babuin, вложенная в кавычках, 1С вроде не использует вложенные транзакции СУБД. Это одинэсовская вложенная транзакция :)
---
понятно, но у 1С нет такой сущности как "одинэсовская транзакция", все транзакции сиквельные. НачатьТранзакцию()=BeginTran и т.д
---
Babuin, при управляемом режиме блокировками и транзакциями рулить сервер 1С