Помощь - Поиск - Пользователи - Календарь
Полная версия: Получение индекса текущей строки в Табличном поле
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
Князь Игорь
Доброго времени суток! Возникла проблема с определением индекса текущей строки в Табличном поле. С таблицей значений все просто:

Код

ТЗ = Новый ТаблицаЗначений;
ТЗ.Индекс(ЭлементыФормы.ТабличноеПоле.ТекущаяСтрока);



Однако у Табличного поля отсутствует метод Индекс.
Код
ТабличноеПоле.Индекс(...


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

Теперь вторая часть вопроса. Что требуется передать методу Добавить() в качестве параметра, если мы хотим выделить строки во втором Табличном поле соответствующие по индексу строкам в первом Табличном поле? Код ниже не работает:
Код
ЭлементыФормы.ТабличноеПоле2.ВыделенныеСтроки.Добавить(ТекущаяСтрока);


А хочется получить следующее: при активации любой ячейки в первом Табличном поле происходит выделение строки во втором Табличном поле, имеющей индекс равный индексу текущей строки в первом Табличном поле. Ситуация приведена на картинке:
Изображение
BabySG
0. Давайте договоримся, что ОДНА тема ОДИН вопрос.
1. ЭлементыФормы.<ТабличноеПоле>.Значение
2. Передавайте туда ссылку на строку, и расскажите, что такое ТекущаяСтрока в вашей строчке кода
Князь Игорь
0. Собственно один вопрос, входит в состав другого.
1 и 2. Табличные поля верхнее и нижнее привязал к одной Табличной части справочника. Только в верхней и нижней показываю различные колонки. При активизации строки Табличного поля верхнего происходит вот такая обработка события:
Код
	ТаблицаНижняя = ЭлементыФормы.табНижняя;
ТаблицаВерхняя = ЭлементыФормы.табВерхняя;
ТаблицаНижняя.ВыделенныеСтроки.Очистить();
ТаблицаНижняя.Значение = ТаблицаВерхняя.ТекущаяСтрока;

В результате ТаблицаНижняя просто очищается. Результат не меняется даже если закоментрировать строку:
Код
	ТаблицаНижняя.ВыделенныеСтроки.Очистить();

Текущая строка в коде это результат вот такой конструкции:
Код
ЭлементыФормы.<ТабличноеПоле>.ТекущаяСтрока
BabySG
Код
ТаблицаНижняя.Значение = ТаблицаВерхняя.ТекущаяСтрока;


Вот это и очищает.
Князь Игорь
Цитата(BabySG @ 5.7.2008, 17:41) *

0. Давайте договоримся, что ОДНА тема ОДИН вопрос.
1. ЭлементыФормы.<ТабличноеПоле>.Значение
2. Передавайте туда ссылку на строку, и расскажите, что такое ТекущаяСтрока в вашей строчке кода


Сделал как сказано. А к получению индекса текущей строки меня это не приблизило.
BabySG
Код
ЭлементыФормы.<ТабличноеПоле>.Значение

Посмотри отладчиком тип и все станет ясно
Князь Игорь
Доброго времени суток! Несколько дней не было интернета. За это время я решил проблему, способом описанным ниже. А пока отвечу на предыдущий пост.
Код
ЭлементыФормы.<ТабличноеПоле>.Значение

Содержит ссылку на Таблицу значений которая указана в
Код
ЭлементыФормы.<ТабличноеПоле>.Данные

В моем случае это:
СправочникТабличнаяЧасть.<МойСправочник>.<ТабличнаяЧастьСправочника>
И опять меня это не приблизило к желаемой ситуации:
Цитата
при активации любой ячейки в первом Табличном поле происходит выделение строки во втором Табличном поле, имеющей индекс равный индексу текущей строки в первом Табличном поле.


Заострю внимание на паре моментов:
  1. МояТаблицаЗначений - это Табличная часть справочника. Часть ее колонок выводится в верхнюю таблицу, а часть в нижнюю, поэтому я использую СправочникОбъект.МояТаблицаЗначений в обоих событиях и для нижнего и для верхнего Табличного поля. Однако возможно использование различных Табличных частей справочника, но в этом случае необходимо контролировать количество строк в обоих таблицах - они должны быть равны.
  2. Колонка "НомерСтроки" создается автоматически имеет имя "НомерСтроки" и синоним "N".

А решил я это следующим способом (без получения индекса строки):

Код
// Выделение строки по индексу.
Процедура табВерхняяПриАктивизацииСтроки(Элемент)
ТаблицаНижняя = ЭлементыФормы.табНижняя;
ТаблицаВерхняя = ЭлементыФормы.табВерхняя;

// Выделяем всегда по одной строке, а значит среди выделенных она под индексом ноль
ТекСтрока = ТаблицаВерхняя.ВыделенныеСтроки[0];
// В другом Табличном поле очистили выделение
ТаблицаНижняя.ВыделенныеСтроки.Очистить();
ТаблицаНижняя.ВыделенныеСтроки.Добавить(СправочникОбъект.МояТаблицаЗначений[Число(ТекСтрока["НомерСтроки"]) - 1]);
ТаблицаНижняя.ТекущаяСтрока = ТаблицаВерхняя.ВыделенныеСтроки[0];
КонецПроцедуры

Процедура табНижняяПриАктивизацииСтроки(Элемент)
ТаблицаНижняя = ЭлементыФормы.табНижняя;
ТаблицаВерхняя = ЭлементыФормы.табВерхняя;

// Выделяем всегда по одной строке, а значит среди выделенных она под индексом ноль
ТекСтрока = ТаблицаНижняя.ВыделенныеСтроки[0];
// В другом Табличном поле очистили выделение
ТаблицаВерхняя.ВыделенныеСтроки.Очистить();
ТаблицаВерхняя.ВыделенныеСтроки.Добавить(СправочникОбъект.МояТаблицаЗначений[Число(ТекСтрока["НомерСтроки"]) - 1]);
ТаблицаВерхняя.ТекущаяСтрока = ТаблицаНижняя.ВыделенныеСтроки[0];
КонецПроцедуры


Если что не понятно, спрашивайте. cowboy.gif

P.S. К администраторам: может сделать менее размашистый шрифт во вставке кода, например уменьшением меж символьного растояния, иначе текст сложно воспринимается.
BabySG
Цитата(Князь Игорь @ 9.7.2008, 20:02) *

Доброго времени суток! Несколько дней не было интернета. За это время я решил проблему, способом описанным ниже. А пока отвечу на предыдущий пост.
Код
ЭлементыФормы.<ТабличноеПоле>.Значение


Содержит ссылку на Таблицу значений которая указана в
Код
ЭлементыФормы.<ТабличноеПоле>.Данные


В моем случае это:
СправочникТабличнаяЧасть.<МойСправочник>.<ТабличнаяЧастьСправочника>
И опять меня это не приблизило к желаемой ситуации:

Ну так сам ответил свой вопрос!
Должен быть тип не табличная часть, а СТРОКА табличной части (таблицы значений).
Пытаться получиться из структуры число- бесполезная задача, и здесь тоже самое.

Цитата(Князь Игорь @ 9.7.2008, 20:02) *

P.S. К администраторам: может сделать менее размашистый шрифт во вставке кода, например уменьшением меж символьного растояния, иначе текст сложно воспринимается.


1. Есть отдельный подфорум для обсуждения этих вопросов.
2. Шрифт подобран тот, который используется по умолчанию в самой 1С.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.