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

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При настройке нумерации документов в платформе 1С:Предприятие 7.7 часто возникает необходимость формировать номера вида "99-ко", где к числовой части добавляется буквенный суффикс (постфикс). Однако стандартный метод УстановитьНовыйНомер() и штатный механизм автонумерации при таком формате начинают работать некорректно или полностью сбиваются. В этой статье мы разберем, почему платформа ведет себя подобным образом, и рассмотрим проверенные варианты решения задачи.

Причина поведения платформы 1С 7.7

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

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

Вариант 1. Разделение системного номера и печатного представления (Рекомендуемый)

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

Рассмотрим по шагам, как это реализовать:

  1. Вывод в печатные формы: В макетах печатных форм вместо прямого вывода реквизита НомерДок укажем выражение:

    СокрЛП(НомерДок) + "-ко"

  2. Использование дополнительного реквизита: Если необходимо производить отбор или поиск по полному номеру с суффиксом, создадим в документе текстовый реквизит (например, ПечатныйНомер). В событии ПриЗаписи() заполним его программно:
    
    Процедура ПриЗаписи()
        ПечатныйНомер = СокрЛП(НомерДок) + "-ко";
    КонецПроцедуры
    

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

Вариант 2. Программное формирование номера при вводе нового документа

Если требование заказчика жестко заставляет хранить постфикс прямо в системном реквизите НомерДок, придется отключить штатную автонумерацию для данного вида документа и формировать номер вручную в модуле документа через предопределенную процедуру ВводНового().

Проанализируем пример кода с поиском максимального текущего номера через объект выборки:


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

Альтернативный простой вариант с использованием сохранения значения счетчика (подходит для однопользовательских баз):


Процедура ВводНового()
    НомерДок1 = ВосстановитьЗначение("ПоследнийНомерДок");
    НомерДок1 = Число(НомерДок1) + 1; 
    СохранитьЗначение("ПоследнийНомерДок", НомерДок1);
    
    НомерДок = СокрЛП(НомерДок1) + "-ко";
КонецПроцедуры

Ограничения и риски ручной нумерации

При использовании ручной генерации номера важно учитывать следующие нюансы:

Резюме: Оптимальным решением для платформы 1С 7.7 является сохранение стандартной нумерации в поле НомерДок и добавление суффикса -ко исключительно при отображении или печати документов.

← На главную