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

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

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

новая версия Версия 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 не будет опубликован. Обязательные поля помечены *