Имя: Пароль:
1C
1С v8
Работа с Табличными Частями
,
0 Azxcvbn
 
23.04.13
14:08
Имеется Табличная часть ОС Документа с 3 колонками
ОС,Количество,Подразделение.
Нужно проверить заполнена ли она? и Если да то добавить подразделение(Ибо оно по умолчанию не заполнено).

Объект = Документы.Поступление.НайтиПоКоду(1).получитьОбъект();
Форма = Объект.ПолучитьФорму("ФормаДокумента");
ТекДанные = Форма.ЭлементыФормы.ОС.ТекущиеДанные;

Если ЗначениеЗаполнено(ТекДанные.ОсновноеСредство) Тогда
    ТекДанные.МОЛОрганизации = МОЛ;
    ТекДанные.ПодразделениеОрганизации = Подразделение;
    Объект.Записать();
КонецЕсли;


Выдает ошибку
Значение не является значением объектного типа (ОсновноеСредство)

Что я сделал не так?
1 Rie
 
23.04.13
14:10
(0) Зачем форму-то открываешь?
Получил Объект - ну и смотри ему в табличную часть.
А ТекущиеДанные - они только когда строка выбрана. А у тебя - никакая строка не выбрана, поскольку форма только что открыта.
2 Maxus43
 
23.04.13
14:11
ну всё не так. Удаляй, и начинай сначала
3 Maxus43
 
23.04.13
14:13
ДокОбъект = Документы.Поступление.НайтиПоКоду(1).получитьОбъект();

Для каждого СтрокаТЧ Из ДокОбъект Цикл
Если ЗначениеЗаполнено(СтрокаТЧ)...


правда я не помню чтоб код у документов был Числовой...
4 Maxus43
 
23.04.13
14:13
+ там пустая ссылка наверно
5 Azxcvbn
 
23.04.13
14:15
Объект.ОС.? а дальше как проверить что у него там, через выбоку?
6 Azxcvbn
 
23.04.13
14:16
выборки оказывается нету...
или можно непосредственно к колонки обращаться?
7 Rie
 
23.04.13
14:21
(3) Документ.Поступление.НайтиПоКоду() - это само по себе круто. А точно ли ТС на 1С работает?
8 Maxus43
 
23.04.13
14:25
(7) я даже внимание не обратил) нйатиПоНомеру там должно быть)
9 Rie
 
23.04.13
14:28
(8) Да я тоже сначала не обратил внимания.
Но это означает, что ТС показывает не тот код, который реально работает.
10 Azxcvbn
 
23.04.13
14:29
Сам разобрался
Объект = Документы.Поступление.НайтиПоНомеру(1).ПолучитьОбъект;
Для каждого СтрокаОС из Объект.ОС Цикл
  Если ЗначениеЗаполнено(СтрокаОС.ОсновноеСредство) Тогда
       Сообщить("Записываю на МОЛ, Подразделение");
       СтрокаОС.МОЛОрганизации = МОЛ;
       СтрокаОС.ПодразделениеОрганизации = Подразделение;
   Объект.Записать();
  КонецЕсли;
КонецЦИкла;
Спасибо (1)
11 Птица
 
23.04.13
14:32
(10)а зачем записывать после каждой строки?
12 Azxcvbn
 
23.04.13
14:52
(11) уберу за цикл )
13 cw014
 
23.04.13
14:55
ЖЕСТЬ
14 cw014
 
23.04.13
14:55
А что, ОС может быть в строке не заполнена? А зачем тогда такая строка?
15 Рэйв
 
23.04.13
14:57
Если заполненна ли таб часть то просто

Если ОС.количество()>0 Тогда
...
16 cw014
 
23.04.13
15:11
(15) Да тут даже проверять не надо, код на 6 строк:

Объект = Документы.Поступление.НайтиПоНомеру(1).ПолучитьОбъект;
ТаблицаОбъекта = Объект.ОС.Выгрузить();
ТаблицаОбъекта.ЗаполнитьЗначения(МОЛ, "МОЛОрганизации");
ТаблицаОбъекта.ЗаполнитьЗначения(Подразделение, "ПодразделениеОрганизации");
Объект.ОС.Загрузить(ТаблицаОбъекта);
Объект.Записать();
17 drcrasher
 
23.04.13
15:14
(16) на 4 =)
18 cw014
 
23.04.13
15:15
(17) Зато с плюсом
19 hhhh
 
23.04.13
15:16
(18) тормозная вещь. В (10) побыстрее и строк столько же.
20 drcrasher
 
23.04.13
15:17
(18) имелось ввиду выпилить выгрузку/загрузку таблицы =)
21 zladenuw
 
23.04.13
15:19
а зачем выгружать еще в ТЗ, у таб части есть метод загрузить колонку.
22 Azxcvbn
 
30.04.13
10:13
(15) Спасибо, правильная вещь, мне просто нужна была проверка на заполнение ТЧ, если ОС не заполнена то вся ТЧ пустая. Но думаю ваша проверка правильная, учту.