|
Одинаковые коды справочника | ☑ | ||
---|---|---|---|---|
0
Угрюмый73
02.10.18
✎
11:25
|
Добрый день. Платформа 8.3.11 конфигурация Бухгалтерия 3.0, сервер SQL 2008 (пользователей около 150). В конфигурацию добавлен справочник, контроль уникальности номера отключен. При генерации номера запросом определяется количество элементов, добавленных за данное число; номер = количество()+1. Так вот, периодически появляются дубли номеров, когда пользователи одновременно записывают элементы данного справочника. При этом, подпиской "ПриЗаписи" осуществляется запись в независимый регистр сведений, где код справочника является составляющей частью ресурса регистра. При этом, при записи в регистр в менеджере записи стоит контроль с помощью запроса уникальности данного ресурса. Но контроль также не срабатывает и в регистре сведений появляются записи с одинаковым значением ресурса. Понимаю, что решение связано с применением блокировок. Но данную тему только начал изучать. Во-избежании печальных результатов экспериментов на рабочей базе, может подскажете текст решения, чтобы избежать отказов при программной записи элементов справочника?
|
|||
1
Гипервизор
02.10.18
✎
11:54
|
Разрешите поинтересоваться в цельях повышения образованности - а почему "контроль уникальности номера отключен"?
|
|||
2
бомболюк
02.10.18
✎
12:05
|
Лучше всего наверное заменить справочник на документ с периодичностью нумерации "В пределах дня". Иначе считывать количество элементов и записывать новый элемент надо в транзакции с наложением эксклюзивной блокировки.
|
|||
3
ASU_Diamond
02.10.18
✎
12:08
|
(0) нах... для чего всё это сделано?
|
|||
4
d4rkmesa
02.10.18
✎
12:09
|
(0) В типовых делается с блокировкой. К примеру(из УТ10/УПП):
// Записывает в журнал регистрации событие записи ЭД. // // Параметры: // СсылкаНаЭД - ссылка на элемент справочника ЭДПрисоединенныеФайлы. // Процедура ЗаписатьСобытиеЖурналаРегистрацииПоОбменуЭД(СсылкаНаЭД) Если ТипЗнч(СсылкаНаЭД) = Тип("СправочникСсылка.ЭДПрисоединенныеФайлы") Тогда УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЖурналСобытийЭД"); ЭлементБлокировки.УстановитьЗначение("ПрисоединенныйФайл", СсылкаНаЭД); Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЕСТЬNULL(МАКСИМУМ(ЖурналСобытийЭД.НомерЗаписи), 0) + 1 КАК НомерЗаписи |ИЗ | РегистрСведений.ЖурналСобытийЭД КАК ЖурналСобытийЭД |ГДЕ | ЖурналСобытийЭД.ПрисоединенныйФайл = &ПрисоединенныйФайл"; Запрос.УстановитьПараметр("ПрисоединенныйФайл", СсылкаНаЭД); НомерЗаписи = Запрос.Выполнить().Выгрузить()[0].НомерЗаписи; МенеджерЗаписи = РегистрыСведений.ЖурналСобытийЭД.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНаЭД; МенеджерЗаписи.НомерЗаписи = НомерЗаписи; МенеджерЗаписи.ВладелецЭД = СсылкаНаЭД.ВладелецФайла; МенеджерЗаписи.СтатусЭД = СсылкаНаЭД.СтатусЭД; МенеджерЗаписи.Дата = ТекущаяДатаСеанса(); МенеджерЗаписи.Пользователь = ПараметрыСеанса.ТекущийПользователь; МенеджерЗаписи.Ответственный = СсылкаНаЭД.Ответственный; МенеджерЗаписи.Комментарий = СсылкаНаЭД.Описание; МенеджерЗаписи.Записать(); ЗафиксироватьТранзакцию(); КонецЕсли; КонецПроцедуры |
|||
5
unregistered
02.10.18
✎
12:11
|
(3) Страшно даже подумать - для чего такой бред может понадобиться...
|
|||
6
d4rkmesa
02.10.18
✎
12:14
|
(5) Ну, к примеру, при отсылке сообщений куда-нибудь требуется их нумеровать по порядку, в пределах указанного вида сообщений/периода/совокупности измерений и т.д..
|
|||
7
dmitn
02.10.18
✎
12:17
|
(0) С какой целью отключен контроль уникальности номера?
|
|||
8
Угрюмый73
02.10.18
✎
12:23
|
(1),(3),(7) Для реализации уникальности номера в пределах дня. Понимаю, что требование нумерации элементов в пределах дня можно было реализовать, например, отдельным реквизитом. Но, это уже сделано...
|
|||
9
unregistered
02.10.18
✎
12:31
|
(6) > нумеровать по порядку, в пределах указанного вида сообщений/периода/совокупности измерений и т.д..
Ты всерьез считаешь, что вот этот бред "номер = количество()+1" можно отнести к тому о чем ты говоришь?... ))) |
|||
10
Угрюмый73
02.10.18
✎
12:37
|
(9) Может подскажете правильное и красивое решение создание уникальной нумерации элементов справочника в пределах дня?
|
|||
11
unregistered
02.10.18
✎
12:40
|
(8)(10) > Для реализации уникальности номера в пределах дня
Для этого есть документы. Зачем было делать справочник?... Писать свой нумератор - тупиковый путь развития. Постоянно будете сталкиваться со сбоями в нумерации. Не говоря уже о вопросах изменения номера в случае изменения даты, к которой привязан элемент. |
|||
12
Лефмихалыч
02.10.18
✎
12:48
|
(1) скучно, видимо
|
|||
13
Лефмихалыч
02.10.18
✎
12:49
|
(8) оооох**еть
не встать |
|||
14
Лефмихалыч
02.10.18
✎
12:49
|
справочник... уникальность в пределах ДНЯ...
охенительно |
|||
15
Угрюмый73
02.10.18
✎
13:22
|
(4) Спасибо. Жаль, что форум все больше стал напоминать сборище троллей...
|
|||
16
unregistered
02.10.18
✎
13:57
|
(15) Если под троллями понимать "специалистов", не умеющий принимать правильные методические решения при разработке, то полностью с тобой согласен. Дебилов с "альтернативным", сука, мышлением с каждым днём становится всё больше и больше.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |