|
не удается записать объект. Помогите найти ошибку в коде. | ☑ | ||
---|---|---|---|---|
0
AlexBor
naïve
17.06.15
✎
21:41
|
8.2 самописная. Есть документ Акт в нем реквизит(ссылканадокумент обращение). И в одном и в друго есть реквизит АР1 но в Акте заполнен. Требуется заполнить этот реквизит и в обращение. Делаю так:
Выборка = Документы.Акт.Выбрать(Дата1,Дата2); Пока Выборка.Следующий() Цикл Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); выборка.ОснованиеОбращение.АР1=Объект.АР1; Объект.Записать(); КонецЦикла; вылетает ошибка Поле объекта недоступно для записи (АР1) Вопрос как сделать правильно. Да с запросами я не очень поэтому по возможности не предлагать))) |
|||
1
Фрэнки
17.06.15
✎
21:45
|
(0) перевернут оператор присвоения.
В Объект.АР1 записать значение из выборки. А у тебя наоборот. |
|||
2
ДенисЧ
17.06.15
✎
21:47
|
выборка.ОснованиеОбращение.АР1 => Объект.АР1;
|
|||
3
Фрэнки
17.06.15
✎
21:49
|
И второе замечание.
Вообще смысл оператора какой-то странный. Если мы видим Объект.АР1 и видим выборка.ОснованиеОбращение.АР1 это одно и тоже поле. Т.е. не просто присвоение одного в другое, а просто одно и тоже поле в которое бесполезно и переписывать и сравнивать |
|||
4
AlexBor
naïve
17.06.15
✎
21:51
|
(3) Вообще подразумевается что выборка.ОснованиеОбращение.АР1 - это реквизит АР1 в документе обращение
|
|||
5
AlexBor
naïve
17.06.15
✎
21:55
|
Сделал вот так но помоему что то не так
Выборка = Документы.Акт.Выбрать(Дата1,Дата2); Пока Выборка.Следующий() Цикл Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); Объект2 = Выборка.Ссылка.ПолучитьОбъект(); Объект2.АР1=выборка.ОснованиеОбращение.АР1; Объект.Записать(); Сообщить(Строка(Объект.Ссылка)) КонецЦикла; |
|||
6
ДенисЧ
17.06.15
✎
21:55
|
(4) У предложенного кода моет подразумеваться только одно. У автора кода проблемы в ДНК. Ничего больше.
|
|||
7
AlexBor
naïve
17.06.15
✎
21:57
|
(6) ))))
|
|||
8
Фрэнки
17.06.15
✎
21:58
|
(5) издеваешься?
Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); // тут у тебя присваивается справа налево. Объект2.АР1=выборка.ОснованиеОбращение.АР1; // здесь тоже справа налево Объект.Записать(); // а здесь записывается объект, который не изменялся. |
|||
9
AlexBor
naïve
17.06.15
✎
22:06
|
Вообщем сделал так:
Выборка = Документы.Акт.Выбрать(Дата1,Дата2); Пока Выборка.Следующий() Цикл Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); Объект2= Выборка.Ссылка.ПолучитьОбъект(); Объект.АР1=Объект2.АР1; Объект.Записать(); Сообщить(Строка(Объект.Ссылка)) КонецЦикла; КонецПроцедуры Начинает нормально работать но на каком то этапе выбрасывет {Форма.ФормаОтчета.Форма(22)}: Значение не является значением объектного типа (Ссылка) Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); Не знаете что это? |
|||
10
ДенисЧ
17.06.15
✎
22:08
|
(9) Я знаю. см (6)
|
|||
11
Фрэнки
17.06.15
✎
22:09
|
(9) В выборку попадают документы вида Акт, у которых не заполнен реквизит ОснованиеОбращение. В этом случае Свойство ссылка (при попытке проверки) будет равна пустой ссылке, а у пустой ссылки не может быть объекта.
|
|||
12
1sanekmaloi1
17.06.15
✎
22:11
|
(9) это та самая ошибка о которой писали в (6)
|
|||
13
Fish
17.06.15
✎
22:11
|
(9) Сделай всё через попытку. Ошибка уйдёт :)
|
|||
14
Фрэнки
17.06.15
✎
22:14
|
+11 перед использованием метода ПолучитьОбъект() необходимо поставить проверку, что значение ОснованиеОбращение не является пустой ссылкой
или поставить проверку ЗначениеЗаполнено(Выборка.ОснованиеОбращение) или поставить Попытка ... как это предлагает Fish |
|||
15
KUBIK
17.06.15
✎
22:16
|
(0) Открой для себя Отладчик! "Будь мужиком, бл..."©
|
|||
16
AlexBor
naïve
17.06.15
✎
22:19
|
Сделал вот так
Выборка = Документы.Акт.Выбрать(Дата1,Дата2); Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Выборка.ОснованиеОбращение)=Истина Тогда Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); Объект2= Выборка.Ссылка.ПолучитьОбъект(); Объект.АР1=Объект2.АР1; Объект.Записать(); Сообщить(Строка(Объект2.Ссылка)) КонецЕсли КонецЦикла; КонецПроцедуры Форма.ФормаОтчета.Форма(25)}: Значение не является значением объектного типа (АР1) Объект.АР1=Объект2.АР1; |
|||
17
Fish
17.06.15
✎
22:22
|
(16) Напиши так:
Выборка = Документы.Акт.Выбрать(Дата1,Дата2); Пока Выборка.Следующий() Цикл Попытка Объект = Выборка.ОснованиеОбращение.Ссылка.ПолучитьОбъект(); Объект2= Выборка.Ссылка.ПолучитьОбъект(); Объект.АР1=Объект2.АР1; Объект.Записать(); Сообщить(Строка(Объект2.Ссылка)) Исключение; КонецПопытки; КонецЦикла; Даю 146%, что ошибок не будет. |
|||
18
AlexBor
naïve
17.06.15
✎
22:29
|
(17) Я поражен но да да и еще раз да
|
|||
19
Drac0
17.06.15
✎
22:29
|
(0) Ты точно программист? Запутать в двух переменных - это надо суметь...
|
|||
20
AlexBor
naïve
17.06.15
✎
22:29
|
(17) Спасибо вам и всем кто принял участие все получилось
|
|||
21
AlexBor
naïve
17.06.15
✎
22:30
|
(19) нет я не программист там не правильно написано
|
|||
22
Fish
17.06.15
✎
22:31
|
(20) Только вот вся проблема в том, что отсутствие ошибок ещё не означает правильного результата :)
|
|||
23
AlexBor
naïve
17.06.15
✎
22:32
|
(22) я в курсе проверил вроде как все встало правильно ....
|
|||
24
Фрэнки
17.06.15
✎
22:33
|
(23) сделай в исключении сообщить("...") и поставь в нем всякие разные переменные и поля. посмотришь, что же в выборке вызывало ошибку
|
|||
25
Drac0
17.06.15
✎
22:35
|
(21) Ну, так хоть спокойней :)
|
|||
26
AlexBor
naïve
17.06.15
✎
22:40
|
(24) Фигурируют две ошибки каких больше а каки меньше это
Форма.ФормаОтчета.Форма(23)}: Значение не является значением объектного типа (Ссылка) {Форма.ФормаОтчета.Форма(25)}: Поле объекта не обнаружено (АР1) |
|||
27
AlexBor
naïve
17.06.15
✎
22:41
|
Ошибка при вызове метода контекста (ПолучитьОбъект): Элемент не выбран!
Тоже встретилась |
|||
28
Necessitudo
17.06.15
✎
22:43
|
(27) Поддерживаю коллег, предложивших (6)
|
|||
29
AlexBor
naïve
17.06.15
✎
22:44
|
(28) Спи спокойно дорогой товарищ
|
|||
30
Drac0
17.06.15
✎
22:56
|
Вообще, в данной ситуации реально стоит звать специалиста. Даже студенту-лодырю здесь работы на полчаса и 500р.
|
|||
31
Любопытная
18.06.15
✎
05:24
|
(29)
ВО-первых, чтобы получить значение реквизита API из акта, необязательно получать объект акта, достаточно ссылки. Во-вторых, надо проверять заполнен ли реквизит ОснованиеОбращение у текущего элемента выборки перед тем, как получать его объект. В-третьих, используй запросы, чтобы получить то, что хочешь и будет тебе счастье |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |