Контроль уникальности справочника по двум реквизитам

В данном разделе можно задавать вопросы по программированию на платформе 1С:Предприятие 8.
(Раздел предназначен для тех, кто уже прошел обучение в нашем учебном центре)

p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).

Контроль уникальности справочника по двум реквизитам

Сообщение Софья » 18 окт 2016, 16:41

Добрый день!

Подскажите есть ли какой-нибудь приемлемый способ контроля уникальности справочника по двум реквизитам (мы хотим чтобы сочетание реквизитов наименование и период было уникально). Изначально уникальность справочника контролировалась по наименованию и этого было достаточно, но в этом году добавилось новое условие. Просто создать подписку ПерезЗаписью справочника с запросом к этим двум полям недостаточно, т.к. справочник заполняется программно и одновременно может идти загрузка одинаковых значений. Если будет только подписка в этом случае запишутся 2 одинаковых элемента. В этом случае думали в сторону блокировки справочника при записи элемента, но это не подходит, т.к. в справочник одновременно могут писаться 2 потока, если делать блокировку справочника, потом проверку уникальности для первого потока, то второй поток будет ждать, пользователи не смогут с этим смириться. Варианты платформенного контроля уникальности в пределах подчиненности владельцу и пр. не подошли, т.к. справочник в системе давно существует и используется в других объектах, не все объекты известны, ошибки неминуемы. Подскажите возможно ли контролировать уникальность по двум реквизитам в принципе?

Спасибо!
Софья
 
Сообщений: 7
Зарегистрирован: 23 сен 2015, 16:37

Re: Контроль уникальности справочника по двум реквизитам

Сообщение admin » 18 окт 2016, 17:49

Добрый день!
Я так понимаю речь идет о клиент-серверном режиме работы базы.
Штатных механизмов в платформе нет, но я не вижу проблем для программной реализации задачи. Можете использовать подписки, можете писать код непосредственно в модуле объекта в обработчиках ПередЗаписью или ПриЗаписи. Чтобы в процессе поиска дублей исключить параллельную запись в справочник, необходимо использовать управляемые блокировки по полям Наименование и Период. Самое главное, чтобы процесс программной загрузки выполнялся без создания единой транзакции, так как в этом случае 2-й поток будет ждать.
admin
Администратор
 
Сообщений: 241
Зарегистрирован: 14 дек 2011, 11:11



Вернуться в Вопросы по программированию

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron