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


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Найти максимальный номер

v7: Найти максимальный номер
Я
   wwrr3
 
05.12.17 - 12:03
Добрый день.
Семерка, документ, номер числовой. Нужно получить самый максимальный номер. Как это сделать, с учетом того, что последний номер по дате не обязательно максимальный?
В восьмерке то нет проблем, но вот в семерке..
 
 
   2S
 
1 - 05.12.17 - 12:03
Как? Легко
   Масянька
 
2 - 05.12.17 - 12:04
(0) Сортировка по номеру.
И при чем тут семерка?
   Остап Сулейманович
 
3 - 05.12.17 - 12:04
(0) Ровно так же как в восьмерке.
   aka AMIGO
 
4 - 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
хмм , зачем вводить ? Оо просто программно сделать на установитьновый номер и записать предидущий
ЗЫ вопрос если есть УРБД и есть дубли при этом )))
   YFedor
 
9 - 05.12.17 - 12:41
Отобрать запросом. Но это будет максимальный номер из уже записанных, если кто-то открыл форму ввода нового документа, то там уже больший номер, но о нем мы не узнаем ...
   Злопчинский
 
10 - 05.12.17 - 12:41
(6) а мы - обернем в транзакцию и попытаемся! если не свалиться на транзакции - значит "одновременно" делающих нет (грязное чтение?)
.
другое дело что на нескольких рабочих местах 5 человек могут создать новый документ и в итоге не записать его - а пока доки открыты - номер уже инкрементирован", в итоге может получиться максимальный номер, который отсутствует в базе.
.
но это тоже решаемо (?) созданием документа-регистратора для присвоения номеров ПРИ ЗАПИСИ документа, а не при открытии формы нового (?)
 
 Рекламное место пустует
   nordbox
 
11 - 05.12.17 - 12:42
(8)>>вопрос если есть УРБД и есть дубли при этом
там префиксы есть
   бомболюк
 
12 - 05.12.17 - 12:43
МаксимальныйНомер = Число(Лев("9999999999999999999999999", Метаданные.Документы("ВидДокумента").ДлинаНомера));
   Gimalaj
 
13 - 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 присваивается новый номер
   NSSerg
 
17 - 05.12.17 - 14:45
(6) Элементарно делается чтоб не какое-то действие не происходило одновременно.

СлужЭлСпрДляПолученияНомера.Блокировка(0);// На всякий случай

Пока СлужЭлСпрДляПолученияНомера.Блокировка(1)=0 Тогда
 глПауза(100);
КонецЦикла;
...
Тут действия которые пользователи не должны выполнять одновременно
...
СлужЭлСпрДляПолученияНомера.Блокировка(0);
   NSSerg
 
18 - 05.12.17 - 14:51
Хотя если кто-то параллельно создал документ с присвоением номера, а потом не захочет его сохранить - то естественно метод сработает неверно.
   aka AMIGO
 
19 - 05.12.17 - 15:03
Док = создатьОбъект("Документ.ОченьНужныйДокумент");
Док.ОбратныйПорядок(1);
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент()=1 Цикл
ОгромныйНомер = Док.НомерДок;
Прервать;
КонецЦикла;

   aka AMIGO
 
20 - 05.12.17 - 15:04
Сообщить(ОгромныйНомер);

   Злопчинский
 
21 - 05.12.17 - 15:08
(19) не факт что последний по оси времени будет с максимальным номеррм
   YFedor
 
22 - 05.12.17 - 15:09
(21) скорее всего даже не будет
   aka AMIGO
 
23 - 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
   YFedor
 
28 - 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) вполне совсем так, на исполнение метода - предыдущий документ ПОСЛЕДНИЙ, если кто не понял - документ я не записываю
   YFedor
 
31 - 05.12.17 - 16:14
(29), (30) это ты не понял - номер не последний, т.к. номера, которые выданы тем пяти пользователям уже заняты и тебе выдадут номер следующий за теми пяти
   Ёпрст
 
32 - 05.12.17 - 16:15
(31) так и есть
   пипец
 
33 - 05.12.17 - 16:20
(31) открыл обработкой одну и ту же обработку из (25) - понажимал - номер один и тот же... у ВСЕХ пользователей ...
 
 
   YFedor
 
34 - 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 пользователей и свою поделку.
Посмотри результат, подумай.
   NSSerg
 
38 - 05.12.17 - 17:09
(25)(36)(37) Даже если не создавать новый документ интерактивно - не будет последний.
Доказывается легко - делается обработка с получением номера в цикле, и запускается одновременно у двух или трех пользователей.
   MetaDon
 
39 - 05.12.17 - 17:48
ПриЗаписи()
глНомерДок=Макс(глНомерДок,НомерДок);
   FN
 
40 - 05.12.17 - 20:25
Единственный верный метод :
Док.новый()
Док.записать()
Возврат док. Номердок
   Изучаю1С8
 
41 - 05.12.17 - 20:56
Задачка баян
   Ёпрст
 
42 - 06.12.17 - 10:07
Ладно, самый правильный ответ 
SQLLock + НовыйНомер()
http://www.1cpp.ru/docum/html/ODBC.html#getnewnumber

ну или всё тоже самое прямым запросом.


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