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