Имя: Пароль:
1C
1С v8
Сбилась нумерация.
0 ErrorEd88
 
15.12.11
15:51
В базе клиент стал вручную править номера документов, сбилась нумерация. Типовыми средствами исправить не удалось. В обработчик при записи добавил:

Если ЭтоНовый() Тогда

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|ПлатежноеПоручение.Номер Как Номер
|ИЗ
|Документ.ПлатежноеПоручение КАК ПлатежноеПоручение";
Выборка = Запрос.Выполнить().Выбрать();
НомерМакс = 0;

Пока Выборка.Следующий() Цикл

Если НомерМакс < Число(Выборка.Номер) Тогда
НомерМакс = Число(Выборка.Номер);

Если СтрДлина(НомерМакс) = 3 Тогда
НомерДок ="00000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли СтрДлина(НомерМакс) = 4 Тогда
НомерДок ="0000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли СтрДлина(НомерМакс) = 5 Тогда
НомерДок ="000000" + Строка(Число(Число(Выборка.Номер) + 1));
ИначеЕсли СтрДлина(НомерМакс) = 6 Тогда
НомерДок ="00000" + Строка(Число(Число(Выборка.Номер) + 1));
КонецЕсли;

КонецЕсли;

КонецЦикла;
ЭтотОбъект.Номер = НомерДок;

КонецЕсли;

Теперь все работает, как именно мне необходимо. Префиксов и СтрДлина(Число(ЭтотОбъект.Номер))<3 не будет. Но есть подозрения, что все можно было сделать проще (подозрения на г..код). Кто как, обычно это обходит (сбитую нумерацию).
1 Irbis
 
15.12.11
15:53
Зря вы так, проще было один раз перенумеровать. И заставить виновника это делать вручную во внеурочное время.
2 Lama12
 
15.12.11
15:55
(1) +100
Особенно про виновника.
3 rutony
 
15.12.11
16:01
(0) Ох ты ж ежик...

Пишу не залазя в конфигуратор...

Выборка = Документы.ПлатежноеПоручение.Выбрать();
Пока Выборка.Следующий() Цикл
  Объект = Выборка.ПолучитьОбъект();
  Объект.Номер = Формат(Выборка.Номер, "ЧЦ=11; ЧВН=; ЧГ=");
  Объект.Записать();
КонецЦикла;

В итоге все перенуменровано, и не пишу никаких велосипедов...
4 ErrorEd88
 
15.12.11
16:07
(3) Теперь номер - 07.
5 ErrorEd88
 
15.12.11
16:07
(4) и дальше - 08, 09 и т.д.
6 sda553
 
15.12.11
16:09
(3) У меня уже скоро полгода как конфигуратора вообще на компе нет, но я еще помню семерочное
Объект.Номер = Прав("000000000000"+Выборка.Номер,12);

А вообще перенумеровать все и вызвать после этого ОбновитьНумерациюОбъектов()
7 ErrorEd88
 
15.12.11
16:10
(3), (6) Ветераны)
8 rutony
 
15.12.11
16:10
(5)(6) читаем справку ппц...

ЧЦ=11 - длинна кода
ЧГ= - нет группировки
ЧВН= - вывод лидирующих нулей

В итоге имеем:
Было: 123 стало 00000000123
Было: 0101 стало 00000000101
9 rutony
 
15.12.11
16:12
(4) Едиственно что нет в (3) это проверки на уникальность, но я надеюсь ТС догадался...