автоматическая нумерация

1. DbIM 19.09.07 15:35 Сейчас в теме
можно ли сделать так чтобы какой-то реквизит в справочнике (помимо кода) автоматически нумеровался ?
(у меня в справочнике клиентов есть графа "номер договора"... вот чтобы ее нумерация шла от автоматически от предыдущего наибольшего "номера")
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. ssp_ 153 20.09.07 13:06 Сейчас в теме
А не проще ли поставить этому реквизиту сортировку, и при вводе нового делать
Код
Спр.обратныйПорядок(1);
Спр.ПорядокРеквизита("МойРеквизит");
Спр.ВыбратьЭлементы();
Показать полностью

чтобы получить последний присвоенный номер.
coollerinc; +1 Ответить
2. sashulyT 201 19.09.07 15:39 Сейчас в теме
Автоматической нумерации по произвольным реквизитам я не встречал. Напротив, в разных конфах видел самописные процедурки для нумерации
3. sevenlis 69 19.09.07 21:09 Сейчас в теме
при вводе нового элемента собираешь все номера договоров владельца в массив, ищешь максимальное значение. новому элементу присваиваешь найденное + 1
тока нумерация договоров должна быть однозначной (без выпендрежа с префиксами и т.д.) и желательно числовой. иначе ИМХО такой метод не сработает
4. poppy 20.09.07 00:53 Сейчас в теме
LiS Написал:
-------------------------------------------------------
> при вводе нового элемента собираешь все номера
> договоров владельца в массив, ищешь максимальное
> значение. новому элементу присваиваешь найденное + 1

Это самое простое и очевидное решение. Я тоже когда-то такое делала.

Но, через какое-то время, это начинает тормозить. Выход был найден простой и незатейливый. Если интересно, расскажу.
5. sashulyT 201 20.09.07 08:23 Сейчас в теме
poppy Написал:
-------------------------------------------------------
> Но, через какое-то время, это начинает тормозить.
> Выход был найден простой и незатейливый. Если
> интересно, расскажу.


Раз заикнулась, теперь говори :)
6. DbIM 20.09.07 10:19 Сейчас в теме
poppy Написал:
-------------------------------------------------------
> Если интересно, расскажу.
Расскажи. Интересно.


7. poppy 20.09.07 11:01 Сейчас в теме
Ок. Расскажу.

У меня была немного другая, но похожая задача. В конфигурации был чудо-документ, в котором хранились номера и даты всех документов по сделке - счета, накладной, счет-фактуры и ПКО. При этом самих документов счет и т.д. в конфигурации не существовало. Заказчик был принципиально против этого.

Так вот, под каждый вид документа был создан справочник. Когда пользователь пытался присвоить новый номер, например, счету, в соответсвующем справочнике создавался новый элемент, код которого записывался в соответсвующий реквизит. Если пользователь от номера отказывался - элемент справочника удалялся.
9. sevenlis 69 20.09.07 18:29 Сейчас в теме
ssp_ Написал:
-------------------------------------------------------
> А не проще ли поставить этому реквизиту
> сортировку, и при вводе нового
> делать...
а как быть когда МойРеквизит - текст? текст + 1 = неизвестночто...

я вот один раз столкнулся с извращенной нумерацией типа как в экселе: номер документа - 3-х значный, но. каждый из знаков меняется не от 0 до 9, а от 0 до Z. т.е. 0-9, A-Z. причем заглавными. и как прикажете алгоритм автонумерации написать? я честно говоря растерялся... а потом оказалось, что и не нужно.
10. ssp_ 153 21.09.07 08:58 Сейчас в теме
LiS Написал:
> а как быть когда МойРеквизит - текст? текст + 1 =
> неизвестночто...

Решаемо. Отрезаем числовой "хвост". То что до него - это префикс, его оставляем как есть. Числовую часть перобразуем в число, добавляем единицу и обратно с помощью Формат(Номер,"Ч(0)<длина>")
Сама 1с делает примерно так же при автонумерации. Правда там еще можно задать префикс, это руками сложнее сделать.

> я вот один раз столкнулся с извращенной нумерацией
> типа как в экселе: номер документа - 3-х значный,
> но. каждый из знаков меняется не от 0 до 9, а от 0
> до Z. т.е. 0-9, A-Z. причем заглавными. и как
> прикажете алгоритм автонумерации написать? я
> честно говоря растерялся... а потом оказалось, что
> и не нужно.

Проходили и такое...
Код
Функция Число43в10(Число43) Экспорт
   Знаки="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.=$/+%";
   Число10=0; Порядок=1;
   Для Поз=1 По СтрДлина(Число43) Цикл
      Цифра43=Сред(Число43,СтрДлина(Число43)-Поз+1,1);
      Если Цифра43=" " Тогда Цифра43="="; КонецЕсли;
      Число10=Число10+Порядок*(Найти(Знаки,Цифра43)-1);
      Порядок=Порядок*43;
   КонецЦикла;
   Возврат Число10;
КонецФункции
//----------------------------------------------------------------------  
Функция Число10в43(Знач Число10,Длина=0) Экспорт
   Знаки="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.=$/+%";
   Число43="";
   Пока Число10>0 Цикл
      Ост=Число10%43;
      Число10=Цел(Число10/43);
      Число43=Сред(Знаки,Ост+1,1)+Число43;
   КонецЦикла;
   Если Длина>0 Тогда
      Если СтрДлина(Число43)>Длина Тогда Число43=Прав(Число43,Длина);
      Иначе Пока СтрДлина(Число43)<Длина Цикл Число43="0"+Число43; КонецЦикла;
      КонецЕсли;
   КонецЕсли;
   Если Число43="" Тогда Число43="0"; КонецЕсли;
   Возврат Число43;
КонецФункции
Показать полностью


Использовалось для представления чисел в штрих-коде code39
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот