|
Нумерация в документе, сошел с ума | ☑ | ||
---|---|---|---|---|
0
Стажер_1С
26.07.18
✎
12:46
|
Привет! В документе автоматическая нумерация, сам документ не типовой.
Создаем документ,ничего в нем не делаем,просто сразу закрываем его, ТО ЕСТЬ ДОКУМЕНТ НЕ СОЗДАН!!.При открытие документу присваивается номер 1. Создаем снова документ,и номер уже равен 2 Если закрыть 1с и снова открыть. Вновь создать документ номер =1 В чем может быть причина? |
|||
1
Стажер_1С
26.07.18
✎
12:48
|
Кэш почистила. Создала даже новый нумератор с автонумерацией,не помогло
|
|||
2
Мимохожий Однако
26.07.18
✎
12:48
|
Когда 1С закрывается,то барабашка (кэш) умирает.
|
|||
3
1Сергей
26.07.18
✎
12:48
|
>>Создаем документ,ничего в нем не делаем,просто сразу закрываем его, ТО ЕСТЬ ДОКУМЕНТ НЕ СОЗДАН!!.При открытие документу присваивается номер 1.
Если ты не записывала документ, то чего ты там открываешь? |
|||
4
Мимохожий Однако
26.07.18
✎
12:50
|
У неё семёрка
|
|||
5
Cyberhawk
26.07.18
✎
12:50
|
(3) Форму не записанного в БД объекта, очевидно же
|
|||
6
Стажер_1С
26.07.18
✎
12:50
|
(3) Да я бы такое и не подумала сама посмотреть.Просто заказчик сказал: - вот смотри,я решил создать документ,а потом передумал. Потом в течение дня все таки решил его создать,и смотрю нумерация уже равна 2
|
|||
7
Стажер_1С
26.07.18
✎
12:51
|
(4) Платформа 8.3
конф-я: Бухгалтерия государственного учреждения, редакция 1.0 (1.0.52.7) |
|||
8
Стажер_1С
26.07.18
✎
12:51
|
(5) Можно поподробнее
|
|||
9
Cyberhawk
26.07.18
✎
12:53
|
Не путай запись объекта в БД и механизм нумерации, выдающий очередной номер
|
|||
10
Быдло замкадное
26.07.18
✎
12:54
|
ПриОткрытии АвтонумерацияВФорме = Ложь;
|
|||
11
Малыш Джон
26.07.18
✎
12:54
|
(10) это БГУ, её с поддержки обычно не снимают...
|
|||
12
Стажер_1С
26.07.18
✎
12:55
|
(10) Если я откл автонумерация,ты предлагаешь,чтобы они ручками вбивали номер?
|
|||
13
Стажер_1С
26.07.18
✎
12:55
|
(11) это снята полностью,там живого места нет
|
|||
14
Стажер_1С
26.07.18
✎
12:55
|
(9) Так и как можно решить мою проблему???Я не знаю даже где смотреть
|
|||
15
Cyberhawk
26.07.18
✎
12:55
|
(12) Номер будет выдаваться при записи объекта в БД
|
|||
16
Быдло замкадное
26.07.18
✎
12:55
|
(11) Документ не типовой. Читал?
(12) нет он при записи присвоится. Как в типовых |
|||
17
Cyberhawk
26.07.18
✎
12:56
|
(14) Какую проблему? Это штатное поведение механизма нумерации
|
|||
18
Малыш Джон
26.07.18
✎
12:56
|
(13) тогда без проблем
делай, как в (10) |
|||
19
Малыш Джон
26.07.18
✎
12:57
|
(16) >>Документ не типовой. Читал?
Каюсь, пропустил |
|||
20
Стажер_1С
26.07.18
✎
12:57
|
(16) Окей,сейчас,посмотрю,отпишусь
|
|||
21
Стажер_1С
26.07.18
✎
12:58
|
Поле объекта недоступно для записи (АвтонумерацияВФорме)
АвтонумерацияВФорме = Ложь; |
|||
22
Быдло замкадное
26.07.18
✎
12:58
|
(21) Блин ну ты СП открой.
Автонумерация = АвтонумерацияВФорме.НеИспользовать; |
|||
23
Стажер_1С
26.07.18
✎
12:59
|
(22) да уже посмотрела,спасибо)
|
|||
24
Стажер_1С
26.07.18
✎
12:59
|
сейчас проверю
|
|||
25
Стажер_1С
26.07.18
✎
13:01
|
не помогло
|
|||
26
1Сергей
26.07.18
✎
13:01
|
(25) номер проставляется до записи?
|
|||
27
Стажер_1С
26.07.18
✎
13:03
|
(26) да,сразу при открытие
|
|||
28
Быдло замкадное
26.07.18
✎
13:03
|
(27) =0 как так.. ты при открытии написал Автонумерация = АвтонумерацияВФорме.НеИспользовать; ?
|
|||
29
Мимохожий Однако
26.07.18
✎
13:03
|
(25) Открой документ и посмотри раздел Нумерация. Есть ли там Нумератор и флажок Автонумерация?
|
|||
30
Стажер_1С
26.07.18
✎
13:04
|
(29) есть
|
|||
31
Стажер_1С
26.07.18
✎
13:04
|
(28) Да при открытие,в форме модуля,так и написала.Отладчиком остановила там,а он уже присвоил номеру значение
|
|||
32
Стажер_1С
26.07.18
✎
13:05
|
(29) более того,я создала новый нумератор,и добавила его в документ
|
|||
33
1Сергей
26.07.18
✎
13:05
|
(31) в свойствах формы поменяй
|
|||
34
Мимохожий Однако
26.07.18
✎
13:05
|
(30) Что есть, партизанен?
|
|||
35
Стажер_1С
26.07.18
✎
13:06
|
(33) что??
|
|||
36
Кай066
26.07.18
✎
13:07
|
(27) Так не должно быть. В типовых номер присваивается(а значит и занимается) при записи
|
|||
37
Мимохожий Однако
26.07.18
✎
13:07
|
выкинь нумератор для начала
|
|||
38
Стажер_1С
26.07.18
✎
13:08
|
||||
39
1Сергей
26.07.18
✎
13:08
|
||||
40
1Сергей
26.07.18
✎
13:09
|
Если там ОФ, конечно
|
|||
41
Стажер_1С
26.07.18
✎
13:09
|
(39) да нашла,делаю
|
|||
42
Стажер_1С
26.07.18
✎
13:10
|
(40) что такое оф?у меня там авто стояло
|
|||
43
1Сергей
26.07.18
✎
13:10
|
(42) ставь не исппользовать
ОФ - Обычные формы |
|||
44
Стажер_1С
26.07.18
✎
13:11
|
(43) да обычные
|
|||
45
Стажер_1С
26.07.18
✎
13:11
|
вроде,ну я определяю что тут нет сервер и клиент,а просто все
|
|||
46
Стажер_1С
26.07.18
✎
13:14
|
(43) ты такая прелесть!!!!!!!!!!!Спасибо тебе большое!!!!!!!!!!!
Помогло |
|||
47
Стажер_1С
26.07.18
✎
13:14
|
ВСЕМ БОЛЬШОЕ СПАСИБО
|
|||
48
1Сергей
26.07.18
✎
13:14
|
(46) Фотку поставь в профиль :)
|
|||
49
Стажер_1С
26.07.18
✎
14:25
|
(48) как -нибудь)
|
|||
50
aleks_default
26.07.18
✎
17:53
|
(48) Продинамила:)
|
|||
51
Малыш Джон
26.07.18
✎
21:01
|
(50) Ну, не удивительно)
|
|||
52
Стажер_1С
30.07.18
✎
09:32
|
(50) (51) да поставлю я)))
|
|||
53
Serg_1960
30.07.18
✎
10:23
|
(для справки)
От автонумерации в форме объекта (перед записью) отказались ещё когда была платформа 8.1, но оставили для совместимости с платформой 8.0 (точнее для совместимости работы конфигураций, написанных под платформу 8.0). Источник: https://its.1c.ru/db/metod8dev#content:1550:hdoc "Свойство Автонумерация формы объекта (элемента справочника, документа...) отвечает за автоматическое получение номера при открытии формы. Если в этом свойстве указано значение НеИспользовать, это означает, что при открытии формы номер будет не заполнен и он будет получен автоматически при записи объекта." |
|||
54
Стажер_1С
31.07.18
✎
08:11
|
(53) Раз отказались ,тогда почему на 8.2 без этой галочки не работало?
|
|||
55
Serg_1960
31.07.18
✎
09:37
|
(54) Всё работало и без этой галочки. Просто нужно было хотя бы чуть-чуть иметь представление как это работает в типовых конфигурациях.
"Вы не любите кошек? Да вы просто не умеете их готовить!"(Альф, инопланетянин). |
|||
56
Cyberhawk
31.07.18
✎
09:39
|
(55) "иметь представление как это работает в типовых конфигурациях" // А вот кстати вопрос на засыпку по механизму выдачи номеров: почему при первом обращении к менеджеру нумерации он далает запрос к БД (максимальному номеру) без блокировки?
|
|||
57
Serg_1960
модератор
31.07.18
✎
10:24
|
(56) Достаточно включить логику :) Наверное потому, что для работы механизма автонумерации нужна инициализация первоначальных значений (максимальный номер пространства автонумерации). Ведь далее механизм автонумерации работает автономно от данных информационной базы - ему же нужно с чего-то (с каких-то значений) начинать нумерацию.
|
|||
58
Cyberhawk
31.07.18
✎
10:30
|
(57) Ты, видимо, не обратил внимание на последнее слово в моем вопросе, а ведь в нем вся соль
|
|||
59
Serg_1960
модератор
31.07.18
✎
10:59
|
(58) Вы, видимо, забыли выделить в чём именно Ваша соль в вопросе :) А Вы не находите, что эта "соль" более из области блокировки данных, механизма транзакционных блокировок?
|
|||
60
Cyberhawk
31.07.18
✎
11:05
|
(59) Короче этот механизм выдачи номера может облажаться:
0. Сеанс 1 затребовал от механизма нумерации выдать этому сеансу очередной номер для какого-то документа какого-то вида. 1. Механизм нумерации понимает, что это первое к нему обращение, и считывает из БД максимальный номер этого вида документа. 2. Сеанс 2 пишет в БД документ этого же вида с номером, который механизм из пункта 1 выдаст потребителю в пункте 3. Этот номер сеанс 2 не получает от механизма нумерации, а вычисляет по какому-то своему алгоритму. 3. Механизм прибавляет к считанному номеру единичку и отдает Сеансу 1. 4. Сеанс 1 пишет документ с полученным номером и получает отлуп "Значение <такой-то номер> поля "Номер" не уникально". А вот если бы считывание в пункте 1 было блокирующее, тогда вероятность ошибки из пункта 4 была бы исключена. |
|||
61
вым
31.07.18
✎
11:24
|
(60) а теперь смодулируй поведение если в начале дня кто-то получил номер с блокировкой и оставил незаписанный документ до конца дня
|
|||
62
Cyberhawk
31.07.18
✎
11:27
|
(61) Ты что-то не понял. Блокировать не нужно до завершения записи документа - блокировать достаточно до завершения чтения и отдачи первого затребованного от механизма номера. Как только механизм нумерации отдал вычисленный номер, блокировка снимается.
|
|||
63
Serg_1960
модератор
31.07.18
✎
11:41
|
(60) А теперь проанализирует первое обращение в момент, когда в базе есть запись с незавершённой транзакцией (в которой содержится искомый максимальный номер), учитывая что транзакция может быть позже а)завершена или б)отменена.
|
|||
64
Serg_1960
31.07.18
✎
11:47
|
И кстати: я могу перечислить много (поверьте это не преувеличение) реальных ситуаций, когда автонумерацию может заглючить на банальное "номен[код] не уникален". Только смысла не вижу в ловле блох - другого механизма у платформы нет. Ешьте кактус :)
|
|||
65
Cyberhawk
31.07.18
✎
11:52
|
(63) Вот видишь, еще один косяк. Но в предложенном тобой сценарии инсерт в БД ничего такого не блокирует, поэтому механизму нумерации хватило бы грязного чтения макс. номера из таблицы документов
|
|||
66
Cyberhawk
31.07.18
✎
11:53
|
Хотя этот механизм, вероятно, так и делает (грязное, NOLOCK)
|
|||
67
1Сергей
31.07.18
✎
11:53
|
(65) Помимо дублирования номеров есть проблема дырок в номерах
|
|||
68
Cyberhawk
31.07.18
✎
11:57
|
(67) Эта проблема есть и тогда, когда механизм нумерации работает без обращения к БД (со своим проинициализированным счетчиком). И в общем случае это проблемой не является.
|
|||
69
Serg_1960
модератор
31.07.18
✎
12:04
|
(65) Да нет там никакого "косяка". Просто это был вопрос на засыпку, но уже от меня :)
Максимальный номер будет получен и учтён как "выданный". Когда транзакция будет завершена - механизм поступит так, как указано у настройках - полученный номер будет зафиксирован как использованный или как заблокированный, или вновь выдан в качестве свободного. Нужный ответ уже есть в тексте статьи. Например: "При фиксации транзакции блокированные свободные номера удаляются из списка свободных, а при откате транзакции разблокируются и снова могут использоваться для получения очередного номера." |
|||
70
Cyberhawk
31.07.18
✎
12:07
|
(69) "Когда транзакция будет завершена" ... сеанс получит отлуп по неуникальности номера :)
|
|||
71
Serg_1960
модератор
31.07.18
✎
12:13
|
(70) Эээ... не зачёт :) Вообще-то твой первый вопрос (и мой) был только о первом обращении к базе за получением максимального номера. А "номер не уникален" - это уже из другого режима работы механизма :))
|
|||
72
Serg_1960
31.07.18
✎
12:18
|
Механизм автонумерации использует неблокирующие чтение по простой причине - ему не с кем конкурировать, он же сам по себе уникален (по определению) - это же так просто понять :))
|
|||
73
Cyberhawk
31.07.18
✎
12:30
|
(71) Ну так как бы все те мои сообщения и направлены на то, что при первом блокирующем чтении макс. номера одна из ситуаций получения такого отлупа исключается
|
|||
74
Cyberhawk
31.07.18
✎
12:30
|
(72) Как это не с кем - выданный номер потом записывается в БД, где есть контроль уникальности номеров
|
|||
75
Serg_1960
31.07.18
✎
14:33
|
Фах :) Я понимаю что Вы хотите сказать, но Вы выбираете неудачно термины.
Механизм автонумерации может... как Вы сказали... эээ... "механизм выдачи номера может облажаться"(цы) - для этого (и в том числе) существует механизм контроля уникальности номеров. Но это вовсе не означает что они "конкурируют". И даже не означает что они "конфликтуют" - это в данных информационной базы возникает конфликт, а не в механизмах. Это различные механизмы платформы, работают каждый сам по себе и независимо друг от друга - они не могут "конкурировать" или "конфликтовать" между собой. |
|||
76
Cyberhawk
31.07.18
✎
14:39
|
Куда-то тебя понесло.
Еще раз: есть механизм, выдающий номер. И при определенных сценариях этот номер не может быть записан в БД. Мною описано предложение, как один из таких сценариев исключить на корню. Не ясно, почему платформа не следует ему. |
|||
77
DTX 4th
01.08.18
✎
19:21
|
(56) Не понял, что блокировать предлагаешь?
|
|||
78
Cyberhawk
02.08.18
✎
09:21
|
(77) Таблицу данного вида документов - чтобы никто другой не мог записать в БД документ (см. сценарий в (60))
|
|||
79
DTX 4th
02.08.18
✎
10:20
|
(78) В какой момент сеанс требует номер? Если в момент записи, то таблица и так будет заблокирована. А если при открытии формы, то ошибку из пункта 4 это бы не исключило.
|
|||
80
Serg_1960
02.08.18
✎
10:45
|
(78) Ваш "сценарий" содержит несколько выдуманных теоретических допущений и нарушений, которые сводят на "нет" всю Вашу аргументацию. Не дошло? Ок, объясню, озвучив одно из них: "...не получает от механизма нумерации, а вычисляет по какому-то своему алгоритму". Всё, все свободны, механизм автонумерации - убогий механизм платформы :)
(офф) Можно ли сказать, например, что коробка передач автомобиля - несовершенный механизм? Конечно же "да"! Я знаю как работает механизм --> я знаю как нарушить его работу. В коробу передач я могу насыпать песку :) Несовершенен механизм? Конечно же "да" - коробка передач на песке не работает! :)) |
|||
81
Cyberhawk
02.08.18
✎
11:01
|
(79) В транзакции записи нового
|
|||
82
DTX 4th
02.08.18
✎
11:03
|
(81) Вообще, да, логично предложить лочить на чтение, что если транзакция зависнет, то всё сломается. А если не генерить номер руками, то всё и так будет ок.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |