Имя: Пароль:
1C
1С v8
Записать на управляемой форме документа
0 SeraFim
 
03.03.14
16:21
Есть такой вот метод в управляемой форме документа:

Расширение управляемой формы для документа (Managed form extension for documents)
Записать (Write)
Синтаксис:

Записать(<ПараметрыЗаписи>)
Параметры:

<ПараметрыЗаписи> (необязательный)

Тип: Структура.
Структура параметров записи, которые могут быть обработаны в обработчиках событий записи. Состав параметров произвольный. Содержит предопределенные параметры записи РежимЗаписи и РежимПроведения. Предопределенные параметры передаются в метод объекта Записать.
Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи.
Возвращаемое значение:

Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.
Описание:

Записывает объект.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.


Сделал на форме кнопочку, а в обработке проведения - сразу отказ от проведения:

//в модуле формы
&НаКлиенте
Процедура Команда1(Команда)
    Если Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) тогда
        Сообщить("Провелось!");
    Иначе
        Сообщить("Не провелось!");
    КонецЕсли;
КонецПроцедуры

//в модуле объекта
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Отказ = Истина;
КонецПроцедуры


Казалось бы, всё просто и логично - записать с проведением не получилось, метод должен вернуть ЛОЖЬ, но не тут-то было, валится с ошибкой:

{Документ.Документ1.Форма.ФормаДокумента.Форма(4)}: Ошибка при вызове метода контекста (Записать)
    Если Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) тогда
по причине:
Не удалось провести: "Документ1"!


Что не так-то? То ли лыжи не едут, то ли я?
1 SeraFim
 
03.03.14
16:22
P.S. 1С:Предприятие 8.2 (8.2.18.102)
2 alexei366
 
03.03.14
16:33
А если на сервере тож самое или как?
3 SeraFim
 
03.03.14
16:35
(2) да
4 alexei366
 
03.03.14
16:37
(3) Я по другому делаю, чтоб описание ошибки на форму попадала при обработке модуля объекта (могу рассказать как, если надо)
5 SeraFim
 
03.03.14
16:43
(4) спасибо, но вопрос не в этом (не связан с выводом описания ошибки)
6 Дмитрий666
 
03.03.14
17:07
все верно, попробуй интерактивно провести документ, у которого прописано отказ=истина, выйдет ошибка "не удалось провести..."
7 Avganec
 
03.03.14
17:44
(0) а по-моему все логично
8 SeraFim
 
03.03.14
17:53
(6) разного рода ошибки (не будет "Ошибка при вызове метода контекста (Записать)")
(7) а по-моему - нет. Почему в данной ситуации не возвращается Ложь? Ведь записать с такими параметрами не удалось!
9 Avganec
 
03.03.14
17:54
(8) это уже механизм проведения документа, а до этого еще отдельно механизм записи документа. вешай попытки, продумывай логику.
10 SeraFim
 
03.03.14
17:59
(9) механизм записи документа включает в себя механизм проведения документа.

параметр так и называется: РежимЗАПИСИДокумента.Проведение
11 ifso
 
03.03.14
18:16
(10) Любой документ обязан быть проведен?
12 hhhh
 
03.03.14
18:25
(10) а откуда инфа, что Записать() возвращает булево?
13 SeraFim
 
04.03.14
06:37
(12)из синтакс-помощника) не путать с методом объекта! Это метод формы!
14 Feunoir
 
04.03.14
07:08
(13) Попробуй ради интереса поставить отказ в обработчике ПередЗаписью и записать без проведения. Просто ради эксперимента.
15 1dvd
 
04.03.14
07:28
(13) так ты и делай для формы тогда

Если ЭтаФорма.Записать(...
16 Feunoir
 
04.03.14
07:35
(15) А ты как думаешь, если в УФ просто вызвать метод Записать(), то какой метод вызовется на самом деле?
17 Дмитрий666
 
04.03.14
08:25
ошибка одна и та же "не удалось провести...", какая разница при вызове контекста записать() или нет. А сообщение не выходит потому что когда выходит ошибка, то останавливается выполнение кода и не доходит то строчки
Сообщить("Провелось!");
    Иначе
        Сообщить("Не провелось!");
    КонецЕсли;

Возвращаемое значение:

Тип: Булево.
Истина - успешно записан; Ложь - в противном случае.

Истина или ложь - если успешно записан/не записан, а не проведен
18 Feunoir
 
04.03.14
08:39
(17) В СП написано, что при неуспешной записи метод должен возвращать Ложь, а про то, что выбрасывается исключение там не написано. То есть поведение системы не соответствует документации. Вот поэтому тема и началась. По факту получается, что при успешной записи Истина, при неуспешной - исключение.
19 Дмитрий666
 
04.03.14
09:45
(18) ошибка вызывается при не успешном проведении документа, а не записи
20 Дмитрий666
 
04.03.14
09:56
прописал такой код:

&НаКлиенте
Процедура Команда2(Команда)
    Если Записать() тогда
        Сообщить("Провелось!");
    Иначе
        Сообщить("Не провелось!");
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    отказ=истина;
КонецПроцедуры

все ок, выходит "не провелось", ну это типа не записалось, лень было текст менять...


если прописать в модуле объекта

Процедура ПриЗаписи(Отказ)
    отказ=истина;
КонецПроцедуры

тогда ошибка "не удалось записать..."

метод возвращает истина или ложь только если запись отменяется в форме, а не в объекте, я так понял
21 SeraFim
 
04.03.14
09:57
(14) о как) Тоже ошибка)
(19) опередил)
22 SeraFim
 
04.03.14
09:57
(21) (19)=(20)
23 Дмитрий666
 
04.03.14
09:58
и кстати

Параметры записи можно обработать в событиях формы ПередЗаписью, ПередЗаписьюНаСервере, ПриЗаписиНаСервере, ПослеЗаписиНаСервере, ПослеЗаписи.
24 SeraFim
 
04.03.14
10:02
(20)
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ПриЗаписи (OnWrite)
Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.

Получается, как-то вот так:
Физически объект записан в базу - значит все нормально. Если же отказались уже после записи в базу (неважно в какой момент, при проведении или же сразу после записи), значит, возникает ошибка - записать же удалось!
Но такие вот особенности должны быть прописаны в документации.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой