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

Управляемая форма, клиент и сервер

Управляемая форма, клиент и сервер
Я
   LenaAt
 
12.12.17 - 16:15
Подскажите, пожалуйста, как на клиенте узнать, что отображаемый документ был изменен на сервере?
   3achem
 
1 - 12.12.17 - 16:17
(0) это что подразумивается под такой формулировкой?
   LenaAt
 
2 - 12.12.17 - 16:21
(1) Пользователь открыл на клиенте форму документа, а в это время обработчик события на сервере документ изменил. Например, заполнил табличную часть.
   3achem
 
3 - 12.12.17 - 16:22
(2) будет конфликт блокировок
   perester
 
4 - 12.12.17 - 16:23
Модифицированность? Сравнение значений незаписанных данных по сравнению с записанными?
   LenaAt
 
5 - 12.12.17 - 16:25
(3) Конфликт блокировок - это когда два процесса пытаются одновременно изменить одну и туже запись в таблице РСУБД. А у меня форма на клиенте открыта.

(4) Нет, на клиенте форму не модифицируют. Ее меняет другой процесс на сервере.
   DmitrO
 
6 - 12.12.17 - 16:27
То что происходит в Лас-Вегасе, остается в Лас-Вегасе.

Правильный ответ на вопрос в (0): в данных формы поле Версия будет иметь значение отличное от того, которое сейчас записано в базе данных.
   LenaAt
 
7 - 12.12.17 - 16:30
(6) Как мне на клиенте сравнить версии данных. На клиенте это свойство Объект.ВерсияДанных?
   LenaAt
 
8 - 12.12.17 - 16:31
7+ Надо сходить на сервер за версией данных и сравнить их?
   3achem
 
9 - 12.12.17 - 16:32
(7) Перед записью Если Объект = Объект.Ссылка Тогда
   DmitrO
 
10 - 12.12.17 - 16:33
(7)Да, поле называется ВерсияДанных.
(8)Да.
   3achem
 
11 - 12.12.17 - 16:35
(7) А вообще, если данные изменены, то должна вылезти ошибка при записи "Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных"
   LenaAt
 
12 - 12.12.17 - 16:35
(10) Спасибо, попробовала, все работает

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

Попытка
    ДокОбъект.Заблокировать();

    ....
    ДокОбъект.Записать();

Исключение
//Ничего не делаем, может получится в след. раз


КонецПопытки;
   Mort
 
35 - 12.12.17 - 17:13
+(34) Кусок заполнения и записи документа лучше, конечно,  вынести за пределы попытки, чтобы не прошляпить какое-нибудь другое годное исключение, но в целом думаю идея понятна.
   LenaAt
 
36 - 12.12.17 - 17:17
(35) Я нашла простое решение. Перед первым вызовом процедуры на сервере все реквизиты документа, которые заполняет пользователь, блокируются от изменений. Оно, кстати, так и должно быть. Это даже хорошо, пользователь после того, как начнет делать отгрузки по данному документу, уже не сможет ничего изменить.


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