Имя: Пароль:
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) Спасибо, правильная вещь, мне просто нужна была проверка на заполнение ТЧ, если ОС не заполнена то вся ТЧ пустая. Но думаю ваша проверка правильная, учту.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший