![]() |
![]() |
![]() |
|
перебор табличной части документа в 8.0 Ø |
☑ | ||
---|---|---|---|---|
0
LivingStar
16.12.05
✎
21:41
|
Для каждого ТЧ из ВыбДок.Метаданные().ТабличныеЧасти Цикл
Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя] Цикл Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); КонецЦикла; КонецЦикла; НЕ СКАЖЕТЕ ПОЧЕМУ РУГАЕТСЯ : {Форма.ОсновнаяФорма(14)}: Итератор для значения не определен Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя] Цикл |
|||
1
Pilcrow
16.12.05
✎
21:58
|
Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты Цикл
|
|||
2
LivingStar
16.12.05
✎
22:02
|
а не скажете как проверку вставить на существование табличной части, что то совсем не врубаюсь в 8-ку пока что
|
|||
3
Pilcrow
16.12.05
✎
22:10
|
(2)
Если ВыбДок.Метаданные().ТабличныеЧасти.Найти(ИмяТабЧасти) = Неопределено Тогда // ТЧ отсутствует Сообщить("Такой ТЧ нет"); Иначе // возвращается объект метаданных Сообщить("ТЧ существует"); КонецЕсли; |
|||
4
LivingStar
16.12.05
✎
22:14
|
а ИмяТабЧасти, это какая переменная, на неё ругается. Я просто хочу выявлять есть ли значения в табличной части и если нет просто пропускать её, а то 8.0 ругается если табличной части нет
|
|||
5
Pilcrow
16.12.05
✎
22:18
|
(4) ИмяТабЧасти - это строковое имя ТЧ, в твоем случае ТЧ.Имя, я просто так обозвал. Правильно, так и делаешь: ищешь ТЧ в метаданных по имени, если ее нет, то проверку на ее заполнение обходишь.
|
|||
6
LivingStar
16.12.05
✎
22:20
|
Ok !
|
|||
7
LivingStar
16.12.05
✎
22:24
|
Pilcrow 8.0 ругается на отсутствие поля у объекта, то есть табличная часть есть а поля у неё нет, пустые, как проверить наличие значений в полях табличной части?
Форма.ОсновнаяФорма(20)}: Поле объекта не обнаружено (РасходныйКассовыйОрдер) Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); |
|||
8
Pilcrow
16.12.05
✎
22:30
|
(7) Да точно так же, методом Найти() :-)
// Если ВыбДок.Метаданные().ТабличныеЧасти[ИмяТабЧасти].Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда . . . // ИмяТабЧасти и ИмяРеквизита - соответствующие строковые имена |
|||
9
LivingStar
16.12.05
✎
22:40
|
а ИмяРеквизита в табличной части какое будет?
|
|||
10
Pilcrow
16.12.05
✎
22:42
|
(9) То, наличие которого проверяешь.
|
|||
11
LivingStar
16.12.05
✎
22:44
|
на это ТЧ.Реквизит.Имя ругается
Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(ТЧ.Реквизит.Имя) = Неопределено Тогда Иначе Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты Цикл Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); КонецЦикла; КонецЕсли; |
|||
12
LivingStar
16.12.05
✎
22:48
|
Форма.ОсновнаяФорма(21)}: Поле объекта не обнаружено (Реквизит)
Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(ТЧ.Реквизит.Имя) = Неопределено Тогда |
|||
13
Pilcrow
16.12.05
✎
22:49
|
(11) А что это такое - ТЧ.Реквизит.Имя? Как ты получаешь имя реквизита?
|
|||
14
LivingStar
16.12.05
✎
22:54
|
не осилю сегодня время много, предлагаю перенестись на завтра, то есть на сегодня, но на день
|
|||
15
Pilcrow
16.12.05
✎
22:55
|
(14) В общем, ты понял идею - нужно иметь имя реквизита, наличие которого проверяешь.
|
|||
16
LivingStar
17.12.05
✎
08:59
|
Ребята как проверить наличие значений в табличной части, нужно исключить её обработку если она пуста, не получается определить реквизиты табличной части, вот на вот это ругается
{Форма.ОсновнаяФорма(21)}: Поле объекта не обнаружено (РеквизитТч) Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(ТЧ.РеквизитТч.Имя) = Неопределено Тогда не могу понять как отследить реквизит, помогите пожалуйста Процедура Выгрузка(Элемент) // Вставить содержимое обработчика. ТекстФайл =Новый ТекстовыйДокумент(); н =1; Для каждого Реквизит Из ВыбДок.Метаданные().Реквизиты Цикл Сообщить(Реквизит.Имя +" "+Реквизит.Тип +" "+ВыбДок[Реквизит.Имя]); ТекстФайл.ВставитьСтроку(н, Реквизит.Имя+", "+Реквизит.Тип+", "+ВыбДок[Реквизит.Имя]); н =н+1; КонецЦикла; Для каждого ТЧ из ВыбДок.Метаданные().ТабличныеЧасти Цикл Если ВыбДок.Метаданные().ТабличныеЧасти.Найти(ТЧ.Имя) = Неопределено Тогда // ТЧ отсутствует Сообщить("Такой ТЧ нет"); Иначе // возвращается объект метаданных Сообщить("ТЧ существует"); КонецЕсли; Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(ТЧ.РеквизитТч.Имя) = Неопределено Тогда Иначе Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты Цикл Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); КонецЦикла; КонецЕсли; КонецЦикла; ТекстФайл.Записать(ВыбФайл,КодировкаТекста.ANSI); КонецПроцедуры |
|||
17
LivingStar
17.12.05
✎
09:36
|
парни, если это ВыбДок[ТЧ.Имя][РеквизитТч.Имя], не реквизит табличной части, и это ТЧ.РеквизитТч.Имя тоже не реквизит табличной части, то что тогда реквизит Тч ?
|
|||
18
LivingStar
17.12.05
✎
10:09
|
кто знает?
|
|||
19
код263
17.12.05
✎
11:13
|
звездочка, рано еще тебе работать с реальными конфигурациями
почитай книжечки, создай себе манюсенькую конфигурацию и на ней, с отладчиком, изучай возможности 1С |
|||
20
LivingStar
17.12.05
✎
11:24
|
спасибо пупсик малюсенький, я сейчас уйду от сюда. заведу другую ветку, но ты туда прошу не сувайся, Ок, я тебя тама не хочу видеть
|
|||
21
tsd
17.12.05
✎
13:44
|
(0)
ошибку выдает потому что ты пытаешся выбрать не из коллекции реквизитов ТЧ,а из самой ТЧ Для Каждого ТаблЧасть Из ВыбДок.Метаданные().ТабличныеЧасти Цикл Для Каждого РеквизитТЧ Из ТаблЧасть.Реквизиты Цикл Сообщить("" + ТаблЧасть + " - " + РеквизитТЧ); КонецЦикла; КонецЦикла; |
|||
22
LivingStar
17.12.05
✎
13:57
|
спасибо я это понял пытался обработать до цикла а нужно после
но сейчас другая ситуация, табличная часть пуста и теперь ошибка в том что поле объекта не обнаружено, как быть в этом случае, как выявить есть таблице значения или она пустая |
|||
23
tsd
17.12.05
✎
14:05
|
(22) ну тебе же в соседней ветке подсказали
ВыбДок.ИмяТЧ.Количество() если ты в цикле своем проверить хочешь, то ВыбДок[ТаблЧасть.Имя].Количество() а зачем тебе вообще это нужно? |
|||
24
LivingStar
17.12.05
✎
14:15
|
вообще я делаю перезагрузку документа, то есть выгрузку и загрузку,
а это нужно затем что бы выгружать реквизиты документа и шапки, а то 8.0 не пускает если таблица пуста, вот мне и нужно это исключить |
|||
25
LivingStar
17.12.05
✎
14:18
|
у меня табличная часть это ТЧ, интересно где это прописано, ведь я не создавал такой идентификатор, 23 ну да этот медод выдает 0, т.е. она пустая, СПАСИБО буду далее разбираться
|
|||
26
LivingStar
17.12.05
✎
15:12
|
почему выскакивает вот эта ошибка
{Форма.ОсновнаяФорма(21)}: Поле объекта не обнаружено (ВидДокВходящий) Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); вот в этой процедуре | Процедура Выгрузка(Элемент) // Вставить содержимое обработчика. ТекстФайл =Новый ТекстовыйДокумент(); н =1; Для каждого Реквизит Из ВыбДок.Метаданные().Реквизиты Цикл Сообщить(Реквизит.Имя +" "+Реквизит.Тип +" "+ВыбДок[Реквизит.Имя]); ТекстФайл.ВставитьСтроку(н, Реквизит.Имя+", "+Реквизит.Тип+", "+ВыбДок[Реквизит.Имя]); н =н+1; КонецЦикла; // проверка существования определенной таблицы значений Для каждого ТЧ из ВыбДок.Метаданные().ТабличныеЧасти Цикл // если таблица определена Если ВыбДок.Метаданные().ТабличныеЧасти.Найти(ТЧ.Имя) <> Неопределено Тогда // если определены реквизиты табличной части Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты Цикл //Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(РеквизитТч.Имя) <> Неопределено Тогда Если ВыбДок[ТЧ.Имя].Количество()<> 0 Тогда Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); ТекстФайл.ВставитьСтроку(н, Реквизит.Имя+", "+Реквизит.Тип+", "+ВыбДок[Реквизит.Имя]); н =н+1; КонецЕсли; //КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; ТекстФайл.Записать(ВыбФайл,КодировкаТекста.ANSI); КонецПроцедуры |
|||
27
LivingStar
17.12.05
✎
15:26
|
похоже что просто в документе АвансовыйОтчет табличную часть которого я хочу перебрать указанное поле ВидДокВходящий просто не используется, как не обрабатывать его, как узнать что оно не используется?
| Выходит сообщение: | {Форма.ОсновнаяФорма(21)}: Поле объекта не обнаружено (ВидДокВходящий) Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); |
|||
28
LivingStar
17.12.05
✎
16:02
|
ну тема то интересна, что нет знатоков !!!
|
|||
29
tsd
17.12.05
✎
16:14
|
(28) да нет, не интересна
можешь в типовых посмотреть как сделаны функции определения наличия реквизита или просто через попытку попробовать Попытка Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя])); Исключение Сообщить("нема такого реквизита"); КонецПопытки; |
|||
30
LivingStar
17.12.05
✎
16:17
|
tsd ты извини, мне интересна так как я впервые в 8.0 и несколько другая парадигма программирования, а исключение так это стандартно, я просто хочу выяснить почему этого реквизита нет, не заполнен? ведь в документе он есть
|
|||
31
tsd
17.12.05
✎
16:21
|
ты же вроде табличные части перебираешь.
А в ТЧ ВыданныеАвансы реквизит с таким наименованием отсутствует |
|||
32
LivingStar
17.12.05
✎
16:38
|
он есть в ТЧ Товары
|
|||
33
LivingStar
17.12.05
✎
16:41
|
и в ТЧ Прочее тоже есть
но вот странно вот в этой процедуре, исключение: | Процедура Выгрузка(Элемент) // Вставить содержимое обработчика. ТекстФайл =Новый ТекстовыйДокумент(); н =1; Для каждого Реквизит Из ВыбДок.Метаданные().Реквизиты Цикл Сообщить(Реквизит.Имя +" "+Реквизит.Тип +" "+ВыбДок[Реквизит.Имя]); ТекстФайл.ВставитьСтроку(н, Реквизит.Имя+", "+Реквизит.Тип+", "+ВыбДок[Реквизит.Имя]); н =н+1; КонецЦикла; // проверка существования определенной таблицы значений Для каждого ТЧ из ВыбДок.Метаданные().ТабличныеЧасти Цикл // если таблица определена Если ВыбДок.Метаданные().ТабличныеЧасти.Найти(ТЧ.Имя) <> Неопределено Тогда // если определены реквизиты табличной части Для каждого РеквизитТч из ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты Цикл Если ВыбДок.Метаданные().ТабличныеЧасти[ТЧ.Имя].Реквизиты.Найти(РеквизитТч.Имя) <> Неопределено Тогда Если ВыбДок[ТЧ.Имя].Количество()<> 0 Тогда Попытка Сообщить(ВыбДок[ТЧ.Имя][РеквизитТч.Имя]); Исключение Сообщить("Обарвалл !!!"); КонецПопытки; ТекстФайл.ВставитьСтроку(н, Реквизит.Имя+", "+Реквизит.Тип+", "+ВыбДок[Реквизит.Имя]); н =н+1; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; ТекстФайл.Записать(ВыбФайл,КодировкаТекста.ANSI); КонецПроцедуры | сработало на каждый реквизит каждой ТЧ (одна была заполнена одной строкой), что то непонятно, говорит, -поле объекта не обнаружено и все тут |
|||
34
LivingStar
17.12.05
✎
17:07
|
S.O.S. !!!
|
|||
35
LivingStar
17.12.05
✎
17:14
|
tsd не подскажеш?
|
|||
36
LivingStar
17.12.05
✎
17:18
|
блин ё п р с т, чё не переберает табличную часть?
|
|||
37
tsd
17.12.05
✎
17:24
|
Для каждого ТЧ из ВыбДок.Метаданные().ТабличныеЧасти Цикл
Для Каждого строкаТЧ Из ВыбДок[Тч.Имя] Цикл Для Каждого РеквизитТЧ из ТЧ.Реквизиты Цикл ЗначениеРеквизита = СтрокаТЧ[РеквизитТЧ.Имя]; Сообщить("" + ТЧ.Имя + " рекв. " + РеквизитТЧ + " значен. " + ЗначениеРеквизита); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
38
LivingStar
17.12.05
✎
17:42
|
tsd круто ! Работает, непонятка в том что у меня куча материалов по 8.0 и нигде ничего подобного небыло, странно конечно, если я этого не знаю то где ж этого взять?!!
До следующего сеанса ! |
|||
39
NS
17.12.05
✎
17:51
|
(38) Чего не было? Что в разных ТЧ разные реквизиты не было?
|
|||
40
tsd
17.12.05
✎
18:02
|
(39) :))
|
|||
41
LivingStar
18.12.05
✎
14:36
|
а как получить тип реквизита табличной части?
ЗначРеквТч =СтрокаТч[РеквизитТч.Имя]; -вот это работает //ТипРеквТч =СтрокаТч[РеквизитТч.Тип]; -вот это не работает каким образом можно получить реквизит табличной части? |
|||
42
Zamestas
18.12.05
✎
14:42
|
(41) Запусти отладчик - многие вещи станут понятнее...
|
|||
43
Мутабор
18.12.05
✎
15:29
|
Я не пойму (0) это прог или опять по объявлению набрали?
|
|||
44
LivingStar
18.12.05
✎
15:35
|
43 уйди пожалуйста с ветки и не показывайся более с подобными фразами...
| 42 в отладчике все путем, у РеквизитТч есть и Тип и Имя, Тип с раскрывающимся ещё плюсом и класификаторами, как его вывести то? |
|||
45
Мутабор
18.12.05
✎
15:40
|
(44) Ну и что что раскрывается, вон на заборе много что написано и что теперь?
|
|||
46
Железяка
18.12.05
✎
15:51
|
(45)Вадим, у Вас есть что сказать по существу вопроса?
|
|||
47
Мутабор
18.12.05
✎
16:09
|
(46) По существу: как читать (38) "Работает, непонятка в том что у меня куча материалов по 8.0 и нигде ничего подобного небыло, странно конечно, если я этого не знаю то где ж этого взять?!!" и не удивляться? Я конечно понимаю что 8-ка сложная вещь, без понимания и работы ее не освоить, но нужно же хоть немного думать, а не задавть только непонятные вопросы типа: "подскажите пожалуйста как создать реквизиты документа в 8.0, я имею идентификатор документа, создаю его,после имею идентификаторы реквизитов документа, типы реквизитов документа, значения реквизитов документа, каким образом воссоздать значения документа по имеющейся информации ? После создания документа нужно ли его записывать, и как в Бухгалтерии производства 8.0 посмотреть новосозданный документ? "
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |