Блокировка параллельного создания новых документов, контроль уникальности

1. mavlenkov 26.11.22 22:08 Сейчас в теме
Приветствую.
Через веб-сервис поступают заказы. Параллельно могут единовременно приходить несколько одинаковых заказов из которых в базу нужно записать только один. Насколько я понял, для того чтобы заблокировать параллельное создание новых документов для обеспечения контроля уникальности необходимо использовать транзакции, но нигде не могу найти пример, каким образом это реализуется. Просьба помочь самым простым примером или ссылкой на описание чего-либо подобного.
Вот так сейчас реализована функция веб-сервиса, которая создаёт документ:
Функция НайтиСоздатьДокументЗаказ(Идентификатор, ДатаЗаказа)
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДокументЗаказ.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.ДокументЗаказ КАК ДокументЗаказ
	|ГДЕ
	|	ДокументЗаказ.Идентификатор = &Идентификатор
	|	И НЕ ДокументЗаказ.ПометкаУдаления";
	Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка.ПолучитьОбъект();
	Иначе
		НовыйДокументЗаказ = Документы.ДокументЗаказ.СоздатьДокумент();
		НовыйДокументЗаказ.Дата = ДатаЗаказа;
		НовыйДокументЗаказ.УстановитьНовыйНомер();
		НовыйДокументЗаказ.ВремяСоздания = ТекущаяДатаСеанса();
		НовыйДокументЗаказ.Идентификатор = Идентификатор;
		НовыйДокументЗаказ.СтатусЗаказа = Перечисления.СтатусыЗаказов.ЗаказПолучен;
		Возврат НовыйДокументЗаказ;
	КонецЕсли;
КонецФункции
Показать
Romeo_1c_programmer; +1 Ответить
По теме из базы знаний
Найденные решения
7. minarenko 27.11.22 08:55 Сейчас в теме
(6) Перед Возврат НовыйДокументЗаказ; запиши документ и все. Никаких тут блокировок не надо.
mavlenkov; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. user1826630 26.11.22 22:31 Сейчас в теме
(1)
Параллельно могут единовременно приходить несколько одинаковых заказов из которых в базу нужно записать только один.

Что значит "одинаковых"? По каким критериям ты это определяешь?
5. mavlenkov 27.11.22 08:11 Сейчас в теме
9. user1826630 27.11.22 13:31 Сейчас в теме
(5) А как у этих заказов получается одинаковый идентификатор?
3. user1826630 26.11.22 22:32 Сейчас в теме
(1)
Насколько я понял, для того чтобы заблокировать параллельное создание новых документов для обеспечения контроля уникальности необходимо использовать транзакции
Неправильно понял.
6. mavlenkov 27.11.22 08:24 Сейчас в теме
(3) Скажем так, транзакции или управляемые блокировки. Бог с ними с транзакциями, нет понимания как заблокировать создание новых документов при помощи управляемых блокировок и где это лучше делать, в веб-сервисе или модуле документа?

Думаю сделать что-то вроде такого:

БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировки = БлокировкаДанных.Добавить("Документ.ДокументЗаказ");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор);

Нет, однако, уверенности, что это то, что нужно.
Проблема ещё в том, что у меня ограничены возможности отладки - я не могу воспроизвести единовременное поступление одинаковых заказов, а экспериментировать на рабочей базе плохая идея.
7. minarenko 27.11.22 08:55 Сейчас в теме
(6) Перед Возврат НовыйДокументЗаказ; запиши документ и все. Никаких тут блокировок не надо.
mavlenkov; +1 Ответить
8. mavlenkov 27.11.22 12:22 Сейчас в теме
11. mavlenkov 27.11.22 17:32 Сейчас в теме
(7) Похоже, это решило проблему. Спасибо.
10. mavlenkov 27.11.22 17:10 Сейчас в теме
(9) Генерируется внешней информационной системой.
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день