Универсальная обработка для перенумерации справочников

Данная простейшая обработка выполняет всего одну функцию, а именно сквозную (без учета иерархии) перенумерацию элементов выбранного справочника. Порядок существующих кодов соблюдается, но коды приводятся к натуральным числам (числовой тип кода) либо к строкам, состоящим из дополненных ведущими нулями натуральных чисел (строковый тип кода).

Необходимость подобной перенумерации может возникнуть в случае беспорядочного редактирования кодов элементов пользователями.

Данная простейшая обработка выполняет всего одну функцию, а именно сквозную (без учета иерархии) перенумерацию элементов выбранного справочника. Порядок существующих кодов соблюдается, но коды приводятся к натуральным числам (числовой тип кода) либо к строкам, состоящим из дополненных ведущими нулями натуральных чисел (строковый тип кода).

Необходимость подобной перенумерации может возникнуть в случае беспорядочного редактирования кодов элементов пользователями.

На время выполнения обработки необходимо отключить контроль уникальности кодов для требующего обработки справочника (после запуска обработки в окне сообщений будет выведена подробная инструкция действий для такого отключения).

Результат выполнения обработки необратим, поэтому рекомендуется создать резервную копию базы до ее выплнения, если Вы не совсем уверены в своих действиях.

Настоятельно не рекомендуется выполнять обработку для справочников, коды которых содержат значимую информацию, а не просто порядковые номера элементов. Примеры таких справочников: Банки (коды используются для хранения кодов МФО), Налоги и отчисления (коды используются в конфигурации для определения нужных ставок налогов и отчислений), Коды УКТВЭД (коды используются для хранения самих кодов УКТВЭД) и т.д.

5 Comments

  1. Иваныч

    «Необходимость подобной перенумерации может возникнуть в случае беспорядочного редактирования кодов элементов пользователями.»

    За такие дела надо руки поломать 👿

    Reply
  2. ivisor_fil

    А слабо без отмены контроля уникальности?

    Выгрузить коды и ссылки на элементы в таблицу исходных кодов.

    Добавить колонку и привести коды к необходимому формату.

    Отсортировать по этой колонке.

    Сформировать таблицу с последовательностью «правильных» кодов по формату и исходя из количества элементов в исх. таблице.

    В первом проходе из таблицы исходных кодов выбрать элементы с «правильными» кодами и подставить их в таблицу правильных кодов (а из исходных удалить — останутся только «неправильные»).

    Во втором проходе из исходной таблицы подряд выбирать оставшиеся элементы и ставить их в соответствие незадействованным «правильным» кодам.

    Пройтись по таблице правильных кодов и транзакцией записать «правильные» коды только элементам у которых код отличается от «приведенного».

    (можно использовать только одну ТЗ — тут по желанию)

    Т.о. во первых не нужно ни кого выгонять из базы и менять конфигурацию.

    Во вторых, особенно если справочник большой, а нарушена нумерация только у небольшой части кодов (например вчера кто-то «накосячил» и пара сотен кодов из 10 000 «пошли вразнос») сохранится нумерация для тех элементов, которые уже имели верные коды даже неправильного формата(а это часто бывает важно, когда пользователи ориентируются по кодам а не по наименованиям).

    Да и в обще — как-то по феншую это 😉

    К тому же гораздо интереснее, чем тупо перебором перебить все подряд ИМХО.

    Reply
  3. Некто A. Petti

    Очередной велосипед. Поражаюсь упорству.

    Уже много лет на ИТС есть обработки по перенумерации всего и вся.

    Reply
  4. soba

    (2) ivisor_fil,

    Подход, конечно, правильный 🙂 Все по феншую. Да и не «велосипед» получится, а велосипед с программным управлением. Только вот реально, нет необходимости уде в том, вариантов чего в рабочем виде десятки уже на форуме

    Reply
  5. ivisor_fil

    (4) soba

    Дык это ж не я выложил — я просто написал, что бы я сам стал выкладывать и делать.

    А простую перенумерацию можно на коленке за 5 минут написать — даже на форуме искать не придется.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *