Имя: Пароль:
1C
 
Своя нумерация
,
0 Буковка
 
26.06.24
13:36
Добрый день!
Подскажите, пожалуйста, максимально изящное и поддерживаемое в дальнейшем решение.
Нужно реализовать свою нумерацию в справочнике: постоянная часть+переменная.
Переменная сначала обходит значения от 001 до 999. Далее добавляется в первом разряде буква латинского алфавита: от А01 до Z99. Далее латинская буква во втором разряде от АА1 до ZZ9.
Буду благодарна за любые идеи.
1 Aleksey
 
26.06.24
13:35
где и как будете хранить последний номер? или каждый раз запросом из БД по всем документам искать?
2 Волшебник
 
26.06.24
13:37
Просто увеличьте длину номера до 10 символов и нумеруйте десятичными цифрами. Если нельзя увеличить, то добавьте новое поле.

А этот дурдом с латинскими буквами оставьте. Не ваше это
3 Aleksey
 
26.06.24
13:37
и нумерация максимально странная
Логично что после 009 должен быть 00А, а у вас почему то 010
4 Aleksey
 
26.06.24
13:39
(2) Ну почему можно просто для печати конвертировать номер 1000 в АА1
Или как в типовой фактуре добавиьт реквизит номер для печати который получается преобразованием десятичного номера в 36ричного
5 maxab72
 
26.06.24
13:47
Можно проще. Сделать функцию перевода 10-ричного числа в 36-ричное (10 цифр _ 25 латинских букв). Но номера будут 001, 002,.. 009, 00A, 00B,.. 00Z, 010 и тд.
6 Мультук
 
гуру
26.06.24
13:52
(0)

26*26*10 = 6760

потом что ?

Волшебник в (2) всё сказал.

P.S.

Чисто гипотетически

=== Вариант 1 ===

1) Оставить типовую автонумерацию кода из "Префикс" + обычное число от 000 до 999

2) Добавить реквизит "ПредставлениеКода"
3) Написать функцию которая будет делать из нормального числа ваши А01 и т.п
4) Заполнять "ПредставлениеКода"  в "ПриУстановкеНовогоКода ???"
Всем вместо код всем показывать "ПредставлениеКода"


Минусы: не хочу перечислять, добрые люди за меня напишут.

=== Вариант 2 ===
Нумерацию 000 до 999 хранить в константе "МояНумерация"....
Дальше "по тексту"


P.P.S.

Если решите двигаться по одному из вариантов или придумаете "что-то" своё, то
поделитесь кодом на мисте.
Пусть лучше здесь вас обольют {хм}, чем потом вам будет стыдно/хреново/жопа-жопная на продакшене.
7 Буковка
 
26.06.24
13:58
(1) в константе, при записи планирую ставить блокировки, чтобы не получилось задвоения
8 Буковка
 
26.06.24
13:58
(2) увеличить нельзя, так поставили задачу
9 Буковка
 
26.06.24
13:59
(3) можно и так, не принципиально. Хотят, чтобы после 999 добавились латинские буквы
10 vde69
 
26.06.24
14:05
(8) (7) оба поста бред

если долбанутую задачу поставили долбоящеры то нужно или отказатся от нее или предложить долбоящерам нормальное решение
11 vde69
 
26.06.24
14:03
(9) говоришь просто - платформа такое не поддерживате и все...

ну и заодно реши вопрос какой номер будет у документа введенного задним числом
12 vde69
 
26.06.24
14:04
Допустима нумерация в таком порядке?

009
134
A99
F01
A23
234
555
13 Буковка
 
26.06.24
14:08
(12) допустима
14 Timon1405
 
26.06.24
14:36
учитывая (3) примерно так, как предлагают в (5)
Число = 1295;
База = 36;
Результат = "";
Пока Число <> 0 Цикл
    Поз =Число % База;
Результат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Поз + 1, 1) + Результат;
    Число = Цел(Число / База);
КонецЦикла;
Результат = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Результат ,3,"0"); //0ZZ
15 Буковка
 
26.06.24
14:40
(14) спасибо большое
16 Aleksey
 
26.06.24
15:09
(11) У него справочник, типа уникального номера карточки
17 Волшебник
 
26.06.24
18:47
(8) Я же сказал, тогда новое поле
18 Волшебник
 
26.06.24
18:49
(14) Я бы добавил ещё буквы нижнего регистра, тогда ёмкость поля возрастает ещё на несколько порядков.
19 Волшебник
 
26.06.24
18:50
Кстати, есть ещё GUID (внутренний уникальный идентификатор). Вероятно, он тоже годится.
20 Aleksey
 
26.06.24
19:02
(18) ну может он это использует для печати штрихкода code 39. А там только цифры и большие буквы
21 Волшебник
 
26.06.24
19:05
(20) ну ок
p.s. "она"
22 crasler
 
26.06.24
19:08
(0) Это получается надо просто хранить счетчик и переводить в 37 ричную систему счисления
23 vde69
 
26.06.24
19:11
НовыйКод = Base64(СтарыйКод)
24 Злопчинский
 
26.06.24
19:31
ну, чисто поизвращаться:
сделать служебный "невидимый" документ. настроить на него нумератор из трех символов. при необходимости получить новый номер - создать новый документ, записать  в попытке. если ОК - взять номер записанного документа. если исключение вывалилось - перейти на очередной префикс как символ(кодсимволатекущегопрефикса+1), занулить цифровую часть, сформировать новый номер, записать в попытке. Если снова исклбючение - все, жпс, пространство номеров закончилось.
25 Волшебник
 
26.06.24
19:31
(24) Месье знает толк в извращениях!
26 Волшебник
 
26.06.24
19:33
Повторюсь:
Со слова "фикция" начинаются все беды и баги. Программы должны быть честными, как молитвы.

Заполнить реквизиты документа, которых нет в объекте#14
27 vde69
 
26.06.24
19:37
Можно использовать механизм префиксов

Сделать регистр с измерениями
1. год (дата)
2. ЗаполненыйПрефикс (строка)

Получаем "префикс" из списка который отсутствует в регистре
дальше - штатно
28 Злопчинский
 
26.06.24
19:46
(25) Опыт! ;-)
делал у себя аналогично попроще... просто параллельная нумерация, не совпадающая с основной по скорости нумерации.
29 Буковка
 
26.06.24
20:26
(24) интересное решение
30 Волшебник
 
26.06.24
20:29
(29) Я слежу за Вами лично, "секрет тени". Ваши лайки и дизлайки записываются. Потом сверим часы и картины мира.
31 Буковка
 
26.06.24
20:29
В итоге:
Решила не трогать стандартную нумерацию. Завела отдельный реквизит. Взяла функцию из (14). В качестве итератора взяла стандартный реквизит код. Поменяла представление в модуле менеджера на свой реквизит.

Завтра жду обратную связь - устроит ли такой вариант.

Всем спасибо за помощь
32 Волшебник
 
26.06.24
20:30
(31) Решила она... Кто за тебя решает?
33 Буковка
 
26.06.24
20:34
(32) принимать решения и выбирать тот или иной вариант выполнения задачи не является чертой программиста?
Вы беспричинно ко мне строги
34 Волшебник
 
26.06.24
20:36
(33) Ну может быть... Допустим Вы программист типа меня или даже лучше.
Что ещё можете сказать умного?
35 Буковка
 
26.06.24
20:38
(34) ничего не скажу, народная мудрость советует не спорить)
36 Волшебник
 
26.06.24
21:52
(35) Хорошо сказано.
37 breezee
 
27.06.24
06:06
Как вы будете поддерживать нумерацию до окончания транзакции в разных сеансах?
Ни как.
Используйте префикс в номерах, это все что дает 1с