Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Нумерация в документе, сошел с ума

Нумерация в документе, сошел с ума
Я
   Стажер_1С
 
26.07.18 - 12:46
Привет! В документе автоматическая нумерация, сам документ не типовой.
Создаем документ,ничего в нем не делаем,просто сразу закрываем его, ТО ЕСТЬ ДОКУМЕНТ НЕ СОЗДАН!!.При открытие документу присваивается номер 1.
Создаем снова документ,и номер уже равен 2
Если закрыть 1с и снова открыть. Вновь создать документ номер =1
В чем может быть причина?
 
 
   Стажер_1С
 
1 - 26.07.18 - 12:48
Кэш почистила. Создала даже новый нумератор с автонумерацией,не помогло
   МимохожийОднако
 
2 - 26.07.18 - 12:48
Когда 1С закрывается,то барабашка (кэш) умирает.
   1Сергей
 
3 - 26.07.18 - 12:48
>>Создаем документ,ничего в нем не делаем,просто сразу закрываем его, ТО ЕСТЬ ДОКУМЕНТ НЕ СОЗДАН!!.При открытие документу присваивается номер 1.

Если ты не записывала документ, то чего ты там открываешь?
   МимохожийОднако
 
4 - 26.07.18 - 12:50
У неё семёрка
   Cyberhawk
 
5 - 26.07.18 - 12:50
(3) Форму не записанного в БД объекта, очевидно же
   Стажер_1С
 
6 - 26.07.18 - 12:50
(3) Да я бы такое и не подумала сама посмотреть.Просто заказчик сказал: - вот смотри,я решил создать документ,а потом передумал. Потом в течение дня все таки решил его создать,и смотрю нумерация уже равна 2
   Стажер_1С
 
7 - 26.07.18 - 12:51
(4) Платформа 8.3
конф-я: Бухгалтерия государственного учреждения, редакция 1.0 (1.0.52.7)
   Стажер_1С
 
8 - 26.07.18 - 12:51
(5) Можно поподробнее
   Cyberhawk
 
9 - 26.07.18 - 12:53
Не путай запись объекта в БД и механизм нумерации, выдающий очередной номер
   Быдло замкадное
 
10 - 26.07.18 - 12:54
ПриОткрытии АвтонумерацияВФорме = Ложь;
 
 Рекламное место пустует
   Малыш Джон
 
11 - 26.07.18 - 12:54
(10) это БГУ, её с поддержки обычно не снимают...
   Стажер_1С
 
12 - 26.07.18 - 12:55
(10) Если я откл автонумерация,ты предлагаешь,чтобы они ручками вбивали номер?
   Стажер_1С
 
13 - 26.07.18 - 12:55
(11) это снята полностью,там живого места нет
   Стажер_1С
 
14 - 26.07.18 - 12:55
(9) Так и как можно решить мою проблему???Я не знаю даже где смотреть
   Cyberhawk
 
15 - 26.07.18 - 12:55
(12) Номер будет выдаваться при записи объекта в БД
   Быдло замкадное
 
16 - 26.07.18 - 12:55
(11) Документ не типовой. Читал?
(12) нет он при записи присвоится. Как в типовых
   Cyberhawk
 
17 - 26.07.18 - 12:56
(14) Какую проблему? Это штатное поведение механизма нумерации
   Малыш Джон
 
18 - 26.07.18 - 12:56
(13) тогда без проблем
делай, как в (10)
   Малыш Джон
 
19 - 26.07.18 - 12:57
(16) >>Документ не типовой. Читал?

Каюсь, пропустил
   Стажер_1С
 
20 - 26.07.18 - 12:57
(16) Окей,сейчас,посмотрю,отпишусь
   Стажер_1С
 
21 - 26.07.18 - 12:58
Поле объекта недоступно для записи (АвтонумерацияВФорме)
    АвтонумерацияВФорме = Ложь;
   Быдло замкадное
 
22 - 26.07.18 - 12:58
(21) Блин ну ты СП открой.
Автонумерация = АвтонумерацияВФорме.НеИспользовать;
   Стажер_1С
 
23 - 26.07.18 - 12:59
(22) да уже посмотрела,спасибо)
   Стажер_1С
 
24 - 26.07.18 - 12:59
сейчас проверю
   Стажер_1С
 
25 - 26.07.18 - 13:01
не помогло
   1Сергей
 
26 - 26.07.18 - 13:01
(25) номер проставляется до записи?
   Стажер_1С
 
27 - 26.07.18 - 13:03
(26) да,сразу при открытие
   Быдло замкадное
 
28 - 26.07.18 - 13:03
(27) =0 как так.. ты при открытии написал Автонумерация = АвтонумерацияВФорме.НеИспользовать; ?
   МимохожийОднако
 
29 - 26.07.18 - 13:03
(25) Открой документ и посмотри раздел Нумерация. Есть ли там Нумератор и флажок Автонумерация?
   Стажер_1С
 
30 - 26.07.18 - 13:04
(29) есть
   Стажер_1С
 
31 - 26.07.18 - 13:04
(28) Да при открытие,в форме модуля,так и написала.Отладчиком остановила там,а он уже присвоил номеру значение
   Стажер_1С
 
32 - 26.07.18 - 13:05
(29) более того,я создала новый нумератор,и добавила его в документ
   1Сергей
 
33 - 26.07.18 - 13:05
(31) в свойствах формы поменяй
 
 
   МимохожийОднако
 
34 - 26.07.18 - 13:05
(30) Что есть, партизанен?
   Стажер_1С
 
35 - 26.07.18 - 13:06
(33) что??
   Кай066
 
36 - 26.07.18 - 13:07
(27) Так не должно быть. В типовых номер присваивается(а значит и занимается) при записи
   МимохожийОднако
 
37 - 26.07.18 - 13:07
выкинь нумератор для начала
   Стажер_1С
 
38 - 26.07.18 - 13:08
   1Сергей
 
39 - 26.07.18 - 13:08
   1Сергей
 
40 - 26.07.18 - 13:09
Если там ОФ, конечно
   Стажер_1С
 
41 - 26.07.18 - 13:09
(39) да нашла,делаю
   Стажер_1С
 
42 - 26.07.18 - 13:10
(40) что такое оф?у меня там авто стояло
   1Сергей
 
43 - 26.07.18 - 13:10
(42) ставь не исппользовать

ОФ - Обычные формы
   Стажер_1С
 
44 - 26.07.18 - 13:11
(43) да обычные
   Стажер_1С
 
45 - 26.07.18 - 13:11
вроде,ну я определяю что тут нет сервер и клиент,а просто все
   Стажер_1С
 
46 - 26.07.18 - 13:14
(43) ты такая прелесть!!!!!!!!!!!Спасибо тебе большое!!!!!!!!!!!
Помогло
   Стажер_1С
 
47 - 26.07.18 - 13:14
ВСЕМ БОЛЬШОЕ СПАСИБО
   1Сергей
 
48 - 26.07.18 - 13:14
(46) Фотку поставь в профиль :)
   Стажер_1С
 
49 - 26.07.18 - 14:25
(48) как -нибудь)
 
 Рекламное место пустует
   aleks_default
 
50 - 26.07.18 - 17:53
(48) Продинамила:)
   Малыш Джон
 
51 - 26.07.18 - 21:01
(50) Ну, не удивительно)
   Стажер_1С
 
52 - 30.07.18 - 09:32
(50) (51) да поставлю я)))
   Serg_1960
 
53 - 30.07.18 - 10:23
(для справки)
От автонумерации в форме объекта (перед записью) отказались ещё когда была платформа 8.1, но оставили для совместимости с платформой 8.0 (точнее для совместимости работы конфигураций, написанных под платформу 8.0).
Источник: https://its.1c.ru/db/metod8dev#content:1550:hdoc

"Свойство Автонумерация формы объекта (элемента справочника, документа...) отвечает за автоматическое получение номера при открытии формы. Если в этом свойстве указано значение НеИспользовать, это означает, что при открытии формы номер будет не заполнен и он будет получен автоматически при записи объекта."
   Стажер_1С
 
54 - 31.07.18 - 08:11
(53) Раз отказались ,тогда почему на 8.2 без этой галочки не работало?
   Serg_1960
 
55 - 31.07.18 - 09:37
(54) Всё работало и без этой галочки. Просто нужно было хотя бы чуть-чуть иметь представление как это работает в типовых конфигурациях.

"Вы не любите кошек? Да вы просто не умеете их готовить!"(Альф, инопланетянин).
   Cyberhawk
 
56 - 31.07.18 - 09:39
(55) "иметь представление как это работает в типовых конфигурациях" // А вот кстати вопрос на засыпку по механизму выдачи номеров: почему при первом обращении к менеджеру нумерации он далает запрос к БД (максимальному номеру) без блокировки?
   Serg_1960
 
Модератор
57 - 31.07.18 - 10:24
(56) Достаточно включить логику :) Наверное потому, что для работы механизма автонумерации нужна инициализация первоначальных значений (максимальный номер пространства автонумерации). Ведь далее механизм автонумерации работает автономно от данных информационной базы  - ему же нужно с чего-то (с каких-то значений) начинать нумерацию.
   Cyberhawk
 
58 - 31.07.18 - 10:30
(57) Ты, видимо, не обратил внимание на последнее слово в моем вопросе, а ведь в нем вся соль
   Serg_1960
 
Модератор
59 - 31.07.18 - 10:59
(58) Вы, видимо, забыли выделить в чём именно Ваша соль в вопросе :) А Вы не находите, что эта "соль" более из области блокировки данных, механизма транзакционных блокировок?
   Cyberhawk
 
60 - 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) а теперь смодулируй поведение если в начале дня кто-то получил номер с блокировкой и оставил незаписанный документ до конца дня
   Cyberhawk
 
62 - 31.07.18 - 11:27
(61) Ты что-то не понял. Блокировать не нужно до завершения записи документа - блокировать достаточно до завершения чтения и отдачи первого затребованного от механизма номера. Как только механизм нумерации отдал вычисленный номер, блокировка снимается.
   Serg_1960
 
Модератор
63 - 31.07.18 - 11:41
(60) А теперь проанализирует первое обращение в момент, когда в базе есть запись с незавершённой транзакцией (в которой содержится искомый максимальный номер), учитывая что транзакция может быть позже а)завершена или б)отменена.
   Serg_1960
 
64 - 31.07.18 - 11:47
И кстати: я могу перечислить много (поверьте это не преувеличение) реальных ситуаций, когда автонумерацию может заглючить на банальное "номен[код] не уникален". Только смысла не вижу в ловле блох - другого механизма у платформы нет. Ешьте кактус :)
   Cyberhawk
 
65 - 31.07.18 - 11:52
(63) Вот видишь, еще один косяк. Но в предложенном тобой сценарии инсерт в БД ничего такого не блокирует, поэтому механизму нумерации хватило бы грязного чтения макс. номера из таблицы документов
   Cyberhawk
 
66 - 31.07.18 - 11:53
Хотя этот механизм, вероятно, так и делает (грязное, NOLOCK)
   1Сергей
 
67 - 31.07.18 - 11:53
(65) Помимо дублирования номеров есть проблема дырок в номерах
   Cyberhawk
 
68 - 31.07.18 - 11:57
(67) Эта проблема есть и тогда, когда механизм нумерации работает без обращения к БД (со своим проинициализированным счетчиком). И в общем случае это проблемой не является.
   Serg_1960
 
Модератор
69 - 31.07.18 - 12:04
(65) Да нет там никакого "косяка". Просто это был вопрос на засыпку, но уже от меня :)

Максимальный номер будет получен и учтён как "выданный". Когда транзакция будет завершена - механизм поступит так, как указано у настройках - полученный номер будет зафиксирован как использованный или как заблокированный, или вновь выдан в качестве свободного.

Нужный ответ уже есть в тексте статьи. Например:

"При фиксации транзакции блокированные свободные номера удаляются из списка свободных, а при откате транзакции разблокируются и снова могут использоваться для получения очередного номера."
   Cyberhawk
 
70 - 31.07.18 - 12:07
(69) "Когда транзакция будет завершена" ... сеанс получит отлуп по неуникальности номера :)
   Serg_1960
 
Модератор
71 - 31.07.18 - 12:13
(70) Эээ... не зачёт :) Вообще-то твой первый вопрос (и мой) был только о первом обращении к базе за получением максимального номера. А "номер не уникален" - это уже из другого режима работы механизма :))
   Serg_1960
 
72 - 31.07.18 - 12:18
Механизм автонумерации использует неблокирующие чтение по простой причине - ему не с кем конкурировать, он же сам по себе уникален (по определению) - это же так просто понять :))
   Cyberhawk
 
73 - 31.07.18 - 12:30
(71) Ну так как бы все те мои сообщения и направлены на то, что при первом блокирующем чтении макс. номера одна из ситуаций получения такого отлупа исключается
   Cyberhawk
 
74 - 31.07.18 - 12:30
(72) Как это не с кем - выданный номер потом записывается в БД, где есть контроль уникальности номеров
   Serg_1960
 
75 - 31.07.18 - 14:33
Фах :) Я понимаю что Вы хотите сказать, но Вы выбираете неудачно термины.

Механизм автонумерации может... как Вы сказали... эээ... "механизм выдачи номера может облажаться"(цы) - для этого (и в том числе) существует механизм контроля уникальности номеров.

Но это вовсе не означает что они "конкурируют". И даже не означает что они "конфликтуют" - это в данных информационной базы возникает конфликт, а не в механизмах.

Это различные механизмы платформы, работают каждый сам по себе и независимо друг от друга - они не могут "конкурировать" или "конфликтовать" между собой.
   Cyberhawk
 
76 - 31.07.18 - 14:39
Куда-то тебя понесло.
Еще раз: есть механизм, выдающий номер. И при определенных сценариях этот номер не может быть записан в БД.
Мною описано предложение, как один из таких сценариев исключить на корню.
Не ясно, почему платформа не следует ему.
   DTX 4th
 
77 - 01.08.18 - 19:21
(56) Не понял, что блокировать предлагаешь?
   Cyberhawk
 
78 - 02.08.18 - 09:21
(77) Таблицу данного вида документов - чтобы никто другой не мог записать в БД документ (см. сценарий в (60))
   DTX 4th
 
79 - 02.08.18 - 10:20
(78) В какой момент сеанс требует номер? Если в момент записи, то таблица и так будет заблокирована. А если при открытии формы, то ошибку из пункта 4 это бы не исключило.
   Serg_1960
 
80 - 02.08.18 - 10:45
(78) Ваш "сценарий" содержит несколько выдуманных теоретических допущений и нарушений, которые сводят на "нет" всю Вашу аргументацию. Не дошло? Ок, объясню, озвучив одно из них: "...не получает от механизма нумерации, а вычисляет по какому-то своему алгоритму". Всё, все свободны, механизм автонумерации - убогий механизм платформы :)
(офф)
Можно ли сказать, например, что коробка передач автомобиля - несовершенный механизм? Конечно же "да"! Я знаю как работает механизм --> я знаю как нарушить его работу. В коробу передач я могу насыпать песку :) Несовершенен механизм? Конечно же "да" - коробка передач на песке не работает! :))
   Cyberhawk
 
81 - 02.08.18 - 11:01
(79) В транзакции записи нового
   DTX 4th
 
82 - 02.08.18 - 11:03
(81) Вообще, да, логично предложить лочить на чтение, что если транзакция зависнет, то всё сломается. А если не генерить номер руками, то всё и так будет ок.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует