|
Блокировка регистра сведений на добавление данных | ☑ | ||
---|---|---|---|---|
0
Gera1t
10.04.24
✎
15:20
|
Здравствуйте! Есть регистр сведений "ШтрихКодыУпаковок".
Перед тем как добавить запись в этот регистр, проверяю штрихкод на уникальность. Но возникает иногда такая ситуация, когда с 2 компьютеров это действие происходит одновременно. Что бы этого избежать добавил вот такой код, для блокировки регистра: НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ШтрихКодыУпаковок"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.ИсточникДанных = Результат; //ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Штрихкод", "Штрихкод"); БлокировкаДанных.Заблокировать(); ЗафиксироватьТранзакцию(); Но это не работает. Подскажите пожалуйста, как правильно реализовать блокировку регистра для добавления данных. Спасибо! |
|||
1
vis
10.04.24
✎
15:22
|
У вас с двух компов добавляют одинаковые ШК ?
|
|||
2
Gera1t
10.04.24
✎
15:25
|
(1) Не совсем так, но примерно. Я сделал дополнительный контроль, и одинаковые штрихкоды создать не возможно, но получилось как то сложно, хотелось бы решить проблему проще.
|
|||
3
Gera1t
10.04.24
✎
15:30
|
Получается так: с одного компьютера добавляется новый штрихкод, программа его генерит (генерит путем добавления к последнему текущему 1) и он записывается в регистр, в этот же момент с другого компьютера генериться еще один штрихкод, точно такой же, и это происходит в промежуток времени между генерацией нового штрихкода и записью его в регистр
|
|||
4
СвинТуз
10.04.24
✎
15:34
|
"Результат"
По ресурсу что ли работаешь? Или по реквизиту? |
|||
5
СвинТуз
10.04.24
✎
15:36
|
(0)
Блокируй весь регистр. Без отборов. Чего мелочиться? Интенсивная запись идет с большими расчетами? |
|||
6
Gera1t
10.04.24
✎
15:41
|
(4) По измерению
(5) Действий много с разных компьютеров, расчетов не много. |
|||
7
СвинТуз
10.04.24
✎
15:44
|
(6)
Что то оно как то не того. я хз. Сравни ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; ЭлементБлокировки.ИспользоватьИзИсточникаДанных( "Номенклатура", "Номенклатура"); и ЭлементБлокировки.ИсточникДанных = Результат; //ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Штрихкод", "Штрихкод"); Комент меня смущает. |
|||
8
НастяПРО
10.04.24
✎
15:54
|
(7) СВИНДАМА??? ИЛИ СВИНВАЛЕТ?
|
|||
9
vicof
10.04.24
✎
15:57
|
(8)Просвинастя
|
|||
10
НастяПРО
10.04.24
✎
15:58
|
(9) Саша лох, трусы в горох, сиськи по колено!!!!
|
|||
11
vicof
10.04.24
✎
16:00
|
Забаньте ее уже
|
|||
12
НастяПРО
10.04.24
✎
16:00
|
(11) Я тебя щас забаню, малолетний дебил
|
|||
13
НастяПРО
10.04.24
✎
16:00
|
(11) Я тебя щас забаню, малолетний дебил
|
|||
14
НастяПРО
10.04.24
✎
16:01
|
(11) СписокЗначений
|
|||
15
НастяПРО
10.04.24
✎
16:01
|
(11) Я тебя щас забаню, малолетний дебил
Я тебя щас забаню, малолетний дебил |
|||
16
НастяПРО
10.04.24
✎
16:01
|
Я тебя щас забаню, малолетний дебил (11)
|
|||
17
timurhv
10.04.24
✎
16:11
|
(0) Нет там СпискаЗначений:
ЭлементБлокировкиДанных.ИсточникДанных Использование: Чтение и запись. Описание: Тип: РезультатЗапроса, Табличная часть, ТаблицаЗначений. Источник данных, содержащий значения полей для установки условий на поля пространства блокировки. https://www.koderline.ru/expert/instruktsii/article-upravlyaemye-blokirovki/ 3.Установка условия блокировки записей с помощью источника данных БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ОстаткиТоваровНаСкладах"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("Склад", Склад); ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Данные для установки ограничений на поля этого элемента блокировки – это таблица значений "СписокНоменклатуры". Блокируем в данных регистра "ОстаткиТоваровНаСкладах" все записи, у которых значение измерения "Склад" равно значению переменной "Склад", а значение измерения "Номенклатура" равно какому-либо значению из колонки "Номенклатура", указанного источника данных. В качестве источника данных можно указывать результат запроса, и для последнего примера можно было бы создать запрос, который бы отсекал номенклатуру, содержащую "услугу", тем самым нивелируя избыточность блокировки. |
|||
18
Sorento
11.04.24
✎
09:34
|
(16) Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. (с)Фредерик Брукс-младший
|
|||
19
ptiz
11.04.24
✎
09:56
|
(0) Надо понимать смысл блокировок.
После того как ты сделал -БлокировкаДанных.Заблокировать(); - в той же транзакции проверяй: существует ли такой же ШК. Без этого выходит, что ты просто ждешь, когда второй сеанс освободит регистр, но после освобождения там будет запись с этим ШК. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |