Имя: Пароль:
1C
 
8.2 Метод ПолучитьОбъект()
0 Stado_adama
 
21.01.11
13:38
есть ТЗ с двумя колонками Код (СправочникСсылка.ЦветомодельКоллекционныеАтрибуты) и Контракт (СправочникСсылка.ПоставщикКонтракт) у справочника ЦветомодельКоллекционныеАтрибуты есть реквизит ПоставщикКонтракт (СправочникСсылка.ПоставщикКонтракт) надо присвоить этому реквизиту значение которые лежит в ТЗ.Контракт
написал код:
&НаКлиенте
Процедура ПрименитьИзменения(Команда)
   Для Каждого Строка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(Строка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       Объект = Строка.Код.ПолучитьОбъект();
       Объект.ПоставщикКонтракт = Строка.Контракт;
       
       Попытка
           Объект.Записать();
       Исключение
       Сообщить("Не удалось записать цветомодель " + Строка.Код.Владелец.Код);
   КонецПопытки;
       
   КонецЦикла;
КонецПроцедуры

ругается:

{Обработка.ПроставляемКонтракты.Форма.Форма.Форма(119)}: Метод объекта не обнаружен (ПолучитьОбъект)
       Объект = Строка.Код.ПолучитьОбъект();

в чем трабла?
1 ДенисЧ
 
21.01.11
13:40
Код - это не объект, а строка или число...
2 vicof
 
21.01.11
13:40
на клиенте не может быть объектов
3 Stado_adama
 
21.01.11
13:40
+ (0) пробовал писать процедуру на сервере, тоже ругается
4 almar
 
21.01.11
13:41
(0) На клиенте нет такого метода
5 Stado_adama
 
21.01.11
13:41
(1) зарезервированное слово, которое низя использовать?
6 vicof
 
21.01.11
13:42
(5) нет, просто не является ссылкой на объект
7 almar
 
21.01.11
13:42
(3) На сервере добавь
       Если НЕ ЗначениеЗаполнено(Строка.Код) Тогда
           Продолжить;
       КонецЕсли;
8 Ненавижу 1С
 
гуру
21.01.11
13:43
какой тип у реквизита Код?
9 Defender aka LINN
 
21.01.11
13:43
(3) Та я бы тебя на месте 1С вообще матом послал, если бы ты меня пытался получить объекту строки или числа.
10 Stado_adama
 
21.01.11
13:43
(6) читаем (0)
есть ТЗ с двумя колонками Код (СправочникСсылка.ЦветомодельКоллекционныеАтрибуты)
11 Stado_adama
 
21.01.11
13:45
Реквизит ТЗ Код переименовал в ЦКА на всякий случай и исправил код на следующий:

&НаСервере
Процедура ПрименитьИзмененияНаСервере()
   Для Каждого Строка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(Строка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       Объект = Строка.ЦКА.ПолучитьОбъект();
       Объект.ПоставщикКонтракт = Строка.Контракт;
       
       Попытка
           Объект.Записать();
       Исключение
           Сообщить("Не удалось записать цветомодель " + Строка.ЦКА.Владелец.Код);
       КонецПопытки;
   КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПрименитьИзменения(Команда)
   Для Каждого Строка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(Строка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       ПрименитьИзмененияНаСервере();
   КонецЦикла;
КонецПроцедуры

ругается:

{Обработка.ПроставляемКонтракты.Форма.Форма.Форма(119)}: Ошибка при установке значения атрибута контекста (Объект)
       Объект = Строка.ЦКА.ПолучитьОбъект();
по причине:
Нельзя изменять поле, содержащее объект данных формы
12 almar
 
21.01.11
13:45
(9) Колонка Код типизирована?
13 almar
 
21.01.11
13:46
(11) Переименуй переменную Объект
14 Ненавижу 1С
 
гуру
21.01.11
13:47
(9) может не заполнен таки?
15 Stado_adama
 
21.01.11
13:47
(8) СправочникСсылка.ЦветомодельКоллекционныеАтрибуты
(9) читаем (0) и (10)
16 Stado_adama
 
21.01.11
13:50
(14)точка останова на Объект = Строка.ЦКА.ПолучитьОбъект(); говорит что Выражение Строка.ЦКА имеет значение AW12 Типа СправочникСсылка.ЦветомодельКоллекционныеАтрибуты
17 программистище
 
21.01.11
13:51
а попробуй

&НаСервере
Процедура ПрименитьИзмененияНаСервере()
   Для Каждого СтрокаСписка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(СтрокаСписка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       ОбъектЦКА = СтрокаСписка.ЦКА.ПолучитьОбъект();
       ОбъектЦКА.ПоставщикКонтракт = СтрокаСписка.Контракт;
       
       Попытка
           ОбъектЦКА.Записать();
       Исключение
           Сообщить("Не удалось записать цветомодель " + СтрокаСписка.ЦКА.Владелец.Код);
       КонецПопытки;
   КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПрименитьИзменения(Команда)
   Для Каждого СтрокаСписка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(СтрокаСписка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       ПрименитьИзмененияНаСервере();
   КонецЦикла;
КонецПроцедуры
18 программистище
 
21.01.11
13:53
а вообще код дикий )))
в цикле тот же самый цикл
19 Stado_adama
 
21.01.11
13:54
(18) заметил уже :) не убрал при копировании... ПрименитьИзменения сейчас выглядет так:

&НаКлиенте
Процедура ПрименитьИзменения(Команда)
       ПрименитьИзмененияНаСервере();
КонецПроцедуры
20 Stado_adama
 
21.01.11
13:56
(17) ты прав... поменял объект на объектЦКА и заработало...
Всем Спасибо!
21 romboro
 
21.01.11
13:58
Насколько я понял, в переменной Объект содердится основной реквизит формы типа ОбработкаОбъект. Нельзя переприсваивать значение этой переменной. Попробуйте использовать переменную с другим именем, например

ОбъектЦКА = Строка.ЦКА.ПолучитьОбъект();
...
22 программистище
 
21.01.11
14:02
да не за что )
23 СноваЗдорова
 
21.01.11
14:09
Замени в

   Для Каждого Строка Из Объект.СписокЦветомоделей Цикл
       Если НЕ ЗначениеЗаполнено(Строка.Контракт) Тогда
           Продолжить;
       КонецЕсли;
       
       Объект = Строка.ЦКА.ПолучитьОбъект();

Переменную Строка на другое, более нейтральное название
24 СноваЗдорова
 
21.01.11
14:10
а, уже? =))
25 МЮЛЛЕР
 
21.01.11
14:23
Для Каждого Строка Из Объект.СписокЦветомоделей Цикл - ну да, если бы так типовые писали - был бы ужас