Имя: Пароль:
1C
1С v8
Очистить реквизиты ссылочного типа
,
0 yozza
 
15.04.13
13:11
Поможите кто чем может!
Требуется очищать реквизиты типа "документ" во всех табличных частях документа произвольного типа. Написала такой код:


Процедура ДокументПриИзменении(Элемент)

ОбъектДокумента = Документ.ПолучитьОбъект();
Модифицированность = ЛОЖЬ;
ТабличныеЧасти = ОбъектДОкумента.Метаданные().ТабличныеЧасти;
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
ТЧ = ОбъектДокумента[ТабличнаяЧасть.Имя];
       Для Каждого Строка Из ТЧ Цикл
           Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл
               Ссылка =  Строка[Реквизит.Имя];
               Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) И ЗначениеЗаполнено(Ссылка) Тогда
                   Если Ссылка.Дата<Дата(2013, 01,01) Тогда
                       Ссылка = "";
                       Модифицированность  = Истина;
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   Если Модифицированность Тогда
       ОбъектДокумента.Записать(РежимЗаписиДокумента.Запись)
   КонецЕсли;
   
   
КонецПроцедуры
1 yozza
 
15.04.13
13:13
Сорри, случайно отправила, не дописав. Короче, не работает код. Не ругается, но и не очищает. ЧЯДНТ?
2 Frost616
 
15.04.13
13:14
а что мешает групповой обработкой делать?
3 ДенисЧ
 
15.04.13
13:14
Дык, может очищать реквизит документа, а не скопированное из него значение?
4 1Сергей
 
15.04.13
13:16
В условие заходит?
5 cw014
 
15.04.13
13:17
Ссылка =  Строка[Реквизит.Имя];
               Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) И ЗначениеЗаполнено(Ссылка) Тогда
                   Если Ссылка.Дата<Дата(2013, 01,01) Тогда
                       Ссылка = "";
                       Модифицированность  = Истина;
                   КонецЕсли;
               КонецЕсли;

Вот тут делается не так
6 yozza
 
15.04.13
13:18
(2) Там слишком до фига, планируется по всем документам конфиги за период. Это-то тренировочный вариант
(4) И заходит, и все правильно определяет. Но не меняет.
(5) А как правильно?
7 yozza
 
15.04.13
13:19
(3) Вот я догадываюсь, что здесь и порылась. Но как это сделать, не зная имениТтЧ и реквизита?
8 whitedi
 
15.04.13
13:19
поробуй так

Строка[Реквизит.Имя] = "";
9 yozza
 
15.04.13
13:23
(8) Охренеть, сработало! Ребята, вы чудо!
10 mikecool
 
15.04.13
13:26
(9) давай фотку в личку!
11 mzelensky
 
15.04.13
13:31
(9) Мне вот просто интересно, ты что СИ-шница?! Почему ты думала, что так будет работать?!

" Ссылка = "";"

?!?!
12 Aleksey
 
15.04.13
13:32
(11) в соседней ветки обсуждали это. типа так нельзя, особенно если составной тип. Типа NULL туда попадёт, совсем плохо будет
13 mzelensky
 
15.04.13
13:37
(12) сумбурный набор мыслей. Что и куда попадет, при каких условиях?!

В какой ветке?!
14 whitedi
 
15.04.13
14:04
(11) насколько я помню, все же такое наследование имеет место быть в случае ТаблицыЗначений, поэтому делается так:

ТЗ1 = ТЗ.Скопировать();

а не

ТЗ1 = ТЗ;
15 mzelensky
 
15.04.13
14:10
(14) в плане ТЗ, да!

но не в случае:

Ссылка =  Строка[Реквизит.Имя];
Ссылка = "";
16 1Сергей
 
15.04.13
14:12
Стоит признать, что в 1С иногда возникает путаница с тем, когда объект передаётся по ссылке, а когда по значению. Особенно у новичков
17 Rovan
 
гуру
15.04.13
14:19
быстрее так:
1. выгрузить ТЧ в ТЗ
2. прбежать по реквизитам узнать какие ссылочные
3. сделать по колонкам ЗаполнитьЗначения("", <Колонки>)
4. заггрузить ТЗ в ТЧ
18 Eugene_life
 
15.04.13
14:26
(17) + или: Выгрузить ТЧ в ТЗ, удалить колонку со ссылками, загрузить в ТЧ.