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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в 1С:Управление торговлей (УТ 11), ERP или Комплексной автоматизации пользователи часто сталкиваются с необходимостью ручной корректировки номеров документов. Однако после внесения изменений система часто ведет себя непредсказуемо: либо продолжает старую нумерацию, игнорируя новый номер, либо обрезает номер в печатных формах (особенно если в нем есть дроби или дефисы). В этой статье мы подробно разберем внутренние механизмы платформы 1С и Библиотеки стандартных подсистем (БСП), чтобы понять, как управлять этими процессами.

Почему 1С игнорирует вручную введенный номер?

Рассмотрим ситуацию: в системе был документ с номером ТКЦБ-0000232. Пользователь вручную создает документ с номером ТР000000500, ожидая, что следующий номер будет ТР000000501. Однако система упорно предлагает ТКЦБ-0000233. Проанализируем причину такого поведения.

Механизм работы префиксов заключается в том, что платформа 1С воспринимает номер не просто как строку, а как комбинацию префикса и числовой части. В типовых конфигурациях префикс формируется динамически и состоит из нескольких частей:

  1. Префикс организации: задается в карточке организации (например, «ТК»).
  2. Префикс информационной базы: задается в настройках синхронизации данных (например, «ЦБ»).
  3. Разделитель: чаще всего это дефис «-».

Когда вы создаете новый документ, программный код 1С (обычно в модуле ПрефиксацияОбъектов) автоматически подставляет текущий префикс (в нашем примере ТКЦБ-). После этого платформа ищет в базе данных документ с таким же префиксом и максимальным числовым значением. Поскольку ваш новый номер ТР000000500 имеет другой префикс (ТР), система его просто не учитывает при поиске следующего номера для стандартной цепочки ТКЦБ.

Кроме того, важно помнить о правилах сравнения строк. Строка ТКЦБ-0000232 технически «больше» строки ТР000000500, так как при посимвольном сравнении буква «К» (из ТК) идет в алфавите раньше, но общая длина и структура префикса заставляют систему отдавать приоритет стандартно настроенным кодам.

Как заставить систему использовать новый префикс?

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

  1. Проверьте префикс организации в меню НСИ и администрирование — Сведения об организации.
  2. Проверьте префикс информационной базы в меню Администрирование — Синхронизация данных.
  3. Если вам нужно использовать специфический префикс (например, ТР), измените его в карточке организации. Тогда система автоматически начнет искать максимальный номер, начинающийся на ТР.

Проблема обрезания номера в печатных формах (дробные номера)

Другая распространенная проблема в УТ 11.5 — некорректный вывод номера на печать. Например, номер документа в базе выглядит как 01/12-01, а в печатной форме отображается только 12-01. Рассмотрим, почему это происходит.

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

Выясним причину внезапного изменения поведения: это часто связано с обновлением конфигурации или изменением длины номера. Если в номере используются нестандартные разделители, БСП может ошибочно принять значимую часть номера за префикс.

Как исправить печатную форму через код

Если вам необходимо, чтобы номер выводился «как есть», без обрезания, мы рекомендуем воспользоваться механизмом расширений. Нам нужно переопределить логику формирования данных для печати. Посмотрим на пример кода, который можно использовать в расширении для изменения обработки номера.

Обычно данные подготавливаются в менеджере документа. Нам нужно найти место, где вызывается очистка номера, и заменить её. Рассмотрим пример функции, которую можно подменить:


// В расширении для модуля менеджера документа (например, РеализацияТоваровУслуг)
&Вместо("ДобавитьДанныеДляПечати")
Процедура Расш_ДобавитьДанныеДляПечати(ДанныеПечати, ОбъектСсылка)
    // Вызываем стандартную логику (необязательно, если переписываем полностью)
    // Но для номера мы принудительно устанавливаем значение из реквизита
    ДанныеПечати.НомерДокумента = ОбъектСсылка.Номер; 
    // Вместо использования функции ПрефиксацияОбъектовКлиентСервер.НомерНаПечать()
КонецПроцедуры

Если же вы хотите использовать типовой механизм, но настроить его, обратите внимание на функцию ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать. В ней можно передать параметры УдалятьПрефиксИнформационнойБазы и УдалятьПрефиксОрганизации как Ложь.

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

Чтобы избежать «слёта» нумерации и проблем с печатью в будущем, придерживайтесь следующих правил:

  1. Соблюдайте длину номера: В 1С номер имеет фиксированную длину (например, 11 символов). Если вы введете номер вручную без ведущих нулей (например, просто 500), система заполнит оставшееся пространство пробелами или нулями. Лучше всегда вводить номер полностью, соблюдая структуру: ТКЦБ-0000500.
  2. Не используйте сложные символы: Старайтесь избегать дробей (/, \). Типовые алгоритмы 1С лучше всего работают с дефисом (-).
  3. Периодичность: Помните, что в большинстве документов настроена периодичность «Год». Это значит, что 1 января нумерация начнется заново. Если вы хотите изменить это поведение, нужно менять настройки метаданных в конфигураторе (свойство Периодичность нумератора).
  4. Обновление кэша: В последних версиях БСП используется кэширование номеров. Если вы программно или массово изменили номера, а система предлагает старые — может потребоваться обновление кэша через консоль запросов или специальную обработку «Редактирование номеров объектов», которая входит в состав некоторых инструментов администратора.

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

← На главную