Обработка "Проверка и исправление (перенумерация) неуникальных и некорректных номеров документов"
Обработка осуществляет поиск документов с неуникальными и некорректными номерами и их последующую перенумерацию. Неуникальные номера могут образоваться, например, вследствие одновременного создания документов в разных частях распределенной базы данных с одиннаковым префиксом и последующего обмена данными. Некорректные номера (с пробелом в конце) могут образовываться из-за их ручной корректировки пользователями, а также при увеличении длины номера средствами конфигурирования и непустой выборке
документов по данному виду.
Проверка неуникальности номеров производится в соответствии с указанным нумератором документа или его видом, (если нумератор не указан) в пределах установленной периодичности номера. Для всеобъемлющего поиска неуникальных номеров необходимо указывать интервал выборки документов кратно периодичности номера. Для некорректных номеров просто проверяется соответствие количества пробелов в конце номера (по умолчанию - 0). В случае, если наличие пробелов в конце номера предусмотрено конфигурацией, их количество для "корректного" номера можно указать (колонка "Отступ" в таблице на первой закладке)
Поиск оптимизирован, работает достаточно быстро, зависимость времени выполнения от количества документов -пропорциональная, эквивалентна 2-х - 3-х кратному перебору документов в цикле. Найденные документы отображаются в таблице на форме на новой закладке.
В таблице отображаются все документы с неуникальными номерами, для перенумерации требуется для одного из группы документов с неуникальным номером снять галку участия в перенумерации.
Правила формирования нового номера для документа:
Документы с номерами типа "Число" обрабатываются только с пом. метода "УстановитьНовыйНомер()"
Для документов с номером текстового типа предложено три этапа нумерации, которые выполняются до момента
успешного поиска уникального номера:
Этап 1. Новый номер с прежней числовой частью. В старом номере выделяется числовая часть и переносится в новый к новому префиксу. Длина номера корректируется либо добавлением нулей, либо обрезанием числовой части слева. Для последнего предусмотрен флаг отмены, в этом случае перенумерация документа не производится.
Этап 2. "УстановитьНовыйНомер". Стандартный метод установки нового номера, выполняется при отсутствии / неудачном выполнении первого этапа.
Этап 3. Бинарный поиск нового номера. Выполняется при отсутствии / неудачном выполнении предыдущих этапов (для первого - найденный номер неуникален, для второго - не соответствует количество пробелов в конце, либо номер неуникален). Бинарный поиск выдаст последний номер в серии номеров, если она непрерывна, в противном случае, есть малая вероятность получения номера из "пропуска в серии".
В ходе разработки нашел "грабли": методы документа общего вида "НайтиПоНомеру", "ВыбратьПоНомеру" при одноименных "нумераторе" и "виде документа" отрабатывает "вид документа". Грабли убрал.
Обработка не использует ВК.
Версия 1.14 (06.08.09)
- обход метода документа "ВыбратьПоНомеру" без указания вида документа/нумератора
Версия 1.12 (20.08.07)
- возможность изменить префикс для всех документов (требующих перенумерации) выбранной ИБ
Версия 1.11 (15.08.07)
- исправлены условия перехода между этапами перенумерации
Версия 1.10 (13.08.07) - 1.00 (07.08.07)
- Разделены для окончательной обработки документы "неуникальные" и "по пробелам в конце"
- Полные группы документов с неуникальным номером (ранее - начиная со второго с неуник. номером в выборке)
- Механизм выбора документов для перенумерации.
- "Автовыбор" документов по информационной базе, "по умолчанию"
- Механизм формирования номера формализован по выбираемым пользователем этапам.
Пишите отзывы и предложения, не забывайте про рейтинг.
С Уважением, Shaman100M.