Нулиране на неправилно номериране на обекти

  • нулиране

По някакъв начин на работа имаше проблем с номерирането на документите. Потребителят въвежда ръчно номера на новия документ, като вместо "000000675" посочва "00_000675". След това всички последващи документи започнаха да се номерират с префикс "00_". В същото време нито баналното повторно запазване на обекта с номера на „правилния“ формат, нито маркирането за изтриване, нито изтриването му от базата данни помогнаха да се коригира ситуацията. Трябваше да се справя с механизма за автоматично номериране 1C.

На първо място, разбира се, се обърнах към ресурсите на ITS (за щастие компанията предоставя такава възможност). Максимумът, който можах да намеря по моята тема, бяха две статии Автоматично номериране и Характеристики на механизма за автоматично номериране. Данните в тях, меко казано, не са свежи и някъде дори противоречат на реалността (например там се твърди, че за възстановяване на номерацията е достатъчно да се изтрият обекти), но дават общи идеи за механизма. От тях стана ясно, че едно от решенията на проблема е настройката на конфигурацията „Режим на автоматично номериране на обекти“ да бъде зададена на „Освобождаване автоматично“. Но, първо, това не е приложимо в случай на използване на типична конфигурация „при поддръжка“ и, второ, противоречи на „новия“ режим на номериране, насърчаван от 1C. Така че продължих да копая по-нататък.

Както се оказа, няма типични механизми за работа с автоматично номериране, обработка по някакъв начин, отчети и т.н. Но благодарение на Нуралиев ни бяха предоставени вградените езикови методи:UpdateObjectNumber,SetNewCode иSetNewNumber.

По принцип възможността за използване на горната процедура е достатъчна, ако е необходимо, да се коригира номерацията, но бих искал да спомена и „максималния брой“. Под „максимален брой“ имам предвид числото, чиято стойностсистемата извежда следната стойност. Като пример, познаването му е необходимо, за да се определи дали номерирането е правилно или не.

В 1C няма начин директно да получите текущия максимален номер на обект на метаданни. Има два начина за решаване на този проблем:

  • заявка за използване;
  • вземете следващото число с помощта на методите SetNewCode или SetNewNumber.

При формиране на заявка системата чете данните от базата данни. Можете да сортирате обекти по код/номер в низходящ ред, т.е. най-високият брой ще бъде в горната част на списъка. Тук има следните "кукички":

  • резултатът няма да съдържа данни за заети номера, а само за записани;
  • сортирането не винаги извежда "максималните" числа от гледна точка на системата до върха (например обект с номер "0_01" в резултат на заявката ще се намира под номер "0001", но когато се въведе нов обект, ще му бъде присвоен номер с префикс "0_" ).

SetNewCode иSetNewNumber задават съответно кода или числото и въвеждат тази стойност в числовата таблица. В този случай няма значение дали обектът е написан или не, "максималния брой" ще бъде актуализиран до издадения. По този начин, ако използвате тези методи за проверка, тогава след това трябва даактуализирате номерацията на обектите.

  • бутонът "Обнови" стартира изпълнението на метода Обновяване на номерирането на обекти;
  • списъкът с обекти съдържа резултат от динамично генерирана заявка;
  • резултатът от заявката се филтрира според свойствата на обектите с метаданни: по собственик, родител или период;
  • полето "номерът съдържа" налага избор на кода или данните за номера;
  • флаг в колоната "Макс." показва кой номер е в моментаактуализациите ще се считат за максимални, всички обекти нагоре по веригата ще получат номер според определения максимум;
  • при задаване на флаг "Макс." във всички редове по-горе автоматично се изчислява нов номер, но въвеждането става само след натискане на бутона "Актуализиране";
  • добавянето на обекти към списъка не е налично, но е възможно ръчно преразпределение на низове, т.е. за коригиране на номерацията е необходимо обектите с номера, които изискват корекция, да се преместят на позиция над линията с поставен флаг "Макс".