Бывает так, что нужно изменить структуру регистра сведений, удалив одно или несколько измерений или, например, перенести измерение в ресурсы. Часто бывает, что регистр уже содержит записи и при принятии изменений конфигурации выясняется, что записи дублируются по текущему составу измерений и принять изменения невозможно.
В этом случае обычно возвращают обратно конфигурацию базы данных и чистят регистр перед изменением структуры регистра. И бывает так, что нельзя регистр-то весь очищать, записи-то важные, хочется оставить хоть что-то. Обработка в данной публикации позволяют посмотреть, какие записи задублируются, если удалить то или иное измерение, и выборочно удалить записи на свое усмотрение. Есть два режима удаления неугодных записей – либо автоматически удалить их, либо вручную удалить каждую запись, самому выбирая, какую оставить. При автоматическом удалении можно выбрать, какую запись из дублируемых оставить – первую или последнюю, при этом можно предварительно отсортировать дерево дублируемых записей. Обычно, если мне все равно, какие записи останутся, то я просто отдаю это на откуп обработке и удаляю все дубли одним нажатием кнопки (как правило, именно так поступают аналогичные обработки). Такое бывает, если база тестовая и важно обновить ее во что бы то ни стало и как можно скорее, чтобы продолжить разработку. Если же база рабочая, то тут включается консультант-внедренец и либо сам, либо с заказчиком вместе, садится и решает, какие записи оставить, а какие удалить.
Похожие обработки уже встречаются на Infostart, но меня они не устраивают по ряду причин. По сравнению с теми, что я встречал, преимущества следующие:
- Возможность включения монопольного режима;
- Возможность предварительной выгрузки как всего регистра, так и только дублируемых записей. А также возможность обратной загрузки записей из файла, что позволяет не делать полный архив базы;
- Возможность сортировки записей перед групповым удалением;
- Возможность ручного удаление отдельных дублируемых записей;
- Возможность удаления дублируемых записей в транзакции;
- Возможность открыть форму списка записей выбранного регистра и форму конкретной записи регистра для ручного редактирования записи;
- Использование динамического списка для отображения дублируемых записей, что дает удобный поиск и фильтрацию записей;
В общем, эта обработка для тех, кому нужен более тонкий контроль при удалении дублируемых записей. Интерфейс обработки интуитивно понятный и крайне простой.
На первой вкладке выбираете регистр сведений, и указываете, какие измерения будут удалены. В списке будут только регистры сведений, у которых более одного измерения и более одной записи в таблице. Далее нажимаете кнопку Показать дубли и попадаете на вкладку с отображением найденных дублей.
Ну а дальше либо вручную удаляете/редактируете конкретные записи, либо удаляете все дубли нажатием кнопки Удалить дубли. При ручном режиме удаления, каждый раз будет выдаваться предупреждение перед удалением выделенных записей. Отключить предупреждение можно переключателем безопасного режима. Если используется групповое удаление записей, то можно включить режим удаления в транзакции — это ускорит процесс удаления если дублей очень много, а также откатит удаление, если возникнет хотя бы одна ошибка при удалении записей. Кроме того, можно выбрать, какую запись оставлять при групповом удалении - первую или последнюю согласно сортировке. По картинке колонки можно понять, что является измерением, удаляемым измерением, ресурсом, а что реквизитом. В корневой записи группы дублей (выделена жирным шрифтом) отображаются значения полей записи которая останется после группового удаления.
В публикации представлена обработка для управляемого приложения, чуть позже будет опубликована аналогичная обработка для обычного приложения. Обработка тестировалась на платформе 8.3.17.1549, но должна работать на любых платформах начиная с 8.3.15. Прошу обратить внимание, что обработка удаляет данные, поэтому перед использованием обязательно делайте архив базы или выгрузку регистра в файл! Также автор не несет ответственности за действия пользователя, использующего данную обработку. Будьте аккуратны и внимательны!