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


1С:Предприятие ::

Метки: 

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

Я
   Стажер_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) Вообще, да, логично предложить лочить на чтение, что если транзакция зависнет, то всё сломается. А если не генерить номер руками, то всё и так будет ок.



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