При работе в программе «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с ситуацией, когда при принятии основного средства к учету система предлагает некорректный или произвольный инвентарный номер. Это происходит из-за особенностей работы механизма автонумерации платформы и тесной связи между справочником основных средств и регистрами бухгалтерского учета. В этой статье мы подробно разберем, как устроена нумерация, и рассмотрим способы ее восстановления — от простых пользовательских манипуляций до программных правок.
Прежде чем приступать к исправлениям, проанализируем, откуда программа берет данные. В типовой конфигурации «Бухгалтерия предприятия 3.0» инвентарный номер объекта при его принятии к учету по умолчанию приравнивается к значению реквизита Код элемента справочника ОсновныеСредства. Рассмотрим фрагмент типового кода, который за это отвечает:
&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
ЭлементКоллекции = Элементы.ОС.ТекущиеДанные;
Если ЗначениеЗаполнено(ЭлементКоллекции.ОсновноеСредство) Тогда
// Программа получает код из карточки ОС и подставляет его как инвентарный номер
ЭлементКоллекции.ИнвентарныйНомер = ПолучитьКод(ЭлементКоллекции.ОсновноеСредство);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьКод(Знач ОС)
Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОС, "Код");
КонецФункции
Таким образом, если вы хотите, чтобы инвентарный номер был «600001», этот номер должен быть записан в поле Код соответствующего элемента в справочнике Основные средства. Если нумерация «сбилась», значит, в справочнике появился элемент с кодом, который нарушает логику последовательности платформы.
Это самый простой и рекомендуемый способ для бухгалтера. Проблема часто заключается в том, что поле Код в карточке основного средства скрыто по умолчанию. Выясним, как его отобразить и исправить.
Код и установим напротив него флажок. Нажмем ОК. Теперь рядом с наименованием появится поле с кодом (инвентарным номером).Важный момент: Коды в 1С являются строковыми данными. Для корректной сортировки важно соблюдать одинаковую длину номеров. Например, если вы используете номер «9», а затем «10», то с точки зрения системы «9» будет больше «10» (поскольку первый символ «9» старше «1»). Чтобы избежать путаницы, используйте ведущие нули: 00000009, 00000010.
Если в базе данных накопилось много объектов с «кривыми» номерами (например, смесь префиксов ОС_ и чисто числовых значений), стандартная автонумерация по справочнику может работать непредсказуемо. В этом случае мы можем переопределить логику получения номера в документе ПринятиеКУчетуОС.
Рассмотрим вариант реализации функции, которая будет искать не просто максимальный код в справочнике, а последний фактически использованный инвентарный номер в регистре сведений ПервоначальныеСведенияОСБухгалтерскийУчет, ориентируясь на дату (период) записи:
&НаСервереБезКонтекста
Функция ПолучитьСледующийИнвентарныйНомер(Ссылка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Рег.ИнвентарныйНомер КАК ИнвентарныйНомер
|ИЗ
| РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет КАК Рег
|ГДЕ
| Рег.Регистратор <> &Ссылка
|УПОРЯДОЧИТЬ ПО
| Рег.Период УБЫВ"; // Берем самый свежий по времени номер
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ПоследнийНомер = СокрП(Выборка.ИнвентарныйНомер);
// Здесь можно добавить логику увеличения строкового номера на +1
// Используя стандартные механизмы или строковые функции
Возврат СформироватьНовыйНомер(ПоследнийНомер);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Проанализируем этот подход: использование запроса к регистру сведений позволяет игнорировать «мусорные» коды в справочнике ОС, которые еще не были приняты к учету. Однако помните, что такое решение требует создания расширения конфигурации, чтобы не снимать программу с поддержки.
Разберем основные рекомендации, которые помогут сохранить порядок в инвентарных номерах:
БП00-), старайтесь придерживаться этой структуры.1234567890 (10 символов) — система его обрежет или выдаст ошибку.Проанализировав ситуацию, мы видим, что в большинстве случаев проблема решается обычным выводом поля Код в карточке ОС и однократным исправлением номера на нужный. После этого платформа подхватит заданный темп нумерации и продолжит его автоматически.