Имя: Пароль:
1C
1С v8
УФ Как найти строку таблицы по значению в колонке и сделать её текущей?
, ,
0 Тактик
 
18.09.13
11:41
УФ Как найти строку таблицы по значению в колонке и сделать её текущей?

НайтиСтроки( не работает.
в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.

Как его получить?
1 Тактик
 
18.09.13
11:44
Пытаюсь найти

СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
Элементы.ТаблцаНаФорме.НайтиСтроки(СтруктураДляПоиска);

А так пытаюсь обратиться к таблице

Элементы.ТаблицаНаФорме.ТекущаяСтрока = ИндексТекущейСтроки;
2 banco
 
18.09.13
11:44
(0) что значит НайтиСтроки() не работает?
3 Тактик
 
18.09.13
11:46
(2) НайтиСтроки( синтаксиспомощник не предлагает, а если пишешь вручную пишет ошибку.
4 Тактик
 
18.09.13
11:49
(2) Метод объекта не обнаружен (НайтиСтроки)
5 Defender aka LINN
 
18.09.13
11:51
(0) "в ТаблицаНаФорме.ТекущаяСтрока = полагается записать идентификатор строки.
Как его получить?" - ты не поверишь...
(3) "НайтиСтроки( синтаксиспомощник не предлагает, а если пишешь вручную пишет ошибку." - у работает. Что я делаю не так?
6 Defender aka LINN
 
18.09.13
11:51
+(5) Хотя у табличного поля реально нет такого метода, факт
7 Тактик
 
18.09.13
11:52
(5) напиши пожалуйста что ты пишешь до НайтиСтроки(
8 Тактик
 
18.09.13
11:53
(6) Это не табличное поле, а элемент формы типа "таблица".
9 Eugeneer
 
18.09.13
11:55
Очень легко

ТекущиеДанные = ЭлементыФормы.ГруппыНоменклатуры.ТекущиеДанные;

    НайденнаяСтрока = ДеревоНоменклатуры.Строки.Найти(ТекущиеДанные.Группа,"Номенклатура",Истина);
    
    ЭлементыФормы.ДеревоНоменклатуры.ТекущаяСтрока = НайденнаяСтрока;
10 banco
 
18.09.13
11:55
(8) а ПутьКДанным что у этого элемента?
11 banco
 
18.09.13
11:56
(9) у тебя пример из обычных форм
12 Тактик
 
18.09.13
11:57
"ЭлементыФормы" - это обычные формы, там я и сам знаю. Но на УФ это не работает.
13 Eugeneer
 
18.09.13
11:57
(11) ща управляемые дам
14 Тактик
 
18.09.13
11:57
(9) "ЭлементыФормы" - это обычные формы, там я и сам знаю. Но на УФ это не работает.
15 Defender aka LINN
 
18.09.13
11:58
(8) Чо ты меня лечишь? Я прекрасно вижу, что у тебя где прямо отсюда.
16 Тактик
 
18.09.13
11:59
(15) Я же писал - таблица на форме обработки. Управляемые формы. На УФ не может быть "таблицы значений"
17 olegves
 
18.09.13
12:00
(1) попробуй так:

СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
Объект.ИмяТабличнойЧасти.НайтиСтроки(СтруктураДляПоиска);
18 Тактик
 
18.09.13
12:01
(15) и табличного поля тоже...
19 Defender aka LINN
 
18.09.13
12:01
(18) О как.
*умчался за попкорном*
20 Eugeneer
 
18.09.13
12:02
Короче не могу найти старую версию обработки. В УТ11 есть типовой подбор, там пример.
При активации номенклатуры в окне с иерархией автоматом становится на родителя этой номенклатуры
21 Тактик
 
18.09.13
12:02
(17) Пробовал. Великолепно ищет строки в источнике. Но как эту строку потом связать с строкой в таблице на УФ.
22 Тактик
 
18.09.13
12:02
(20) Спасибо, буду смотреть.
23 Eugeneer
 
18.09.13
12:03
Вот из УТ11

Форма.Элементы.ИерархияНоменклатуры.ТекущаяСтрока = ТекущиеДанные.Родитель;
24 banco
 
18.09.13
12:03
(21) с этого и надо было начинать. ПолучитьИдентификатор()
25 Defender aka LINN
 
18.09.13
12:04
(21) ВОЗМОЖНО, только ВОЗМОЖНО стоит таки отлипнуть от Мисты и заглянуть в СП - а нет ли там СЛУЧАЙНО каких-нибудь методов, связанных с идентификаторами?
26 Тактик
 
18.09.13
12:05
(24) Будь добр, напиши пожалуйста к чему относится ПолучитьИдентификатор()

В строке найденной в источнике нет такого метода.
27 Тактик
 
18.09.13
12:05
(25) я смотрел. увы, примеров кода нет, к чему этот идентификатор относится тоже не понятно
28 Eugeneer
 
18.09.13
12:06
(21) найти строки возвращает массив строк.
Ты не можешь массив назначить на текСтроку. это уже разные типы.

ТекущаяСтрока =
значение должно быть равно тоже именно строке. Одной строке.

Либо тогда тебе еще надо массив обойти 7 в нем уже будет тип конертной строки. целой.
29 Defender aka LINN
 
18.09.13
12:06
(26) Да у тебя и у таблицы метода нет...
30 olegves
 
18.09.13
12:08
(21)
ТаблицаФормы (FormTable)
ДанныеСтроки (RowData)
Синтаксис:

ДанныеСтроки(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: Произвольный.
Строка таблицы, данные которой необходимо получить. Тип параметра зависит от типа редактируемого значения.
Возвращаемое значение:

Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементДерева; ДанныеФормыЭлементКоллекции.
Для таблиц, связанных с разными типами данных, тип возращаемого значения данного метода может различаться:
Для динамического списка тип свойства - ДанныеФормыСтруктура;
Для дерева значений - ДанныеФормыЭлементДерева;
Для остальных (таблица значений, табличные части и др.) - ДанныеФормыЭлементКоллекции.
Описание:

Возвращает значение, содержащее данные указанной строки.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.

Из данных строки получить идентификатор
31 Eugeneer
 
18.09.13
12:08
Короче все есть. У меня обработка была полностью рабочая. Но я потом все переделал и это вообще исчезло.
32 Тактик
 
18.09.13
12:09
(29) Да, увы. У реквизита типа таблица на управляемой форме, источником которой является запрос или таб.часть документа, метода НайтиСтроки( почему-то нет, и именно в этом проблема.

буду благодарен если поможете мне его найти.
33 Тактик
 
18.09.13
12:11
(30) Спмсибо, откуда растет идентификатор понятно.
Осталось разобраться как найти строку
34 banco
 
18.09.13
12:11
(32) ты путаешь реквизит формы с элементом формы
35 Тактик
 
18.09.13
12:13
(34) Виноват, действительно. Речь идет об элементе формы... может сделать его реквизитом?
36 banco
 
18.09.13
12:16
(35) подожди, у тебя на форме есть таблица, какой источник(ПутьКДанным) у этой таблицы?
37 Eugeneer
 
18.09.13
12:17
Сделай таблицу - табличной частью самой обработки. реквизитом объекта.
38 Eugeneer
 
18.09.13
12:18
если у тебя ТЗ не является реквизитом объекта а добавлена как реквизит формы - ты действительно по ней хрен чо сделаешь.
39 Defender aka LINN
 
18.09.13
12:19
(38) Маня, если ты не знаешь нифига про управляемые формы - нефиг пытаться других чему-то "учить"
40 Eugeneer
 
18.09.13
12:21
(39) я вижу что ты пока ничего не знаешь раз нет результата. А он у меня есть. Я с первого дня выхода УТ11 уже писал обработки.
41 banco
 
18.09.13
12:22
(40) но в (38) ты не прав
42 olegves
 
18.09.13
12:23
(33)
СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
нс = Объект.ИмяТабличнойЧасти.НайтиСтроки(СтруктураДляПоиска);
ИДстроки = Элементы.ИмяТЧ.ДанныеСтроки(нс[0]).ПолучитьИдентификатор();
43 olegves
 
18.09.13
12:24
+ (42) дальше сообразишь?
44 Eugeneer
 
18.09.13
12:26
(41) абсолютно прав.
45 Defender aka LINN
 
18.09.13
12:26
(40) Маня, ты кретин, не?
46 Eugeneer
 
18.09.13
12:27
(42) даже подтверждает это.
Как мы видим Объект.ИмятабличнойЧасти это и есть табличная часть объекта. а не ТЗ добавленная как элемент формы.
47 Eugeneer
 
18.09.13
12:27
(45) иди нах. с неучами не о чем говорить.
48 banco
 
18.09.13
12:28
(46) если будет ТЗ как реквизит формы, тогда просто надо писать имяТЗ.НайтиСтроки()
49 Eugeneer
 
18.09.13
12:35
(0) короче не ипите мосх.
Вот из синтаксиса в самой типовой


Запрос = Новый Запрос;
ТекстЗапроса =
    "ВЫБРАТЬ
    // текст запроса
    // ...
    ";
Запрос.Текст = ТекстЗапроса;
СписокРаботников = Запрос.Выполнить().Выгрузить();
Отбор = Новый Структура();
Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());
Строки = СписокРаботников.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
    ЭлементыФормы.СписокРаботников.ТекущаяСтрока = Строки[0];
КонецЕсли;
50 olegves
 
18.09.13
12:36
(46) не совсем так, это ТаблицаФормы, а чтобы она стала ТЧ, надо выполнить РеквизитФормыВЗначение()
51 Infsams654
 
18.09.13
12:38
(49) какие ЭлементыФормы в УФ ?
52 Тактик
 
18.09.13
13:11
УРА! Заработало!

Всем огромное спасибо за помощь. Никто не дал готового решения, но все понемногу подсказали и пазл сложился.

Как сделал:

1. На форму добавил реквизит типа "ТаблицаЗначений" (не элемент формы, а именно реквизит), в нем создал необходимые колонки.

2. Запросом заполнил полученный реквизит (РезультатЗапроса.Выгрузить())

3. Нашел строку содержащую значение в нужной колонке
СтруктураДляПоиска = Новый Структура;
СтруктураДляПоиска.Вставить("КлючСвязи", КлючСвязи);
МассивСтрок = ТаблицаКакРеквизитФормы.НайтиСтроки(СтруктураДляПоиска);

4. Установил текущую строку по индексу.            Элементы.ТаблицаНаФорме.ТекущаяСтрока = МассивСтрок[0].ПолучитьИдентификатор();

Вывод: ЭлементыФормы только для отображения данных, если нужно сделать что-то еще используйте реквизиты формы.
53 Мимохожий Однако
 
18.09.13
13:12
(52)Молодца.
54 Тактик
 
18.09.13
13:12
В догонку пункт 1.1. - выложил этот реквизит на форму.
55 Тактик
 
18.09.13
13:13
Реквизит переименовал в ТаблицаНаФорме
56 Eugeneer
 
18.09.13
13:26
(52) ну а я о чем говорил?
Тебе просто оставалось сделать Элементы
и к строке дописать .ПолучитьИдентификатор();
57 Defender aka LINN
 
18.09.13
13:32
(47) Это ты про себя, что ли?
58 Odavid
 
18.09.13
13:44
(45), (47), (57) 1С над вами издевнулась - заставила пергонять впустую туда-сюда бесполезную инфо, что вызывает недопонимание процессов и логики, а вы и рады собачится )))