К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как получить номер документа в 1С

Как получить номер документа в 1С: через интерфейс, запросом и в коде. Префиксы, автонумерация, восстановление последовательности номеров.

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

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

Где посмотреть номер документа в интерфейсе

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

Второй вариант — журнал документов. Колонка «Номер» обычно включена по умолчанию. Если её нет, откройте настройку списка («Ещё» → «Изменить форму» или «Настройка списка» в зависимости от конфигурации) и добавьте колонку. В журнале удобно искать документ по номеру через строку поиска.

Обратите внимание: в списке номер отображается вместе с префиксом, например «00БП-000123». При поиске нужно вводить номер именно в том виде, в каком он хранится, либо использовать поиск по части строки.

Как устроена автонумерация и префиксы

Платформа присваивает номер автоматически на основании нумератора, настроенного в конфигураторе для вида документа. Длина номера, периодичность (в пределах года, месяца или непрерывно) и наличие префикса определяются свойствами объекта метаданных.

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

  • Номер без префикса — обычно в файловой базе без обменов.
  • Префикс базы появляется при настроенном обмене данными между узлами.
  • Префикс организации добавляется в многофирменном учёте, если включена соответствующая настройка.

Получение номера в коде на встроенном языке

Для объекта документа номер доступен как обычный реквизит. Типовые обращения выглядят так:

НомерДокумента = ДокументОбъект.Номер;      // у объекта

НомерДокумента = ДокументСсылка.Номер; // у ссылки (через обращение к базе)

Если нужен следующий номер до записи, используется метод менеджера документа. Однако полагаться на него как на гарантию нельзя: между получением номера и записью другой пользователь может занять этот номер.

// Получить номер без префикса (числовую часть)

ЧисловойНомер = Число(ДокументОбъект.Номер); // только если префикса нет!

Для документов с префиксом прямое преобразование в число вернёт ошибку или ноль. В типовых конфигурациях для разбора номера есть функции общего модуля префиксации (например, получение номера без префикса через штатные механизмы БСП).

bsl
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номер, Дата, Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Дата МЕЖДУ &Начало И &Конец УПОРЯДОЧИТЬ ПО Дата";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
  Сообщить(Результат.Номер);
КонецЦикла;

Получение номера запросом

В запросе номер доступен как стандартное поле «Номер» таблицы документа. Это удобно для выборки документов за период, поиска по номеру или сортировки.

Учтите особенность: сортировка по полю «Номер» выполняется как по строке. Номера «10» и «9» отсортируются так, что «10» окажется раньше «9», потому что сравнение идёт посимвольно. Для числовой сортировки нужно приводить номер к числу через ВЫРАЗИТЬ или сортировать по дате и моменту времени.

Поиск документа по номеру через запрос с условием «Номер = &Номер» требует точного совпадения, включая префикс и ведущие нули. Если пользователь вводит «123», а в базе хранится «00БП-000123», условие не сработает — используйте ПОДОБНО или предварительно дополните номер.

Способы получить номер

Интерфейс (форма, список)

Подходит пользователю без программирования; ограничение — нет массовой обработки.

Обращение к реквизиту в коде

Подходит внутри обработчиков и модулей; требует наличия ссылки или объекта.

Запрос

Подходит для выборок и отчётов; нужно учитывать строковый тип номера и префиксы.

Нумерация после переноса данных и в обменах

При загрузке документов из другой базы номера обычно переносятся «как есть», чтобы сохранить связь с первичкой. Из-за этого в базе могут оказаться номера с чужими префиксами или дубли. Платформа допускает дубли номеров, если у вида документа не включён контроль уникальности, — это свойство нумератора.

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

Восстановление последовательности номеров

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

Общий безопасный порядок действий такой:

Порядок перенумерации
  1. 1
    Сделайте резервную копию базы.
  2. 2
    Определите период и вид документов для перенумерации.
  3. 3
    Запустите штатную обработку перенумерации в монопольном режиме.
  4. 4
    Проверьте несколько документов: номер, дату, печатную форму.
  5. 5
    Сообщите пользователям о новых номерах, если документы уже печатались.

Если штатной обработки нет, перенумерацию выполняют программно: выборкой по дате с присвоением номеров по порядку с учётом префикса. Такую доработку лучше поручить специалисту — ошибка затронет все документы периода.

Типичные ошибки
01
Преобразование номера с префиксом в число напрямую — получение нуля или ошибки.
02
Поиск по номеру без учёта ведущих нулей и префикса — документ «не находится».
03
Попытка прочитать номер до записи документа — поле пустое.
04
Ручная правка номера проведённого документа — расхождение с печатными формами и ЭДО.

Проверка результата и ограничения

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

Контрольные точки

Как проверить результат

Номер в форме документа
Норма

Заполнен, совпадает с номером в списке

Тревожный признак

Пустой или отличается от списка

Печатная форма
Норма

Номер соответствует ожидаемому формату

Тревожный признак

Номер другого документа или с чужим префиксом

Поиск по номеру в журнале
Норма

Документ находится по полному номеру

Тревожный признак

Не находится даже по полной строке — возможен разрыв нумерации

Помните об ограничениях: у незаписанного документа номера нет; у удалённого документа номер освобождается, но платформа по умолчанию не переиспользует его автоматически; в распределённых базах одинаковые номера в разных узлах — штатная ситуация, различение идёт по префиксу.

Итог

Что важно запомнить

Номер документа — строковый системный реквизит, присваиваемый при записи. В интерфейсе его видно в форме и списке, в коде получают через реквизит «Номер» или запрос. Учитывайте префиксы, ведущие нули и не меняйте номера проведённых документов без резервной копии.

Частые вопросы

Почему у нового документа пустой номер?

Номер присваивается платформой только в момент записи. Пока документ не записан, поле номера пустое — это штатное поведение, а не ошибка.

Как найти документ, если известен только номер без префикса?

Используйте поиск в журнале по части номера или запрос с условием ПОДОБНО («Номер ПОДОБНО "%123"»). Точное равенство не сработает из-за префикса и ведущих нулей.

Можно ли задать номер документа вручную?

Да, если в конфигурации поле номера доступно для редактирования. Платформа продолжит нумерацию от введённого значения. Ручной ввод номера проведённого документа делайте только при крайней необходимости и после копии базы.

Почему сортировка по номеру в запросе даёт странный порядок?

Номер — строка, поэтому «10» идёт раньше «9». Сортируйте по дате и ссылке (моменту времени) или приводите номер к числу, если префиксов нет.

Что делать, если появились дубли номеров?

Проверьте, включён ли контроль уникальности в нумераторе вида документа, и нет ли обменов, при которых дубли допустимы. Для устранения используйте штатную перенумерацию за период.

Как получить номер без префикса в типовой конфигурации?

Используйте функции механизма префиксации БСП (общие модули префиксации), которые умеют отделять префикс от числовой части. Самостоятельный разбор строки номера ненадёжен из-за разных форматов префиксов.