Имя: Пароль:
1C
1С v8
Нумерация в документе, сошел с ума
,
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) Вообще, да, логично предложить лочить на чтение, что если транзакция зависнет, то всё сломается. А если не генерить номер руками, то всё и так будет ок.