Как увеличить номер документа на единицу?

1. niko11s 1017 10.12.12 12:46 Сейчас в теме
Допустим нужно увеличить номер документа на 1.
Номер следующего вида - У00000000011.
Значение номера строковое, соответственно если отсечь префикс функцией
Прав(), далее преобразовать получившееся в число, прибавить 1 и обратно преобразовать в строку,
получим - 12, без нулей перед префиксом.
Как получить результат У00000000012, а не У12?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. KonstB 180 10.12.12 12:56 Сейчас в теме
(1) niko11s,
ТекНомер   = 11;
НовыйНомер = ТекНомер + 1;

фНовыйНомер = Формат(НомерДокумента, "ЧЦ=11; ЧВН=; ЧГ=0");

фНовыйНомер = "У" + фНовыйНомер;


Это как вариант...

Конфигурация не типовая?
6. KonstB 180 10.12.12 13:02 Сейчас в теме
(1) niko11s,
а вообще вот это не проходит:

УстановитьНовыйНомер(<ПрефиксНомера>)
Параметры:

<ПрефиксНомера> (необязательный)

Тип: Строка.
Префикс устанавливаемого номера.
Значение по умолчанию: Пустая строка

Описание:
Устанавливает новый номер документа для заданного префикса номера.
9. GPL 3 10.12.12 13:19 Сейчас в теме
(1) niko11s, у меня встречный вопрос - ЗАЧЕМ?
1с сама великолепно нумерует, пока кто-то кривыми ручками не попортит нумерацию. в этом случае я говорю - либо исправляйте по-хорошему, либо ждите год. как правило после такого владелец шаловливых ручек получает достаточное воздействие, чтобы не делать в будущем таких необдуманных операций
10. Salavat 14 10.12.12 13:28 Сейчас в теме
(9) GPL, согласен - 1С действительно очень хорошо сама нумерует. но иногда бывают пользователи которым по каким-либо причинам приходится (или хочется - когда как) редактировать и они это делают.

ладно хоть счас право редактирования номеров во многих типовых есть.

вобщем иногда всёже приходится нумерацию делать самому.
20. lefthander 13.09.18 10:37 Сейчас в теме
(1)Я вот так привожу номер к нужной строке

Номер собственно сам номер
КолРазрядов - сколько цифр в номере
НовыйНомер = Прав("0000000000000000000"+СтрЗаменить(СокрЛП(Номер)," ",""),КолРазрядов);
21. catena 110 13.09.18 10:54 Сейчас в теме
(20)
СтрЗаменить(СокрЛП(Номер)," ","")

Смешно, да.
22. lefthander 13.09.18 10:57 Сейчас в теме
(21)Если номер 4 и больше значный туда может затесаться неразрывный пробел... а так можете смеяться, но работает.
Если эту строчку оформить функцией и передать номер, то очень хорошо, номер может быть и очень большой... ;)
23. catena 110 13.09.18 11:35 Сейчас в теме
(22)А потом - внезапно - в какой-нибудь базе вместо неразрывного пробела разделителем групп используют апостроф. Круто, правда? Для этих манипуляций существует Формат().
24. lefthander 13.09.18 12:41 Сейчас в теме
(23) а причем здесь разделители групп? в числах, особенно при нумерации объектов, бывает неразрывный пробел, апострофов я не встречал. :)

ЗЫ я просто поделился одним из способов как формирую номер для нумерации объектов, не более того.
25. catena 110 13.09.18 13:16 Сейчас в теме
(24)То, что вы с этим никогда не встречались, не значит, что этого нет. Существуют региональные настройки и их можно устанавливать по желанию пользователя. Поэтому, чтобы не пришлось в следующий раз шерстить форумы и для общего самообразования: неразрывный пробел "бывает" разделителем групп числа. А бывает и не бывает. Для форматирования числа независимо от региональных установок существует функция Формат() и даже реализован конструктор форматной строки. Это хорошо, что вы знаете о существовании неразрывного пробела, знания никогда не бывают лишними. С праздником :)
26. lefthander 13.09.18 13:31 Сейчас в теме
(25)И Вам того же, по тому же месту. С праздником. ;)
2. beldieff 10.12.12 12:48 Сейчас в теме
Как получить результат У00000000012, а не У12?
Дописать недостающие нули.
3. nikky81 10.12.12 12:50 Сейчас в теме
Проверить, если количество символов меньше 12 добавить нулей после префикса
5. niko11s 1017 10.12.12 12:59 Сейчас в теме
Забыл про функцию СтрДлина(), сейчас попробую.
7. niko11s 1017 10.12.12 13:09 Сейчас в теме
Пробовал УстановитьНовыйНомер("У"), просто добавляет следующий номер без префикса.
8. Salavat 14 10.12.12 13:15 Сейчас в теме
(7) niko11s, никогда не понимал как работает эта функция, поэтому просто делал типа:
текномер = прав(док.номер,9);
новномер="ут"+формат(текномер+1,"формат-строка с нулями и без группировок..");
11. GPL 3 10.12.12 13:31 Сейчас в теме
(7) niko11s, должно работать с префиксом. пользовал эту функцию
12. Salavat 14 10.12.12 13:37 Сейчас в теме
(11) GPL, иногда в модуле самого документа ещё прописывается нумерация. поэтому работает - невсегда.
но в синтакс-помошнике описание есть. как и что.
13. niko11s 1017 10.12.12 13:44 Сейчас в теме
Вот как то так получилось:

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	РеализацияТоваровУслуг.Номер КАК Номер
		|ИЗ
		|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
		|ГДЕ
		|	РеализацияТоваровУслуг.Ссылка <> &Ссылка
		|
		|УПОРЯДОЧИТЬ ПО
		|	Номер УБЫВ";
		
	Запрос.УстановитьПараметр("Ссылка",ЭтотОбъект.Ссылка);

	Результат = Запрос.Выполнить();

	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Номер = ВыборкаДетальныеЗаписи.Номер;
	КонецЦикла;

		Строка1 =Строка(Число(Прав(Номер,9)) + 1);
		ДлиннаСтроки1 = СтрДлина(Строка1);
		Разница = 9 - ДлиннаСтроки1;
		Для р = 1 По Разница Цикл
			Строка1 = "0" + Строка1;
		КонецЦикла;
	    Строка1 = "УУ" + Строка1;

    Номер = Строка1;
	КонецЕсли;
Показать
14. m-serg74 46 10.12.12 13:47 Сейчас в теме
(13) niko11s, после

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Номер = ВыборкаДетальныеЗаписи.Номер;
КонецЦикла; 

с учетом
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ"


в переменной Номер у тебя будет самый маленький номер
15. niko11s 1017 10.12.12 13:48 Сейчас в теме
У клиента есть в одном журнале реализация с префиксом и без префикса, причем нумероваться они должны независимо, соответственно делаю флажок в реализации, и если нужно с префиксом то использую код, который выше,
а если без - то все как обычно.
16. niko11s 1017 10.12.12 13:50 Сейчас в теме
Для m-serg74

Я беру только одну первую запись из результата запроса.
17. m-serg74 46 10.12.12 13:54 Сейчас в теме
ВЫБРАТЬ ПЕРВЫЕ 1
точно... не заметил)
18. avadon 28.05.18 14:14 Сейчас в теме
Вот чуть модификация. Вдруг кому пригодится;)
ПоследенийНомер = ВыборкаДетальныеЗаписи.Номер; 
		Инд=1; 
		Пока Инд<СтрДлина(ПоследенийНомер) Цикл 
			Символ = Сред(ПоследенийНомер,СтрДлина(ПоследенийНомер)-Инд,1);
			Если Найти("0123456789",Символ)=0 Тогда 
				ДлинаЧисловойЧасти = Инд-1; 
				Прервать;
			КонецЕсли;	
			Инд=Инд+1; 
		КонецЦикла;	
		НомерЛеваяЯчейка = Лев(ПоследенийНомер,СтрДлина(ПоследенийНомер)-ДлинаЧисловойЧасти);
		НомерПраваяЯчейка = Число(СокрЛП(Прав(ПоследенийНомер,ДлинаЧисловойЧасти)));
		НомерПраваяЯчейка = Число(НомерПраваяЯчейка)+1;  
		ДобавитьНулей = ДлинаЧисловойЧасти-СтрДлина(НомерПраваяЯчейка);
		инд=0;
		Пока Инд<ДобавитьНулей Цикл 
			НомерЛеваяЯчейка=НомерЛеваяЯчейка+"0";
			Инд=Инд+1;
		КонецЦикла;	
		НовыйНомерПолный = НомерЛеваяЯчейка+Строка(НомерПраваяЯчейка); 
		Номер = НовыйНомерПолный;
Показать
annak2980; Serg243; IvanGorbunov; +3 Ответить
19. yghmd 12 13.09.18 09:45 Сейчас в теме
(18) Альтернатива добавления нулей в номер:

НовыйНомер = НомерЛеваяЯчейка + Формат(НомерПраваяЯчейка, "ЧЦ=" + ДлинаЧисловойЧасти + "; ЧВН=; ЧГ=0")
27. Serg243 29.03.23 14:52 Сейчас в теме
Префикс для организации статичный, номер динамический.
Сделал вот так.
	ПоследенийНомер = ВыборкаДетальныеЗаписи.Номер;
		
	ПрефиксПоследенийНомер = Лев(ПоследенийНомер,5);
	ЧислоПоследенийНомер = Формат(Прав(ПоследенийНомер,6),"ЧЦ=6; ЧДЦ=1; ЧВН=; ЧГ=0") + 1;
	НовыйНомерПолный = "" + ПрефиксПоследенийНомер + ЧислоПоследенийНомер;
	
	Возврат НовыйНомерПолный;
Показать
28. Serg243 29.03.23 17:54 Сейчас в теме
Чутка ошибся - вот так надо
ПрефиксПоследенийНомер = Лев(ПоследенийНомер,5);
				ЧислоПоследенийНомер = Число(Формат(Прав(ПоследенийНомер,6),"ЧЦ=6; ЧДЦ=1; ЧВН=; ЧГ=0")) + 1;
				НовыйНомерПолный = "" + ПрефиксПоследенийНомер + Формат(ЧислоПоследенийНомер,"ЧЦ=6; ЧДЦ=0; ЧВН=; ЧГ=0");
Оставьте свое сообщение

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