Разработка и Конфигурация · 11 мин
Что такое счетчик в 1С и как с ним работать
Что такое счетчик в 1С: нумераторы документов, счетчик в циклах, сброс нумерации, типичные ошибки и способы проверки результата.
Под словом «счетчик» в контексте 1С обычно понимают две разные вещи. Первая — механизм нумерации, который автоматически присваивает номера документам и элементам справочников. Вторая — программный счетчик в цикле, то есть переменная, которая увеличивается на каждом шаге обхода данных. Путаница между этими понятиями часто приводит к ошибкам: бухгалтер ищет «счетчик» в настройках, а программист — в коде модуля.
В платформе 1С:Предприятие 8 нумерация документов реализована через свойства конфигурации: признак автонумерации, длина номера, периодичность и контроль уникальности. Отдельный объект метаданных «Нумераторы» позволяет связать несколько видов документов единой сквозной нумерацией — например, чтобы приходные и расходные кассовые ордера нумеровались в одной последовательности. В старых версиях платформы (1С 7.7) существовал отдельный объект «Счетчики», отсюда и пошло устоявшееся название.
Понимание того, как устроен счетчик, важно на практике: от этого зависит, почему после переноса базы номера документов «сбились», почему появляются дубли номеров и как безопасно исправить нумерацию без ручного перебора тысяч документов.
Что такое счетчик нумерации в 1С
Когда пользователь создает новый документ, платформа автоматически подставляет следующий номер. Этот «следующий» вычисляется не пересчетом всех существующих документов, а на основе внутреннего счетчика, который платформа хранит для каждого вида документов с учетом настроенной периодичности и разделителей (организация, подразделение, префикс базы).
Номер документа в 1С — это строка, а не число. Поэтому номера «000000010» и «000000009» сравниваются по правилам строковой сортировки, а префикс «БП00-» является частью номера. Это объясняет типичные «странности»: документ с номером 100 может оказаться «раньше» документа с номером 99 при сортировке, если длина номера не выровнена.
Ключевые свойства нумерации задаются в конфигураторе на уровне вида документа или справочника: длина номера, автонумерация, контроль уникальности, периодичность (в пределах года, квартала, месяца, дня или непериодическая) и принадлежность к нумератору.
Как платформа присваивает номера
Механизм работает так: при интерактивном создании документа поле номера заполняется автоматически, а фактическое «бронирование» номера происходит при записи. Если два пользователя одновременно создают документы одного вида, оба могут видеть один и тот же предварительный номер, но при записи второй получит следующее значение — либо сообщение о нарушении уникальности, если контроль включен и номер был изменен вручную.
Если пользователь вручную вписал номер, превышающий текущее значение счетчика (например, ввел «000000500», когда очередь была на «000000042»), платформа сдвинет счетчик: следующий автоматический номер будет «000000501». Именно поэтому один ошибочно введенный вручную номер способен «перескочить» сотни значений и нарушить привычную последовательность.
Префикс номера формируется из префикса информационной базы (задается для обменов), префикса организации и других разделителей, если они настроены в конфигурации. Поэтому в распределенных базах и при обмене между филиалами один и тот же счетчик фактически работает в нескольких независимых сериях.
Нумераторы: сквозная нумерация нескольких видов документов
Объект метаданных «Нумератор» связывает несколько видов документов общим счетчиком. Классический сценарий — кассовые документы: приходный и расходный кассовые ордера нумеруются в единой последовательности, чтобы журнал кассы не имел повторяющихся номеров. Для этого у обоих видов документов в свойстве «Нумератор» указывается один и тот же объект.
При добавлении документа в существующий нумератор нужно учитывать, что счетчик уже содержит выданные значения. Новый вид документов начнет получать номера с текущей позиции общего счетчика, а не с единицы. Если методологически требуется независимая нумерация, документ в нумератор включать не следует.
Периодичность и сброс счетчика
Свойство «Периодичность» определяет, в пределах какого интервала номера должны быть уникальны и когда счетчик начинается заново. Чаще всего для документов выбирают периодичность «в пределах года»: с первого января нумерация начинается с начала. Это соответствует делопроизводственной практике, где номера счетов-фактур, приказов и накладных ведутся в рамках календарного года.
Важно понимать: «сброс» происходит автоматически при наступлении нового периода, отдельной команды «обнулить счетчик» в типовом интерфейсе нет. Если нумерация в новом году не началась с единицы, причина обычно в том, что уже создан документ нового периода с ручным номером, либо периодичность в конфигурации настроена иначе, чем ожидает пользователь.
Непериодическая нумерация применяется для объектов, где сквозная уникальность нужна на всем сроке жизни базы — например, для некоторых справочников или внутренних технических документов.
Счетчик как переменная в коде 1С
Во встроенном языке 1С счетчиком называют переменную, которая накапливает количество итераций или найденных элементов. Типовой пример — обход выборки из запроса с подсчетом обработанных строк:
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &Начало И &Конец");
Запрос.УстановитьПараметр("Начало", НачалоМесяца(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Конец", КонецМесяца(ТекущаяДатаСеанса()));
Выборка = Запрос.Выполнить().Выбрать();
Счетчик = 0;
Пока Выборка.Следующий() Цикл
// обработка документа
Счетчик = Счетчик + 1;
КонецЦикла;
Сообщить("Обработано документов: " + Счетчик);
Для обхода коллекций с индексом используют цикл «Для», где переменная цикла сама выполняет роль счетчика: Для Индекс = 0 По Массив.ВГраница() Цикл. Здесь
Если нужно просто узнать количество строк выборки или таблицы значений, не заводите ручной счетчик — используйте метод Количество(). Ручной счетчик оправдан, когда считаются не все строки, а только прошедшие условие, либо когда номер итерации используется внутри цикла.
Как исправить сбитую нумерацию
Признаки проблемы со счетчиком: новые документы получают номера «с середины», появляются дубли номеров, после обмена или переноса данных нумерация продолжается не с того места. Прежде чем что-то исправлять, определите причину — от нее зависит безопасное действие.
Как выбрать действие
Универсальный прием «подвинуть счетчик» — записать документ с нужным последним номером, после чего автонумерация продолжится с следующего значения. Обратного штатного способа «откатить» счетчик вниз нет: если счетчик ушел вперед из-за ошибочного номера, исправляют сам ошибочный документ, а при необходимости используют обработку перенумерации.
Проверка результата после исправлений
После любых действий со счетчиком результат нужно проверить, а не предполагать. Создайте тестовый документ нужного вида и посмотрите предложенный номер, затем удалите тестовый документ — освободившийся номер все равно не будет переиспользован, что тоже стоит учитывать.
Как проверить результат
Платформа предлагает следующий по порядку номер с правильным префиксом
Номер продолжается с большого значения или дублирует существующий
Документы выстраиваются в ожидаемой последовательности
Номера разной длины перемешаны — признак ручных номеров без ведущих нулей
Запрос или отчет не находит пар документов с одинаковым номером в одном периоде
Есть дубли — проверяйте префиксы и ручной ввод
Первый документ нового года получает начальный номер
Нумерация продолжает прошлогоднюю — проверьте периодичность и ручные номера
Для поиска дублей удобен простой запрос: сгруппировать документы вида по номеру и периоду и вывести те группы, где количество больше одного. Это быстрее и надежнее визуального просмотра журнала.
Часто задаваемые вопросы
Можно ли в 1С вручную изменить номер документа?
Да, если у пользователя есть права и в конфигурации не запрещено ручное редактирование номера. Но учитывайте последствия: введенный вручную большой номер сдвигает счетчик, а изменение номера уже переданного контрагенту документа создает расхождения в учете обеих сторон.
Почему после удаления документа его номер не выдается снова?
Платформа хранит последнее выданное значение счетчика и не отслеживает «дырки». Это сделано намеренно: повторная выдача номера удаленного документа привела бы к коллизиям, если ссылка на старый номер сохранилась где-либо. Пропуски в нумерации допустимы и не являются нарушением.
Как сделать, чтобы нумерация каждый год начиналась с единицы?
Установите для вида документа периодичность нумерации «в пределах года» — в типовых конфигурациях это обычно уже настроено. Сброс происходит автоматически при создании первого документа нового периода, отдельная команда не требуется.
Что делать, если в двух базах обмена появляются одинаковые номера?
Настройте разные префиксы информационных баз в параметрах узлов плана обмена. Тогда одинаковые числовые части номеров будут различаться префиксом, и контроль уникальности не нарушится.
Чем счетчик в цикле отличается от функции Количество()?
Метод Количество() возвращает общее число элементов коллекции сразу. Ручной счетчик нужен, когда подсчитываются только элементы, удовлетворяющие условию, либо когда порядковый номер итерации используется в логике обработки — например, для вывода прогресса длительной операции.
Опасно ли запускать обработку перенумерации документов?
Сама по себе обработка безопасна при соблюдении условий: резервная копия, монопольный доступ, перенумерация только открытого периода и согласование с учетной службой. Риск возникает при перенумерации закрытых периодов, где номера уже зафиксированы в отчетности и первичных документах контрагентов.
Что важно запомнить
Счетчик в 1С — это механизм автонумерации, хранящий последнее выданное значение номера, либо переменная-счетчик в циклах кода. Номера удаленных документов не переиспользуются, ручной ввод большого номера сдвигает счетчик вперед, а периодичность определяет автоматический сброс нумерации. Любые исправления нумерации выполняйте после резервной копии и проверяйте результат на тестовом документе.