При настройке учета или изменении структуры информационных баз 1С часто возникает необходимость изменить или полностью удалить префикс информационной базы либо префикс организации. Однако после изменения настроек программы ранее созданные документы сохраняют старые номера с прежними префиксами. Проанализируем, почему возникает такая ситуация, какие ошибки чаще всего допускают пользователи при попытке массово перенумеровать документы и как выполнить эту процедуру безопасно без нарушения учета.
Механизм автоматической генерации номеров в платформе 1С:Предприятие устроен так, что при создании нового документа система анализирует максимальный номер в текущем периоде нумерации (как правило, это календарный год) с учетом заданного префикса. Если в информационной базе за текущий год уже имеются документы со старым префиксом (например, АК000000001), платформа будет продолжать ориентироваться на эту цепочку номеров.
Кроме того, платформа кэширует последний выданный номер в текущем сеансе. Поэтому простое изменение настроек префикса в параметрах учета не приводит к автоматическому обновлению номеров у уже существующих документов.
Разберем типичную ошибку, которую часто совершают пользователи. При попытке очистить номера через групповую обработку документы снимают с проведения, очищают строковое поле номера, а затем проводят документы заново. Такой подход несет в себе критические риски для информационной базы:
Рассмотрим безопасный метод исправления номеров без снятия с проведения и без риска перезаписи движений в регистрах. Для этого используется программная обработка с отключением проверок при записи объекта.
Установка флага ДокументОбъект.ОбменДанными.Загрузка = Истина позволяет записать новый номер объекта напрямую, минуя обработчики событий проведения и проверки дат запрета изменения данных. Запись выполняется в режиме РежимЗаписиДокумента.Запись.
Посмотрим на пример программного кода для пакетной замены префикса:
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачалоПериода, КонецПериода);
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.ПолучитьОбъект();
// Проверяем наличие старого префикса и формируем новый номер
Если Лев(ДокОбъект.Номер, 2) = "АК" Тогда
НовыйНомер = "1" + Сред(ДокОбъект.Номер, 3);
ДокОбъект.ОбменДанными.Загрузка = Истина;
ДокОбъект.Номер = НовыйНомер;
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
Исключение
Сообщить("Ошибка при записи документа: " + ДокОбъект.Ссылка + " - " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если нет возможности писать собственный код, разберем типовые инструменты:
После ручного или программного изменения номеров платформа может продолжить выдавать старые префиксы или выдавать ошибку «Значение поля "Номер" не уникально». Чтобы обновить кэш механизма автонумерации платформы, выполним метод глобального контекста ОбновитьНумерациюОбъектов().
Вызов метода можно выполнить в окне «Выполнить произвольный алгоритм» любой сервисной обработки или через внешнюю обработку:
// Обновление нумерации для конкретного типа документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
// Либо полное обновление нумерации для всех объектов метаданных базы
ОбновитьНумерациюОбъектов();
Выясним главное правило работы с префиксами: исторические документы в закрытых периодах перенумеровывать не рекомендуется. Смену префикса лучше всего привязывать к началу нового календарного года или финансового периода, а любые массовые изменения номеров производить исключительно в режиме обычной записи без перепроведения документов.