Имя: Пароль:
1C
1С v8
Автонумерация документа
0 urbanstyle
 
18.04.13
13:57
здравствуйте! сбилась нумерация у документа.
сделал функцию, которая ищет последний по номеру и дате документ.
Потом ее вызываю в процедуре ПередЗаписью() документа.
Создается новый документ, ему автоматически присваивается новый номер, но когда создаю следующий документ, номер повторяется. Как сделать так, чтобы при записи каждого нового документа в БД, происходила автоматическая нумерация?


Функция ПрисвоитьНовыйНомер()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| МойДокумент.Номер КАК Номер,
| МойДокумент.Дата КАК Дата,
| МойДокумент.Ссылка
|ИЗ
| Документ.МойДокумент КАК МойДокумент  
|УПОРЯДОЧИТЬ ПО
| Номер УБЫВ,
| Дата УБЫВ";

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

Если Выборка.Следующий() Тогда
Возврат Выборка.Номер
Иначе Возврат
"000000001"
КонецЕсли;

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

Возврат Номер

КонецФункции
1 Kreont
 
18.04.13
14:01
Код:
Номер = Строка(Число(Номер) + 1);
Номер = СтрЗаменить(Номер,Символ(160),"");
Для N = 1 По 9-СтрДлина(Номер) Цикл
Номер = "0" + Номер;
КонецЦикла;

Возврат Номер

не выполнится ни когда!
2 Лефмихалыч
 
18.04.13
14:02
(0)  убери свою функцию. Просто убери.
В свойствах формы документа выключи автонумерацию и всё
3 Kreont
 
18.04.13
14:07
(2) +100
наверное жалко, столько кода написал по автонумерации :)
4 urbanstyle
 
19.04.13
14:49
почему не выполнится? хочу понять!
5 SherifSP
 
19.04.13
14:55
+(2) И убери доступность у реквизита "Номер"
6 SherifSP
 
19.04.13
14:56
(4) Писать код, когда можно все сделать стандартными средствами, не кошерно
7 urbanstyle
 
19.04.13
15:15
не изменилось ничего, галка стоит. только теперь нумерация идет с "999" и также дублируется.
мне нельзя затирать старые номера, не могу воспользоваться обработкой для нумерации.

все дело в этом куске:
Номер = Строка(Число(Номер) + 1);
Номер = СтрЗаменить(Номер,Символ(160),"");
Для N = 1 По 9-СтрДлина(Номер) Цикл
Номер = "0" + Номер;
КонецЦикла;

Возврат Номер


Здесь меняется номер на 1 больше. и на этом моменте я застрял

Номер = Строка(Число(Номер) + 1);

Нужно сделать цикл чтобы каждому новому доку присваивался номер на 1 больше. Только не доходит до меня никак(
8 Kreont
 
19.04.13
15:31
(7) O_O, зачем тут цикл вообще?
Номер = Строка(Число(Номер) + 1);
//Номер = СтрЗаменить(Номер,Символ(160),"");
//Для N = 1 По 9-СтрДлина(Номер) Цикл
Номер = Прав("0000000000000000" + Номер,ДлинаПоляНомераБезПрефикса); //Это если в лоб :)
//КонецЦикла;

Возврат Номер
9 salvator
 
19.04.13
15:34
(7) Длина номера какая у документа?
10 urbanstyle
 
19.04.13
15:41
длина 9
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший