Обработка перенумерации справочников

Обработка перенумерации справочников. Преобразует в числовой, или содержащий только цифры код, при этом гарантирует уникальнось во всем справочнике.

Преобразует в числовой, или содержащий только цифры код, при этом гарантирует уникальнось во всем справочнике
алгоритм определяет и использует «Правильные» коды и их не перезаписывает
алгоритм «ОДНОПРОХОДНЫЙ»

новая версия Версия 1.0.05 — в ней исправлена досадная ошибка пробела в текстовом коде, и добавлен алгоритм упаковки кодов

22 Comments

  1. Нужна обработка по перенумерации справочник под версию 7.7

    Reply
  2. vde69

    документы немного сложнее перенумеровывать, для этого по хорошему их нужно перепроводить (конечно можно и без перепроведения, но это не гуд)

    у меня задачи такой небыло 🙂

    Reply
  3. Klim_дУБЛЬ

    нужна для 8.1 позарез 🙁

    сложно доработать?

    Reply
  4. tango

    (5) просто откройте версию для 8.0 в конфигураторе 8.1

    пс: возможно, руками придется поправить синтаксис типа

    ЗначениеНеЗаполнено() на НЕ ЗначениеЗаполнено()

    Reply
  5. CheBurator

    (4) насколько я себе представляю номердока нигде не фигурирует в качестве «значимого» реквизита в алгоритмах.. так что спокойно чохом можно перенумеровывать.. я так делал регулярно и живой…. (клюшки!)

    Reply
  6. vde69

    (7) по разному бывает, особенно если документы строгой отчетности (типа доверености)

    кроме того бывают всякие префиксы и т.д.

    Reply
  7. CheBurator

    (8) это да, имеется в виду что результат алгоритмов проведения доков не зависит от их номеров…

    Reply
  8. rayson

    на 1С:Предприятие 8.1 (8.1.13.41) не дышит

    Reply
  9. Jenya78

    спасибо выручил.

    Reply
  10. Чтобы работал в 81 запустите в конф и он переведет в 81

    Большое спасибо автору

    Reply
  11. KukA.5

    (4) документы можно перенумеровывать и не перепроводить (а просто записать изменения) — и это будет не просто правильно (номер документа 🙂 не используется в алгоритмах проведения, и проведение не имеет смысла), но и более производительнее.

    Reply
  12. KukA.5

    Анализ кода обработки:

    1) избыточный (не имеющий смысла) код:

    МассивВыгрузки = Новый Массив;

    МассивВыгрузки.Очистить();

    2) не нужная поверка передаваемого параметра:

    из процедуры КнопкаВыполнитьНажатие() идет вызов локальной процедуры ПеренумероватьПростойСправочник() с проверкой однозначно передаваемого параметра на заполненность, причем поверка выполняется с помощью преобразования типа в строку и потом сравнением полученной строки… с пустой строкой.

    3) не понимание назначения Транзакции, и соответственно не имеющий никакого смысла код (он ниже):

    Для каждого Элемент из МассивНеРаспределенныхСсылок Цикл

    Попытка

    НачатьТранзакцию();

    КодДляИспользования = ПреобразоватьКод (ПоследнийНомерРаспределения, СтрокаТипКода, ДлинаКода);

    ЭлСправочника = Элемент.ПолучитьОбъект();

    ЭлСправочника.Код = КодДляИспользования;

    ЭлСправочника.Записать();

    ЗафиксироватьТранзакцию();

    СписокРаспределенныхНомеров.Добавить(ПоследнийНомерРаспределения);

    ПередвинутьПоследнийНомерРаспределения(СписокРаспределенныхНомеров, ПоследнийНомерРаспределения);

    Исключение

    Сообщить(«Не удалось записать элемент справочника <» + ИмяСправочника + «> с кодом <» + Элемент.Код + «> под новым кодом <» + КодДляИспользования + «>»);

    ОтменитьТранзакцию();

    КонецПопытки;

    Поясню этот комментарий:

    Если мы опасаемся вылета на ошибку в этих четырех строках кода, то мы используем Попытку. Ошибка может возникнуть при получении или записи (например, он заблокирован) объекта , то есть разработчик в этом случае может перехватить событие и обработать его (потому что оно не критичное) — например, вывести сообщение (или повторить попытку пока не пройдет, или отложить обработку объекта в на потом и т.д.)

    А если мы уже изменили базу данных и после этого у нас возникла ошибка, и при этом мы хотим обеспечить целостность всех наших изменений, только тогда и будет иметь смысл применение Попытки.

    4) этому фрагменту сложно дать оценку (и понять ход мыслей разработчика):

    Попытка

    ЭтоРеальныйЧисловойКод = (СокрЛП(Формат(Число(Код),»ЧЦ=» + ДлинаКода + «; ЧДЦ=0; ЧВН=; ЧГ=»)) = СокрЛП(Код));

    Исключение

    ЭтоРеальныйЧисловойКод = Ложь;

    КонецПопытки;

    Справка:

    При преобразовании Кода (у него тип строка) к числу Число(Код), если Код не является строковым представлением числа — …валим платформу в ошибку 🙂 и таким образом узнаем, что ЭтоНеРеальныйЧисловойКод %).

    Удачи, Дима.

    Прими мою критику как профессиональную поддержку коллеги по программированию.

    Reply
  13. vde69

    (14) соглашусь с п.1 — это наследие с семерки, писал очень давно когда только перешел на снеговика

    п.2 — разница между отсутствием в метаданных и незаполненым параметром должна быть очевидна (особенно при использование части кода в другом месте)

    п.3 — скорее соглашусь, транкзация осталась от варианта когда я менял местами 2 кода элеменов справочника, и там была запись двух элементов

    п.4 — этот код отлавливает разницу между кодом «001» и «1» по моему все понятно должно быть

    Reply
  14. KukA.5

    (15) «…соглашусь с п.1 — это наследие с семерки…»

    Это не так! Это неумение признавать свою профессиональную некомпетентность (пусть давнюю), но… все-таки 😐

    Свеже созданный еще девственно-чистый объект никогда и нигде, ни в какой программной среде (в том числе V7 и V8), не нужно было очищать… 😉

    Есть очень хорошая книга «Профессиональная разработка в среде 1С:Предприятие 8», полезна как при освоении платформы, особенностей программирования, так и вопросов, касающихся производительности прикладных решений — рекомендую.

    Reply
  15. Душелов

    (16) Эта книга не совсем то. Надо читать бестселлеры, типа Маконелла «Совершенный код» и т.п. книги.

    Reply
  16. vde69

    (17) я много учился, и много чего знаю как практического так и теоретического, и буду учится и через 10 лет.

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

    У Андрея Куканова какой-то нездоровый интерес и желание похаять меня (я догадываюсь о причинах), и я не собираюсь с ним вступать в бесполезные споры. Попробуй обьективно сравнить эту обработку и его (типа независимый экспертизы)

    Reply
  17. KukA.5

    (18) Какое милое заблуждение 🙂 …интереса к тому, от кого мне нечего взять, у меня нет, по определению…

    Я с тобой не спорил, я выразил свое (аргументированное) мнение о твоей профессиональной подготовке (и профессиональной культуре). А сделал это потому что, был сильно удивлен уРоВНеМ единственного, но ведущего специалиста-разработчика (у нас на проекте стажер будет покруче).

    А самая тупая часть всего этого «общения» с данным автором здесь http://infostart.ru/public/21745/

    Reply
  18. Abadonna

    (18), (19) Схватились два автора перенумераторов, прикольно!

    Не хватает еще войны «рабочих столов 8.1″… и поздравлений 😀

    Reply
  19. atlakh

    хорошая обработка. правильно работает. жаль только не пригодилась. клиент отказался от услуги.

    Reply
  20. Sasha25

    Вообще то не совсем понятен механизм деления на правильный и не правильный номер. Если можно по подробнее прокоментировать.

    Reply
  21. Sasha25

    Вообще то достаточно штатная ситуация когда требуется перенумеровать спроавочники или документы. Поэто му автору большое спасибо очень пригодилась.

    Reply
  22. Prikum

    Вроде нормально работает, применял в 2-х организациях.

    Reply

Leave a Comment

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