|
Управляемая форма, клиент и сервер | ☑ | ||
---|---|---|---|---|
0
LenaAt
12.12.17
✎
16:15
|
Подскажите, пожалуйста, как на клиенте узнать, что отображаемый документ был изменен на сервере?
|
|||
1
3achem
12.12.17
✎
16:17
|
(0) это что подразумивается под такой формулировкой?
|
|||
2
LenaAt
12.12.17
✎
16:21
|
(1) Пользователь открыл на клиенте форму документа, а в это время обработчик события на сервере документ изменил. Например, заполнил табличную часть.
|
|||
3
3achem
12.12.17
✎
16:22
|
(2) будет конфликт блокировок
|
|||
4
perester
12.12.17
✎
16:23
|
Модифицированность? Сравнение значений незаписанных данных по сравнению с записанными?
|
|||
5
LenaAt
12.12.17
✎
16:25
|
(3) Конфликт блокировок - это когда два процесса пытаются одновременно изменить одну и туже запись в таблице РСУБД. А у меня форма на клиенте открыта.
(4) Нет, на клиенте форму не модифицируют. Ее меняет другой процесс на сервере. |
|||
6
DmitrO
12.12.17
✎
16:27
|
То что происходит в Лас-Вегасе, остается в Лас-Вегасе.
Правильный ответ на вопрос в (0): в данных формы поле Версия будет иметь значение отличное от того, которое сейчас записано в базе данных. |
|||
7
LenaAt
12.12.17
✎
16:30
|
(6) Как мне на клиенте сравнить версии данных. На клиенте это свойство Объект.ВерсияДанных?
|
|||
8
LenaAt
12.12.17
✎
16:31
|
7+ Надо сходить на сервер за версией данных и сравнить их?
|
|||
9
3achem
12.12.17
✎
16:32
|
(7) Перед записью Если Объект = Объект.Ссылка Тогда
|
|||
10
DmitrO
12.12.17
✎
16:33
|
(7)Да, поле называется ВерсияДанных.
(8)Да. |
|||
11
3achem
12.12.17
✎
16:35
|
(7) А вообще, если данные изменены, то должна вылезти ошибка при записи "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных"
|
|||
12
LenaAt
12.12.17
✎
16:35
|
(10) Спасибо, попробовала, все работает
ВерсияСервера = ПолучитьВерсиюОбъекта(); ВерсияКлиента = Объект.ВерсияДанных; Если ВерсияСервера <> ВерсияКлиента Тогда КонецЕсли; |
|||
13
LenaAt
12.12.17
✎
16:36
|
(11) Вот я и хочу это сообщение предотвратить, чтобы пользователь нажал на кнопку Перечитать
|
|||
14
3achem
12.12.17
✎
16:38
|
(13) Побоюсь спросить, а зачем изменять документы, в то время пока в них работает пользователь? Либо это архитектурная ошибка, либо это костыль для хотелок.
|
|||
15
ildary
12.12.17
✎
16:40
|
(14) возможно регламентное задание изменило документ, в то время, когда в нём сидел пользователь.
|
|||
16
3achem
12.12.17
✎
16:41
|
(15) бэд практис никто не отменял
|
|||
17
1Садовник
12.12.17
✎
16:45
|
(13) а в чем смысл? Ну открыл пользователь док, поправил там что-то. Жмет сохранить, а ему сообщение, мол перечитай данные. Он перечитывает, и все что менял до этого теряется.
|
|||
18
Мандалай
12.12.17
✎
16:48
|
"(4) Нет, на клиенте форму не модифицируют. Ее меняет другой процесс на сервере."
Форму модифицируют только на клиенте, скорее всего Вы подразумеваете модифицирование объекта БД. RTFM |
|||
19
LenaAt
12.12.17
✎
16:48
|
(17) У меня все реквизиты недоступны для редактирования. Его задача только открыть документ и запустить обработчик события на сервере, а затем сохранить документ.
|
|||
20
3achem
12.12.17
✎
16:50
|
(19) Вариант без участия пользователя исключен? Потому что он при такой поставноке вопроса не нужен вообще. Регламентное само пошурашло ночью, утром пользователь проверил, и то его проверка ничего не значит, потому что доступа к реквизитам нет.
|
|||
21
LenaAt
12.12.17
✎
16:52
|
(20) Без пользователя совсем обойтись нельзя, к сожалению. Он должен отреагировать на поступление груза.
|
|||
22
3achem
12.12.17
✎
16:53
|
(21) То есть это реализация бизнес-процесса?
|
|||
23
Новиков
12.12.17
✎
16:53
|
(20) так может подумать в сторону АРМ. Если груз пришел, что-то сделалось, у него в АРМ по обработчику ожидания что-то булькнуло, он кнопку какую-то нажал - пошла магия. Без открытия документа.
|
|||
24
DmitrO
12.12.17
✎
16:54
|
(19)Сейчас они вас спросят: зачем пользователю записывать документ еще раз, если документ уже был записан на сервере. :)
|
|||
25
3achem
12.12.17
✎
16:55
|
(24) А действительно, зачем? Так много вопросов и так мало ответов
|
|||
26
1Садовник
12.12.17
✎
16:57
|
(24) что там сохранять, если версия на сервере уже сохранена. А пользователь видит старую картинку
|
|||
27
Mort
12.12.17
✎
16:59
|
Имхо, пользователь должен иметь приоритет перед роботом (пока мы им в войне ещё не проиграли) и регзадание должно пытаться блокировать доки и не трогать уже заблокированные объекты.
|
|||
28
LenaAt
12.12.17
✎
17:00
|
(25) А затем, что что - то он всё - таки меняет. А защита от потери изменений при перечитывании делается элементарно
//***************************************************************************** &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если Модифицированность Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Документ нельзя перечитать пока не будет нажата кнопка Записать"; Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецПроцедуры |
|||
29
dezss
12.12.17
✎
17:00
|
(21) ОФФ:
Да ну эти проблемы...тут конкурс интересный на мисте, айда участвовать!!!))) |
|||
30
Mort
12.12.17
✎
17:03
|
(28) Отказ не взлетит, нет такого параметра. Лупи ВызватьИсключение. На общем фоне будет норм смотреться.
|
|||
31
DmitrO
12.12.17
✎
17:04
|
(27)А вот это уже нарушение прав роботов и дискриминация. Я буду жаловаться Путину! :)
|
|||
32
LenaAt
12.12.17
✎
17:05
|
(30) Точно, поторопилась... Как быть?
|
|||
33
Mort
12.12.17
✎
17:06
|
(32) -> (27)
|
|||
34
Mort
12.12.17
✎
17:08
|
(32) Где-то в модуле регзадания:
Попытка ДокОбъект.Заблокировать(); .... ДокОбъект.Записать(); Исключение //Ничего не делаем, может получится в след. раз КонецПопытки; |
|||
35
Mort
12.12.17
✎
17:13
|
+(34) Кусок заполнения и записи документа лучше, конечно, вынести за пределы попытки, чтобы не прошляпить какое-нибудь другое годное исключение, но в целом думаю идея понятна.
|
|||
36
LenaAt
12.12.17
✎
17:17
|
(35) Я нашла простое решение. Перед первым вызовом процедуры на сервере все реквизиты документа, которые заполняет пользователь, блокируются от изменений. Оно, кстати, так и должно быть. Это даже хорошо, пользователь после того, как начнет делать отгрузки по данному документу, уже не сможет ничего изменить.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |