Как правильно настроить нумерацию документов без префикса в 1С 7.7?

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Почему 1С 7.7 подставляет чужой префикс: особенности автонумерации

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

  1. Символы букв кириллицы и латиницы в кодовой таблице располагаются после цифр от 0 до 9.
  2. Любой номер, начинающийся с буквы (например, ИП000001), при строковом сравнении всегда строго больше любого номера той же длины, начинающегося с цифры (например, 00000001).
  3. Когда вызывается метод УстановитьНовыйНомер("") с пустой строкой (или метод без параметров), система пытается найти максимальный номер документа данного вида за текущий период. Обнаружив номер с префиксом ИП, платформа принимает эту буквенную часть за текущий действующий шаблон префикса и инкрементирует именно его числовую часть.

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

Решение 1. Использование цифрового префикса «0» при назначении номера

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

Посмотрим на типовой программный фрагмент пересчета номера при смене юридического лица документа:


Если Конт.ЮрЛицо <> ЮрЛицоФирмы Тогда
    // Если префикс не задан, используем цифровой префикс "0"
    ПрефиксЮрЛица = СокрЛП(ЮрЛицоФирмы.ПрефиксНомеровДокументов);
    ПрефиксДляУстановки = ?(ПрефиксЮрЛица = "", "0", ПрефиксЮрЛица);
    
    Конт.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + ПрефиксДляУстановки);
    Конт.ЮрЛицо = ЮрЛицоФирмы;
КонецЕсли;

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


Док = СоздатьОбъект("Документ.Реализация");
Док.Новый();
Док.ДатаДок = ТекущаяДата();
Док.Фирма = ВыбФирма;
Док.ЮрЛицо = ВыбФирма.ЮрЛицо;

// Назначаем номер с цифровым префиксом "0"
Док.УстановитьНовыйНомер("0");

В результате платформа проигнорирует документы с префиксом ИП и сформирует правильный следующий номер вида 00000123.

Решение 2. Установка префикса «0» в реквизитах справочника

Если в конфигурации логика автонумерации вынесена в глобальный модуль и привязана к реквизиту префикса у юридического лица (например, ПрефиксНомеровДокументов в справочнике Фирмы или ЮрЛица), можно указать значение 0 непосредственно в карточке организации без изменения программного кода.

Рассмотрим порядок действий:

  1. Открываем справочник юридических лиц или собственных фирм.
  2. Для организации, которая должна нумероваться без букв, в поле префикса вводим значение 0.
  3. Для второй организации оставляем буквенный префикс (например, ИП).

При таком подходе встроенный модуль конфигурации при вызове процедуры глПересчитатьНомерДокумента() или аналогичной глобальной функции автоматически передаст символ 0 в метод УстановитьНовыйНомер().

Важные правила работы с номерами при программном создании документов

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

  1. Порядок заполнения даты документа: Всегда устанавливайте реквизит ДатаДок до вызова метода УстановитьНовыйНомер(). Периодичность нумератора привязана к дате документа. Если дата не установлена, система будет искать номер в диапазоне пустой даты, что приведет к дублированию номеров или ошибкам уникальности при последующей записи.
  2. Общие нумераторы метаданных: Если несколько видов документов подчинены общему объекту метаданных Нумератор, коллизия префиксов распространяется на все связанные документы. Назначение префикса 0 решает эту проблему для всего пула документов данного нумератора.
  3. Отображение в печатных формах: Если по регламенту организации требуется, чтобы в печатных накладных и счетах-фактурах не отображались лидирующие нули или служебные префиксы, форматирование номера рекомендуется выполнять на этапе вывода в печатную форму с помощью встроенной функции глПреобразоватьНомерДляПечати() или пользовательского алгоритма отсечения незначащих символов.
← На главную