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

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

Что такое счетчик в 1С и как с ним работать

Что такое счетчик в 1С: нумераторы документов, счетчик в циклах, сброс нумерации, типичные ошибки и способы проверки результата.

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

В платформе 1С:Предприятие 8 нумерация документов реализована через свойства конфигурации: признак автонумерации, длина номера, периодичность и контроль уникальности. Отдельный объект метаданных «Нумераторы» позволяет связать несколько видов документов единой сквозной нумерацией — например, чтобы приходные и расходные кассовые ордера нумеровались в одной последовательности. В старых версиях платформы (1С 7.7) существовал отдельный объект «Счетчики», отсюда и пошло устоявшееся название.

Понимание того, как устроен счетчик, важно на практике: от этого зависит, почему после переноса базы номера документов «сбились», почему появляются дубли номеров и как безопасно исправить нумерацию без ручного перебора тысяч документов.

Что такое счетчик нумерации в 1С

Когда пользователь создает новый документ, платформа автоматически подставляет следующий номер. Этот «следующий» вычисляется не пересчетом всех существующих документов, а на основе внутреннего счетчика, который платформа хранит для каждого вида документов с учетом настроенной периодичности и разделителей (организация, подразделение, префикс базы).

Номер документа в 1С — это строка, а не число. Поэтому номера «000000010» и «000000009» сравниваются по правилам строковой сортировки, а префикс «БП00-» является частью номера. Это объясняет типичные «странности»: документ с номером 100 может оказаться «раньше» документа с номером 99 при сортировке, если длина номера не выровнена.

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

Как платформа присваивает номера

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

Если пользователь вручную вписал номер, превышающий текущее значение счетчика (например, ввел «000000500», когда очередь была на «000000042»), платформа сдвинет счетчик: следующий автоматический номер будет «000000501». Именно поэтому один ошибочно введенный вручную номер способен «перескочить» сотни значений и нарушить привычную последовательность.

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

Нумераторы: сквозная нумерация нескольких видов документов

Объект метаданных «Нумератор» связывает несколько видов документов общим счетчиком. Классический сценарий — кассовые документы: приходный и расходный кассовые ордера нумеруются в единой последовательности, чтобы журнал кассы не имел повторяющихся номеров. Для этого у обоих видов документов в свойстве «Нумератор» указывается один и тот же объект.

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

Типичные ошибки
01
Включение документа в нумератор после начала эксплуатации: новые документы получают номера из чужой последовательности и нумерация выглядит «сломанной».
02
Ручной ввод произвольного номера без понимания последствий: счетчик сдвигается, и автонумерация перескакивает диапазон.
03
Изменение длины номера в меньшую сторону: старые длинные номера перестают корректно сортироваться и могут конфликтовать с контролем уникальности.
04
Попытка «сбросить счетчик» удалением документов: удаленные номера автоматически не переиспользуются, а учетные последствия удаления гораздо серьезнее.

Периодичность и сброс счетчика

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

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

Непериодическая нумерация применяется для объектов, где сквозная уникальность нужна на всем сроке жизни базы — например, для некоторых справочников или внутренних технических документов.

Счетчик как переменная в коде 1С

Во встроенном языке 1С счетчиком называют переменную, которая накапливает количество итераций или найденных элементов. Типовой пример — обход выборки из запроса с подсчетом обработанных строк:

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг

|ГДЕ Дата МЕЖДУ &Начало И &Конец");

Запрос.УстановитьПараметр("Начало", НачалоМесяца(ТекущаяДатаСеанса()));

Запрос.УстановитьПараметр("Конец", КонецМесяца(ТекущаяДатаСеанса()));

Выборка = Запрос.Выполнить().Выбрать();

Счетчик = 0;

Пока Выборка.Следующий() Цикл

// обработка документа

Счетчик = Счетчик + 1;

КонецЦикла;

Сообщить("Обработано документов: " + Счетчик);

Для обхода коллекций с индексом используют цикл «Для», где переменная цикла сама выполняет роль счетчика: Для Индекс = 0 По Массив.ВГраница() Цикл. Здесь

Если нужно просто узнать количество строк выборки или таблицы значений, не заводите ручной счетчик — используйте метод Количество(). Ручной счетчик оправдан, когда считаются не все строки, а только прошедшие условие, либо когда номер итерации используется внутри цикла.
ПЗ
Практическое замечание

Как исправить сбитую нумерацию

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

Маршрут решения

Как выбрать действие

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

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

Проверка результата после исправлений

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

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

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

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

Платформа предлагает следующий по порядку номер с правильным префиксом

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

Номер продолжается с большого значения или дублирует существующий

Сортировка журнала по номеру
Норма

Документы выстраиваются в ожидаемой последовательности

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

Номера разной длины перемешаны — признак ручных номеров без ведущих нулей

Уникальность в пределах периода
Норма

Запрос или отчет не находит пар документов с одинаковым номером в одном периоде

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

Есть дубли — проверяйте префиксы и ручной ввод

Нумерация нового периода
Норма

Первый документ нового года получает начальный номер

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

Нумерация продолжает прошлогоднюю — проверьте периодичность и ручные номера

Для поиска дублей удобен простой запрос: сгруппировать документы вида по номеру и периоду и вывести те группы, где количество больше одного. Это быстрее и надежнее визуального просмотра журнала.

Часто задаваемые вопросы

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

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

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

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

Как сделать, чтобы нумерация каждый год начиналась с единицы?

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

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

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

Чем счетчик в цикле отличается от функции Количество()?

Метод Количество() возвращает общее число элементов коллекции сразу. Ручной счетчик нужен, когда подсчитываются только элементы, удовлетворяющие условию, либо когда порядковый номер итерации используется в логике обработки — например, для вывода прогресса длительной операции.

Опасно ли запускать обработку перенумерации документов?

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

Итог

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

Счетчик в 1С — это механизм автонумерации, хранящий последнее выданное значение номера, либо переменная-счетчик в циклах кода. Номера удаленных документов не переиспользуются, ручной ввод большого номера сдвигает счетчик вперед, а периодичность определяет автоматический сброс нумерации. Любые исправления нумерации выполняйте после резервной копии и проверяйте результат на тестовом документе.