- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ЭтоНовый() Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
Запрос.Текст = "ВЫБРАТЬ
| Максимум(ПлатежноеПоручение.Номер) КАК Номер
|ИЗ
| Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
|ГДЕ
| ПлатежноеПоручение.Дата >= &Период";
Выборка = Запрос.Выполнить().Выбрать();
НомерМакс = 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));
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЭтотОбъект.Номер = НомерДок;
КонецЕсли;
КонецПроцедуры
Мое творение, писАл на полном серьезе. В одном из документов БП пользователь отредактировал вручную номер документа, после этого сбилась нумерации. Документы с "неправильными" номерами удалили и добавили вновь - было поздно. Типового решения проблемы не нашлось и был написан этот код.
Можно увидеть очень интересное: нахождение максимального значения в запросе и одновременный бесполезный прогон всего цикла, чтобы снова найти максимальное значение и много чего другого.
someone 25.02.2012 09:10 # +2
Два раза для верности? Вдруг прибавим единицу и будет не число?!
Lure Of Chaos 29.01.2014 16:20 # 0
guest 25.02.2012 23:15 # 0
ErrorEd88 29.02.2012 15:36 # 0
guest 28.01.2014 14:50 # 0
guest8 09.04.2019 12:45 # −999