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


1С:Предприятие ::

Метки: 

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

Я
   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) Я нашла простое решение. Перед первым вызовом процедуры на сервере все реквизиты документа, которые заполняет пользователь, блокируются от изменений. Оно, кстати, так и должно быть. Это даже хорошо, пользователь после того, как начнет делать отгрузки по данному документу, уже не сможет ничего изменить.



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