Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтоНовый() Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
Запрос.Текст = "ВЫБРАТЬ
| Максимум(ПлатежноеПоручение.Номер) КАК Номер
|ИЗ
| Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
|ГДЕ
| ПлатежноеПоручение.Дата >= &Период";
Выборка = Запрос.Выполнить().Выбрать();
НомерМакс = 0;
Пока Выборка.Следующий() Цикл
Если НомерМакс < Число(Выборка.Номер) Тогда
НомерМакс = Число(Выборка.Номер);
Если СтрДлина(НомерМакс) = 1 И НомерМакс<9 Тогда
НомерДок ="0000000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 2 И НомерМакс<>99) Или НомерМакс=9 Тогда
НомерДок ="000000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 3 И НомерМакс<>999) Или НомерМакс<>99 Тогда
НомерДок ="00000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 4 И НомерМакс<>9999) Или НомерМакс<>999 Тогда
НомерДок ="0000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 5 И НомерМакс<>99999) Или НомерМакс<>9999 Тогда
НомерДок ="000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли (СтрДлина(НомерМакс) = 6 И НомерМакс<>999999) Или НомерМакс<>99999 Тогда
НомерДок ="00000" + Строка(Число(Число(Выборка.Номер) + 1));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЭтотОбъект.Номер = НомерДок;
КонецЕсли;
КонецПроцедуры
Мое творение, писАл на полном серьезе. В одном из документов БП пользователь отредактировал вручную номер документа, после этого сбилась нумерации. Документы с "неправильными" номерами удалили и добавили вновь - было поздно. Типового решения проблемы не нашлось и был написан этот код.
Можно увидеть очень интересное: нахождение максимального значения в запросе и одновременный бесполезный прогон всего цикла, чтобы снова найти максимальное значение и много чего другого.
Два раза для верности? Вдруг прибавим единицу и будет не число?!