Версия для печати темы (https://pro1c.org.ua/index.php?s=a8f380bac3b801608e9f0953255e747a&showtopic=37542)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Получить Текущую Строку Списка с помощью процедуры из общего модуля

Автор: Gigi 30.05.17, 15:07

Привет всем!
проблема такая...
Накидал малый код функции для получения текущей выделенной строки списка
Поскольку в синтаксис помощнике инфа довольно скупая и размытая.... сколько пробовал разные варианты и еле попал в то, как по синтаксису правильно написать... буквально методом тыка и догадкой
И вроде получилось попасть как эту ерунду правильно написать, вот в таком вот виде:

&НаКлиенте
Функция Получить_ТекущуюСтрокуСписка(ИмяСписка,Столбец) Экспорт
//------------------------------------------------------
ТекСтрока= Элементы[ИмяСписка].ТекущаяСтрока;
ТекСтрокаЗнСтолбца = Элементы[ИмяСписка].ДанныеСтроки(ТекСтрока)[Столбец];
Возврат ТекСтрокаЗнСтолбца;
//------------------------------------------------------
КонецФункции

Вроде все путем, но просто охота это перенести в общий модуль
Но как только перенес в общий модуль то, на линии: "Элементы" естественно выдает ошибку и пишет:
Цитата
{ОбщийМодуль.Fx_Список.Модуль(4,12)}: Переменная не определена (Элементы)
ТекСтрока= <<?>>Элементы[ИмяСписка].ТекущаяСтрока; (Проверка: Тонкий клиент)
{ОбщийМодуль.Fx_Список.Модуль(5,22)}: Переменная не определена (Элементы)
ТекСтрокаЗнСтолбца = <<?>>Элементы[ИмяСписка].ДанныеСтроки(ТекСтрока)[Столбец]; (Проверка: Тонкий клиент)

Так что, прошу помощи.
Может для общего модуля кто подкорректирует, если не сильно накладно и сложно.
Буду признателен!

Автор: logist 30.05.17, 15:21

Элементы тоже передавайте в общий модуль.

Функция Получить_ТекущуюСтрокуСписка(Элементы, ИмяСписка, Столбец) Экспорт


p.s. но тут опять же становится вопрос начальной задачи, нахрена всё это, если это можно сделать в форме одной строкой
ЗначениеКолонки = Элементы.ИмяСписка.ТекущиеДанные.ИмяКолонки;

даже если подумать, что вам нужна унифицированная процедура, то она бы выглядела скорее так
&НаКлиенте
Функция Получить_ТекущуюСтрокуСписка(ЭлементСписок, ИмяКолонки) Экспорт
// где ЭлементСписок это сам элемент списка
    Возврат ЭлементСписок.ТекущиеДанные[ИмяКолонки];
КонецФункции

Автор: Petre 30.05.17, 15:23

Gigi @ Сегодня, 16:07 * ,
"Элементы" - контекст "ЭтотОбъект" / "ЭтаФорма".

Автор: Bernet 30.05.17, 15:24

Gigi @ Сегодня, 16:07 * ,
Если функция будет в общем модуле, то должна быть включена галочка "Клиент (управляемое приложение)"

Функция Получить_ТекущуюСтрокуСписка(Элементы, ИмяСписка, Столбец) Экспорт
   ТекСтрока= Элементы[ИмяСписка].ТекущаяСтрока;
   ТекСтрокаЗнСтолбца = Элементы[ИмяСписка].ДанныеСтроки(ТекСтрока)[Столбец];
   Возврат ТекСтрокаЗнСтолбца;
КонецФункции


В формах где будете вызывать пишите такой код:
     ТекущееЗначение = ВашОбщийМодуль.Получить_ТекущуюСтрокуСписка(Элементы, "ВашаТаблица", "ВашСтолбец");

Автор: Gigi 30.05.17, 15:49

Цитата(logist @ 30.05.17, 16:21) *
p.s. но тут опять же становится вопрос начальной задачи, нахрена всё это, если это можно сделать в форме одной строкой
ЗначениеКолонки = Элементы.ИмяСписка.ТекущиеДанные.ИмяКолонки;

Ну и ладно .. можно и в таком виде ... не важно .. я просто сам че то накидал.. то как мог.. а так думаю и вправду лучше.
Цитата(Bernet @ 30.05.17, 16:24) *
галочка "Клиент (управляемое приложение)"

Да! так и сделал и теперь все выглядит вот так:

&НаКлиенте
Процедура Тест(Команда)
знИмяКолонки="Код";
ТекСтрока=Fx_Список.ПолучитьТекущуюСтрокуСписка(Элементы.ТочкиУчетаСписок, знИмяКолонки);
Сообщить(ТекСтрока);    
КонецПроцедуры

//В общем модуле: "Fx_Список"
Функция ПолучитьТекущуюСтрокуСписка(ЭлементСписок, ИмяКолонки) Экспорт
//где ЭлементСписок это сам элемент списка
Возврат ЭлементСписок.ТекущиеДанные[ИмяКолонки];
КонецФункции

Все работает!
Первый раз без кучи дискуссий!
Спасибо всем!




Автор: logist 30.05.17, 23:04

Цитата(Gigi @ 30.05.17, 16:49) *
знИмяКолонки="Код";
ТекСтрока=Fx_Список.ПолучитьТекущуюСтрокуСписка(Элементы.ТочкиУчетаСписок, знИмяКолонки);

Не создавайте не нужный хлам переменных
ТекСтрока=Fx_Список.ПолучитьТекущуюСтрокуСписка(Элементы.ТочкиУчетаСписок, "Код");


Цитата(Gigi @ 30.05.17, 16:49) *
Первый раз без кучи дискуссий!

Это может быть не вашей заслугой, а людей которые научились понимать wink.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua