gifts2017

Перенумерация документов с учетом префикса и кодов справочников (учет уникальности кодов)

Опубликовал г. Казань Рустем Гумеров (Rustig) в раздел Обработки - Обработка документов

Что стало (16-12-2015г.). Добавил учет префикса при перенумерации документов. Выложил обработку "Перенумерация документов".
Что было. Выкладываю обработку "Перенумерация кодов справочника". Обработка создавалась под реальную задачу. Суть - максимально сохранить "правильные" имеющиеся коды, т.к. они несут информацию (табельный номер сотрудника, инвентарный номер ОС), исправив только "неправильные". Для такой задачи типовая универсальная не подходит.

Что стало (16-12-2015г.).

Добавил учет префикса при перенумерации документов.

При этом сохранил алгоритм определения уникального номера по порядку - метод описан подробно ниже по тексту.

Выложил обработку "Перенумерация документов". Обработка создавалась под реальную задачу, протестирована на КА 1.1.33.3, БП 2.0.64.41, УПП 1.3.64.1, на платформе 8.2.19.130.

Алгоритм работает на всех конфигурациях, в общих модулях которых имеется следующий вызов функций и процедур:

ПрефиксОрганизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Организация, "Префикс");
Если
ЗначениеЗаполнено(ПрефиксОрганизации) Тогда
Префикс = ПрефиксОрганизации;
КонецЕсли;

ОбщегоНазначения.ДобавитьПрефиксУзла(Префикс);

Что еще изменилось (15-12-2015г.).  

   Обработка "Перенумерация справочников" сконвертирована для работы на платформе 8.2. Обработка не потеряла своей актуальности даже на сегодня (15-12-2015г). Мой комментарий №25 от 29 января 2015 г раскрывает суть внесенных изменений.

Что было. Или суть метода.

Есть справочники, в которых перенумерацию кодов с помощью типовой универсальной обработки "Универсальный подбор и обработка объектов" без сурьезных :) доработок делать не следует: справочник физлиц - потому что код зачастую соответствует табельному номеру, справочник  ОС - потому что код зачастую совпадает с инвентарным номером. Я реализовал свою обработку с возможностью сохранения корректных старых номеров и  возможностью установки уникальных новых. Если у кого возник вопрос, а есть ли разница с типовой универсальной, тогда прямо сейчас и поясню.

Так, например, если в базе есть табельные номера "000000001" и "0003", то моя обработка возвратит "000000001" и "000000003", а универсальная типовая - "000000001" и "000000002".

Далее для двух табельных номеров "00004" и "004" моя программа вернет номер "000000004" и еще не занятый номер "000000002", а универсальная продолжит нумеровать последовательно, то есть выдаст "000000004" и "000000005". Вот и вся разница с универсальной типовой :).

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

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

      Пояснения к алгоритму:  

 1. Обрабатываем только справочники с типом кода "Строка". Расширить варианты можете сами. Добавить справочник (документ) можете через процедуру ПриОткрытии() формы обработки. Для моей задачи реализованы только те справочники, с которыми мне пришлось столкнуться - это справочники ФизЛиц, Контрагентов, ОС, Номенклатуры.

 2. Восстанавливаем длину кода добавлением в начало кода нулей.

 3. Если код становится не уникальным, обрабатываем исключительную ситуацию: устанавливаем свой уникальный код. При этом анализируем все свободные коды справочника из диапазона от 1 до Максимального Кода.

 4. Код, состоящий из одних нулей, переводим в "ненулевой".

 5. Максимальный Код (для примера, это обычно "99999...9") переводим в "нормальный" согласно возрастающей последовательности имеющихся кодов. Этого нет.

 6. Если в кодах справочника встречаются вредные символы, которые мешают преобразовывать строковый код в числовой формат, их нужно указать в табличке (см. рис.). 

       Вообще, алгоритм установки уникальных номеров я использовал в своей практике в дальнейшем при выгрузке и загрузке ОС в разные базы. При этом алгоритм несколько раз улучшался, но в описание данной статьи не попал. То есть, я заранее оговариваюсь, что в моем алгоритме есть место вашим улучшениям :).


       Дополнение. У бухгалтеров проявилась подобная ошибка с неуникальностью номеров документов. Выложил обработку для перенумерации документов.

Всем успехов и всего доброго! :)

Центр автоматизации, г.Казань www.go-scan.ru

Скачать файлы

Наименование Файл Версия Размер
ПеренумерацияСправочников.epf 852
.epf 11,22Kb
16.12.15
852
.epf 11,22Kb Скачать
ПеренумерацияДокументов.epf 53
.epf 13,54Kb
16.12.15
53
.epf 13,54Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Зубцов (iov) 25.11.10 18:27
(0) Вопрос поиском по сайту смотрели что есть?
И согласно вашим же словам

5. «Китайская» мудрость:
А. «Не придумывай велосипед» Если я решаю задачу, например, с применением ComОбъекта, то можно найти в глобальном поиске в конфигурации УПП все механизмы и методы объектов, например, которые используются совместно с ComСоединением. Задача решится быстрее.

если нужны оценки... то нужно то что чего здесь нет...
2. г. Казань Рустем Гумеров (Rustig) 26.11.10 09:04
...я не из оценок сюда выложил обработку. Я смотрел выложенные обработки по этой теме - ничего не подошло. ...в том-то все и дело, что Вы могли бы в комментариях указать работающую обработку по этой теме - кинуть ссылку. И еще я не смотрел на других форумах.
3. г. Казань Рустем Гумеров (Rustig) 26.11.10 09:16
... я согласен, что "китайская" мудрость звучит банально.
4. Александр Зубцов (iov) 26.11.10 13:17
http://infostart.ru/public/?rubric=1575#comm
А теперь по пунктам:
1 Уточнение возраста.... Молодой человек это дешевый прием на школофорумах тут такое не принято.
2 "Не подошло" Дописать в любой перенумаратор (из готовых) кусок заменяющий символы на другие символы - это банальность. Напишите туда хотя бы установку префикса по правилам или изменение положения номера относительно префикса или установку номера с учетом кода группы в которой находится. Ну что нить такое что многофункционально и нужно.
3 Эмоциональность что за детские психи с кучей слов? По фото вполне взрослый и самоуверенный молодой человек. Примите как конструктивную критику. Почитайте наконец кто и что писал к аналогичным обработкам другие пользователи. Это не наезд на вас вообще то был а попытка "настроить на серьезные задачи". Примерно того что тут нет в личке. И без нервов - они вам пригодятся еще.
5. г. Казань Рустем Гумеров (Rustig) 26.11.10 16:21
Ну что ж. Посмотрел я ссылку... Своего мнения не изменил - для справочников и для 8.1 есть обработки, но они не обходят проблему "Не уникальный код!" Пусть моя реализация обработки висит в системе и дарит людям помощь. Пусть не сразу, а по необходимости. Я, например, нахожу на инфостарте обработки от 2008 и 2009 года, которые мне помогают в работе. :)
6. Аркадий Кучер (Abadonna) 27.11.10 06:22
(2), (4) Дебаты по поводу перенумераторов предлагаю прекратить. Писали, пишут, и будут писать.

- Ваш любымый полонез?
-Огинского
-Ваше любомое произвдение Огинского?
-Полонез

Ограничений на выкладывание оных творений нет, это дело внутреннего цензора автора.
Мнение выказать проще всего плюсом или минусом. Минус пять - и гудбай обработка
7. Александр Зубцов (iov) 27.11.10 11:26
(6) никаких споров и дебатов Все мирно и спокойно. перенумераторы писать будут - согласен. Но тут вопрос то не что делает обработка а выкладывать полезные вещи. этот перенумератор может работать в УТ ? Наверняка может. так почему не дополнить его дополнительными функциями? Наверняка у каждого в загашнике свой или чужой многофункциональный перенумератор лежит... Я не исключение мне проще скачать готовое и воспользоваться чем самому писать какую нить банальшину. Так что я не как программист в данном случае а как пользователь. Минуса лепить за работу выполненную и работающую я принципиально не ставлю... Человек старался - делал.
P.S. тем более я понимаю что у автора инстинкт защитный работает и что-то объяснять бесполезно. Тем более человек импульсивный не терпящий критики. Вы уважаемый "Abadonna" в критиков не минусами же бросаетесь а делаете лучше - быстрее- универсальнее... Так что никаких проблем и дебатов лежит и пусть лежит она есть не просит.
8. г. Казань Рустем Гумеров (Rustig) 10.12.10 09:33
Доработал алгоритм под документы, проверил на проблемной базе, сработало отлично. Обработку не выложил, поскольку хоть она не претендует на универсальность. :)
9. г. Казань Рустем Гумеров (Rustig) 16.09.11 13:35
С чего это вдруг эта статья стала "рекомендуемой сообществом"?
У меня есть собственное замечание к своей статье :) : табельный номер присваивается сотруднику (справочник "Сотрудники"), но не ФизЛицу... Инвентарный номер присваивается ОС отдельно от кода элемента справочника ОС, причем только тогда, когда ОС принимается к учету.
так что статья несколько сбивает с толку, но при этом алгоритм установки уникальных кодов в справочниках сохраняет свою востребованность :)
10. Геннадий Малюков (bes-kkm) 28.09.11 13:42
А в Управлении торговлей 8.1 будет работать , а то может нет и смысла скачивать?
11. г. Казань Рустем Гумеров (Rustig) 29.09.11 00:04
(10) на торговле не тестировалась. вы можете взять для себя алгоритм установки уникального номера.
адаптировать под торговлю вам не составит труда, так как я комментировал свой алгоритм.
возможно мне следует выложить в публикации алгоритм, который затем можно будет вставить в "универсальный подбор и обработку данных"...
12. Дмитрий Трошин (dimas_downloader) 04.10.11 10:32
13. mulyukov_rd (mrd_84) 19.11.11 02:15
Штука нужная, безусловно! Мне после переноса данніх из 77 в 8 пригодилась. Сразу по неопыпности об эотм не позаботился вот и возник вопрос. Автор, спасибо тебе! Век живи, век учись!)))
14. mulyukov_rd (mrd_84) 24.11.11 22:13
Штука нужная, безусловно! Мне после переноса данных из 77 в 8 пригодилась. Сразу по неопыпности об эотм не позаботился вот и возник вопрос. Автор, спасибо тебе! Век живи, век учись!)))
15. Олег Кропанев (DaBoogy) 03.12.11 18:54
Доброго дня! У меня РБД на рознице 8,1 на обмене как-то скажется или придется делать образы по новой.
16. finch (fin7) 23.01.12 10:29
Спасибо, применяла для КАМИН:Расчет зароботной платы для бюджетных учреждений ред. 3.5
Работает, жаль, префикс поставить нельзя
17. Евгений Мартыненков (JohnyDeath) 29.02.12 16:15
Зачетный скрин обработки! УФ? )
18. KostyaBu Bu (KostyaBu) 21.03.12 09:51
Обработка убирает бредовые символы, но не перенумеровывает задвоенные коды!!!! Т.о. не выполняет своей основной задачи.
19. KostyaBu Bu (KostyaBu) 21.03.12 09:52
Автор, обработка не дорабатывает
20. г. Казань Рустем Гумеров (Rustig) 21.03.12 15:42
(18), (19) Возможно, друг. Наверное бессмысленно писать, что кому-то обработка помогла... То есть она вполне работоспособна. С вашей стороны было бы профессионально и более корректно обратиться ко мне по-другому, чем, просто "Автор, обработка не дорабатывает".
Например, предварительно отладив код, указав на ошибку. А если вы не разработчик. а например, пользователь, тогда просто вежливо спросите, что вы делаете не так, представившись для начала и описав на какой конфигурации запускаете, скрин-шот с ошибкой или результатами обработки прикрепить. Ну, в общем, сделать шаг навстречу и хоть немного прояснить, что вы делаете и что не получается.
Вообще время для тестирования и исправления уже прошло - посмотрите дату публикации. Я не буду ее пересматривать. Может и уроки вежливости напрасно описывал...
Это старая обработка. Возьмите из нее за основу механизм (посмотрите код и скопируйте) - механизм обхода проблемы неуникального кода и заодно формирования уникального кода.
После публикации, я для себя много раз оптимизировал этот алгоритм и для семерки, и для восьмерки, но не выкладывал исходники кода. Спросите у ребят. которые сказали спасибо за эту обработку - могут ли они помочь вам. Я неоднократно получал помощь от ребят на ИС - просто задавал вопрос, они откликались. И у вас получится. :) Только задавайте вопрос адресно - то есть кому-то конкретно пишите и спрашивайте.
21. KostyaBu Bu (KostyaBu) 22.03.12 13:59
(20) Rustig, Хорошо, на счет корректности признаю, в обработке нехватает малюсенького кусочка кода, для отслеживания задвоенных кодов

кодпредыдущий = "";
Пока Выборка.Следующий() Цикл

Код = СокрЛП(Выборка.Код);

если код = кодпредыдущий тогда
код="";
конецесли;
кодпредыдущий = СокрЛП(Выборка.Код);
Rustig; Niberu; +2 Ответить
22. Станислав Гирман (Niberu) 23.04.13 07:21
Начал смотреть отчего дублирующиеся коды не делает уникальными.
Смотрю, тут уже обсуждалось, понятно.


Интересно, это зачем в коде модуля формы при нажатии кнопки "выполнить"?

Если Ложь Тогда
Об = Справочники.ФизическиеЛица.СоздатьЭлемент();
КонецЕсли;
23. г. Казань Рустем Гумеров (Rustig) 23.04.13 09:48
(22) теперь у переменной Об есть контекст элемента спр-ва ФизЛиц - можешь вызывать экспортные процедуры и необходимые реквизиты физлиц
24. Рустем (mamay) 06.11.13 13:53
А в Бухгалтерия предприятия, редакция 2.0 (2.0.53.4) вообще не запускается, пишет не может быть прочитана текущей версией программы. Было бы справедливым возвращать $m за скачанные, но не работоспособные обработки.
25. г. Казань Рустем Гумеров (Rustig) 29.01.15 01:09
(24) сначала надо открыть в конфигураторе, после чего конфигуратор сам задаст вопрос "Требуется преобразование обработки". Согласитесь с этим. Затем открывайте в пользовательском режиме.

...В кои-то веки пришлось мне сегодня обновлять БП 2.0 до последней версии, при чем конфигуратор при обновлении выдал предупреждение, что коды стали не уникальными в справочнике "Прочие доходы и расходы".

Воспользовался своей обработкой, добавил новый справочник прочих доходов и расходов в процедуре "ПриОткрытии" как описано в публикации. Также закомментировал строку
Если КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) = "Код не уникален!" Тогда 


так как на новой версии платформы краткое представление ошибки не "срабатывает".

Обработка обновила коды, как надо.