Нумераторы в 1С:Предприятие — это критически важные объекты конфигурации, отвечающие за автоматическую генерацию номеров документов, справочников и других записей. Их потеря или сбой может парализовать работу всей системы: от бухгалтерских проводок до складских операций. Однако многие администраторы и разработчики сталкиваются с проблемой: где именно хранятся эти нумераторы, как к ним получить доступ и что делать, если они «слетели»?
В этой статье мы подробно разберём физическое и логическое расположение нумераторов в разных версиях платформы (8.3, 8.2, 7.7), покажем способы их просмотра и редактирования — от стандартных инструментов конфигуратора до прямых запросов к базе данных. Особое внимание уделим типичным ошибкам, которые приводят к сбою нумерации, и способам их устранения без потери данных.
Материал будет полезен как начинающим администраторам, так и опытным разработчикам, которые хотят глубже понять механизмы работы с нумераторами в 1С. Все инструкции актуальны для файловых и клиент-серверных баз, включая облачные решения.
Что такое нумераторы в 1С и зачем они нужны
Нумератор в 1С:Предприятие — это специальный объект метаданных, который автоматически присваивает уникальные номера документам, элементам справочников или записям регистров. Без него система не смогла бы гарантировать уникальность идентификаторов, что привело бы к дублированию данных и ошибкам при проведении операций.
Основные функции нумераторов:
- 📝 Автоматическая генерация номеров — присваивает следующий свободный номер при создании нового документа или элемента.
- 🔒 Гарантия уникальности — предотвращает дублирование номеров даже при параллельной работе нескольких пользователей.
- 🔄 Контроль последовательности — поддерживает хронологический порядок нумерации (например, для бухгалтерских документов).
- 🛠️ Гибкость настройки — позволяет задавать префиксы, длину номера, разделители и другие параметры.
Нумераторы могут быть глобальными (для всей базы) или локальными (для конкретного документа или справочника). Например, в типовой конфигурации 1С:Бухгалтерия отдельные нумераторы используются для:
- 📄 Счетов-фактур (с префиксом «СФ-»)
- 💰 Платежных поручений (с автоматической привязкой к дате)
- 📦 Накладных (с разделением по складам)
Важно понимать, что нумератор — это не просто счётчик, а полноценный объект конфигурации, который хранит не только текущее значение, но и историю изменений, правила формирования номеров и связи с другими объектами. Именно поэтому его потеря или повреждение может привести к серьезным последствиям, вплоть до невозможности создания новых документов.
Где физически хранятся нумераторы в базе 1С
Локация нумераторов зависит от типа базы данных (файловая или клиент-серверная) и версии платформы. Рассмотрим все варианты:
1. Файловые базы (1С 8.3/8.2)
В файловых базах (с расширением .1CD) нумераторы хранятся непосредственно в бинарном файле базы данных. Их нельзя увидеть «невооружённым глазом» — для доступа требуется:
- 🔧 Конфигуратор 1С:Предприятия (раздел «Администрирование» → «Нумераторы»)
- 🖥️ Прямой запрос к базе через
ВЫБРАТЬ(если нумератор привязан к регистру сведений) - 🔍 Утилиты для анализа структуры
.1CD-файлов (например, 1Cv8.DT или ChDBFl)
Физически данные о нумераторах распределены по нескольким внутренним таблицам базы:
_1SJOURN— журнал изменений (включая обновления нумераторов)_1SCONST— константы (если нумератор реализован через константу)_1SDATA{XX}— таблицы данных (для нумераторов, привязанных к регистрам)
2. Клиент-серверные базы (SQL, PostgreSQL)
В серверных базах (например, Microsoft SQL Server или PostgreSQL) нумераторы хранятся в специальных таблицах, которые создаются автоматически при инициализации базы. Их названия зависят от префикса, заданного при установке:
- 🗃️
[Префикс]_Config— метаданные конфигурации (включая описание нумераторов) - 📊
[Префикс]_1SJOURN— журнал транзакций (изменения номеров) - 🔢
[Префикс]_Sequence— последовательности (для СУБД, поддерживающихSEQUENCE, например, PostgreSQL)
Пример: если префикс базы — DemoBase, то нумераторы могут храниться в таблице DemoBase_Sequence (для PostgreSQL) или в системных объектах SQL Server (например, sys.sequences).
ВывестиСтроку(Метаданные.ПрефиксИменТаблиц());-->
3. Устаревшие версии (1С 7.7)
В 1С:Предприятие 7.7 нумераторы реализованы иначе — они хранятся в файле 1Cv7.DBF (для файловых баз) или в таблице CONFIG (для SQL-баз). Доступ к ним возможен только через:
- 🛠️ Встроенный редактор конфигурации (
Конфигуратор → Сервис → Нумераторы) - 📎 Прямое редактирование
.DBF-файлов утилитами вроде DBF Viewer (рискованно!)
Особенности нумераторов в 1С 7.7
В версии 7.7 нумераторы не поддерживают транзакционность, поэтому при аварийном завершении работы возможны «дыры» в нумерации. Также отсутствует механизм «раздельных нумераторов» для разных организаций или складов — все номера генерируются в общей последовательности.
| Тип базы | Версия 1С | Где хранятся нумераторы | Способ доступа |
|---|---|---|---|
| Файловая | 8.3 / 8.2 | Бинарный файл .1CD (таблицы _1SJOURN, _1SDATA) |
Конфигуратор, запросы, утилиты анализа |
| Клиент-серверная (SQL) | 8.3 | Таблицы [Префикс]_Config, [Префикс]_1SJOURN |
SQL-запросы, конфигуратор |
| Клиент-серверная (PostgreSQL) | 8.3 | Таблица [Префикс]_Sequence или системные SEQUENCE |
pgAdmin, конфигуратор |
| Файловая | 7.7 | Файл 1Cv7.DBF (поле NUMBER) |
Редактор конфигурации, DBF-просмотрщики |
Критическая особенность: в клиент-серверных базах нумераторы могут дублироваться в кэше сервера 1С (файлы *.cd в каталоге %APPDATA%\1C\1Cv8). При сбое кэша возможна потеря актуальных значений номеров!
Как найти и просмотреть нумераторы в конфигураторе
Самый безопасный способ работы с нумераторами — через встроенные инструменты конфигуратора. Рассмотрим пошаговую инструкцию для разных версий платформы.
Способ 1: Через дерево метаданных (1С 8.3/8.2)
Чтобы открыть список нумераторов:
- Запустите 1С:Предприятие в режиме
Конфигуратор. - В дереве метаданных найдите раздел
Общие → Нумераторы(илиНумераторыв корне дерева для старых конфигураций). - Дважды кликните на нужном нумераторе, чтобы открыть его свойства.
В окне свойств вы увидите:
- 📌 Текущее значение (последний выданный номер)
- 🔄 Длина номера (максимальное количество символов)
- 🔠 Префикс и суффикс (например, «ДОК-» или «/2026»)
- 📅 Периодичность (ежемесячная, ежегодная или сквозная нумерация)
Способ 2: Через запрос (универсальный метод)
Если нумератор не виден в дереве метаданных (например, он реализован через регистр сведений), используйте запрос:
ВЫБРАТЬ
Нумератор.Ссылка КАК Ссылка,
Нумератор.ТекущееЗначение КАК ТекущееЗначение
ИЗ
РегистрСведений.Нумераторы КАК Нумератор
Для просмотра всех нумераторов в базе (включая скрытые) подходит запрос:
ВЫБРАТЬ
Метаданные.Нумераторы.Имя КАК Имя,
Метаданные.Нумераторы.Представление КАК Представление
ИЗ
Метаданные.Нумераторы КАК Метаданные.Нумераторы
Убедитесь, что база не используется другими пользователями|
Создайте резервную копию базы|
Запишите текущие значения нумераторов|
Проверьте права доступа (требуется роль "Администратор")
-->
Способ 3: Через журнал регистрации (для отладки)
Если нумератор «завис» или выдаёт ошибки, полезно посмотреть его историю в журнале регистрации:
- Откройте
Администрирование → Журнал регистрации. - Установите фильтр по событию
Изменение нумератора. - Просмотрите, какие операции приводили к изменению значений.
Это поможет выявить:
- 🔍 Внезапные сбросы номеров (например, после обновления конфигурации)
- 🚨 Конфликты при параллельной работе (два пользователя одновременно запросили номер)
- 🔄 Ручные правки (если кто-то вручную сбросил нумератор)
Всегда проверяйте нумераторы после обновления конфигурации! Часто они сбрасываются на значения по умолчанию, что приводит к дублированию номеров.
Как редактировать нумераторы: безопасные способы
Изменение нумераторов — рискованная операция, которая может привести к дублированию номеров или нарушению целостности данных. Рассмотрим безопасные методы редактирования.
1. Изменение через конфигуратор (рекомендуемый способ)
Чтобы изменить текущее значение нумератора:
- Откройте нумератор в дереве метаданных (как описано выше).
- В поле
Текущее значениевведите новое число. - Сохраните изменения (
Ctrl+S).
⚠️ Внимание: если вы укажете значение меньше, чем уже существующие номера в базе, при следующем запросе нумератор может выдать дубликат! Например, если в базе уже есть документ №100, а вы установите текущее значение нумератора на 50, следующий документ получит №51, что приведёт к конфликту с существующим №51.
2. Программное изменение (через код)
Для автоматического обновления нумератора можно использовать скрипт:
Нумератор = Метаданные.Нумераторы.НайтиПоИмени("ИмяНумератора");
Нумератор.ТекущееЗначение = 1000; // Новое значение
Нумератор.Записать();
Пример для нумератора, реализованного через регистр сведений:
Регистр = РегистрыСведений.НумераторыДокументов;
Выборка = Регистр.СоздатьНаборЗаписей();
Выборка.Отбор.ТипДокумента.Установить(Справочники.ТипыДокументов.НайтиПоНаименованию("СчетФактура"));
Выборка.Прочитать();
Если Выборка.Количество() > 0 Тогда
Выборка[0].ТекущийНомер = 500; // Новое значение
Выборка.Записать();
КонецЕсли;
3. Прямое редактирование базы (крайний случай!)
Если нумератор «завис» и не редактируется через конфигуратор, можно обратиться напрямую к базе. Этот метод рискован!
Для файловых баз:
- Используйте утилиту ChDBFl для редактирования таблицы
_1SDATA{XX}. - Найдите запись с типом
Нумератори измените полеValue.
Для SQL-баз:
- Подключитесь к серверу через SQL Server Management Studio или pgAdmin.
- Выполните запрос:
UPDATE [Префикс]_ConfigSET CurrentValue = 1000
WHERE ObjectName = 'ИмяНумератора';
1cv8.exe DESIGNER /IBName "ИмяБазы" /DumpIB "C:\Backup\backup.dt"-->
⚠️ Внимание: в облачных версиях 1С (например, 1С:Фреш) прямое редактирование базы запрещено. Все изменения должны проходить через API или типовой функционал.
Типичные ошибки с нумераторами и как их исправить
Ошибки в работе нумераторов — одна из самых распространённых проблем в 1С. Разберём основные сбои и способы их устранения.
1. Дублирование номеров документов
Причина: нумератор был сброшен на значение, меньшее чем уже существующие номера в базе.
Решение:
- 🔍 Найдите максимальный номер среди существующих документов:
ВЫБРАТЬ МАКСИМУМ(Номер) КАК МаксНомер ИЗ Документ.СчетФактура - 📝 Установите текущее значение нумератора на
МаксНомер + 1. - 🔄 Перепроверьте все связанные документы на дубли.
2. Нумератор «завис» и не выдаёт новые номера
Причина: транзакция не была завершена (например, при аварийном завершении работы 1С).
Решение:
- 🔄 Перезапустите сервер 1С:Предприятия (для клиент-серверного варианта).
- 🗃️ Очистите кэш сервера (папка
%APPDATA%\1C\1Cv8\). - 🛠️ Восстановите нумератор через тестирование и исправление базы (
Администрирование → Тестирование и исправление).
3. Нумератор сбрасывается после обновления конфигурации
Причина: при обновлении конфигурации нумераторы могут возвращаться к значениям по умолчанию.
Решение:
- 📋 Перед обновлением зафиксируйте текущие значения нумераторов (например, в Excel).
- 🔄 После обновления вручную восстановите значения через конфигуратор.
- 🔧 Настройте автоматическое сохранение нумераторов в обработке обновления.
4. Ошибка «Нумератор не найден»
Причина: нумератор был удалён из конфигурации или повреждён.
Решение:
- 🔍 Проверьте, существует ли нумератор в метаданных (
Метаданные.Нумераторы.НайтиПоИмени("Имя")). - 🛠️ Если нумератор удалён, восстановите его из резервной копии или создайте заново.
- 📝 Для временного решения можно заменить нумератор на ручную нумерацию в документе.
| Ошибка | Причина | Решение |
|---|---|---|
| Дублирование номеров | Сброс нумератора на значение ниже существующих | Установить текущее значение = max(существующие номера) + 1 |
| Нумератор «завис» | Незавершённая транзакция | Перезапуск сервера, очистка кэша, тестирование базы |
| Сброс после обновления | Конфигурация сбросила значения по умолчанию | Восстановить значения вручную или через обработку |
| «Нумератор не найден» | Удалён или повреждён | Восстановить из бэкапа или создать заново |
| Ошибка блокировки | Конфликт при параллельной работе | Настроить регламентное задание для разблокировки |
⚠️ Внимание: если в базе используются распределённые нумераторы (например, для разных организаций), при исправлении ошибок учитывайте префиксы и суффиксы. Например, нумератор может выдавать номера вида «ОРГ1-0001» и «ОРГ2-0001» — не путайте их!
Восстановление нумераторов после сбоя
Если нумераторы были утеряны или повреждены, их можно восстановить несколькими способами. Рассмотрим пошаговые инструкции для разных сценариев.
1. Восстановление из резервной копии
Самый надёжный способ — восстановить нумераторы из бэкапа:
- Создайте тестовую копию рабочей базы.
- Восстановите резервную копию в отдельный каталог.
- Откройте восстановленную базу в конфигураторе и экспортируйте нумераторы:
Файл → Сохранить данные → Выгрузить нумераторы (XML) - Импортируйте данные в рабочую базу:
Файл → Загрузить данные → Загрузить нумераторы (XML)
2. Ручное восстановление по журналам
Если бэкапа нет, можно восстановить нумераторы по журналу документов:
- Для каждого типа документов найдите максимальный номер:
ВЫБРАТЬ МАКСИМУМ(Номер) КАК МаксНомер ИЗ Документ.ИмяДокумента - Установите текущее значение нумератора на
МаксНомер + 1. - Повторите для всех нумераторов.
3. Восстановление через SQL-запросы (для опытных)
Для клиент-серверных баз можно восстановить нумераторы напрямую:
- 🗃️ Для Microsoft SQL Server:
SELECT * FROM [Префикс]_Config WHERE ObjectType = 'Sequence' - 🐘 Для PostgreSQL:
SELECT * FROM [Префикс]_sequence;
Чтобы обновить значение:
UPDATE [Префикс]_Config
SET CurrentValue = 1000
WHERE ObjectName = 'НумераторСчетовФактур';
4. Восстановление через обработку
Если нумераторов много, удобнее написать универсальную обработку:
Процедура ВосстановитьВсеНумераторы()
Для Каждого Нумератор Из Метаданные.Нумераторы Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ МАКСИМУМ(Номер) КАК МаксНомер ИЗ Документ." + Нумератор.Имя;
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Нумератор.ТекущееЗначение = 1;
Иначе
Нумератор.ТекущееЗначение = Результат.МаксНомер + 1;
КонецЕсли;
Нумератор.Записать();
КонецЦикла;
КонецПроцедуры
После восстановления нумераторов обязательно проверьте целостность ссылок в базе! Используйте обработку «Проверка ссылочной целостности» из типовой конфигурации.
Как перенести нумераторы при миграции на новую базу
При переносе данных между базами (например, при обновлении конфигурации или переходе на новую версию) нумераторы часто «теряются». Разберём, как их правильно перенести.
1. Перенос через выгрузку/загрузку данных (XML)
Самый безопасный способ:
- В исходной базе выгрузите нумераторы:
Файл → Сохранить данные → Выгрузить нумераторы (XML) - В новой базе загрузите данные:
Файл → Загрузить данные → Загрузить нумераторы (XML)
2. Перенос через обработку
Если стандартная выгрузка не работает, используйте универсальную обработку:
Процедура ЭкспортироватьНумераторы(ПутьКФайлу)
XMLЗапись = Новый ЗаписьXML;
XMLЗапись.ОткрытьФайл(ПутьКФайлу);
XMLЗапись.ЗаписатьОбъявлениеXML();
XMLЗапись.ЗаписатьНачалоЭлемента("Нумераторы");
Для Каждого Нумератор Из Метаданные.Нумераторы Цикл
XMLЗапись.ЗаписатьНачалоЭлемента("Нумератор");
XMLЗапись.ЗаписатьАтрибут("Имя", Нумератор.Имя);
XMLЗапись.ЗаписатьАтрибут("ТекущееЗначение", Нумератор.ТекущееЗначение);
XMLЗапись.ЗаписатьКонецЭлемента(); // Нумератор
КонецЦикла;
XMLЗапись.ЗаписатьКонецЭлемента(); // Нумераторы
XMLЗапись.Закрыть();
КонецПроцедуры
Для импорта:
Процедура ИмпортироватьНумераторы(ПутьКФайлу)
XMLЧтение = Новый ЧтениеXML;
XMLЧтение.ОткрытьФайл(ПутьКФайлу);
Пока XMLЧтение.Прочитать() Цикл
Если XMLЧтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И XMLЧтение.Имя = "Нумератор" Тогда
Имя = XMLЧтение.ПолучитьАтрибут("Имя");
Значение = XMLЧтение.ПолучитьАтрибут("ТекущееЗначение");
Нумератор = Метаданные.Нумераторы.НайтиПоИмени(Имя);
Нумератор.ТекущееЗначение = Значение;
Нумератор.Записать();
КонецЕсли;
КонецЦикла;
XMLЧтение.Закрыть();
КонецПроцедуры
3. Перенос через прямые SQL-запросы
Для клиент-серверных баз можно перенести нумераторы напрямую:
- Экспортируйте данные из исходной базы:
SELECT ObjectName, CurrentValue FROM [Префикс]_Config WHERE ObjectType = 'Sequence' - И