|
v7: Не сохраняется измененные значение атрибута
| ☑ |
0
Dima_ret
11.06.13
✎
05:13
|
Нужно изменить значение реквизита "Минимальный остаток" у конкретной номенклатуры.
Делаю это вот так:
Если СпрТовар.НайтиПоКоду("21-21") = 1 тогда
а=СпрТовар.ТекущийЭлемент();
Сообщить(а.ПолучитьАтрибут("МинОстаток"));
а.УстановитьАтрибут("МинОстаток",300);
СпрТовар.Записать();
Сообщить(а.ПолучитьАтрибут("МинОстаток"));
КонецЕсли
При выполнении ошибок не выдает, считывает и выводит правильное значение 540. Записывает, опять выводит нужное значение 300, но в карточке номенклатуры значение не меняется.
P.S. Я в 1С пишу первый раз, до этого писал на С#, где-то туплю, но не могу понять где.
|
|
1
Sserj
11.06.13
✎
05:15
|
СпрТовар.УстановитьАтрибут("МинОстаток",300);
СпрТовар.Записать();
Сообщить(СпрТовар.ПолучитьАтрибут("МинОстаток"));
|
|
2
Sserj
11.06.13
✎
05:16
|
В твоем варианте ты получаешь ССЫЛКУ на объект, при первом обращении (получитьАтрибут) все заново читается из БД и получаешь/устанавливаешь ты как бы уже не в СпрТовар а в другой копии объекта.
|
|
3
Sserj
11.06.13
✎
05:23
|
+ еще мысля как объяснить :)
СпрТовар.ТекущийЭлемент() - возращает ссылку не на СпрТовар (как тебе показалось бы логичным в C#) а внутренний ИД этого элемента в базе, тобишь типа гуид в базе. И при обращении к элементам по этому гуиду заново перечитываются данные и в памяти формируется новый экземпляр этого справочника.
|
|
4
Dima_ret
11.06.13
✎
05:24
|
Sserj, ага понял, исправил, работает. Огромное спасибо.
|
|
5
Dolly_EV
11.06.13
✎
14:13
|
Ну и еще до кучи:
1. вот так короче будет:
Если СпрТовар.НайтиПоКоду("21-21") = 1 тогда
СпрТовар.МинОстаток=300;
СпрТовар.Записать();
КонецЕсли
2. За НайтиПоКоду("21-21") тебя твои последователи недобрым словом помянут
|
|
6
dedmoroz777
11.06.13
✎
14:30
|
(5) НайтиПоКоду("(21-20)/(21-21)>0")=1
|
|