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