Как проверить наличие колонки в ТЧ документа? |
Я |
13.12.10 — 07:29
Как проверить наличие определенной колонки в ТЧ документа? Используя саму ТЧ, без ссылки на документ.
1 — 13.12.10 — 07:31
Через метаданные. Или выгрузить структуру в ТЗ и посмотреть в ней.
2 — 13.12.10 — 07:33
еще можно через элементы формы. что-нибудь типа
Если ЭтаФорма.ЭлементыФормы.ТабличнаяЧасть.Колонки.Найти(«НужнаяКолонка») = Неопределено Тогда
Сообщить(«Все плохо»);
КонецЕсли;
3 — 13.12.10 — 07:33
(1) Как через метаданные?
4 — 13.12.10 — 07:38
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт
ТабЧасть = МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти);
Если ТабЧасть = Неопределено Тогда // Нет такой таб. части в документе
Возврат Ложь;
Иначе
Возврат НЕ (ТабЧасть.Реквизиты.Найти(ИмяРеквизита) = Неопределено);
КонецЕсли;
КонецФункции
5 — 13.12.10 — 07:40
+(4) Метаданные взять методом Метаданные() у объекта или ссылки, взято из типовой
6 — 13.12.10 — 07:41
(4) у меня есть только сама ТЧ, как по ней получить метаданные документа и имя ТЧ?
7 — 13.12.10 — 07:43
+6 такой код я бы и в типовой подглядел.
8 — 13.12.10 — 07:44
(6)В каком модуле происходят эти танцы с бубном?
9 — 13.12.10 — 07:45
(8) в общем, а какая разница?
10 — 13.12.10 — 07:49
(9)Да вобщем то большая. Было бы в модуле объекта или формы было бы проще.
известная ТЧ — это таб часть документа или таб . поле на форме?
11 — 13.12.10 — 07:52
(6) Если тебе надо строго БЕЗ ССЫЛКИ, то
ТЗ = ТЧ.ВыгрузитьКолонки();
ЕстьКолонка = ЗначениеЗаполнено(ТЗ.Колонки.Найти(ИмяКолонки));
12 — 13.12.10 — 07:52
(10) ТЧ это ТЧ
13 — 13.12.10 — 07:56
(12)Аха. Только в модулях объекта она нафиг бы не нужна была.
ЭтотОбъект.Метаданные() +(4)
14 — 13.12.10 — 07:57
Вернее нужна но подругому:)
15 — 13.12.10 — 07:59
(13) Прозреваю: (0) пишет какую-то универсальную обработку, которая перебирает все документы в базе. Правда что мешает при этом получить ссылку — нипанятна.
16 — 13.12.10 — 08:01
(15) ссылку ладно, как получить имя ТЧ?
17 — 13.12.10 — 08:05
(15) нифига не прозреваешь. В типовой процедура в общем модуле, передается ссылка на документ и ТЧ. Мне надо проверить наличие колонок в ТЧ.
18 — 13.12.10 — 08:08
(17) Так ссылка-то передается… Или я чего-то не понимаю?
19 — 13.12.10 — 08:09
+(18) И нафига вообще имя ТЧ? Дайте кода уже.
20 — 13.12.10 — 08:11
(18) передается, но как получить имя ТЧ?
21 — 13.12.10 — 08:11
(19) имя ТЧ для
МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти);
22 — 13.12.10 — 08:16
(21) Опс… Да, действительно. Вот всегда такое с метаданными :/
23 — 13.12.10 — 08:18
ну если немного извратиться то можно так:
строчка=СтрЗаменить(Строка(ТЧ),»ДокументТабличнаяЧасть.»,»»);
ТочкаМесто=Найти(строчка,».»);
дл=СтрДлина(строчка);
ИмяТабЧасти=Прав(строчка,(дл-ТочкаМесто));
Сообщить(ИмяТабЧасти);
24 — 13.12.10 — 08:21
Придется выгружать в ТЗ, спасибо за помощь.
Тему можно закрыть.
TankerM
25 — 13.12.10 — 08:55
А перебрать все табличные части документа, каждую сравнить с неизвестной ТЧ и таким образом установить ее имя?
Выполняет поиск колонки таблицы значений по имени.
Синтаксис
Метод Найти()
имеет следующий синтаксис:
КолонкаТаблицыЗначений Найти(ИмяКолонки)
А также альтернативный англоязычный синтаксис:
ValueTableColumn Find(ColumnName)
Параметры
Описание параметров метода Найти()
:
Имя параметра* | Тип | Описание |
---|---|---|
ИмяКолонки | Строка | Наименование колонки таблицы значений. |
*Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
КолонкаТаблицыЗначений
или Неопределено
Описание
Метод Найти()
выполняет поиск колонки в коллекции колонок по имени. Если указанная колонка существует, метод возвращает ее в точку вызова. Если колонка не найдена, возвращает Неопределено
.
Доступность
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример использования
Пример кода с использованием метода Найти()
:
Колонка = тз.Колонки.Найти("Комментарий"); Если НЕ Колонка = Неопределено Тогда тз.Колонки.Удалить(Колонка); КонецЕсли;
Читайте также:
- Таблица значений 1с. Описание и примеры использования
Поделиться страницей в соц.сетях
См. также Таблица значений в языке 1С 8 (в примерах)
Таб = Новый ТаблицаЗначений; Таб.Колонки.Добавить("Фрукт"); Таб.Колонки.Добавить("Цвет"); Таб.Колонки.Добавить("Вкус"); Если Таб.Колонки.Найти("Цвет") <> Неопределено Тогда Сообщить("Колонка Цвет существует."); КонецЕсли;
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Сижу думаю, не могу вспомнить и найти. Есть ли наиболее простой метод буквально в одну строку, чтобы проверить есть ли колонка в ТЧ документа или нет? Есть имя колонки «Номенклатура», Есть ссылка на документы и имя табличной части Документы и ТЧ могут меняться, а искать надо всегда номенклатуру. Не выгружать же колонки и искать имя? Как-то можно проще
через ДокументСсылка.Метаданные.ТабличныеЧасти?
ЕстьКолонка = ДокументСсылка.Метаданные.ТабличныеЧасти[«Товары»].Реквизиты.Найти(«Номенклатура») <> Неопределено;
ЕстьРеквизитТабличнойЧасти по моему так называется процедура.
да, спасибо, я уж так сделал проверю
Тэги:
Комментарии доступны только авторизированным пользователям
Опубликовано 9 ноября, 2021
УФ Как найти строку таблицы по значению в колонке и сделать её текущей?
УФ Как найти строку таблицы по значению в колонке и сделать её текущей?
НайтиСтроки( не работает.
в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.
Как его получить?
(21) найти строки возвращает массив строк.
Ты не можешь массив назначить на текСтроку. это уже разные типы.
ТекущаяСтрока =
значение должно быть равно тоже именно строке. Одной строке.
Либо тогда тебе еще надо массив обойти 7 в нем уже будет тип конертной строки. целой.
(21)
ТаблицаФормы (FormTable)
ДанныеСтроки (RowData)
Синтаксис:
Тип: Произвольный.
Строка таблицы, данные которой необходимо получить. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:
Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементДерева; ДанныеФормыЭлементКоллекции.
Для таблиц, связанных с разными типами данных, тип возращаемого значения данного метода может различаться:
Для остальных (таблица значений, табличные части и др.) — ДанныеФормыЭлементКоллекции.
Описание:
Возвращает значение, содержащее данные указанной строки.
Тонкий клиент, веб-клиент, толстый клиент.
Из данных строки получить идентификатор
(29) Да, увы. У реквизита типа таблица на управляемой форме, источником которой является запрос или таб.часть документа, метода НайтиСтроки( почему-то нет, и именно в этом проблема.
буду благодарен если поможете мне его найти.
Источник
Помогите найти колонку табличного поля по ее имени.
Заполнил колонки ТП реквизитами документа, теперь перебираю метаданные.реквизиты этого документа и хочу заполнить эти колонки строками с данными из документа. не могу сообразить как найти нужную колонку которая бы соответствовала текущему реквизиту документа.
Процедура Документ()
Выборка= БазаИсточник.Документы.РеализацияТоваровУслуг.Выбрать(ДатаНач,ДатаКон);
МедаданОле= БазаИсточник.Метаданные.Документы.РеализацияТоваровУслуг;
ТабОбщая = Новый ТаблицаЗначений;
ТабОбщаяТЧ = Новый ТаблицаЗначений;
метадан = Метаданные.Документы.РеализацияТоваровУслуг;
// вывести реквизиты
Для Каждого РеквДок из метадан.Реквизиты Цикл
ТабОбщая.Колонки.Добавить(РеквДок.Имя, Новый ОписаниеТипов(«Строка»));
КонецЦикла;
// вывести ТЧ
Для Каждого РеквДокТЧ из метадан.ТабличныеЧасти Цикл
ТабОбщаяТЧ.Колонки.Добавить(РеквДокТЧ.Имя, Новый ОписаниеТипов(«Строка»));
КонецЦикла;
Пока Выборка.Следующий() Цикл
Для Каждого РеквДок из МедаданОле.Реквизиты Цикл
//ТУТ ЗАПУТАЛСЯ+++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++
ТекКолонка = ТабОбщая.Колонки.Найти(РеквДок);
НоваяСтрока = ТабОбщая.Добавить();
НоваяСтрока.ТекущаяКолонка = Выборка.РеквДок;
//ТУТ ЗАПУТАЛСЯ+++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
КонецЦикла;
КонецЦикла;
ТпДоки = ТабОбщая;
ТпДокиТЧ = ТабОбщаяТЧ;
ЭлементыФормы.ТпДоки.СоздатьКолонки();
ЭлементыФормы.ТпДокиТЧ.СоздатьКолонки();
Источник