Автоувеличение номера, но через одно место

1. NicolasCage 13.06.24 12:00 Сейчас в теме
Здравствуйте. Дали такую задачу. Есть несколько документов: А, Б. В. На форме документа (из объекта) есть реквизит под названием Префикс. В реквизите хранится строка такой формы: {Название документа}/{Номер}/{Год}. В итоге выглядеть это должно так: А/001/24, А/002/24, Б/001/24 и т.п. Я реализовал функционал полностью.

Вот код


А потом всплыл такой момент. Думал нули можно опустить и нумерация у меня вся шла как А/1/24, А/2/24, А/3/24 и т.д. Но оказалось,что этот номер в Префиксе должен иметь нули и увеличиваться как число: 001, 002, 003, 004 и когда номер достигает 10 он приобретает такой вид: 010. Далее 011, 012, 013. Потом когда стал 019 следующий вид 020, 021, 022. Достигнув числа 099, след. вид такой: 100, 101,102 и т.д. После 100 легко конечно :D Я что-то не могу догадаться как это реализовать до 100. Как эту строку правильно обрабатывать?

ЗЫ Номер в префиксе документа может быть задан, а может и не задан.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. comptr 35 13.06.24 13:10 Сейчас в теме
1. При открытии документа безусловно менять объект не очень хорошая практика, лучше бы использовать обработку заполнения для новых документов и просто отдельно за один раз обработать уже существующие документы.
2. Опять же, при открытии считывать все документы из базы и потом перебирать всю выборку ради последнего номера? Почему бы сразу в запросе не взять последний по дате документ, у которого заполнен префикс?
А лучше бы вообще использовать отдельный регистр, в котором бы хранился последний номер по нужным измерениям (тип документа, год и т.д.), но в таком случае лучше сделать кнопку "Получить номер", доступную только для уже записанных документов, по нажатию на которую читать последний номер, формировать следующий и тут же писать его в регистр обратно, чтобы минимизировать вероятность одновременного получения одного номера разными пользователями. Номер в регистре нужно хранить тупо в виде числа, вся остальная обработка уже при помещении в реквизит документа. Кстати, помимо префикса, можно этот номер (числовой) так же хранить в документе, поможет в будущем в сортировке (не из-за этого ли возникла необходимость в ведущих нулях?).
3. Чтобы получить ведущие нули, достаточно использовать Формат:
Формат(13, "ЧЦ=6;ЧВН=;ЧГ=") = "000013"
NicolasCage; +1 Ответить
4. NicolasCage 13.06.24 13:35 Сейчас в теме
(2) Блин, в задаче вообще ни о чем подобном не упоминается. Но Вы правы. Сейчас думаю об этом и понимаю, что нужно делать именно так. Это правильный подход. Но очень хочется оставить как есть) Потому что какое условие, такое и решение))

3. Чтобы получить ведущие нули, достаточно использовать Формат:
Формат(13, "ЧЦ=6;ЧВН=;ЧГ=") = "000013"


Оказалось, что я все усложнял) Я ведь получаю строку типа "001" и преобразовав ее к числу я получу 1 без "00". Дальше я просто увеличиваю число и в зависимости от условия, проверяю на длину числа прописываю эти нули. Тупо вот так:

НовыйНомерДляПроверки = СтрДлина(Строка(НовыйНомер));
		Если НовыйНомерДляПроверки = 1 Тогда
			Объект.Префикс = "E/" + "00" + НовыйНомер + "/" + ТекущийГод;	
		ИначеЕсли НовыйНомерДляПроверки = 2 Тогда
			Объект.Префикс  = "E/" + "0" + НовыйНомер + "/" + ТекущийГод;	
		Иначе
			Объект.Префикс = "E/" + НовыйНомер + "/" + ТекущийГод;	
		КонецЕсли;
Показать



1. При открытии документа безусловно менять объект не очень хорошая практика, лучше бы использовать обработку заполнения для новых документов и просто отдельно за один раз обработать уже существующие документы.
2. Опять же, при открытии считывать все документы из базы и потом перебирать всю выборку ради последнего номера? Почему бы сразу в запросе не взять последний по дате документ, у которого заполнен префикс?


Так и сделаю. Спасибо что обратили внимание.
3. soft_wind 13.06.24 13:13 Сейчас в теме
Не правда! в 1С - много мест!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот