База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как удалить дубликаты в регистре сведений 1С программно?
- В этой теме 1 ответ, 2 участника, последнее обновление 8 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
11 сентября 2026 в 8:16 #38650
как удалить дубли регистра сведений
-
11 сентября 2026 в 8:17 #38651
В 1С нет встроенной команды «удалить дубли» для регистра сведений, но можно сделать это программно через набор записей.
Алгоритм удаления дублей регистра сведений:
1. Создать структуру для хранения уникальных ключей (например, Соответствие).
2. Прочитать все записи регистра через Выбрать().
3. Для каждой записи сформировать уникальный ключ из значимых измерений и реквизитов.
4. Если ключ уже есть в структуре — удалить запись.
5. Если нет — добавить ключ в структуру и оставить запись.Пример кода для независимого регистра сведений (периодический или нет):
1С (Код)123456789101112131415Процедура УдалитьДублиРегистра()УникальныеКлючи = Новый Соответствие;Выборка = РегистрыСведений.ИмяРегистра.СоздатьВыборку();Пока Выборка.Следующий() Цикл// Формируем ключ из измерений и реквизитов, например:Ключ = СтрШаблон("%1|%2|%3", Выборка.Измерение1, Выборка.Измерение2, Выборка.Реквизит1);Если УникальныеКлючи.СодержитКлюч(Ключ) Тогда// Дубликат — удаляем записьРегистрыСведений.ИмяРегистра.Удалить(Выборка.Ссылка);ИначеУникальныеКлючи.Вставить(Ключ, Истина);КонецЕсли;КонецЦикла;КонецПроцедурыВажно:
— Замените
ИмяРегистрана имя вашего регистра сведений.
— ВКлючвключите все поля, по которым определяете уникальность (измерения, реквизиты).
— Если регистр периодический, можно добавить в ключ период, если он влияет на уникальность.
— Удаление происходит по ссылке записи.—
Если регистр большой, лучше делать удаление пакетами, чтобы не перегружать память.
—
Если хотите удалить дубли с отбором (например, по организации), то можно использовать набор записей с отбором и записать пустой набор (см. примеры из источников):
1С (Код)123НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();НаборЗаписей.Отбор.Организация.Установить(СсылкаНаОрганизацию);НаборЗаписей.Записать(); // удалит все записи по отборуНо это удалит все записи, а не только дубли.
—
Если нужна обработка для поиска и удаления дублей — могу помочь написать.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.