При работе в 1С:Управление торговлей (УТ 11), ERP или Комплексной автоматизации пользователи часто сталкиваются с необходимостью ручной корректировки номеров документов. Однако после внесения изменений система часто ведет себя непредсказуемо: либо продолжает старую нумерацию, игнорируя новый номер, либо обрезает номер в печатных формах (особенно если в нем есть дроби или дефисы). В этой статье мы подробно разберем внутренние механизмы платформы 1С и Библиотеки стандартных подсистем (БСП), чтобы понять, как управлять этими процессами.
Рассмотрим ситуацию: в системе был документ с номером ТКЦБ-0000232. Пользователь вручную создает документ с номером ТР000000500, ожидая, что следующий номер будет ТР000000501. Однако система упорно предлагает ТКЦБ-0000233. Проанализируем причину такого поведения.
Механизм работы префиксов заключается в том, что платформа 1С воспринимает номер не просто как строку, а как комбинацию префикса и числовой части. В типовых конфигурациях префикс формируется динамически и состоит из нескольких частей:
Когда вы создаете новый документ, программный код 1С (обычно в модуле ПрефиксацияОбъектов) автоматически подставляет текущий префикс (в нашем примере ТКЦБ-). После этого платформа ищет в базе данных документ с таким же префиксом и максимальным числовым значением. Поскольку ваш новый номер ТР000000500 имеет другой префикс (ТР), система его просто не учитывает при поиске следующего номера для стандартной цепочки ТКЦБ.
Кроме того, важно помнить о правилах сравнения строк. Строка ТКЦБ-0000232 технически «больше» строки ТР000000500, так как при посимвольном сравнении буква «К» (из ТК) идет в алфавите раньше, но общая длина и структура префикса заставляют систему отдавать приоритет стандартно настроенным кодам.
Для того чтобы нумерация продолжилась от вашего нового номера, необходимо, чтобы префикс документа совпадал с тем, который генерирует система. Проанализируем шаги для изменения ситуации:
ТР), измените его в карточке организации. Тогда система автоматически начнет искать максимальный номер, начинающийся на ТР.Другая распространенная проблема в УТ 11.5 — некорректный вывод номера на печать. Например, номер документа в базе выглядит как 01/12-01, а в печатной форме отображается только 12-01. Рассмотрим, почему это происходит.
В типовых конфигурациях за вывод номера отвечает функция ПреобразоватьНомерДляПечати. Она предназначена для того, чтобы «очистить» технический номер 1С от лишних нулей и префиксов, которые не должны видеть контрагенты. Алгоритм этой функции работает следующим образом:
/ или дефис -).Выясним причину внезапного изменения поведения: это часто связано с обновлением конфигурации или изменением длины номера. Если в номере используются нестандартные разделители, БСП может ошибочно принять значимую часть номера за префикс.
Если вам необходимо, чтобы номер выводился «как есть», без обрезания, мы рекомендуем воспользоваться механизмом расширений. Нам нужно переопределить логику формирования данных для печати. Посмотрим на пример кода, который можно использовать в расширении для изменения обработки номера.
Обычно данные подготавливаются в менеджере документа. Нам нужно найти место, где вызывается очистка номера, и заменить её. Рассмотрим пример функции, которую можно подменить:
// В расширении для модуля менеджера документа (например, РеализацияТоваровУслуг)
&Вместо("ДобавитьДанныеДляПечати")
Процедура Расш_ДобавитьДанныеДляПечати(ДанныеПечати, ОбъектСсылка)
// Вызываем стандартную логику (необязательно, если переписываем полностью)
// Но для номера мы принудительно устанавливаем значение из реквизита
ДанныеПечати.НомерДокумента = ОбъектСсылка.Номер;
// Вместо использования функции ПрефиксацияОбъектовКлиентСервер.НомерНаПечать()
КонецПроцедуры
Если же вы хотите использовать типовой механизм, но настроить его, обратите внимание на функцию ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать. В ней можно передать параметры УдалятьПрефиксИнформационнойБазы и УдалятьПрефиксОрганизации как Ложь.
Чтобы избежать «слёта» нумерации и проблем с печатью в будущем, придерживайтесь следующих правил:
500), система заполнит оставшееся пространство пробелами или нулями. Лучше всегда вводить номер полностью, соблюдая структуру: ТКЦБ-0000500./, \). Типовые алгоритмы 1С лучше всего работают с дефисом (-).Периодичность нумератора).Таким образом, мы выяснили, что для корректной нумерации крайне важно соблюдать структуру префиксов, принятую в вашей базе, а для исправления проблем с печатью дробных номеров зачастую требуется небольшое вмешательство в программный код формирования печатной формы через расширение.