|
v7: Найти максимальный номер | ☑ | ||
---|---|---|---|---|
0
wwrr3
05.12.17
✎
12:03
|
Добрый день.
Семерка, документ, номер числовой. Нужно получить самый максимальный номер. Как это сделать, с учетом того, что последний номер по дате не обязательно максимальный? В восьмерке то нет проблем, но вот в семерке.. |
|||
1
2S
05.12.17
✎
12:03
|
Как? Легко
|
|||
2
Масянька
05.12.17
✎
12:04
|
(0) Сортировка по номеру.
И при чем тут семерка? |
|||
3
Остап Сулейманович
05.12.17
✎
12:04
|
(0) Ровно так же как в восьмерке.
|
|||
4
aka AMIGO
05.12.17
✎
12:04
|
Можно ввести новый документ, это и будет максимальный+1
|
|||
5
Злопчинский
05.12.17
✎
12:28
|
(4) Опередил! ;-)
|
|||
6
Ёпрст
05.12.17
✎
12:34
|
и, если несколько товарищей будут одновременно это делать, то способ в (4) не рабочий.
|
|||
7
Ёпрст
05.12.17
✎
12:35
|
ну да ладно, занимайтесь
|
|||
8
пипец
05.12.17
✎
12:36
|
хмм , зачем вводить ? Оо просто программно сделать на установитьновый номер и записать предидущий
ЗЫ вопрос если есть УРБД и есть дубли при этом ))) |
|||
9
YFedor
05.12.17
✎
12:41
|
Отобрать запросом. Но это будет максимальный номер из уже записанных, если кто-то открыл форму ввода нового документа, то там уже больший номер, но о нем мы не узнаем ...
|
|||
10
Злопчинский
05.12.17
✎
12:41
|
(6) а мы - обернем в транзакцию и попытаемся! если не свалиться на транзакции - значит "одновременно" делающих нет (грязное чтение?)
. другое дело что на нескольких рабочих местах 5 человек могут создать новый документ и в итоге не записать его - а пока доки открыты - номер уже инкрементирован", в итоге может получиться максимальный номер, который отсутствует в базе. . но это тоже решаемо (?) созданием документа-регистратора для присвоения номеров ПРИ ЗАПИСИ документа, а не при открытии формы нового (?) |
|||
11
nordbox
05.12.17
✎
12:42
|
(8)>>вопрос если есть УРБД и есть дубли при этом
там префиксы есть |
|||
12
бомболюк
05.12.17
✎
12:43
|
МаксимальныйНомер = Число(Лев("9999999999999999999999999", Метаданные.Документы("ВидДокумента").ДлинаНомера));
|
|||
13
Gimalaj
05.12.17
✎
13:44
|
(6) Значит, последний номер документа получат все эти несколько товарищей.
|
|||
14
Ёпрст
05.12.17
✎
13:58
|
(13) нет
|
|||
15
Масянька
05.12.17
✎
14:05
|
(13) И "все эти товарищи" ломанутся записывать созданный док-т... С одинаковым максимальным номером... А оно возьмет сольет все в один док-т... Зато - с максимальным номером...
|
|||
16
Ёпрст
05.12.17
✎
14:07
|
(13,15) сразу видно, что вы не в курсе как в 7.7 присваивается новый номер
|
|||
17
NSSerg
05.12.17
✎
14:45
|
(6) Элементарно делается чтоб не какое-то действие не происходило одновременно.
СлужЭлСпрДляПолученияНомера.Блокировка(0); // На всякий случай Пока СлужЭлСпрДляПолученияНомера.Блокировка(1)=0 Тогда глПауза(100); КонецЦикла; ... Тут действия которые пользователи не должны выполнять одновременно ... СлужЭлСпрДляПолученияНомера.Блокировка(0); |
|||
18
NSSerg
05.12.17
✎
14:51
|
Хотя если кто-то параллельно создал документ с присвоением номера, а потом не захочет его сохранить - то естественно метод сработает неверно.
|
|||
19
aka AMIGO
05.12.17
✎
15:03
|
Док = создатьОбъект("Документ.ОченьНужныйДокумент");
|
|||
20
aka AMIGO
05.12.17
✎
15:04
|
Сообщить(ОгромныйНомер); |
|||
21
Злопчинский
05.12.17
✎
15:08
|
(19) не факт что последний по оси времени будет с максимальным номеррм
|
|||
22
YFedor
05.12.17
✎
15:09
|
(21) скорее всего даже не будет
|
|||
23
aka AMIGO
05.12.17
✎
15:09
|
(21) угу.. прокол мой.
|
|||
24
пипец
05.12.17
✎
15:50
|
(11) даже если есть префиксы - могут быть дубли ))))
|
|||
25
пипец
05.12.17
✎
16:02
|
Док=СоздатьОбъект("Документ.РасходнаяНакладная");
Док.Новый(); Док.ДатаДок=РабочаяДата(); Док.Установитьновыйномер(""); Сообщить(""+(Док.НомерДок)); и предидущий - сколько бы сеансов не было - будет последний ))) |
|||
26
Ёпрст
05.12.17
✎
16:06
|
(25) будет не последний
|
|||
27
Ёпрст
05.12.17
✎
16:06
|
курите 1SDNLOCK
|
|||
28
YFedor
05.12.17
✎
16:07
|
(25) не совсем так.
Вот сидят еще пять человек с открытым окном ввода нового документа, а ты такой, шестой, взял и выполнил код из (25). Но вот те пятеро взяли и закрыли документы без сохранения. У тебя будет конечно номер не меньше, чем номер последнего, а больше, но не равен последнему. Кроме того, если тебе дали в этом коде номер 25, то при следующем создании документа (ты же не записал его) присвоится номер 26, поэтому код не очень хорош |
|||
29
пипец
05.12.17
✎
16:12
|
(26) при указанных (0) параметрах не понятно есть ли нумератор ...
(25) вполне совсем так, на исполнение метода - предыдущий документ ПОСЛЕДНИЙ, если кто не понял - документ я не записываю |
|||
30
пипец
05.12.17
✎
16:13
|
(28) вполне совсем так, на исполнение метода - предыдущий документ ПОСЛЕДНИЙ, если кто не понял - документ я не записываю
|
|||
31
YFedor
05.12.17
✎
16:14
|
(29), (30) это ты не понял - номер не последний, т.к. номера, которые выданы тем пяти пользователям уже заняты и тебе выдадут номер следующий за теми пяти
|
|||
32
Ёпрст
05.12.17
✎
16:15
|
(31) так и есть
|
|||
33
пипец
05.12.17
✎
16:20
|
(31) открыл обработкой одну и ту же обработку из (25) - понажимал - номер один и тот же... у ВСЕХ пользователей ...
|
|||
34
YFedor
05.12.17
✎
16:21
|
я больше не буду тебя переубеждать
|
|||
35
пипец
05.12.17
✎
16:22
|
фу блин - в общем у всех пользователей при нажатии на внешний отчет с текстом из (25) показывает последний НЕ присвоенный номер, если не записывается документ, он всегда один и тот же
|
|||
36
пипец
05.12.17
✎
16:22
|
(34) а что меня переубеждать ... пробовал из принципа
|
|||
37
Ёпрст
05.12.17
✎
16:55
|
(36) ну давай так:
открой новый документ у 5 пользователей и свою поделку. Посмотри результат, подумай. |
|||
38
NSSerg
05.12.17
✎
17:09
|
(25)(36)(37) Даже если не создавать новый документ интерактивно - не будет последний.
Доказывается легко - делается обработка с получением номера в цикле, и запускается одновременно у двух или трех пользователей. |
|||
39
MetaDon
05.12.17
✎
17:48
|
ПриЗаписи()
глНомерДок=Макс(глНомерДок,НомерДок); |
|||
40
FN
05.12.17
✎
20:25
|
Единственный верный метод :
Док.новый() Док.записать() Возврат док. Номердок |
|||
41
Изучаю1С8
05.12.17
✎
20:56
|
Задачка баян
|
|||
42
Ёпрст
06.12.17
✎
10:07
|
Ладно, самый правильный ответ
SQLLock + НовыйНомер() http://www.1cpp.ru/docum/html/ODBC.html#getnewnumber ну или всё тоже самое прямым запросом. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |