Имя: Пароль:
1C
 
ВызватьИсключение &НаКлиенте ПередЗаписью
0 vi0
 
14.02.17
11:32
При возникновении исключения в форме ПередЗапись запись объекта все равно продолжается. В чем логика?
1 FIXXXL
 
14.02.17
11:34
(0) в том, что есть Отказ?
2 polosov
 
14.02.17
11:35
(0) Отказ используй, если не надо записывать
3 vi0
 
14.02.17
11:36
исключение может быть инициировано платформой
например при нехватке прав
4 lxs
 
14.02.17
11:36
(0) Проблема в чем? У тебя отказ записи не возникает?
5 vi0
 
14.02.17
11:48
(4) так точно
6 FIXXXL
 
14.02.17
11:54
(3) ну и? платформа сама Отказ в истину выставит
не темни, пиши подробнее
7 vi0
 
14.02.17
12:07
(6) платформа 8.3.9.1850
Управляемое приложение. Толстый или тонкий клиент

Созаем новый справочник. В форме добавляем обработчик.
При записи объекта возникает ошибка, но объект записывается

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    
   f  = 1/0;
    
КонецПроцедуры
8 polosov
 
14.02.17
12:40
(7) Запись происходит в транзакции.

Сделано явное управление транзакцией через Отказ.

Попытка
f  = 1/0;
Исключение
Отказ = Истина;
КонецПопытки;
9 vi0
 
14.02.17
12:53
(8) это на клиенте, еще нет транзакции
10 vi0
 
14.02.17
13:02
проблема в том что исключение может возникнуть по разным Причинам, опять же при нехватке прав.
Понятно, что можно весь код ПередЗаписью затолкать в попытку, но это не наши методы
11 FIXXXL
 
14.02.17
13:16
(10) запишется, если нет прав на запись?
12 polosov
 
14.02.17
13:17
(9) http://1centerprise8.blogspot.ru/2015/03/posled-sobytij-document.html
(10) Смотри в типовые. Не надо гнуть свою линию из всяких ссей плюсплюсов или где ты там по исключениям нахватался.
13 vi0
 
14.02.17
13:24
(12) что сказать то хотел?
по обеим своим пунктам
14 vi0
 
14.02.17
13:25
(11) к примеру ПередЗапись была обращение к _другому_ объекту на который нет прав
15 polosov
 
14.02.17
13:28
(13)
1. Если доступен Отказ, значит это уже в транзакции.
2. Не нужно изобретать велосипеды, есть типовые механизмы. Для того, чтобы привести свое мышление в порядок относительно идеологии 1с, смотри в типовые.
(14) Есть попытка. Проведение должно быть предсказуемым. Не надо охватывать варианты, к примеру на случай зомбиапокалипсиса.
16 vi0
 
14.02.17
13:31
(15) > Если доступен Отказ, значит это уже в транзакции
Откуда информация? И с каких пор возможна транзакция на клиенте в управляемых формах

> смотри в типовые
Куда именно смотреть? Так можно на любой вопрос отвечать

> Есть попытка. Проведение должно быть предсказуемым.
И что?

В общем говори конкретнее
17 polosov
 
14.02.17
13:35
(16) > Откуда информация? И с каких пор возможна транзакция на клиенте в управляемых формах

А сам как думаешь?
Если можно прервать выполнение транзакции через Отказ = Истина, то наверно это выполняется в транзакции.

>Куда именно смотреть? Так можно на любой вопрос отвечать
Обычно имеют в виду одну из трех, в зависимости от твоей предметной области: УТ, БП, ЗУП

>И что?  В общем говори конкретнее

Подробнее наверно тут https://online.1c.ru/books/book/23177431/
18 vi0
 
14.02.17
13:39
(17) чудак человек
сам прочти прочти по ссылке, которую ты сам привел в (12) и прочти где начинается транзакция
потом прочти свою ссылку из (17), ну это так для общего развития
как прочтешь от сих до сих то возвращайся
19 polosov
 
14.02.17
13:43
(18) У нас с тобой интернеты разные чтоле?

Написано же по ссылке в (12), что транзакция начинается на клиенте...
20 vi0
 
14.02.17
13:46
(19) всё, достаточно
прочти сначала книгу которую ты советовал, тебе будет полезно

1С:Программирование для начинающих: Детям и родителям, менеджерам и руководителям – Разработка в системе «1С:Предприятие 8.3»
21 polosov
 
14.02.17
13:46
(20) Ойвсе?
22 vi0
 
14.02.17
13:49
(21) не позорься сам, и не путай других
23 polosov
 
14.02.17
14:00
(22) Может быть ты конечно имел в виду транзакцию записи, она да, только на сервере, начиная с модуля объекта.
Но тебе то какая разница в данном случае? Есть Отказ - управляй проведением/записью на клиенте.
24 vde69
 
14.02.17
14:09
(23) в транзакции первый обработчик это "ПередЗписьюНаСервере"

передЗаписью на клиенте находится ДО начала транзакции и предназначается для задавания вопросов и асинхронных интерактивных действий.
25 polosov
 
14.02.17
14:19
(24) Ну в транзакции записи первая процедура это ПередЗаписью модуля объекта.
http://its.1c.ru/db/pubdevguide83#content:612:hdoc
26 eks1985
 
14.02.17
14:43
Хм,  
Цы "
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

В этом обработчике можно проанализировать, что все вспомогательные данные, необходимые для записи объекта, подготовлены. И если это не так, отказаться от записи, установив параметр Отказ в значение Истина. Дело в том, что на клиенте могут существовать объекты, недоступные на сервере, например, СОМ-объект HTML-документа. Поэтому проверки, связанные с подобными объектами, нужно производить именно в клиентской процедуре. Также в этом обработчике доступны для анализа параметры записи,
созданные платформой или переданные разработчиком.
" КонецЦы

По-моему все логично. Что смущает?
Транзакция записи действительно на клиенте еще не начата, поэтому исключение ее не прерывает и запись все равно происходит. Если хочется чтобы не присходила как уже писали выше заворачивай в попытку ставь Отказ = Истина в блоке Исключение.
27 vi0
 
14.02.17
15:37
Не логично то, что платформа не отрабатывает и не прерывает операцию записи. Есть тут транзакция или нет - вопрос второстепенный.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс