Имя: Пароль:
1C
 
Запись элемента. Ночь. Не соображаю уже ;)
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)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.