Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Одинаковые коды справочника

Одинаковые коды справочника
Я
   Угрюмый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
Лучше всего наверное заменить справочник на документ с периодичностью нумерации "В пределах дня". Иначе считывать количество элементов и записывать новый элемент надо в транзакции с наложением эксклюзивной блокировки.
   ASU_Diamond
 
3 - 02.10.18 - 12:08
(0) нах... для чего всё это сделано?
   d4rkmesa
 
4 - 02.10.18 - 12:09
(0) В типовых делается с блокировкой. К примеру(из УТ10/УПП):

// Записывает в журнал регистрации событие записи ЭД.

//
// Параметры:

//  СсылкаНаЭД - ссылка на элемент справочника ЭДПрисоединенныеФайлы.
//

Процедура ЗаписатьСобытиеЖурналаРегистрацииПоОбменуЭД(СсылкаНаЭД)
    
    Если ТипЗнч(СсылкаНаЭД) = Тип("СправочникСсылка.ЭДПрисоединенныеФайлы") Тогда
        
        УстановитьПривилегированныйРежим(Истина);
        
        НачатьТранзакцию();
        
        Блокировка = Новый БлокировкаДанных;
        ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЖурналСобытийЭД");
        ЭлементБлокировки.УстановитьЗначение("ПрисоединенныйФайл", СсылкаНаЭД);
        Блокировка.Заблокировать();
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕСТЬNULL(МАКСИМУМ(ЖурналСобытийЭД.НомерЗаписи), 0) + 1 КАК НомерЗаписи
        |ИЗ
        |    РегистрСведений.ЖурналСобытийЭД КАК ЖурналСобытийЭД
        |ГДЕ
        |    ЖурналСобытийЭД.ПрисоединенныйФайл = &ПрисоединенныйФайл";
        Запрос.УстановитьПараметр("ПрисоединенныйФайл", СсылкаНаЭД);
        НомерЗаписи = Запрос.Выполнить().Выгрузить()[0].НомерЗаписи;
        
        МенеджерЗаписи                    = РегистрыСведений.ЖурналСобытийЭД.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.ПрисоединенныйФайл = СсылкаНаЭД;
        МенеджерЗаписи.НомерЗаписи        = НомерЗаписи;
        МенеджерЗаписи.ВладелецЭД         = СсылкаНаЭД.ВладелецФайла;
        МенеджерЗаписи.СтатусЭД           = СсылкаНаЭД.СтатусЭД;
        МенеджерЗаписи.Дата               = ТекущаяДатаСеанса();
        МенеджерЗаписи.Пользователь       = ПараметрыСеанса.ТекущийПользователь;
        МенеджерЗаписи.Ответственный      = СсылкаНаЭД.Ответственный;
        МенеджерЗаписи.Комментарий        = СсылкаНаЭД.Описание;
        МенеджерЗаписи.Записать();
        
        ЗафиксироватьТранзакцию();
        
    КонецЕсли;
    
КонецПроцедуры
   unregistered
 
5 - 02.10.18 - 12:11
(3) Страшно даже подумать - для чего такой бред может понадобиться...
   d4rkmesa
 
6 - 02.10.18 - 12:14
(5) Ну, к примеру, при отсылке сообщений куда-нибудь требуется их нумеровать по порядку, в пределах указанного вида сообщений/периода/совокупности измерений и т.д..
   dmitn
 
7 - 02.10.18 - 12:17
(0) С какой целью отключен контроль уникальности номера?
   Угрюмый73
 
8 - 02.10.18 - 12:23
(1),(3),(7) Для реализации уникальности номера в пределах дня. Понимаю, что требование нумерации элементов в пределах дня можно было реализовать, например, отдельным реквизитом. Но, это уже сделано...
   unregistered
 
9 - 02.10.18 - 12:31
(6) > нумеровать по порядку, в пределах указанного вида сообщений/периода/совокупности измерений и т.д..

Ты всерьез считаешь, что вот этот бред "номер = количество()+1" можно отнести к тому о чем ты говоришь?... )))
   Угрюмый73
 
10 - 02.10.18 - 12:37
(9) Может подскажете правильное и красивое решение создание уникальной нумерации элементов справочника в пределах дня?
 
 Рекламное место пустует
   unregistered
 
11 - 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
справочник... уникальность в пределах ДНЯ...
охенительно
   Угрюмый73
 
15 - 02.10.18 - 13:22
(4) Спасибо. Жаль, что форум все больше стал напоминать сборище троллей...
   unregistered
 
16 - 02.10.18 - 13:57
(15) Если под троллями понимать "специалистов", не умеющий принимать правильные методические решения при разработке, то полностью с тобой согласен. Дебилов с "альтернативным", сука, мышлением с каждым днём становится всё больше и больше.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует