Имя: Пароль:
1C
1С v8
v8: Получить объекты из таблицы значений и записать
,
0 адинэсниг1
 
20.05.13
08:49
Изучаю 1с :)
Имеем запрос:

запрос = новый запрос;
запрос.текст =
|"выбрать
|ДокИстория.Ссылка,
|ДокИстория.Ответственный
|из
|Документ.Док.История как ДокИстория
|где
|ДокИстория.статус = &статус";
запрос.УстановитьПараметр("статус", Перечисления.аааааа.бббббб);
тз=запрос.выполнить().выгрузить()

Получаем тз: список документов с ответственными.
Нужно ответственного записать в реквизит соответствующего документа Док.Отв. Документ/Объект нужно получить из Ссылка.

Вот тут не правильно:
Для каждого ссылка из тз цикл
ДокументОбъект = тз.ссылка.ПолучитьОбъект();
ДокументОбъект.Отв= тз.Ответственный;
ДокументОбъект.записать();
Конеццикла;
1 1Сергей
 
20.05.13
08:50
хорошо, мы поняли
2 адинэсниг1
 
20.05.13
08:52
Помогите написать правильно вот эту часть:

Для каждого ссылка из тз цикл
ДокументОбъект = тз.ссылка.ПолучитьОбъект();
ДокументОбъект.Отв= тз.Ответственный;
ДокументОбъект.записать();
Конеццикла;
3 1Сергей
 
20.05.13
08:53
(2) объясни, почему это не правильно
4 Godofsin
 
20.05.13
08:55
в запросе: ДокИстория.Ответственный
в цикле: ДокументОбъект.Отв

У тебя 2 реквизита с ответственным что ле?
5 адинэсниг1
 
20.05.13
08:55
после запуска обрабоки пишет:
{Форма.Форма.Форма(18)}: Поле объекта не обнаружено (ссылка)
   ДокументОбъект = тз.ссылка.ПолучитьОбъект();
6 Ursus maritimus
 
20.05.13
08:55
ДокументОбъект = тз.ссылка.ПолучитьОбъект();

ДокументОбъект = ссылка.ссылка.ПолучитьОбъект();
7 walp
 
20.05.13
08:55
Потому что будет выдавать синтаксическую ошибку.

Для Каждого Ссылка Из ТЗ цикл
В переменной Ссылка будет сохраняться строка таблицы значений. Для наглядности лушче будет написать
Для Каждого СтрокаТЗ Из ТЗ Цикл
8 Ursus maritimus
 
20.05.13
08:55
А лучше
Для каждого строкаТЗ из тз цикл
ДокументОбъект = строкаТЗ.ссылка.ПолучитьОбъект();
9 walp
 
20.05.13
08:56
Дальше рекомендую в отладчике посмотреть, что содержится в переменной СтрокаТЗ. Станет все гораздо понятнее.
10 cw014
 
20.05.13
08:57
Мдаааа
11 Маркетолог
 
20.05.13
08:57
Для каждого стрТЗ из тз Цикл
  ДокументОбъект =  стрТЗ.ссылка.ПолучитьОбъект();

КонецЦикла;
12 адинэсниг1
 
20.05.13
08:59
Всем спасибо! Кажется поулчилось :)
13 адинэсниг1
 
20.05.13
09:01
"У тебя 2 реквизита с ответственным что ле?"
В табл части документа и в самом документе.
14 ICWiner
 
20.05.13
09:01
Для каждого ссылка из тз цикл
ДокументОбъект = тз.ссылка.ПолучитьОбъект();
ДокументОбъект.Отв= тз.Ответственный;
ДокументОбъект.записать();
Конеццикла;

Сразу ошибку и не приметишь :) Я тож мимоходом глянул и как (3) подумал, что все норм...
15 ICWiner
 
20.05.13
09:02
(13) Если в таб части то не взлетит так.
16 ICWiner
 
20.05.13
09:03
Для каждого Стр из тз цикл
ДокументОбъект = Стр .ссылка.ПолучитьОбъект();
Для Каждого ТабСтр из ДокументОбъект.ТвояТабЧасть Цикл
ТабСтр.Отв= тз.Ответственный;
Конеццикла;
ДокументОбъект.записать();
Конеццикла;
17 cw014
 
20.05.13
09:05
(16) У него в табличной части реквизит "Ответственный" (видно из запроса), а в шапке документа реквизит "Отв"
18 ICWiner
 
20.05.13
09:06
А, точно :) Типа смотрит кто последний док изменил в таб части История и главного ответственного ставит..
19 Infsams654
 
20.05.13
09:44
(2) Для каждого ссылка из тз цикл
нафига ДокументОбъект = тз.ссылка.ПолучитьОбъект(); ?

здесь ссылка - строка ТЗ
Правильно (11)