Имя: Пароль:
1C
1С v8
сравнить версии объектов с8
, ,
0 Сергей2017
 
12.07.18
14:20
есть задача при попытке сохранения дока проверять если док в базе имеет версию более свежую, то тупо чтобы орма дока закрывалась молча и не спрашивало сохранить да\нет, т.к. все равно сохранить не получится.

делаю в передзаписью()
Если ЭтотОбъект.ВерсияДанных < Ссылка.ПолучитьОбїект().ВерсияДанных Тогда
Отказ = ИСТИНА ВОзврат; КОнецЕсди;

косяк в том что иногда более свежая версия имеет строковое представление    меньшее чем версия на форме, если сравнивать их как строки.

то ли я чтото не так делаю, то ли алгоритм сравнения надо свой написать.
Может ктото сталкивался с таким?
1 Cyberhawk
 
12.07.18
14:44
Как ты определяешь "большую свежесть" у версий?
2 Сергей2017
 
12.07.18
15:01
я открываю док и меняю в реквизит в форме и не записываю.
захожу в другой сеанс, меняю док и записываю.
в базе версия более свежая чем открыта в форме в первом сеансе,
но если посмотреть в первом сеансе через отладчик, то
ЭтотОбъект.ВерсияДанных будет к примеру ААоооооWt
а в базе будет версия ААооооо8q

и если сравнить их как строки, то получится что
"ААоооооWt">"ААооооо8q"=ИСТИНА

хотя на самом деле ААооооо8q - более свежая версия, но т.к. оно их нумерует как-то странно, то сравнение строк кривовато работает в итоге
3 Cyberhawk
 
12.07.18
15:09
У тебя словесный понос? Ответь на вроде бы простой вопрос
4 Сергей2017
 
12.07.18
15:10
(1) эмпирически
5 Cyberhawk
 
12.07.18
15:11
И с чего ты тогда взял, что операция ">" должна прокатывать?
6 Сергей2017
 
12.07.18
15:11
(5) я попробовал - похоже не прокатывает
7 Cyberhawk
 
12.07.18
15:14
Почему простое неравенство не подходит?
8 lodger
 
12.07.18
15:17
(7) неравенство покажет отличие, но не свежесть.
9 Eiffil123
 
12.07.18
15:18
добавляй реквизит типа Дата, в нем сохраняй текущее время до секунды и там уже проверяй. Но если в пределах одной секунды пользователи поменяют, то уже система не сработает.
10 DTX 4th
 
12.07.18
15:26
Заменить все цифры на
Символ(КодСимвола(Цифра)-КодСимвола("0")+1+КодСимвола("z"))
11 DTX 4th
 
12.07.18
15:28
Чем, кстати, стандартный механизм не угодил?
12 Сергей2017
 
12.07.18
15:29
(11) стандартный это какой?
13 ale-sarin
 
12.07.18
15:32
(12) В типовых от 1С во втором сеансе не даст изменить документ, т.к. он заблокирован в первом сеансе.
Если даже удастся записать во втором сеансе, то при записи в первом не запишет, сообщит что-то типа "объект уже изменен... что-то там версия данных отличается..."
Вроде так.
14 Сергей2017
 
12.07.18
15:32
(9) то есть оно все-таки действительно не по алфавиту и мне не показалось)

вмсето даты можно еще заюзать ТекущаяУниверсальнаяДатаВМиллисекундах()
тогда с точностью до миллисекунд будет
15 Сергей2017
 
12.07.18
15:33
(13) люди не хотят нажимать две лишние кнопки. хотя чтобы при нажатии кнопки записать если объект был уже кем-то изменене, то тупо форма закрылось и все
16 Сергей2017
 
12.07.18
15:35
(12) а в стандарте придется сначала ответить на вопрос "записать да\нет",  а потом еще нажать ОК на предупрждении что не удалось записать. а потом еще и форму закрыть вручную и нажать "нет" на вопрос "записать да\нет"
17 Serg_1960
 
12.07.18
15:36
Автоматизируя хаос получаем автоматизированный хаос.
18 DTX 4th
 
12.07.18
15:45
(15) Но они же не узнают, применятся их изменения или нет.

Записывай в попытке и анализируй исключение xd
19 lodger
 
12.07.18
15:46
(15) не давайте изменять объект если с ним уже кто-то работает.
20 Cyberhawk
 
12.07.18
15:48
(8) Правильно. Почему этого недостаточно?
21 singlych
 
12.07.18
15:48
(14) не сработает, если запишут в пределах одной миллисекунды
22 Serg_1960
 
12.07.18
15:49
(15) Мне кажется юзвера будут сильно ругаться, если задним числом с большим опозданием будут узнавать о том, что их изменения безвозвратно потеряны и не были сохранены в базе.

Автор, ты приготовил три конверта?
23 ale-sarin
 
12.07.18
15:50
(15) Т.е. юзер поставил галку, нажал Ок, документ закрылся, ни о чем не сообщил, и галки в нем нет. Вот это номер. Я бы не стал так делать.
24 Serg_1960
 
12.07.18
16:02
Кстати основной довод автора - "т.к. все равно сохранить не получится"(0) - ошибочен. Сохранить - не проблема. Сложнее определить какая версия достойна быть в базе сохраненной.
25 Cyberhawk
 
12.07.18
16:05
(24) А как сохранить, например, после получения сообщения об оптимистичной блокировке?
26 Eiffil123
 
12.07.18
16:14
почему нельзя сделать основной реквизит формы справочникобъект? тогда при попытке редактирования любого реквизита система заблокирует данный объект от редактирования другими пользователями. это же типовое поведение, иначе все пользователи визжали бы.
27 lodger
 
12.07.18
16:16
(26) религия не позволяет, видимо.
28 Serg_1960
 
12.07.18
16:18
(25) Ранее я использовал ВерсииОбъектов, а сейчас наверное можно и РезультатыОбменаДанными задействовать.
29 Serg_1960
 
12.07.18
16:41
*(28) Наверное, сложно сказал :) Форма списка РС "Предупреждения при синхронизации данных" более удобна для интерфейса с юзвером по показу возникших коллизий (после внесения незначительных изменений в конфигурацию).
30 ERWINS
 
12.07.18
16:44
зачем?
31 Serg_1960
 
12.07.18
17:12
РИБ - при обмене он умеет выдергивать коврик из-под ног юзверей :(
32 Eiffil123
 
12.07.18
17:32
(31) А как при РИБ понять, что текущая версия более/менее правильная, чем та, которая пришла по обмену? Надо распределять документы по разным базам
33 Cyberhawk
 
12.07.18
17:39
(28) (29) Хз о чем ты. Внесенные изменения после получения оптимистичного отлупа уже не получить никак.
34 Serg_1960
 
12.07.18
21:11
(32) Никак. Негоже программисту этим заниматься. Я просто сохраняю обе версии в регистре, предоставляя пользователям возможность без меня между собой разбираться.

(33) Хз о чем ты. См. http://catalog.mista.ru/public/543218/ последние две фразы.
35 Сергей2017
 
12.07.18
22:16
у меня бюжэет на эту задачу 1000-2000 руб, поэтому мне попроще решение надо с минимумом изменений

попробую вариант из (10)
36 asady
 
12.07.18
23:44
(0) как-то попытаться спасти уже введенные данные не пробовл?
за закрытие формы молча при наличии введенных данных отрывают все внешние выступы напрочь...
37 Сергей2017
 
13.07.18
08:47
(36) задачи "спасать" не было
38 Eiffil123
 
13.07.18
16:38
(34) а пользователи с этим разбираются вообще? может каждому нормально - в базе 1 работает пользователь 1 с его версией объекта. А в базе 2 - пользователь 2 с его версией объекта. Чего им по регистрам версий смотреть, время тратить
39 Serg_1960
 
13.07.18
18:38
(38) РИБ, общие объекты мигрируют с обменом между узлами...  и в любой момент может всплыть факт одновременного (между сеансами обмена) изменения одного и того-же объекта в нескольких узлах. Погугли "коллизии, возникающие при обмене данными".
Сидит юзверь, открыв форму, редактирует объект, а в это время происходит сеанс обмена данными и... и может возникнуть тема этой ветки.
40 xXeNoNx
 
13.07.18
19:06
(2) А шо там в с8 уже убрали объектные блокировки?
41 Сергей2017
 
15.07.18
00:40
в итоге решил забить, сказав что так нельзя сделать и от меня отстали