Как настроить автоматическую нумерацию инвентарных номеров в 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе в программе «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с ситуацией, когда при принятии основного средства к учету система предлагает некорректный или произвольный инвентарный номер. Это происходит из-за особенностей работы механизма автонумерации платформы и тесной связи между справочником основных средств и регистрами бухгалтерского учета. В этой статье мы подробно разберем, как устроена нумерация, и рассмотрим способы ее восстановления — от простых пользовательских манипуляций до программных правок.

Связь кода основного средства и инвентарного номера

Прежде чем приступать к исправлениям, проанализируем, откуда программа берет данные. В типовой конфигурации «Бухгалтерия предприятия 3.0» инвентарный номер объекта при его принятии к учету по умолчанию приравнивается к значению реквизита Код элемента справочника ОсновныеСредства. Рассмотрим фрагмент типового кода, который за это отвечает:


&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
    ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
    Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
        // Программа получает код из карточки ОС и подставляет его как инвентарный номер
        ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
    Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
КонецФункции

Таким образом, если вы хотите, чтобы инвентарный номер был «600001», этот номер должен быть записан в поле Код соответствующего элемента в справочнике Основные средства. Если нумерация «сбилась», значит, в справочнике появился элемент с кодом, который нарушает логику последовательности платформы.

Способ 1: Восстановление нумерации вручную через справочник

Это самый простой и рекомендуемый способ для бухгалтера. Проблема часто заключается в том, что поле Код в карточке основного средства скрыто по умолчанию. Выясним, как его отобразить и исправить.

  1. Откроем справочник Основные средства (раздел Справочники — ОС и НМА).
  2. Зайдем в карточку любого основного средства. Если поле Код не отображается, нажмем кнопку Еще в правом верхнем углу формы и выберем пункт Изменить форму.
  3. В появившемся окне найдем в списке реквизитов элемент Код и установим напротив него флажок. Нажмем ОК. Теперь рядом с наименованием появится поле с кодом (инвентарным номером).
  4. Главный секрет автонумерации: Платформа 1С всегда ищет последний (максимальный) номер в базе и прибавляет к нему единицу. Если вы хотите, чтобы следующий номер был 6007090, вам нужно найти последнее созданное ОС и вручную изменить его код на 6007089.
  5. После ручного изменения и сохранения карточки, при создании следующего элемента справочника программа автоматически предложит номер 6007090.

Важный момент: Коды в 1С являются строковыми данными. Для корректной сортировки важно соблюдать одинаковую длину номеров. Например, если вы используете номер «9», а затем «10», то с точки зрения системы «9» будет больше «10» (поскольку первый символ «9» старше «1»). Чтобы избежать путаницы, используйте ведущие нули: 00000009, 00000010.

Способ 2: Программная корректировка логики (для программистов)

Если в базе данных накопилось много объектов с «кривыми» номерами (например, смесь префиксов ОС_ и чисто числовых значений), стандартная автонумерация по справочнику может работать непредсказуемо. В этом случае мы можем переопределить логику получения номера в документе ПринятиеКУчетуОС.

Рассмотрим вариант реализации функции, которая будет искать не просто максимальный код в справочнике, а последний фактически использованный инвентарный номер в регистре сведений ПервоначальныеСведенияОСБухгалтерскийУчет, ориентируясь на дату (период) записи:


&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(Ссылка)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Рег.ИнвентарныйНомер КАК ИнвентарныйНомер
        |ИЗ
        |    РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК Рег
        |ГДЕ
        |    Рег.Регистратор <> &Ссылка
        |УПОРЯДОЧИТЬ ПО
        |    Рег.Период УБЫВ"; // Берем самый свежий по времени номер
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        ПоследнийНомер = СокрП(Выборка.ИнвентарныйНомер);
        // Здесь можно добавить логику увеличения строкового номера на +1
        // Используя стандартные механизмы или строковые функции
        Возврат СформироватьНовыйНомер(ПоследнийНомер); 
    КонецЕсли;
    
    Возврат Неопределено;
КонецФункции

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

Как избежать ошибок в будущем?

Разберем основные рекомендации, которые помогут сохранить порядок в инвентарных номерах:

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

← На главную