Получить значение реквизита из табличной части документа |
Я |
05.06.18 — 01:37
Доброй ночи, подскажите пожалуйста.
Получить значение не из табличной части Документ[реквизит.имя], а как например, если есть табличная часть «тест» со своими реквизитами ?
1 — 05.06.18 — 03:18
(0) Документ[табличнаячасть.имя][0][реквизит.имя]
это если из первой строки табличной части
Если например 100-я строка табличной части, то
Документ[табличнаячасть.имя][99][реквизит.имя]
2 — 05.06.18 — 12:25
(1) А можно еще вопрос, получается если хочу обойти все данные из документа, мне надо обойти все его реквизиты, а также все реквизиты табличной части и получается все её строки ?
Немного не понимаю этих моментов. Задача была вывести документ в текстовый формат(csv, txt) с помощью метаданных (только вот документ любой).
3 — 05.06.18 — 12:28
(2) ну конечно в текстовый файл ты все строки должен добавить. Это не обсуждается.
4 — 05.06.18 — 12:29
(2) используй Для Каждого…
5 — 05.06.18 — 12:31
(3) (4) ДокументДляВыгрузкиСсылка = ЭтаФорма.ЭлементыФормы.ДокументСсылка.Значение.Ссылка;
РеквизитыДокумента = ДокументДляВыгрузкиСсылка.Метаданные().Реквизиты;
Текст = Новый ТекстовыйДокумент;
Для Каждого РеквизитДокумента Из РеквизитыДокумента Цикл
Текст.ДобавитьСтроку(«» + РеквизитДокумента.Имя + «:» + ДокументДляВыгрузкиСсылка[РеквизитДокумента.Имя] );
КонецЦикла;
ТЧДокумента = ДокументДляВыгрузкиСсылка.Метаданные().ТабличныеЧасти;
Для Каждого ТекТЧДокумента Из ТЧДокумента Цикл
СсылкаТЧ = ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя];
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + ???СсылкаТЧ[0].[строкаТЧ.Имя]??????);
КонецЦикла;
КонецЦикла;
Текст.Записать(ИмяФайла);
Я это сделал, вот теперь вопрос как проверить сколько строк в табличной части или я что-то не поянл
6 — 05.06.18 — 12:37
См (4):
Для каждого ТекСтрока Из ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя] Цикл
7 — 05.06.18 — 12:38
(5)
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Для Каждого СтрокаТЧ ИЗ СсылкаТЧ Цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + СтрокаТЧ[строкаТЧ.Имя]);
Как-то так
8 — 05.06.18 — 12:38
Для каждого стр Из СсылкаТЧ цикл
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + стр[строкаТЧ.Имя]);
КонецЦикла;
КонецЦикла;
9 — 05.06.18 — 12:38
(7) ох, блин. Не читай (7)
10 — 05.06.18 — 12:38
еще номер строки тч надо по идее
11 — 05.06.18 — 12:42
(10) (6) (9) Спасибо большое, постараюсь разобраться. Меньше недели в 1С, до этого опыт был с другими языками. Уже и 1С разонравился, но просто «спортивный интерес» закончить начатое.
12 — 05.06.18 — 12:53
(10) ТЧДокумента = ДокументДляВыгрузкиСсылка.Метаданные().ТабличныеЧасти;
Для Каждого ТекТЧДокумента Из ТЧДокумента Цикл
СсылкаТЧ = ДокументДляВыгрузкиСсылка[ТекТЧДокумента.Имя];
Для каждого стр Из СсылкаТЧ цикл
Для каждого строкаТЧ Из ТекТЧДокумента.Реквизиты цикл
Текст.ДобавитьСтроку(«» + строкаТЧ.Имя + «:» + стр[строкаТЧ.Имя]);
КонецЦикла;
КонецЦикла;
КонецЦикла;
Сделал так, теперь читает только реквизиты документа, а в табличной части не читает.
Что — то не так пошло
13 — 05.06.18 — 12:56
(11) «1С разонравился»
Зря вы это написали )
14 — 05.06.18 — 13:03
(13) Да не привычно все как-то, задание дали сразу такое, поэтому кроме негатива пока ничего нет, может когда результат будет изменю свое мнение
15 — 05.06.18 — 13:48
(14) Кроме 1С есть опыт с языками программирования?
16 — 05.06.18 — 13:52
(15) C#, js, C++
1Сергей
17 — 05.06.18 — 14:09
(16) тогда будешь плеваться на 1С. Это неизбежно
Получить значение реквизита табличной части
Автор Дима Сацкевич, 01 сен 2018, 18:08
0 Пользователей и 2 гостей просматривают эту тему.
У меня есть документ в которой есть табличная часть, в свою очередь состоящая из реквизитов
Как получить значение реквизита? Наверное очень простой вопрос, но никак не получается, извиняюсь.
Я еще пытался выгрузить всю табличную часть в таблицу значений и там уже через методы ТЗ получить значение колонок, но выгрузить тоже как-то не получилось.
Сейчас имею вот такой код, с помощью которого получаю имя реквизита, а вот как значение получить?:
Для каждого Инд из ВыборДокумента.ПолучитьОбъект().Метаданные().ТабличныеЧасти Цикл
Для каждого Стр из Инд.Реквизиты цикл
Сообщить(Стр);
КонецЦикла;
КонецЦикла;
ВыборДокумента — это поле выбора, где выбирается любой документ из БД
А так у меня задача стоит выгрузить табличную часть в .txt, вот поэтому нужно значение получить, насколько я понял
Цитата: Дима Сацкевич от 01 сен 2018, 18:08Сейчас имею вот такой код, с помощью которого получаю имя реквизита, а вот как значение получить?:
Для каждого Инд из ВыборДокумента.ПолучитьОбъект().Метаданные().ТабличныеЧасти Цикл
Глупость
Никогда так не делай.
Об = ВыборДокумента.ПолучитьОбъект();
Мт = Об.Метаданные();
Для каждого Инд из Мт.ТабличныеЧасти Цикл
Для каждого Стр из Инд.Реквизиты цикл
ЗнТ = Об[Инд.Имя];
Сообщить(ЗнТ);
Для Каждого СтрокаЗнТ из ЗнТ Цикл
Зн = СтрокаЗнТ[Стр.Имя];
Сообщить(Зн);
КонецЦикла;
КонецЦикла;
КонецЦикла;
Запросом получай ТЧ…
Отправлено с моего Redmi Note 3 через Tapatalk
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Пользователям 1С Предприятие 8 -
►
Получить значение реквизита табличной части
Похожие темы (5)
Поиск
Как получить доступ к реквизитам формы?
Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы, который содержит коллекцию элементов формы, сканируя ее в цикле:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент); КонецЦикла;
Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.
Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.
Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:
Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Сообщить(Элемент.Имя); Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Сообщить(" Это табличное поле! " + Элемент.Имя ); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Колонка.Имя; Сообщить(ИмяКолонки); КонецЦикла; КонецЕсли; КонецЦикла;
Как получить значение отдельного реквизита формы?
Чаще требуется получать не массив реквизитов формы, а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.
Пример:
ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Поставщик = ФормаОбъекта.ЭлементыФормы.Поставщик; Поставщик = ФормаОбъекта.ЭлементыФормы.Получатель; Сообщить(ФормаОбъекта.ЭлементыФормы.ТаблПоле.Колонки.Количество());
Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.
Как получить значение элементов табличной части формы?
Доступ к табличной части формы через объект
Доступ к табличной части формы (например: Товары) можно получить через объект:
ДокОбъект = Док.ПолучитьОбъект(); //здесь Док - ссылка на объект //просканируем построчно таб часть документа Для Каждого Стр из ДокОбъект.Товары Цикл Номенклатура = Стр.Номенклатура; Стр.Коэффициент = 1; КонецЦикла;
Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:
Номенклатура = Стр.Номенклатура;
Доступ к табличной части формы через ЭлементыФормы
Табличная часть объекта и табличная часть формы объекта — это не одно и то же!
Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.
То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы:
Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму(); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда //элемент формы - табличное поле Если Элемент.Имя = "Товары" Тогда Сообщить("Это табличное поле!! " + Элемент.Имя ); //ТабПоле = ФормаОбъекта.ЭлементыФормы.Товары.Значение; ТабПоле = Элемент.Значение; Колво = ТабПоле.Количество(); Сообщить("Количество строк: " + Колво); Для Каждого ТекущаяСтрока Из ТабПоле Цикл Имя = ТекущаяСтрока.Номенклатура; Сообщить(Имя); КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки
Если надо получить значение всех колонок всех строк, то организуем дважды вложенный цикл:
Во внешнем цикле сканируются строки, во внутреннем — колонки:
ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок); ДокОбъект = ДокСсылка.ПолучитьОбъект(); ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента"); Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда Если Элемент.Имя = "ВыданныеАвансы" Тогда //таб часть объекта Сообщить(" Это табличное поле!! " + Элемент.Имя ); ТабПоле = Элемент.Значение; Индекс = 0; Для Каждого ТекущаяСтрока Из ТабПоле Цикл Сообщить("======================="); Для Каждого Колонка Из Элемент.Колонки Цикл ИмяКолонки = Строка(Колонка.Имя); Сообщить(ИмяКолонки); Имя = ТекущаяСтрока[ИмяКолонки];//сработает только если есть такое поле таб части объекта Сообщить("=== " + Имя); КонецЦикла; Индекс = Индекс + 1; Если Индекс > 0 Тогда break КонецЕсли; //только первая строка КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла;
Результат для документа Авансовый отчет:
Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174
Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
1 |
||||
Получить данные из табличной части документа, как?10.05.2016, 10:24. Показов 44186. Ответов 10 Метки нет (Все метки)
Доброго времени суток!
0 |
SpiRUS 11 / 11 / 5 Регистрация: 23.06.2015 Сообщений: 74 |
||||||||
10.05.2016, 10:44 |
2 |
|||||||
Если имеется в виду получить количество позиций в табличной части «Товары», то
А если сообщить значение каждой строки из колонки «количество» то
1 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 11:47 [ТС] |
3 |
|||
Ссылка на документ — как правильно получить?
Товары — это табличная часть бокумента, может я как то не так ссылаюсь на эту таб. часть?
0 |
SpiRUS 11 / 11 / 5 Регистрация: 23.06.2015 Сообщений: 74 |
||||
10.05.2016, 12:01 |
4 |
|||
Ссылка на документ — как правильно получить? Способов то много. Можно запросом, можно на форму вынести поле ввода. Можно просто:
0 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||||||
10.05.2016, 13:51 [ТС] |
5 |
|||||||
нет как мне обратиться к табличной части документа?
так получается.//сделал для проверки.
— не получается!
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||
10.05.2016, 14:24 |
6 |
|||
РешениеGranfury, Количество — это реквизит табличной части Товары? Надо получать конкретную строку тогда: обходить циклом, по индексу(если заранее знаете количество строк ТЧ):
2 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 15:32 [ТС] |
7 |
|||
GreenkA, Спасибо! Добавлено через 56 минут
Результат:
0 |
GreenkA 3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
||||||||
10.05.2016, 15:38 |
8 |
|||||||
Granfury, можно конечно обойти табличную часть и
или сразу:
0 |
Granfury 9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
||||
10.05.2016, 18:38 [ТС] |
9 |
|||
GreenkA, «Поле обьекта не обнаружено «ПриказНаОтгрузку»»
Что не так?
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
10.05.2016, 18:40 |
10 |
Granfury, а что содержится в Ссылка? Вы же уже делали вывод Количества и все было нормально, что изменили?
1 |
9 / 9 / 5 Регистрация: 22.04.2015 Сообщений: 305 |
|
11.05.2016, 13:03 [ТС] |
11 |
пытаюсь разобраться Добавлено через 18 часов 7 минут
0 |
0
Как определить какие реквизиты имеются в табличной части документа
ПоступлениеТовара = Метаданные.Документы.ПоступлениеТовара;
Реквизиты = ПоступлениеТовара.ТабличныеЧасти.Товары.Реквизиты;
Для каждого наим из Реквизиты Цикл
Сообщить("Имя реквизита " + наим.Имя +
"; тип реквизита " + наим.Тип);
КонецЦикла;
// Результат:
// Имя реквизита Наименование; тип реквизита Справочник ссылка: Номенклатура
// Имя реквизита Количество; тип реквизита Число
// Имя реквизита Цена; тип реквизита Число
// Имя реквизита Сумма; тип реквизита Число
-
09.06.2019, 15:59
#1
Гость форума
Получение значения реквизита табличной части. 1С:Предприятие 8.3
Здравствуйте! Подскажите, пожалуйста, как получить значение реквизита табличной части (в справочнике)? У меня есть таб.часть «Образование», в ней есть реквизит «ВидОбразования» (ссылается на перечисление видов образования). Как получить значение данного реквизита?
-
06.07.2019, 20:53
#2
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 20:59
#3
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выр узить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:02
#4
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попытка 3. Расширенный режим. Почему сообщения так корежит?
Какая-то ерунда с сообщением — половина стерлась через несколько минут.
И как отредактировать не понимаю…Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:// Пусть СсылкаНаТЗ это ссылка на владельца ТЧ Образование
ТаблОбразование = СсылкаНаТЗ.Образование.Выг рузить(); // это таблица значений
Для Каждого Обр из ТаблОбразование Цикл
Сообщить(Обр.ВидОбразовани я);
КонецЦикла;// Или
Номер = 0;
Пока Номер < ТаблОбразование.Количеств� �() Цикл
Сообщить(ТаблОбразование[Номер].ВидОбразования);
Номер = Номер + 1;
КонецЦикла;
-
06.07.2019, 21:05
#5
Гость форума
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Попробую картинкой
Screenshot_1.jpg
-
09.07.2019, 11:44
#6
Гордость форума PRO
Re: Получение значения реквизита табличной части. 1С:Предприятие 8.3
Сообщение от iLex
Не силен в 1С, но вижу, что за месяц не ответил никто. Если правильно понял, то:
Получить табличную часть можно так:Никто не ответил потому как вопрос дурацкий.
табличная часть она потому и табличная, что в ней (по умолчанию) много в строк и в каждой строке значение данного реквизита возможно разное.
если знаешь номер строки (например первая) то обращение будет Образование[0].ВидОбразования
Как получить имя реквизита табличной части?
Как получить имя реквизита табличной части, а именно выбранной колонки.
Задача обойти все элементы табличной части по определенному реквизиту.
UPD #1 — Перефразировал
Как получить ИМЯ реквизита колонки ТЧ находясь в ячейке ТЧ.
-
Вопрос заданболее трёх лет назад
-
2067 просмотров
Пригласить эксперта
Ответ зависит от варианта разрабатываемого интерфейса.
Обычный интерфейс:
Элемент формы связанный с табличной частью «ТаблицаДанных» — ЭлементыФормы.ТаблицаДанных
Текущая колонка — ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка
Имя реквизита формы для колонки — ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка.Имя
Имя реквизита табличной части, который связан с колонкой — ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка.Данные
Управляемый интерфейс
Элемент формы связанный с табличной частью «ТаблицаДанных» — Элементы.ТаблицаДанных
Текущая колонка — Элементы.ТаблицаДанных.ТекущийЭлемент
Имя реквизита формы для колонки — Элементы.ТаблицаДанных.ТекущийЭлемент.Имя
Имя реквизита табличной части, который связан с колонкой — Элементы.ТаблицаДанных.ТекущийЭлемент.ПутьКДанным (доступно только на сервере)
Это можно сделать запросом. Другой вариант — обойти в цикле.
-
Показать ещё
Загружается…
23 мар. 2023, в 12:27
1500 руб./в час
23 мар. 2023, в 12:26
5000 руб./за проект
23 мар. 2023, в 12:15
10000 руб./за проект