Часто при разработке печатных форм или отчетов, нужно номера документов вида 000001 преобразовать в 1 - убрав лидирующие нули. в этой статье я приведу несколько способов, а какой выбрать - решайте сами:
Код 1C v 8.х Функция УбратьЛидирующиеНули(НомерДокумента)
Пока Найти(НомерДокумента, "0") > 0 Цикл
УбратьЛидирующиеНули(Прав(НомерДокумента, СтрДлина(НомерДокумента)-1));
КонецЦикла;
Возврат НомерДокумента;
КонецФункции
Код 1C v 8.х Функция УбратьЛидирующиеНули(НомерДокумента)
Попытка
НомерДокумента = Формат(Число(НомерДокумента), "ЧГ=");
Исключение
НомерДокумента = СтрЗаменить(СокрЛ(СтрЗаменить(СокрП(НомерДокумента), "0", " ")), " ", "0");
Префикс = "";
Пока КодСимвола(НомерДокумента) < 48 Или КодСимвола(НомерДокумента) > 57 Цикл
Префикс = Префикс + Лев(НомерДокумента, 1);
НомерДокумента = Сред(НомерДокумента, 2);
КонецЦикла;
Если Не ПустаяСтрока(Префикс) Тогда
НомерДокумента = Префикс + УбратьЛидирующиеНули(НомерДокумента);
КонецЕсли;
КонецПопытки;
Возврат НомерДокумента;
КонецФункции
В запросе:
Код 1C v 8.х ВЫБРАТЬ
ВЫБОР
КОГДА Не ПОДСТРОКА(&Номер, 1, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 1, 10)
КОГДА Не ПОДСТРОКА(&Номер, 2, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 2, 9)
КОГДА Не ПОДСТРОКА(&Номер, 3, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 3, 8)
КОГДА Не ПОДСТРОКА(&Номер, 4, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 4, 7)
КОГДА Не ПОДСТРОКА(&Номер, 5, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 5, 6)
КОГДА Не ПОДСТРОКА(&Номер, 6, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 6, 5)
КОГДА Не ПОДСТРОКА(&Номер, 7, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 7, 4)
КОГДА Не ПОДСТРОКА(&Номер, 8, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 8, 3)
КОГДА Не ПОДСТРОКА(&Номер, 9, 1) = "0" ТОГДА ПОДСТРОКА(&Номер, 9, 2)
Иначе ПОДСТРОКА(&Номер, 10, 1)
КОНЕЦ КАК НомерБезНулей
Простые примеры:
Код 1C v 8.х Пока Лев(Номер, 1) = "0" Цикл
Номер = Прав(Номер, СтрДлина(Номер) - 1);
КонецЦикла;
Код 1C v 8.х
Функция УбратьНули(НомерСтрокой)
Если Лев(НомерСтрокой, 1) = "0" Тогда
Возврат УбратьНули(Прав(НомерСтрокой, СтрДлина(НомерСтрокой) - 1));
Иначе
Возврат НомерСтрокой;
КонецЕсли;
КонецФункции
ИтоговаяСтрока = УбратьНули(Номер);
После обновления бухгалтерии 2.0 на 3.0 нумерация документов начинается заново, что делать и как исправить?
В бухгалтерии редакции 3.0 изменен способ нумерации документов по сравнению с редакцией 2.0.
Для правильной нумерации документов необходимо изменить номер первого создаваемого документа каждого вида так, чтобы он продолжал нумерацию из старой версии.
При этом номера документов, перенесенных из редакции 2.0, в печатных формах будут отображаться правильно.
Например, последний номер документа «Реализация товаров и услуг» был 00000000131.
После обновления на редакцию 3.0 первый введенный документ будет иметь номер 0000-000001.
Чтобы сохранить правильную нумерацию, необходимо в этом документе изменить номер на 0000-000132.
В дальнейшем всем введенным документам «Реализация товаров, услуг» будет присваиваться правильный номер.
Если по каким-то причинам первый способ Вам не помогает, то обратитесь к программисту 1С для настройки нумерации документов.
Ниже приведен код осуществляющий свою нумерацию документов
Код 1C v 8.2 УП // Mortal - не претендую на красоту решения, сделал так: //добавил общий модуль mortalАвтонумерация, в котором 1 функция Функция ПолучитьНомер(Ссылка) Экспорт ДокИмя = Ссылка.Метаданные().Имя; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | " + ДокИмя + ".Ссылка, | " + ДокИмя + ".Дата, | " + ДокИмя + ".Номер КАК Номер |ИЗ | Документ." + ДокИмя + " КАК " + ДокИмя + " |ГДЕ | " + ДокИмя + ".Дата МЕЖДУ &ДатаНачала И &ДатаКонца | И " + ДокИмя + ".Ссылка <> &ЭтотОбъект | И ПОДСТРОКА(" + ДокИмя + ".Номер, 1, 5) <> ""-"" | И ПОДСТРОКА(" + ДокИмя + ".Номер, 1, 1) = ""0"" | |УПОРЯДОЧИТЬ ПО | Номер УБЫВ"; Запрос.УстановитьПараметр("ДатаНачала", '20130101000000'); Запрос.УстановитьПараметр("ДатаКонца", '20131231235959'); Запрос.УстановитьПараметр("ЭтотОбъект", Ссылка); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Выборка.Следующий(); НомерЧислом = Число(Прав(Выборка.Номер,6)); НовыйНомерСтрокой = Формат((НомерЧислом + 1),"ЧГ=0"); Если СтрДлина(НовыйНомерСтрокой) = 1 Тогда НовыйНомерСтрокой = ("0000000000" + НовыйНомерСтрокой); ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 2 Тогда НовыйНомерСтрокой = ("000000000" + НовыйНомерСтрокой); ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 3 Тогда НовыйНомерСтрокой = ("00000000" + НовыйНомерСтрокой); ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 4 Тогда НовыйНомерСтрокой = ("0000000" + НовыйНомерСтрокой); ИначеЕсли СтрДлина(НовыйНомерСтрокой) = 5 Тогда НовыйНомерСтрокой = ("000000" + НовыйНомерСтрокой); КонецЕсли; Возврат(НовыйНомерСтрокой); КонецФункции// в модуле объекта нужных документов (для которых обязательна сквозная нумерация до конца года) добавил //mortal temp+Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ЭтотОбъект.ЭтоНовый() Тогда Если ЭтотОбъект.Дата <= '20140101000000' И ТекущаяДата() <= '20140101000000' Тогда ЭтотОбъект.Номер = mortalАвтонумерация.ПолучитьНомер(ЭтотОбъект.Ссылка); КонецЕсли; КонецЕсли;КонецПроцедуры//mortal temp-