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

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

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

Разберем подробно, как реализовать этот переход, учитывая специфику механизмов автонумерации старой платформы, и проанализируем возможные «подводные камни».

Механизм автонумерации в 1С 7.7: почему система возвращает префикс?

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

Проанализируем ситуацию: если в базе есть номер Р16391, то при попытке системы найти следующий номер, она увидит, что строка, начинающаяся на «Р», больше любой строки, начинающейся на цифру. Следовательно, механизм автонумерации будет инкрементировать именно буквенно-цифровой номер, выдавая Р16392, даже если вы один раз вручную ввели номер 16392.

Способ 1. Изменение префикса через настройки организации

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

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

  1. Откроем справочник «Фирмы» (или «Собственные юридические лица»).
  2. Найдем организацию, от имени которой выписываются документы «Заявка».
  3. Проверим наличие реквизита Префикс. Если там указано значение «Р», его необходимо удалить или заменить на пробел (в зависимости от логики конкретной конфигурации).

Важный нюанс: Если мы просто очистим префикс у фирмы, это повлияет на все виды документов, которые используют данный механизм нумерации. Если задача стоит убрать «Р» только у «Заявок», этот способ может не подойти, так как он изменит нумерацию и у счетов, и у накладных.

Способ 2. Программная установка номера в модуле документа

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

Найдем в метаданных документ Заявка и откроем его модуль формы (или модуль объекта, если логика вынесена туда). Нас интересует предопределенная процедура ВводНового(), которая вызывается в момент создания нового объекта.

Посмотрим на пример кода, который принудительно задает новый формат номера:


Процедура ВводНового(Копирование, Док)
    // Устанавливаем новый номер с пустым префиксом или префиксом "0"
    УстановитьНовыйНомер("0"); 
КонецПроцедуры

Разберем работу функции УстановитьНовыйНомер(). Если передать в нее параметр в виде строки (например, "0"), система будет искать максимальный номер, который начинается именно с этого символа. Таким образом, мы «заставляем» 1С игнорировать старые номера, начинающиеся на «Р», и начать отсчет в цифровом диапазоне.

Способ 3. Глобальный модуль и функция глУстановитьНомер

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

В этом случае нам нужно найти эту процедуру в Глобальном модуле. Мы можем добавить туда условие:


Процедура глУстановитьНомер(Конт) Экспорт
    Если Конт.Вид() = "Заявка" Тогда
        // Специальная логика для заявок, чтобы игнорировать префикс "Р"
        Конт.УстановитьНовыйНомер(""); 
    Иначе
        // Стандартная логика для остальных документов
        // ... код получения префикса фирмы ...
    КонецЕсли;
КонецПроцедуры

Проблема длины номера и ведущих нулей

При переходе с формата Р16391 на чисто числовой номер крайне важно соблюдать длину строки. В 1С 7.7 номера являются строковыми значениями. Если длина номера в конфигураторе установлена, например, равной 10 символам, то правильный номер должен выглядеть как 0000016392.

Выясним, что произойдет, если пренебречь ведущими нулями. Если вы запишете номер просто как 16392, то после достижения номера 19999 следующим номером система может попытаться назначить не 20000, а непредсказуемое значение, так как для компьютера строка «2» больше, чем строка «19999».

Рекомендация: При программной установке номера всегда дополняйте его ведущими нулями до полной длины, установленной в метаданных документа. Это обеспечит корректную сортировку и работу автоинкремента в будущем.

Использование периодичности нумерации

Проанализируем свойства документа Заявка в конфигураторе. Обратите внимание на параметр «Периодичность». Чаще всего там установлено значение «В пределах года».

Если бухгалтерия может подождать до начала следующего календарного года, то это будет самым чистым решением. С 1 января 1С 7.7 автоматически обнуляет счетчик номеров для периодических документов. В этот момент можно будет просто сменить префикс в настройках, и новые документы начнут нумероваться с 0000000001 без конфликта со старыми «Р-номерами» предыдущего года.

Однако, если изменения нужны «здесь и сейчас», используйте Способ 2 с ручной корректировкой первого созданного «нового» номера. После того как вы один раз создадите документ с номером без буквы (например, 000016392) и сохраните его, система при использовании УстановитьНовыйНомер("") в следующий раз будет опираться уже на него, при условии, что этот номер по правилам строкового сравнения будет «выше» всех остальных (что в случае с буквой «Р» требует внимательности и, возможно, использования префикса «0»).

Резюме

Для успешного решения задачи без перенумерации старых данных мы рекомендуем:

  1. Проверить префикс в справочнике Фирмы — это самый простой путь, не требующий кодинга.
  2. Если первый пункт не подходит, внести изменения в процедуру ВводНового() модуля формы документа, используя УстановитьНовыйНомер().
  3. Обязательно следить за ведущими нулями, чтобы не нарушить сортировку.
  4. Первый документ после изменений создать/пронумеровать вручную, чтобы задать системе новый «эталон» для последующего автоинкремента.

Такой комплексный подход позволит выполнить требования бухгалтерии в кратчайшие сроки и избежать проблем с поиском старых заявок.

← На главную