База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как удалить дубликаты по полю КлючДоступаПользователей в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 7 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
10 сентября 2026 в 14:58 #38648
куча одинаковых полей по полю КлючДоступаПользователей что делать
-
10 сентября 2026 в 14:58 #38649
Если в регистре сведений КлючиДоступаКОбъектам много одинаковых записей с одинаковым значением по полю КлючДоступаПользователей, то это может привести к проблемам с доступом и избыточным данным.
Что делать:
1. Выявить дубликаты по полю КлючДоступаПользователей
Запрос для поиска дубликатов по этому полю (считаем количество записей с одинаковым ключом):
1С (Код)123456789|ВЫБРАТЬ| КлючиДоступаКОбъектам.КлючДоступаПользователей,| КОЛИЧЕСТВО(КлючиДоступаКОбъектам.Объект) КАК Количество|ИЗ| РегистрСведений.КлючиДоступаКОбъектам КАК КлючиДоступаКОбъектам|СГРУППИРОВАТЬ ПО| КлючиДоступаКОбъектам.КлючДоступаПользователей|ИМЕЮЩИЕ| КОЛИЧЕСТВО(КлючиДоступаКОбъектам.Объект) > 12. Анализ
— Если дубликаты по одному и тому же ключу доступа к разным объектам — это нормально, если доступ действительно нужен к разным объектам.
— Если дубликаты — это повторяющиеся записи с одинаковым ключом доступа и одинаковым объектом, то это ошибка.3. Удаление дубликатов
Если дубликаты — это полностью одинаковые записи (одинаковый объект и ключ доступа), то их нужно удалить.
Пример алгоритма удаления дубликатов:
— Считать все записи регистра.
— Для каждой записи формировать уникальный ключ: Объект + КлючДоступаПользователей + КлючДоступаВнешнихПользователей.
— Если такой ключ уже встречался — удалить текущую запись.
— Иначе — запомнить ключ и оставить запись.Пример кода на 1С (упрощённо):
1С (Код)12345678910111213Процедура УдалитьДубликаты()Записи = РегистрыСведений.КлючиДоступаКОбъектам.Выбрать();УникальныеКлючи = Новый Соответствие;Пока Записи.Следующий() ЦиклКлюч = СтрШаблон("%1|%2|%3", Записи.Объект, Записи.КлючДоступаПользователей, Записи.КлючДоступаВнешнихПользователей);Если УникальныеКлючи.СодержитКлюч(Ключ) Тогда// Дубликат, удаляемРегистрыСведений.КлючиДоступаКОбъектам.Удалить(Записи.Ссылка);ИначеУникальныеКлючи.Вставить(Ключ, Истина);КонецЕсли;КонецЦикла;КонецПроцедуры4. Профилактика
— Проверьте, что в конфигурации для регистра сведений настроены уникальные индексы по измерениям и ресурсам, чтобы дубликаты не создавались.
— Если дубликаты появляются из-за ошибок в коде, исправьте логику записи в регистр.
— При необходимости сделайте регламентное задание для периодической очистки дубликатов.—
Если дубликаты по ключу доступа, но с разными объектами — это нормально, если пользователь должен иметь доступ к разным объектам.
Если же дубликаты по ключу доступа и объекту — это ошибка, их нужно удалить.
—
Если нужна помощь с конкретным кодом для удаления или проверкой индексов — могу помочь.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.