![]() |
![]() |
![]() |
|
Запись элемента. Ночь. Не соображаю уже ;) | ☑ | ||
---|---|---|---|---|
0
twilight5023
20.10.08
✎
03:36
|
Объясните plz следующее ... видимо уже торможу малость ... Имеем такой код:
Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.Новый(); Спр.Наименование = "Тест"; Сообщить(Спр.Выбран()); Спр.Записать(); Сообщить(Спр.Выбран()); Спр.Записать(); В результате получаем: 0 1 ... т.к. в первом случае элемент не записан, а во втором случае выборка "не потерялась". Теперь представим что у нас не новый элемент, а найденный по реквизиту, т.е.: Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.НайтиПоРеквизиту("Реквизит",ЗначениеРеквизита,0)); // здесь все находится Сообщить(Спр.Выбран()); // здесь возвращается 1 ... элемент выбран ... Спр.Записать(); Сообщить(Спр.Выбран()); // а после записи - 0 ... уже не выбран ... Спр.Записать(); // здесь получаем ошибку, т.к. элемент не выбран ... Вопрос: Почему во втором случае выборка теряется? |
|||
1
Sserj
20.10.08
✎
04:23
|
(0) Это не глюк, это фича, известная и нужно ее держать в голове :)
|
|||
2
twilight5023
20.10.08
✎
04:33
|
(1) В чем заключается сия фича? Т.е. при каких условиях теряется выбранный элемент? При "связке" НайтиПоРеквизиту -> Записать? А если мне после записи нужно его еще использовать, запоминать / находить элемент по новой?
|
|||
3
Sserj
20.10.08
✎
04:39
|
После записи всегда теряется.
|
|||
4
Sserj
20.10.08
✎
04:43
|
+3 насколько я помню это же относится и к документам
|
|||
5
twilight5023
20.10.08
✎
05:24
|
И все таки ... просто не понимаю ... сейчас держу в руках практически две одинаковые базы ... обработка одна и та же ... код самый простой:
Процедура Сформировать() Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.НайтиПоРеквизиту("Артикул",5087383,1); Сообщить(Спр.Выбран()); Спр.Записать(); Сообщить(Спр.Выбран()); Спр.Записать(); КонецПроцедуры Так вот, в одной базе результат: 1 0 Спр.Записать(); {C:\USERS\DECKER\DESKTOP\ТЕСТ.ERT(8)}: Не выбран элемент! В другой: 1 1 Почему? Я с этим час просидел ... все бросил ... ) |
|||
6
twilight5023
20.10.08
✎
05:43
|
Гм ... понял ... вернее понял отчего, но не почему. Итак, в первой базе где позиционирование терялось реквизит Артикул имел строковый тип, во второй базе Артикул был числом. Сейчас просто создал тестовую конфу с двумя справочниками по одному реквизиту в каждом. Один числовой, другой строковый. Действительно, когда реквизит числовой - ничего не теряется ... кто-нибудь может прокомментировать такую веселую вещь?
|
|||
7
Касандер72
20.10.08
✎
09:31
|
(0) А тебе вообще-то чего нужно сделать?
|
|||
8
1Сергей
20.10.08
✎
09:54
|
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура"); Спр.НайтиПоРеквизиту("Артикул",5087383,1); Сообщить(Спр.Выбран()); Спр1=Спр.ТекущийЭлемент(); Спр.Записать(); Спр.НайтиЭлемент(Спр1); Сообщить(Спр.Выбран()); Спр.Записать(); КонецПроцедуры |
|||
9
twilight5023
20.10.08
✎
12:49
|
(7) Да нужно было записать элемент, затем создать элемент подчиненного справочника, записать его и присвоить значение реквизита родителя как раз на этот элемент. Фактически сделал так, как описано в (8).
Просто непонятно, почему если реквизит Строка, то позиционирование теряется, а если Число, то нет. В чем разница-то с точки зрения логики? |
|||
10
Rovan
гуру
20.10.08
✎
12:56
|
(9) см. (1)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |