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


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

сравнить версии объектов с8

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

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

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

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

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

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

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

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

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

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

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


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