Ситуация, когда привычные кириллические префиксы (например, «УТ») внезапно заменяются на визуально похожие, но технически иные латинские символы (например, «YT»), является распространенной проблемой в «1С:Управление торговлей». Это приводит к разрыву нумерации, дублям и ошибкам при выгрузке документов в другие системы. В данной статье мы подробно разберем, почему это происходит и как восстановить правильный порядок работы системы.
Для начала проанализируем, как именно платформа 1С:Предприятие генерирует номер для нового документа. Важно понимать, что номер не берется «из воздуха», он формируется по строгому алгоритму. Рассмотрим стандартную формулу:
ПрефиксОрганизации + ПрефиксБазы + НомерПоПорядку
Где:
Проблема «латинских префиксов» чаще всего кроется в механизме поиска максимального номера. Если в систему попал хотя бы один документ, где в префиксе вместо русской «А» стоит английская «A», платформа может начать отсчет именно от него, так как с точки зрения SQL-сервера и кодировки Unicode эти символы имеют разные коды, и латинский символ может считаться «старшим» при сортировке.
Рассмотрим наиболее вероятную ситуацию, упомянутую опытными специалистами. Часто пользователь при создании документа вручную исправляет номер. Если при этом раскладка клавиатуры была английской, и вместо кириллической буквы была введена латинская (например, «С» вместо «С»), платформа запоминает этот номер.
При создании следующего документа система выполняет поиск последнего номера. Обнаружив номер с латинским префиксом, 1С продолжает нумерацию в той же «кодировке». Выясним причину, почему это происходит: для программы это две разные серии номеров. Однако из-за того, что латинская серия оказывается «выше» в сортировке, она становится приоритетной для автонумератора.
Если в вашей компании настроен обмен с сайтом под управлением «Битрикс», это может быть источником проблемы. Разберем механизм обмена:
s1) всегда состоит из латинских символов.Посмотрим на ситуацию со стороны распределенных баз. В современных конфигурациях используется формат EnterpriseData. При настройке синхронизации между, например, «Управлением торговлей» и «Бухгалтерией предприятия», настройки префиксов могут мигрировать.
Если в одной из баз префикс был изменен (даже случайно), при очередном сеансе обмена эти настройки могут перезаписать локальные параметры в текущей базе. Это объясняет «прыгающее» поведение префиксов: они возвращаются к норме после ручного исправления, но слетают вновь после завершения фонового задания синхронизации.
Поскольку визуально отличить русскую «А» от английской «A» невозможно, воспользуемся инструментами разработчика. Проанализируем ситуацию с помощью консоли запросов. Нам нужно получить коды символов префикса. Рассмотрим пример запроса:
ВЫБРАТЬ
ПОДСТРОКА(Документ.Номер, 1, 1) КАК ПервыйСимвол,
ПОДСТРОКА(Документ.Номер, 2, 1) КАК ВторойСимвол,
Документ.Ссылка
ИЗ
Документ.ЗаказКлиента КАК Документ
УПОРЯДОЧИТЬ ПО
Документ.Дата УБЫВ
Чтобы окончательно убедиться, используйте функцию КОД_СИМВОЛА (в языке запросов она недоступна напрямую в таком виде, но результат можно обработать в коде 1С), чтобы увидеть числовое представление символа. Для русской «А» это будет один код, для латинской — совершенно другой.
Если вы столкнулись с этой проблемой, выполним следующие шаги для ее устранения:
Просто поменять префикс в настройках недостаточно. Платформа все равно будет видеть «максимальный» латинский номер в истории. Необходимо воспользоваться обработкой «Редактирование номеров объектов» (входит в состав инструментов БСП или доступна на ИТС).
Найдите последние 10–20 документов, в которых префикс стал латинским, и вручную или обработкой переименуйте их, заменив латиницу на кириллицу. Как только «хвост» из латинских номеров будет устранен, автонумератор вернется к кириллической серии.
Чтобы предотвратить повторение ситуации, проанализируем возможность внедрения программной проверки. Мы можем использовать подписку на событие ПриУстановкеНовогоНомера. В этом обработчике можно добавить код, который будет принудительно заменять латинские буквы на аналогичные кириллические в префиксе.
Рассмотрим пример логики:
Процедура ПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Заменяем латинскую 'A' на кириллическую 'А'
Префикс = СтрЗаменить(Префикс, "A", "А");
// Добавьте другие похожие символы: B, C, E, H, K, M, O, P, T, X
КонецПроцедуры
Выясним еще одну скрытую причину. Если префиксы «слетают» только в документах, созданных регламентными заданиями, нужно проверить региональные настройки (Locale) учетной записи Windows, под которой запущен сервер 1С. Если там установлена английская локаль, платформа при формировании строк может использовать латинский алфавит по умолчанию.
Мы выяснили, что смена префикса на латиницу — это не случайный сбой, а результат работы алгоритма поиска максимального номера 1С в сочетании с внешними факторами (Bitrix, ручной ввод, синхронизация). Для решения проблемы необходимо:
Таким образом, мы восстановим корректную работу системы и обеспечим единообразие нумерации в базе данных.