Разработка и Конфигурация · 8 мин
Как получить номер документа в 1С
Как получить номер документа в 1С: через интерфейс, запросом и в коде. Префиксы, автонумерация, восстановление последовательности номеров.
Номер документа в 1С — это системный реквизит, который платформа присваивает автоматически при записи объекта. Получить его можно несколькими способами: посмотреть в форме документа, вывести в списке, извлечь запросом или обратиться к реквизиту «Номер» в коде на встроенном языке. Выбор способа зависит от задачи: бухгалтеру достаточно интерфейса, а разработчику нужны программные методы.
Важно понимать, что номер хранится как строка, даже если выглядит как число. Поэтому сравнение номеров «как чисел» и попытки арифметики с ними — частый источник ошибок. Кроме того, номер присваивается только в момент записи: у нового, ещё не записанного документа номер пустой.
Где посмотреть номер документа в интерфейсе
Самый простой способ — открыть сам документ. В типовых конфигурациях номер отображается рядом с датой в шапке формы. Если документ ещё не записан, поле номера будет пустым или содержать заглушку — это нормально, номер появится после нажатия «Записать» или «Провести».
Второй вариант — журнал документов. Колонка «Номер» обычно включена по умолчанию. Если её нет, откройте настройку списка («Ещё» → «Изменить форму» или «Настройка списка» в зависимости от конфигурации) и добавьте колонку. В журнале удобно искать документ по номеру через строку поиска.
Обратите внимание: в списке номер отображается вместе с префиксом, например «00БП-000123». При поиске нужно вводить номер именно в том виде, в каком он хранится, либо использовать поиск по части строки.
Как устроена автонумерация и префиксы
Платформа присваивает номер автоматически на основании нумератора, настроенного в конфигураторе для вида документа. Длина номера, периодичность (в пределах года, месяца или непрерывно) и наличие префикса определяются свойствами объекта метаданных.
Префикс формируется из нескольких частей: префикс информационной базы (задаётся в настройках обмена данными), префикс организации и иногда префикс подразделения. Механизм префиксации в типовых конфигурациях реализован через подписки на события БСП (библиотека стандартных подсистем), поэтому в разных конфигурациях логика может отличаться.
- Номер без префикса — обычно в файловой базе без обменов.
- Префикс базы появляется при настроенном обмене данными между узлами.
- Префикс организации добавляется в многофирменном учёте, если включена соответствующая настройка.
Получение номера в коде на встроенном языке
Для объекта документа номер доступен как обычный реквизит. Типовые обращения выглядят так:
НомерДокумента = ДокументОбъект.Номер; // у объекта
НомерДокумента = ДокументСсылка.Номер; // у ссылки (через обращение к базе)
Если нужен следующий номер до записи, используется метод менеджера документа. Однако полагаться на него как на гарантию нельзя: между получением номера и записью другой пользователь может занять этот номер.
// Получить номер без префикса (числовую часть)
ЧисловойНомер = Число(ДокументОбъект.Номер); // только если префикса нет!
Для документов с префиксом прямое преобразование в число вернёт ошибку или ноль. В типовых конфигурациях для разбора номера есть функции общего модуля префиксации (например, получение номера без префикса через штатные механизмы БСП).
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номер, Дата, Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Дата МЕЖДУ &Начало И &Конец УПОРЯДОЧИТЬ ПО Дата";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщить(Результат.Номер);
КонецЦикла;Получение номера запросом
В запросе номер доступен как стандартное поле «Номер» таблицы документа. Это удобно для выборки документов за период, поиска по номеру или сортировки.
Учтите особенность: сортировка по полю «Номер» выполняется как по строке. Номера «10» и «9» отсортируются так, что «10» окажется раньше «9», потому что сравнение идёт посимвольно. Для числовой сортировки нужно приводить номер к числу через ВЫРАЗИТЬ или сортировать по дате и моменту времени.
Поиск документа по номеру через запрос с условием «Номер = &Номер» требует точного совпадения, включая префикс и ведущие нули. Если пользователь вводит «123», а в базе хранится «00БП-000123», условие не сработает — используйте ПОДОБНО или предварительно дополните номер.
Способы получить номер
Подходит пользователю без программирования; ограничение — нет массовой обработки.
Подходит внутри обработчиков и модулей; требует наличия ссылки или объекта.
Подходит для выборок и отчётов; нужно учитывать строковый тип номера и префиксы.
Нумерация после переноса данных и в обменах
При загрузке документов из другой базы номера обычно переносятся «как есть», чтобы сохранить связь с первичкой. Из-за этого в базе могут оказаться номера с чужими префиксами или дубли. Платформа допускает дубли номеров, если у вида документа не включён контроль уникальности, — это свойство нумератора.
Если после переноса новые документы получают номера, конфликтующие с загруженными, потребуется сдвинуть нумерацию. Для этого вручную создают документ с номером больше максимального загруженного, либо используют обработки установки номера. Делать это следует в монопольном режиме и после резервной копии.
Восстановление последовательности номеров
Если документы создавались задним числом или удалялись, в нумерации появляются разрывы и нехронологичность. Типовые конфигурации часто включают обработку или регламентное задание перенумерации; в отраслевых решениях она может называться «Восстановление нумерации документов».
Общий безопасный порядок действий такой:
- 1Сделайте резервную копию базы.
- 2Определите период и вид документов для перенумерации.
- 3Запустите штатную обработку перенумерации в монопольном режиме.
- 4Проверьте несколько документов: номер, дату, печатную форму.
- 5Сообщите пользователям о новых номерах, если документы уже печатались.
Если штатной обработки нет, перенумерацию выполняют программно: выборкой по дате с присвоением номеров по порядку с учётом префикса. Такую доработку лучше поручить специалисту — ошибка затронет все документы периода.
Проверка результата и ограничения
После получения номера любым способом проверьте его в форме документа и на печатной форме: они должны совпадать. Если в печатной форме номер отличается (например, без префикса), это нормально для типовых макетов, где префикс обрезается намеренно.
Как проверить результат
Заполнен, совпадает с номером в списке
Пустой или отличается от списка
Номер соответствует ожидаемому формату
Номер другого документа или с чужим префиксом
Документ находится по полному номеру
Не находится даже по полной строке — возможен разрыв нумерации
Помните об ограничениях: у незаписанного документа номера нет; у удалённого документа номер освобождается, но платформа по умолчанию не переиспользует его автоматически; в распределённых базах одинаковые номера в разных узлах — штатная ситуация, различение идёт по префиксу.
Что важно запомнить
Номер документа — строковый системный реквизит, присваиваемый при записи. В интерфейсе его видно в форме и списке, в коде получают через реквизит «Номер» или запрос. Учитывайте префиксы, ведущие нули и не меняйте номера проведённых документов без резервной копии.
Частые вопросы
Почему у нового документа пустой номер?
Номер присваивается платформой только в момент записи. Пока документ не записан, поле номера пустое — это штатное поведение, а не ошибка.
Как найти документ, если известен только номер без префикса?
Используйте поиск в журнале по части номера или запрос с условием ПОДОБНО («Номер ПОДОБНО "%123"»). Точное равенство не сработает из-за префикса и ведущих нулей.
Можно ли задать номер документа вручную?
Да, если в конфигурации поле номера доступно для редактирования. Платформа продолжит нумерацию от введённого значения. Ручной ввод номера проведённого документа делайте только при крайней необходимости и после копии базы.
Почему сортировка по номеру в запросе даёт странный порядок?
Номер — строка, поэтому «10» идёт раньше «9». Сортируйте по дате и ссылке (моменту времени) или приводите номер к числу, если префиксов нет.
Что делать, если появились дубли номеров?
Проверьте, включён ли контроль уникальности в нумераторе вида документа, и нет ли обменов, при которых дубли допустимы. Для устранения используйте штатную перенумерацию за период.
Как получить номер без префикса в типовой конфигурации?
Используйте функции механизма префиксации БСП (общие модули префиксации), которые умеют отделять префикс от числовой части. Самостоятельный разбор строки номера ненадёжен из-за разных форматов префиксов.