Имя: Пароль:
1C
1С v8
Обеспечить сквозную нумерацию 2 справочников
0 azernot
 
06.12.12
11:24
Существует 1С 8, в ней есть 2 справочника (предположим Контрагенты и Подразделения контрагентов). Из 1С данные этих справочников выгружаются в некую внешнюю систему, в которой оба этих справочника - одна таблица. Синхронизация осуществляется по коду.
Вопрос, какую методику предложили бы вы для организации сквозной нумерации 2 справочников в 1С? (интересует много разных). Справочники могут заводиться интерактивно, программно, загружаться из других систем и т.п. Никаких ограничений.
1 shuhard
 
06.12.12
11:25
(0)ТЗ не полное,
не описан жизненный цикл
2 Cube
 
06.12.12
11:26
(0) Подписка на событие ПриУстановкеНовогоКода...
3 Широкий
 
06.12.12
11:26
Выгружать с префиксами "К" и "П"
4 YHVVH
 
06.12.12
11:26
(0) программно?
5 YHVVH
 
06.12.12
11:27
код = уникальный идентификатор
6 DrunkAnimal
 
06.12.12
11:28
(0) по гуиду синхронизируйся
7 azernot
 
06.12.12
11:28
Уточнение: код именно числовой.
8 samozvanec
 
06.12.12
11:28
(0) префиксы поставь
9 cw014
 
06.12.12
11:29
Код во внешней системе цифровой. Там же единая таблица. Или химичить с UUID, или делать подписку на событие (см (2)), или отдельный реквизит для синхронизации с внешней прогой
10 azernot
 
06.12.12
11:30
(4) Вручную пользователя устанавливать коды заставлять нельлзя :) Так что, да, программно.
(2) Ну как бы момент установки кода я отследил, а дальше что?
11 Cube
 
06.12.12
11:31
(7) И что? С каких пор в строке нельзя хранить число? В (2) решение.
12 Heckfy
 
06.12.12
11:31
Создай отдельный справочник СквознаяНумерация. Перед записью своих справочников добавляй туда элемент и записывай. В своем справочнике присваивай код из справочника СквознаяНумерация.
Как вариант.
13 Cube
 
06.12.12
11:31
(10) "Ну как бы момент установки кода я отследил, а дальше что?" - а что дальше?
14 azernot
 
06.12.12
11:32
(12) Как вариант, согласен.
15 Serg_1960
 
06.12.12
11:33
"Для организации сквозной нумерации"... в 1С существуют нумераторы. Вот :)
16 YHVVH
 
06.12.12
11:33
(7)  при синхронизации множ на кратное 10, в зависемости от размера справочников. или переделай нумерацию в самом маленько справочники от 100 000 например. в первом будет всегда меньше 100 000 а во втором больше и они буду разные.
17 YHVVH
 
06.12.12
11:34
и делать ничего не надо надо просто в одном создать первый элемент с кодом большого числа
18 azernot
 
06.12.12
11:34
(15) Да, это был бы выход.. но для справочников оно не работает..
19 Cube
 
06.12.12
11:35
(17) Тоже неплохой вариант.
20 azernot
 
06.12.12
11:36
(16) Тоже вариант. Но он с ограничениями на размер справочника, и есть элемент доверия пользователю (а что, если чьи-то шаловливые руки начнут менять нумерацию?)
21 azernot
 
06.12.12
11:37
(13) Ну дальше,откуда взять уникальный сквозной номер? Как-бы вопрос не в том, чтобы отследить момент установки кода.
22 Cube
 
06.12.12
11:37
azernot на (13) ответь
23 Нуф-Нуф
 
06.12.12
11:41
подписка. иниипите мозг честным людям
24 azernot
 
06.12.12
11:42
(23) Что подписка? Чем мне поможет сама по себе подписка?
25 YHVVH
 
06.12.12
11:42
(20) если начнут менять тебе уже ничего не поможет. ни один метод.
26 Нуф-Нуф
 
06.12.12
11:42
(23) если в подписке указать определенную процедуру - то поможет
27 Cube
 
06.12.12
11:43
(24) Встречный вопрос: а чем она не поможет?
28 YHVVH
 
06.12.12
11:43
(20) нумерация автоматически делай, код запрещай менять и все тут. если только программно не нехреновертят.
29 Нуф-Нуф
 
06.12.12
11:43
подпишись на событие, будь мужиком, блеать!
30 azernot
 
06.12.12
11:44
(26) Так вопрос-то как раз в том КАКУЮ процедуру там указать.
(25) Да, и вопрос в том, чтобы отслеживать кто-то менял и дальше поправлять некорректные дейсвтия пользователя. И вопрос, как это делать? По какой методике?
31 Нуф-Нуф
 
06.12.12
11:45
1. в процедуре подписки выполнять запрос и находить последний код и +1
2. допсправочник сквозная нумерация.

хотя оба решения отдают говвнокодом...
32 Undefined vs NULL
 
06.12.12
11:45
почему для справочников нет нумераторов?
33 Cube
 
06.12.12
11:46
(30) "КАКУЮ процедуру там указать"
Угараешь? В процедуре находишь самый большой из существующих номеров, прибваляешь к нему единицу и суешь этот номер в устанавливаемый номер. Не?
34 Undefined vs NULL
 
06.12.12
11:46
(31) РС еще можно прикрутить
35 Нуф-Нуф
 
06.12.12
11:46
(32) это вопрос или предъява?
36 Нуф-Нуф
 
06.12.12
11:47
кстати. а почему бы обоим справочникам не сделать префикс? решит проблемы при синхронизации с внешней системой
37 Cube
 
06.12.12
11:49
(36) См. (7) Если то про числовой префикс, то см. (16)
38 Undefined vs NULL
 
06.12.12
11:51
(35) вопрос, но не тебе лично
39 YHVVH
 
06.12.12
11:52
создай в одном из справочники элемент с большим кодом и все не прася, делов - 2 секунды.
40 Reset
 
06.12.12
11:53
Если достаточно непересечения, можно наверное обойтись достаточно тупым решением, в одном спровочнике с 1, во втором с макс/2 (с простой проверкой перед записью)
41 Reset
 
06.12.12
11:53
(40) ну то есть изначально создать в одном с кодом 1, во втором с кодом 5000000
42 Нуф-Нуф
 
06.12.12
11:54
(41) а если к 5000000 они подойдут через год?
43 Reset
 
06.12.12
11:54
(42) Тогда опа.
44 Reset
 
06.12.12
11:55
задать длину так, чтобы ее половины точно хватило на 100 лет
45 Shandor777
 
06.12.12
11:56
(38) Нумераторы для документов, а не для справочников. Кажется так :)
46 azernot
 
06.12.12
11:56
Итак, на текущий момент 3 варианта:
1. Допсправочник с наследованием нумерации из него.
2. Превентивное разделение нумерации (номера до Х - первый справочник, номера после Х - второй справочник)
3. В момент установки кода поиск максимального и увеличение на 1.

От себя добавлю, что сейчас у меня применяется аналог 3-го варианта, но только поиск не запросом, а константа с максимальным номером.

Какие ещё варианты сможем накидать? Все решения какие-0то неизящные, что-ли.. :)
47 Cube
 
06.12.12
12:00
(46) Еще вариант: во внешней системе длина номера должна быть на 1 символ больше. Тогда в 1С используем стандартную нумерацию, а при выгрузке к контрагентам добавляем лидирующую 1, а к подразделениям лидирующую 2.
48 Нуф-Нуф
 
06.12.12
12:01
(47) вариант норм, только разлелители должны быть не 1 и 2, а 0 и 1
49 azernot
 
06.12.12
12:07
(47) Да, хороший вариант. Мне нравится.
50 Undefined vs NULL
 
06.12.12
12:20
(45) спасибо, кэп
51 КонецЦикла
 
06.12.12
12:22
(49) четное/нечетное число?
ммм... шо ж еще нафантазировать?
52 azernot
 
06.12.12
14:26
(51) Это конечно тоже вариант, но боюсь его реализация очень уж будет напоминать вариант 3 (только в запросе я буду искать макисмальное чётный или нечётный код и увеличивать на 2).
53 Базис
 
naïve
06.12.12
14:32
Чётность или один идёт снизу диапазона, второй сверху.
54 Кокос
 
06.12.12
14:35
(0) заведи отдельный справочник. чисто с одним числовым полем кода и автонумераций. В каждый другой справочник добавь реквизит типа этого справочника. в "ПередЗаписью" если этот реквизит не заполнен, создай элемент нумерующего справочника и тупо туда впиши. Вот тебе и сковзная нумерация. А я вот не помню: нумераторы в 8рке есть? Просто если есть у меня не было повода ими воспользоваться.
55 Heckfy
 
06.12.12
14:36
(54) (12) :):):)
56 Кокос
 
06.12.12
14:37
(55) чукча не читатель, чукча писатель :)))
57 Kreont
 
06.12.12
14:38
Я за вариант (2), доступно да и делать пару минут
58 Reset
 
06.12.12
14:52
ПриУстановкеНовогоКода (если не переврал событие)
можно в одном спр домножать на 2 и прибавлять 1, а во втором просто домножать на 2.
(это вариант реализации чет/нечет без (52)
59 Vitamax3
 
06.12.12
15:02
(58)ну и на сколько карточек хватит длины номера из 11 символов?
60 Обработка
 
06.12.12
15:11
А вот если просто чет нечет для двух спр то как?
61 КонецЦикла
 
06.12.12
15:16
(60) Нет. Это слишком просто
Тут нужно приплести космические технологии
62 Reset
 
06.12.12
15:19
(59) на 10^11/2 карточек в каждом справочнике (с) Кэп
63 Reset
 
06.12.12
15:21
(62) А не, походу прогнал Кэп.
Прав (59)
64 Reset
 
06.12.12
15:22
Не умножать на 2, а проверять на чет в одном и при неоходимости увеличение на 1, а во втором на нечет и также увеличение на 1
65 Jaffar
 
06.12.12
15:44
(48) ну или 0 и 5 - аналог варианта 2 из (46)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан