Имя: Пароль:
1C
 
Нужен алгоритм счетчика с инкрементацией внутри произвольного диапазона
☑
0 Веселый Джузеппе
 
12.10.26
✎
07:35
Добрый день! Есть задача присваивать реквизиту строк в документе (целочисленный тип) значение, начиная с диапазона 125000 до 425000 с инкрементацией, отталкиваясь от максимума. По достижение в строке значения 425000 следующая строка должна быть со значением 125000 и все пойдет на круг. Никакой привязки к датам нет, только этот диапазон. Расчетная скорость "выработки" диапазона несколько месяцов точно, хотя это не влияет на реализацию.
Как бы вы реализовали этот алгоритм?
1 maxab72
 
12.10.26
✎
07:47
в документах по 300 000 строк и более?
2 Lama12
 
12.10.26
✎
07:52
Мало вводных. Как быстро нужны данные сразу или потом? Есть ли правки документов прошлым числом? Одна база или распределенная? Один пользователь работает с документов или нет? И т.д. и т.п.
3 Веселый Джузеппе
 
12.10.26
✎
07:59
(1) В документе в среднем 15-25 строк
(2) 1 база, многопользовательская, РИБа нет. Правки могут быть, но в этом случае для новых строк надо ставить так же по инкременту, т.е. может быть документ со значениями в строках 130001, 130002 и 142300.
"Как быстро нужны данные сразу или потом?" скорее потом, эти данные будут использоваться для общения со сторонней системой отдельным регламентом, у него расписание будет не слишком "бодрое"
4 АНДР
 
12.10.26
✎
08:01
(0) Напиши,
Чем не подходят 3 константы и общий модуль?
5 Веселый Джузеппе
 
12.10.26
✎
08:04
(4) Да то ли не проснулся, то ли старый стал, в голове красивого решения не сложилось поутру. В целом да, рабочий вариант
6 Веселый Джузеппе
 
12.10.26
✎
08:06
Как будто бы хотелось обойтись данными в самих документах, а не хранить в константе
7 Мультук
 
гуру
12.10.26
✎
08:16
(0)

1) А что не так с константами ?
Транзакция и все дела
8 Веселый Джузеппе
 
12.10.26
✎
08:22
(7) Вы правы, наверное, так и сделаю
Теоретически размышляю об альтернативных путях решения. Задача изначально простой показалось, хоть и не часто встречаются такие
9 Fedor-1971
 
12.10.26
✎
08:20
(6) Данные в самих документах - как будешь определять последнее значение и обеспечивать инкремент при одновременном добавлении строк в разные документы?

Как вариант: делаем РС с измерением Месяц и ресурсом ТекущийСчетчик. Решается проблема правки задним числом, но нужен алгоритм при переносе документа в другой период
10 Fedor-1971
 
12.10.26
✎
08:26
(7) При добавлении строки в другом периоде, чисто технически, возможно наличие одинакового счётчика на разных строках одного или разных документов.
Нужно рассматривать периодичность счётчика по некому периоду (месяц, квартал)
(0) если не важно наличие пресечения значений - достаточно константы
11 Веселый Джузеппе
 
12.10.26
✎
08:24
(9) Справедливо.  
Кофе закончился, пойду реализовывать.
Всем спасибо и удачного дня!
12 Веселый Джузеппе
 
12.10.26
✎
08:25
(10) обязательно так и будет, но в данном случае это не проблема, т.к. актуальный период точно сильно меньше периода, за который "выработается" диапазон
13 Lama12
 
12.10.26
✎
09:16
(3) В таком случае, вообще проставлял номера перед общением со сторонней системой.
14 mikecool
 
12.10.26
✎
09:37
а если удалить строку?
15 Seriy_Volk
 
12.10.26
✎
10:06
(0) на основе своего опыта борьбы с идентификаторами, я бы глянул, поддерживает ли ваша СУБД создание SEQUENCE. Если поддерживает, то это идеальный вариант.
16 Garykom
 
гуру
12.10.26
✎
11:05
(0) А что старый вариант "Нанять программиста, за деньги"
Уже не подходит???
17 Garykom
 
гуру
12.10.26
✎
11:07
Простейший запрос к документам по нахождению максимума по дате документа и номеру последнему
И условие одно
Засунуть куда угодно
+ Учитывать текущий документ еще не записанный
После записи еще раз проверить запросом, вдруг параллельная запись
18 Fedor-1971
 
12.10.26
✎
11:16
(17) РС или константа выглядят кошернее - можно поставить блокировку от изменения
Тем более, что предполагается циклическое использование значений. Период выборки - непонятен и приплыли с последним использованным зачением
19 maxab72
 
12.10.26
✎
11:18
(18) там в принципе не описано в чем задача. Может все можно решить проще, быстрее и дешевле раз в десять.
20 Fedor-1971
 
12.10.26
✎
11:31
(19) Если исходить из (3), то сам счётчик не нужен т.к. можно тупо сделать ИД в виде НомерДокумента + "/" + НомерСтроки ТЧ
Но нам того неизвестно и ТС возжелал периодический счётчик с начальным и конечным значением
21 Fragster
 
гуру
12.10.26
✎
11:32
сделать один условно бесконечный счетчик, в номер брать остаток от деления его значения на 300000 + 125001
22 maxab72
 
12.10.26
✎
11:34
(20) да еще и с нумерацией по кругу. Почему круг выбран с 300 000 значений - вообще не понятно. И могут ли быть пропуски при нумерации - тоже не понятно. Короче, фигня какая-то бесполезная вырисовывается.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.