Имя: Пароль:
1C
 
УФ или как организовать интерактивное взаимодействие в проверках на сервере
,
0 Gorr
 
04.08.15
09:59
В идеале все проверки при записи/проведении объектов нужно делать в подписках на события или в обработчиках объекта. Делать это же в формах неверно ввиду того, что у объектов может быть множество форм. У меня не укладывается в голове как можно использовать эту прописную истину в клиент-серверном варианте работы на управляемых формах - эти обработчики отрабатывают на стороне сервера с которого возможность взаимодействия с формами отсутствует.
Допустим сообщения можно положить в регистр сведений, но как уведомить форму о событии на сервере?
1 Defender aka LINN
 
04.08.15
10:02
(0) Интерактив при проведении - это же так замечательно. Особенно когда запускается проведение 100500 документов обработкой.
Слава Будде, что 1С это запретило, но всегда находятся ценители...
2 Stepa86
 
04.08.15
10:03
(0) ОбщегоНазначенияКлиентСервер.СообщитьПользователю( в обработке выдаст сообщение пользователю после возвращения с сервера. А если еще и ключи проставить, то будет облако около нужного элемента в управляемом режиме
3 Gorr
 
04.08.15
10:09
(1) фигню сказал - всегда можно предусмотреть временное отключение любого механизма при массовой обработке. например обмен данными.
4 Gorr
 
04.08.15
10:10
(2) сообщить пользователю выводит сообщения категории ошибок, что не всегда требуется.
5 Stepa86
 
04.08.15
10:11
(4) ну если не требуется, не выводи
6 Gorr
 
04.08.15
10:12
+ СообщениеПользователю конечно можно использовать если у запрпрет категорический, а если запрет не категорический?
7 Gorr
 
04.08.15
10:13
как уведомить о потенциальной ошибке с подтверждением действия?
8 Stepa86
 
04.08.15
10:14
(6) на сервере не должно быть не категорических запретов. Или транзакция выполняется или откатывается, промежуточных состояний нет
9 butterbean
 
04.08.15
10:14
(7) ПоказатьВопрос()
10 Gorr
 
04.08.15
10:15
(9) чисто клиентская фишка
11 butterbean
 
04.08.15
10:16
(10) естественно, а от кого ты на сервере ждешь "подтверждения действия"??
12 Gorr
 
04.08.15
10:17
(8) давайте рассмотрим такой случай: транзакция откатывается с вопросом. при утвердительном ответе помещаем в дополнительныеСвойства объекта Флаг и повторяем транзакцию с фиксацией
13 Gorr
 
04.08.15
10:18
(11) как ты на клиенте получишь ответ от сервера и задашь вопрос?
14 Stepa86
 
04.08.15
10:19
(12) а что мешает все узнать до того, как мучать сервер? И флаг не нужен, а в дополнительные свойства кладем уже правильный ответ
15 Gorr
 
04.08.15
10:19
+ чтобы получить ответ от сервера на клиенте сначала нужно вызвать этот самый сервер с клиента. НО события модуля объекта с клиента не вызываются!
16 Defender aka LINN
 
04.08.15
10:19
(3) Фигня в (0) описана. Хочешь интерактива - для этого есть формы. Много форм - нам искренне жаль тебя, честно.
17 Gorr
 
04.08.15
10:20
(14) приходим к 0 - форма это не то место где должны выполняться проверки!!!
18 Fish
 
04.08.15
10:21
(15) И это правильно. Привыкай к логике клиент-серверной работы.
19 butterbean
 
04.08.15
10:21
(17) почему? религия?
20 Fish
 
04.08.15
10:21
(17) А сервер - это не то место, где надо задавать вопросы пользователю.
21 Stepa86
 
04.08.15
10:21
(17) форма это то место, где происходит весь интерактив
22 Gorr
 
04.08.15
10:22
(19) потому что для этого предназначены обработчики модуля объекта или подписки
23 Gorr
 
04.08.15
10:23
и приходим к тому что должен быть механизм взаимодействия сервера с клиентом
24 butterbean
 
04.08.15
10:24
(22) проверки, требующие ответа пользователя должны делаться в формах, и неважно где будет располагаться сама процедура проверки
25 Stepa86
 
04.08.15
10:24
(22) Сам придумал?
26 Gorr
 
04.08.15
10:25
(24) если говорить про документы, то место где должны выполняться все проверки это обработка проведения документа.
27 Fish
 
04.08.15
10:25
(23) Механизмы взаимодействия клиента и сервера есть. Осталось дело за малым: изучить их.
28 Fish
 
04.08.15
10:26
(26) Ну и проверяй там, кто мешает то?
29 butterbean
 
04.08.15
10:26
(26) заполнение реквизитов документа тоже?
30 SUA
 
04.08.15
10:28
мыши плакали, кололись но продолжали жрать кактус...
серверные вызовы с клиента (см - из формы) доступны
обработкапроверкизаполнения() если что еще есть чтобы отвалиться до проведения
31 Feunoir
 
04.08.15
10:29
(23) Механизм оповещения клиента с сервера мог бы быть приятной плюшечкой. Но и без него всё можно организовать лёгким движением руки. И ты в (12) сам написал что нужно сделать: Запускаешь проведение - получаешь отказ, на клиенте задаёшь вопрос, устанавливаешь нужные флаги и снова запускаешь проведение.

Это ты ещё с немодальностью не сталкивался плотно.
32 Gorr
 
04.08.15
10:35
(31) значит мыслил я все же в нужном направлении. исключение на клиенте обработать можно. но как вернуть статус из обработки проведения? регистр сведений? еще механизмы?
33 Gorr
 
04.08.15
10:40
+ с немодальностью вроде ничего сложного. опеделяешь процедуру обработчика и все.
34 hhhh
 
04.08.15
10:42
(32) регистр сведений отпадает. При откате транзакции он возвратится в исходное состояние.
35 Gorr
 
04.08.15
10:47
временное хранилище?
36 Feunoir
 
04.08.15
10:55
(32) Дополнительные свойства объекта, например.

Объект.ДополнительныеСвойства.Вставить("ЗаписьБезПроверок", Ложь);
Попытка
  Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
  РезультатПроведения = Объект.ДополнительныеСвойства.РезультатПроведения;
КонецПопытки
37 Gorr
 
06.08.15
10:17
+Приведу еще один довод почему я считаю правильным выполнять проверку в обработке проведения - в соответствии с концепцией проведения сначала проводим, потом контролируем остатки лучшего места для выполнения проверки просто не найти.

(36) в общем такой подход работает, но имеет существенный недостаток - код приходится вызывать в явном виде во всех местах где платформа делала это самостоятельно - при записи проведенного, при закрытии модифицированной формы проведенного объекта.
т.е. пришлось писать довольно много кода в форме просто для того, чтобы сохранить типовое поведение последней.

(31) КАК отловить на форме результат проведения? так же выяснилось что есть проблема анализа формой результата выполнения проведения - так обработчики событий формы ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи (клиент) не срабатывают при отмене транзакции проведения (Отказ = истина). Таким образом стандартно на форме никак нельзя узнать на клиенте когда и чем завершилась попытка проведения объекта.
Так, можно было бы красиво решить задачу если передавать в ДополнительныеПараметры объекта ПередЗаписьюНаСервере флага интерактивного проведения. В модуле объекта проверять наличие этого флага и возвращать в тех же ДополнительныхПараметрах дополнительной информации для анализа и взаимодействия с пользователем на клиенте. В обработчике ПослеЗаписиНаСервере результат поместить в реквизит формы, а из обработчика ПослеЗаписи (клиент) проверяя соответствующие реквизиты формы задавать необходимые вопросы.
38 Gorr
 
06.08.15
10:20
37+ при такой реализации не возникает проблем при массовом проведении документов - флаг интерактивности отсутствует.
39 Gorr
 
06.08.15
10:30
Как вариант напрашивается решение выполнять отказ от проведения на клиенте в обработчике ПослеЗаписиНаСервере
40 gigi789
 
06.08.15
10:30
(7) якая прелесть началась не явная транзакция, залочили пол базы и ждем пока тетя Маша подтвердит, "что она точно уверена в своих действиях", а тетя Маша чай пьет))
41 SUA
 
06.08.15
10:32
(37)и? - если остатков не хватает, тут же задаем пользователю вопрос "ну и х... с ними?" - контроль остатков обычно безусловно запрещает проведение
42 Gorr
 
06.08.15
10:48
(40) вы не поняли сути вопроса - никаких вопросов в транзакции
43 Gorr
 
06.08.15
10:49
(41) ключевое слово "обычно"
44 Gorr
 
06.08.15
10:55
Вариант отказа на форме "не взлетел" - если отказываться в серверном обработчике формы ПриЗаписиНаСервере клиентский обработчик формы ПослеЗаписи где можно было бы организовать интерактивную работу попросту так же не отрабатывает(((

Может у кого еще есть мысли как отловить на клиенте результат проведения???
45 Gorr
 
06.08.15
10:58
Единственное что остается - делать распроведение из ПослеЗаписи(((
46 Адский плющ
 
06.08.15
11:09
А чем обычное сообщение то не устраивает?
47 Гёдза
 
06.08.15
11:13
(45) правильно в форме перед записью. Несколько форм - сделай функцию в общем модуле
48 Адский плющ
 
06.08.15
11:20
А. Теперь понял что автор хочет. В кратце - это не здорово даже чисто с медицинской точки зрения.
49 fisher
 
06.08.15
11:29
(48)  То, что в форме нельзя поймать отмену транзакции - тоже нездорово, как ни крути.
50 Gorr
 
06.08.15
15:38
Баг платформы?
Интересно в 1С кто-нибудь обращался с подобным вопросом?
51 Fish
 
06.08.15
15:40
(49) Почему нельзя? Очень даже можно.
52 Gorr
 
06.08.15
15:40
(51) нашел?
53 Fish
 
06.08.15
15:41
(52) Что нашёл?
54 fisher
 
06.08.15
15:45
(50) Это не баг. Записи же не было.
(51) Как?
55 Fish
 
06.08.15
16:04
(54) При помощи мегаизвратов, естественно, но тем не менее, при сильном желании можно.
56 fisher
 
06.08.15
16:12
(55) Ну и каким мегаизвратом можно в форме поймать событие отката транзакции записи? Обработкой ожидания?
57 Fish
 
06.08.15
16:14
(56) Как вариант. Но правильнее всего будет строить алгоритм работы программы под клиент-серверный вариант, при котором это будет не нужно.
58 Адский плющ
 
06.08.15
16:30
Это болезнь всего софта целой эпохи от доса и до сих пор (уходит на убыль).
Компьютерщики, фантазирующие об искусственном интеллекте представляли (и реализовывали) программу как диалог между человеком и компьютером. Отсюда все эти окошки в которых почти-как-живой-компьютер на "Вы" спрашивает пользователя о дальнейших действиях, словно лакей, ожидающий приказаний. "Вы точно хотите скопировать этот файл?"

А оказывается на самом деле пользователю удобнее общаться со своими материалами без посредников. Карандаш не задает вопросов. Так что нахер посредников. Нахер диалоги.
59 Gorr
 
06.08.15
16:36
(57) а на этой фразе у вас было сильно многозначительное выражение лица???
60 fisher
 
06.08.15
17:05
(57)(58) Знакомые песни. А когда 1С реализует это в очередном релизе, будете с умным видом кивать и говорить как это бывает полезно в отдельно взятых случаях.
61 Fish
 
06.08.15
17:06
(60) В смысле знакомые песни? Я это знал ещё с института, когда изучали клиент-серверные системы. И речи об 1С там и близко не было :))
62 fisher
 
06.08.15
17:14
(61) Еще скажи, что клиенту не нужен прогресс-бар, потому что это плохо укладывается в схему клиент-серверного взаимодействия.
63 ДенисЧ
 
06.08.15
17:15
(62) Клиенту не нужен прогресс-бар. Клиенту нужна программа, в которой нет необходимости вообще видеть прогресс-бары. И ждать выполнения тоже.
64 fisher
 
06.08.15
17:16
(63) Клиенту не нужна программа. Клиенту нужно, чтобы всё само.
65 fisher
 
06.08.15
17:17
И желательно вчера.
66 ДенисЧ
 
06.08.15
17:17
(64) Ты правильно уловил мою мысль
67 fisher
 
06.08.15
17:20
Твоя мысль меня никак не греет, потому как мы тут больше о реальном мире.
68 ДенисЧ
 
06.08.15
17:20
(67) О реальном мире или таки об 1с?
69 Gorr
 
06.08.15
17:27
(68) да Вы таким макаром далеко щас зайдете
70 ДенисЧ
 
06.08.15
17:28
(69) Я макаром не хожу... Я обычно хожу ногами...
71 Gorr
 
06.08.15
17:30
(70) это пока))
72 Gorr
 
06.08.15
17:38
что до меня, то я более чем уверен, что механизм появится
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший