Имя: Пароль:
1C
Админ
Элемент = справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект();
0 alexwmk
 
04.06.10
13:54
1С8.1 В модуле формы написал код для изменения элемента справочника (изменить наименование):

Элемент = справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект();
Элемент.Наименование = "Новое наименование";
Элемент.Записать

На что при запуске 1С предприятие выдает ошибку:

{Справочник.Программирование.Форма.ФормаСписка(75)}: Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
   Элемент = справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект();
по причине:
Элемент не выбран!


Помогите понять что не правильно (и как правильно)
1 Jolly Roger
 
04.06.10
13:55
(0) правильно - сначала проверить, что ссылка не пустая...
2 Mitriy
 
04.06.10
13:55
не находит он такой код...
3 Шапокляк
 
04.06.10
13:56
А какой тип кода в этом справочнике?
4 Mitriy
 
04.06.10
13:57
ЭлементСсылка = справочники.Номенклатура.НайтиПоКоду(10);
Если Не ЗначениеЗаполнено(ЭлементСсылка) Тогда
Сообщить("На фиг такую работу...");
Возврат;
КонецЕсли;
Элемент = ЭлементСсылка.ПолучитьОбъект();
Элемент.Наименование = "Новое наименование";
Элемент.Записать();
5 zbv
 
04.06.10
13:58
сдается мне... что код текстовый...
6 Mitriy
 
04.06.10
13:59
(5) это следующий вопрос...
7 Dzenn
 
гуру
04.06.10
13:59
(0) с книжек типа "Основы программирования .... и всё такое" не феншуй начать?
8 Шапокляк
 
04.06.10
13:59
(6) Скорее, предыдущий :)
9 Mitriy
 
04.06.10
14:02
(8) я про автора ))
10 Ненавижу 1С
 
гуру
04.06.10
14:03
11 eklmn
 
гуру
04.06.10
14:05
(10) с марса наверно
12 Mitriy
 
04.06.10
14:07
(10) с ЕГЭ...
13 Ненавижу 1С
 
гуру
04.06.10
14:07
(12) 5 баллов
14 alexwmk
 
04.06.10
14:33
Хорош стебаться. Данный код приведен в учебнике "Практическое пособие разработчика 1С Предприятие 8.1"

Типа как пример разработки
15 Mitriy
 
04.06.10
14:52
(14) в этом примере предполагается:
1. Код числовой
2. Элемент с таким кодом точно есть
3. Что к этому коду никто не будет относиться всерьез
16 Dzenn
 
гуру
04.06.10
15:13
(14) ну тады другое дело. Молодца. Не боишься что 1С затянет? ;)

Если ругается на "ПолучитьОбъект()", значит, поиск по элементу не дал результата. А вообще "голд" совет такой - не привыкай использовать выборки по справочникам и документам. Всегда используй только запросы. Почему? Потому что клиент-серверная технология предполагает, что по сети передаются только результаты (что реализовано в запросе), а при выборке передается весь объект.

Запомни как аксиому: "выборке - НЕТ; запросу - ДА".
17 Dzenn
 
гуру
04.06.10
15:20
+ пример того, как это будет выглядеть в запросе:



Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Код", 10); // или "10", если код строковый
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Код = &Код";

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
   ОбщегоНазначения.СообщитьОбОшибке("Ух ты! Нет такого элемента");
Иначе
   Выборка = Результат.Выбрать();
   Если Выборка.Количество() > 2 Тогда
       ОбщегоНазначения.СообщитьОбОшибке("Ух ты! Таких элементов больше одного! Как такое может быть? Наверное, я накосячил с контролем уникальности :(");
   Иначе
       Выборка.Следующий();
       
       НомОбъект = Выборка.Ссылка.ПолучитьОбъект();
       НомОбъект.Наименование = "Новое наименование";
       
       Попытка
           НомОбъект.Записать();
       Исключение
           ОбщегоНазначения.СообщитьОбОшибке("Чёрд! Не записывается, ругается на: " + ОписаниеОшибки());
       КонецПопытки;
       
   КонецЕсли;
   
КонецЕсли;


Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс