Скидання неправильної нумерації об’єктів

  • неправильної

Якось на роботі виникла проблема із нумерацією документів. Користувач ввів номер нового документа вручну, причому замість "000000675" вказав "00_000675". Після цього всі наступні документи стали нумеруватись із префіксом "00_". При цьому ні банальне перезбереження об'єкта з номером "правильного" формату, ні позначка видалення, ні видалення його з бази не допомогли виправити ситуацію. Довелося розбиратися з механізмом автонумерації 1С.

Насамперед я, природно, звернувся до ресурсів ІТС (благо фірма надає таку можливість). Максимум, що я зміг знайти за своєю тематикою, - це дві статті: Автонумерація та Особливості роботи механізму автонумерації. Дані в них, м'яко кажучи, не свіжі і навіть суперечать реальності (наприклад, там стверджується, що для відновлення нумерації достатньо видалити об'єкти), але загальні уявлення про механізм дають. З них стало зрозуміло, що одним із рішень проблеми, що виникла, є встановлення налаштування конфігурації "Режим автонумерації об'єктів" у значення "Звільняти автоматично". Але, по-перше, це не застосовується у разі використання типової конфігурації "на підтримці", а, по-друге, суперечить просувається 1С "новому" режиму нумерації. Тому я продовжив копати далі.

Як з'ясувалося, типових механізмів роботи з автонумерацією, як обробки, звіти та інше, немає. Але, слава Нуралієву, нам надали методи вбудованої мови:ОбновитиНумераціюОб'єктів,ВстановитиНовийКод таВстановитиНовийНомер.

В принципі, вміння використовувати вищезгадану процедуру достатньо, щоб, у разі потреби, виправити нумерацію, але хочеться згадати ще про "максимальний номер". Під "максимальним номером" я маю на увазі номер, виходячи зі значення якогосистема видає таке значення. Як приклад його знання необхідно, щоб визначити, чи нумерація виправлена ​​чи ні.

У 1С немає можливості безпосередньо отримати поточний максимальний номер метаданих. Вирішити цю проблему можна двома способами:

  • використовувати запит;
  • отримати наступний номер, використовуючи методи Встановити Новий Код або Встановити Новий Номер.

Під час формування запиту система зчитує дані бази даних. Можна відсортувати об'єкти за кодом/номером за спаданням, т.ч. верхнім у списку виявиться власник максимального номера. Тут існують такі "загвізди":

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

ВстановитиНовийКод таВстановитиНовийНомер встановлюють код або номер відповідно і заносять це значення до таблиці номерів. При цьому не важливо, чи буде записано об'єкт чи ні, "максимальний номер" все одно буде оновлено на виданий. Таким чином, якщо використовувати ці методи для перевірки, після цього необхіднооновити нумерацію об'єктів.

  • кнопка "Оновити" запускає виконання методу Оновити нумерацію об'єктів;
  • список об'єктів містить результат запиту, що динамічно формується;
  • на результат запиту накладається відбір згідно з властивостями об'єктів метаданих: за власником, батьком або періодом;
  • поле "номер містить" накладає відбір даних коду чи номера;
  • прапор у колонці "Макс." вказує на те, який номер на даний моментоновлення буде вважатися максимальним, всі вищерозташовані об'єкти отримають номер відповідно до зазначеного максимального;
  • під час встановлення прапора "Макс." у всіх вищерозташованих рядках автоматично розраховується новий номер, але запис відбувається лише після натискання кнопки "Оновити";
  • додавання об'єктів до списку недоступне, але можливе ручне перерозподілення рядків, т.ч. Для виправлення нумерації необхідно перемістити об'єкти з номерами, які потребують корекції в позицію над рядком із встановленим прапором "Макс.".