Обработка перенумерации справочников. Преобразует в числовой, или содержащий только цифры код, при этом гарантирует уникальнось во всем справочнике.
Преобразует в числовой, или содержащий только цифры код, при этом гарантирует уникальнось во всем справочнике
алгоритм определяет и использует «Правильные» коды и их не перезаписывает
алгоритм «ОДНОПРОХОДНЫЙ»
новая версия Версия 1.0.05 — в ней исправлена досадная ошибка пробела в текстовом коде, и добавлен алгоритм упаковки кодов
Нужна обработка по перенумерации справочник под версию 7.7
документы немного сложнее перенумеровывать, для этого по хорошему их нужно перепроводить (конечно можно и без перепроведения, но это не гуд)
у меня задачи такой небыло 🙂
нужна для 8.1 позарез 🙁
сложно доработать?
(5) просто откройте версию для 8.0 в конфигураторе 8.1
пс: возможно, руками придется поправить синтаксис типа
ЗначениеНеЗаполнено() на НЕ ЗначениеЗаполнено()
(4) насколько я себе представляю номердока нигде не фигурирует в качестве «значимого» реквизита в алгоритмах.. так что спокойно чохом можно перенумеровывать.. я так делал регулярно и живой…. (клюшки!)
(7) по разному бывает, особенно если документы строгой отчетности (типа доверености)
кроме того бывают всякие префиксы и т.д.
(8) это да, имеется в виду что результат алгоритмов проведения доков не зависит от их номеров…
на 1С:Предприятие 8.1 (8.1.13.41) не дышит
спасибо выручил.
Чтобы работал в 81 запустите в конф и он переведет в 81
Большое спасибо автору
(4) документы можно перенумеровывать и не перепроводить (а просто записать изменения) — и это будет не просто правильно (номер документа 🙂 не используется в алгоритмах проведения, и проведение не имеет смысла), но и более производительнее.
Анализ кода обработки:
1) избыточный (не имеющий смысла) код:
МассивВыгрузки = Новый Массив;
МассивВыгрузки.Очистить();
2) не нужная поверка передаваемого параметра:
из процедуры КнопкаВыполнитьНажатие() идет вызов локальной процедуры ПеренумероватьПростойСправочник() с проверкой однозначно передаваемого параметра на заполненность, причем поверка выполняется с помощью преобразования типа в строку и потом сравнением полученной строки… с пустой строкой.
3) не понимание назначения Транзакции, и соответственно не имеющий никакого смысла код (он ниже):
Для каждого Элемент из МассивНеРаспределенныхСсылок Цикл
Попытка
НачатьТранзакцию();
КодДляИспользования = ПреобразоватьКод (ПоследнийНомерРаспределения, СтрокаТипКода, ДлинаКода);
ЭлСправочника = Элемент.ПолучитьОбъект();
ЭлСправочника.Код = КодДляИспользования;
ЭлСправочника.Записать();
ЗафиксироватьТранзакцию();
СписокРаспределенныхНомеров.Добавить(ПоследнийНомерРаспределения);
ПередвинутьПоследнийНомерРаспределения(СписокРаспределенныхНомеров, ПоследнийНомерРаспределения);
Исключение
Сообщить(«Не удалось записать элемент справочника <» + ИмяСправочника + «> с кодом <» + Элемент.Код + «> под новым кодом <» + КодДляИспользования + «>»);
ОтменитьТранзакцию();
КонецПопытки;
Поясню этот комментарий:
Если мы опасаемся вылета на ошибку в этих четырех строках кода, то мы используем Попытку. Ошибка может возникнуть при получении или записи (например, он заблокирован) объекта , то есть разработчик в этом случае может перехватить событие и обработать его (потому что оно не критичное) — например, вывести сообщение (или повторить попытку пока не пройдет, или отложить обработку объекта в на потом и т.д.)
А если мы уже изменили базу данных и после этого у нас возникла ошибка, и при этом мы хотим обеспечить целостность всех наших изменений, только тогда и будет иметь смысл применение Попытки.
4) этому фрагменту сложно дать оценку (и понять ход мыслей разработчика):
Попытка
ЭтоРеальныйЧисловойКод = (СокрЛП(Формат(Число(Код),»ЧЦ=» + ДлинаКода + «; ЧДЦ=0; ЧВН=; ЧГ=»)) = СокрЛП(Код));
Исключение
ЭтоРеальныйЧисловойКод = Ложь;
КонецПопытки;
Справка:
При преобразовании Кода (у него тип строка) к числу Число(Код), если Код не является строковым представлением числа — …валим платформу в ошибку 🙂 и таким образом узнаем, что ЭтоНеРеальныйЧисловойКод %).
Удачи, Дима.
Прими мою критику как профессиональную поддержку коллеги по программированию.
(14) соглашусь с п.1 — это наследие с семерки, писал очень давно когда только перешел на снеговика
п.2 — разница между отсутствием в метаданных и незаполненым параметром должна быть очевидна (особенно при использование части кода в другом месте)
п.3 — скорее соглашусь, транкзация осталась от варианта когда я менял местами 2 кода элеменов справочника, и там была запись двух элементов
п.4 — этот код отлавливает разницу между кодом «001» и «1» по моему все понятно должно быть
(15) «…соглашусь с п.1 — это наследие с семерки…»
Это не так! Это неумение признавать свою профессиональную некомпетентность (пусть давнюю), но… все-таки 😐
Свеже созданный еще девственно-чистый объект никогда и нигде, ни в какой программной среде (в том числе V7 и V8), не нужно было очищать… 😉
Есть очень хорошая книга «Профессиональная разработка в среде 1С:Предприятие 8», полезна как при освоении платформы, особенностей программирования, так и вопросов, касающихся производительности прикладных решений — рекомендую.
(16) Эта книга не совсем то. Надо читать бестселлеры, типа Маконелла «Совершенный код» и т.п. книги.
(17) я много учился, и много чего знаю как практического так и теоретического, и буду учится и через 10 лет.
я за собой умею признавать ошибки, и в этой обработке есть незначительная избыточность, которая не носит критический характер. Критических ошибок тут нет.
У Андрея Куканова какой-то нездоровый интерес и желание похаять меня (я догадываюсь о причинах), и я не собираюсь с ним вступать в бесполезные споры. Попробуй обьективно сравнить эту обработку и его (типа независимый экспертизы)
(18) Какое милое заблуждение 🙂 …интереса к тому, от кого мне нечего взять, у меня нет, по определению…
Я с тобой не спорил, я выразил свое (аргументированное) мнение о твоей профессиональной подготовке (и профессиональной культуре). А сделал это потому что, был сильно удивлен уРоВНеМ единственного, но ведущего специалиста-разработчика (у нас на проекте стажер будет покруче).
А самая тупая часть всего этого «общения» с данным автором здесьhttp://infostart.ru/public/21745/
(18), (19) Схватились два автора перенумераторов, прикольно!
Не хватает еще войны «рабочих столов 8.1″… и поздравлений 😀
хорошая обработка. правильно работает. жаль только не пригодилась. клиент отказался от услуги.
Вообще то не совсем понятен механизм деления на правильный и не правильный номер. Если можно по подробнее прокоментировать.
Вообще то достаточно штатная ситуация когда требуется перенумеровать спроавочники или документы. Поэто му автору большое спасибо очень пригодилась.
Вроде нормально работает, применял в 2-х организациях.