Имя: Пароль:
1C
 
перебор табличной части документа в 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 посмотреть новосозданный документ? "
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.