Имя: Пароль:
1C
1C 7.7
v7: Справочник. При записи
0 Asakra
 
18.03.16
10:06
При неудачной попытке записи нового элемента справочника 2 раза подряд, очищаются все реквизиты справочника.
Это можно наблюдать, если написать примерно такой код:
Процедура ПриЗаписи()
        НачатьТранзакцию();
    Записать();
    ОтменитьТранзакцию();
    СтатусВозврата(0);
    Возврат;
КонецПроцедуры

Есть ли решение данной фичи?
1 Ёпрст
 
гуру
18.03.16
10:07
Занафига там транзакция впёрлась ?
2 lodger
 
18.03.16
10:08
возврат после первой неудачной попытки делать и не доводить до второй?
3 Asakra
 
18.03.16
10:08
(1) утакой код:
Попытка
    НачатьТранзакцию();
    
    Если Выбран() = 0 Тогда
        Записать();
    КонецЕсли;

    Если ЗаписьЮрФизЛица() = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьОснДоговора() = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьОснСчета() = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьОснСвойства(Свойство    , ОсновноеСвойство, Константа.ВидСвойстваКонтрагентов    ) = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьОснСвойства(ВидОплаты    , _ВидОплаты      , Константа._ВидСвойстваВидаОплат    ) = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьОснСвойства(КаналПродаж, _КаналПродаж      , ВидСвойстваКаналПродаж                 ) = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьГоловногоКонтрагента() = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьСтавкиЗПОтПродаж() = 0 Тогда
        Возврат;
    ИначеЕсли ЗаписьДоговорКлиента() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ЗафиксироватьТранзакцию();
    
Исключение
    Сообщить(ОписаниеОшибки(), "!");
    ОтменитьТранзакцию();
    СтатусВозврата(0);
    
    Возврат;
КонецПопытки;
4 Asakra
 
18.03.16
10:10
(2) в смысле? запрещать юзеру тыкать два раза записать?
5 Asakra
 
18.03.16
10:24
у меня в планах только костыли написать. может у кого есть грамотное решение?
6 ДенисЧ
 
18.03.16
10:26
(5) Ты бы хоть постановку вопроса озвучил...
Что делать пытаешься?
7 Asakra
 
18.03.16
10:27
(6) записать подчиненные и не только справочники
8 Asakra
 
18.03.16
10:28
(6) см. (3)
9 ДенисЧ
 
18.03.16
10:29
(8) Там я вижу бред обкуренного до самой немогу кодера...
10 Asakra
 
18.03.16
10:31
(9) это код из типовой:
Попытка
    Записать();
Исключение
    ОтменитьТранзакцию();
    Сообщить("Запись контрагента: " + ОписаниеОшибки(), "!");
    Возврат;

КонецПопытки;

Попытка
    Если ЗаписьЮрФизЛица() = 0 Тогда
        ОтменитьТранзакцию();
        Возврат;
    КонецЕсли;

Исключение
    ОтменитьТранзакцию();
    Сообщить("Запись юр.(физ.) лица: " + ОписаниеОшибки(), "!");
    Возврат;

КонецПопытки;

Попытка
    Если ЗаписьОснДоговора() = 0 Тогда
        ОтменитьТранзакцию();
        Возврат;
    КонецЕсли;

Исключение
    ОтменитьТранзакцию();
    Сообщить("Запись основного договора: " + ОписаниеОшибки(), "!");
    Возврат;

КонецПопытки;

Попытка
    Если ЗаписьОснСчета() = 0 Тогда
        ОтменитьТранзакцию();
        Возврат;
    КонецЕсли;

Исключение
    ОтменитьТранзакцию();
    Сообщить("Запись основного счета: " + ОписаниеОшибки(), "!");
    Возврат;

КонецПопытки;

Попытка
    Если ЗаписьОснСвойства() = 0 Тогда
        ОтменитьТранзакцию();
        Возврат;
    КонецЕсли;

    СохранитьЗначение("ОсновноеСвойствоКонтрагентов", Свойство);
    ЗафиксироватьТранзакцию();
    СтатусВозврата(1);

Исключение
    ОтменитьТранзакцию();
    Сообщить("Запись основного свойства: " + ОписаниеОшибки(), "!");

КонецПопытки;

как правильно-то?
11 MishaD
 
18.03.16
10:37
что за типовая такая ? В типовых, по моему, насильно записывает, когда подчиненные начинаешь создавать.
12 Asakra
 
18.03.16
10:38
ТиС 7.70.982
13 Ёпрст
 
гуру
18.03.16
10:40
(0) А как это выглядит ? Ни разу не сталкивался, хотя код нечто похожий
14 Asakra
 
18.03.16
10:40
(13) все поля очищаются, наименование, код и т.п.
15 DGorgoN
 
18.03.16
10:41
СтатусВозврата(0); виноват имхо
16 Ёпрст
 
гуру
18.03.16
10:42
Ну, храни все реквизиты в копии объекта или в кеше
17 Ёпрст
 
гуру
18.03.16
10:42
Грубо, создаешь новый элемент, копируешь через метаданные все реквизиты в него и не записываешь его, потом, с него берешь реквизиты
18 Ёпрст
 
гуру
18.03.16
10:43
тип того
19 Asakra
 
18.03.16
10:45
(16) ну вот ето и планирую. думал, может есть получше идеи... (17) планировал заполнять тз, в классе перехватчике, что бы напрочь заткнуть проблему..
20 Asakra
 
18.03.16
10:46
или даже лучше ассоциативный вектор
21 Ёпрст
 
гуру
18.03.16
10:48
да пофик, хоть в соответствиях
22 Asakra
 
18.03.16
10:48
(21) ну как-то так...)
23 Asakra
 
18.03.16
10:49
(15) неа. именно так:
    НачатьТранзакцию();
    Записать();
    ОтменитьТранзакцию();
    СтатусВозврата(0);
    Возврат;
если написать:
СтатусВозврата(0);
Возврат;

то все ок.
24 пипец
 
18.03.16
10:57
не понял , попытка исключение не вкатила ?
25 Asakra
 
18.03.16
10:59
(24) а она не причем. когда второй раз проходит Записать(), уже все поля пустые, еще даже до ошибки не дошло...
26 Asakra
 
18.03.16
11:41
решил тоже самое проверить в документе - документ пишется не смотря на транзакцию и статус возврата, на второй раз все поля очищаются, кроме табличной части... мдя..
28 Asakra
 
18.03.16
12:39
(27) в (10) 100% типовой код. в (3) мой код.
29 Ёпрст
 
гуру
18.03.16
12:40
ВК есть ?
30 Asakra
 
18.03.16
12:41
(29) в типовой нету, на ней все тоже самое.
31 Ёпрст
 
гуру
18.03.16
12:42
(30) если формекс загрузить, эффект наблюдается ?
32 Asakra
 
18.03.16
12:43
(31) да. в рабочей ён присутствует...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс