ПутьКДанным из реквизита формы типа таблица значений

1. n_kremko 12.01.14 08:33 Сейчас в теме
Как можно для нескольких полей формы указать ПутьКДанным из реквизита формы таблица значений, так, чтобы ,например, для ПолеВвода1 ПутьКДанным указывал на первую ячейку из первой строки тз,
для ПолеВвода2 ПутьКДанным указывал на первую ячейку из ВТОРОЙ строки тз и т.д. ...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. sannt 1 12.01.14 09:37 Сейчас в теме
(1) n_kremko, Если нужна привязка именно к конкретной строке, а не к текущей, то только программно, скажем при заполнении таблицы на форме или добавлении строки в таблицу. Тут все зависит от того, как таблица заполняется.
2. Rothschild 12.01.14 09:24 Сейчас в теме
Для текущей строки указывается путь в виде
Элементы.Реквизит1.ТекущиеДанные.Реквизит3

как сделать это для конкретной строки под 8.2 - я не смог найти

под 8.3 - не разбирался.
4. Rothschild 12.01.14 10:20 Сейчас в теме
(2)(3)
вот только как путь указать???
пытаюсь сделать хотя бы для текущей строки вот так:
	ПолеТест = Элементы.Вставить("ПолеТест",Тип("ПолеФормы"),,Элементы.ТаблицаСостояний);
	ПолеТест.Вид = ВидПоляФормы.ПолеВвода;
	ПолеТест.ПутьКДанным = "Элементы.ТаблицаСостояний.ТекущиеДанные.Значение";

- не канает!
Причем строка пути "Элементы.ТаблицаСостояний.ТекущиеДанные.Значение"
взята в конфигураторе из пути данных другого поля формы

Обработка во вложении.
Прикрепленные файлы:
Тест82-1.epf
5. sannt 1 12.01.14 11:06 Сейчас в теме
(4) Rothschild, для текущей строки не нужно программно что-либо делать, в конфигураторе для поля формы Вы уже все указали. Удалите тот код, что привели в посте и все будет работать.
6. Rothschild 12.01.14 11:35 Сейчас в теме
(5) sannt, я понимаю что так можно задать в конфигураторе...

в выложенной обработке как раз есть еще поле формы Реквизит1
для которого это так и сделано.

НО:
1. почему такой путь нельзя задавать при програмном добавлении элементов в форму?
2. и как же, наконец, проверить ваше предложение

Если нужна привязка именно к конкретной строке, а не к текущей, то только программно

т.е. какой путь нужно прописать свойству ПолеТест.ПутьКДанным ???
7. sannt 1 12.01.14 12:28 Сейчас в теме
(6) Rothschild, я не правильно выразился. Я имел ввиду программную установку значения в поле (реквизиту), а не привязку... Например:
Реквизит1 = ТаблицаСостояний[1].Представление;
с проверкой, что строка вообще есть. Другого способа не знаю.

По поводу программной установки ПутьКДанным с привязкой к текущей строке... не могу сказать почему нельзя.
8. n_kremko 12.01.14 15:05 Сейчас в теме
Вот и я не смог найти. Я когда-то в 1С пришел из Visual FoxPro , а в VFP в аналогичной ситуации можно было использовать ЛЮБОЙ текст, который vfp может выполнить и получить значение. Иногда по аналогии пытаюсь заставить что-то работать... иногда помогает, а иногда и вот так...
9. jigourt 31 12.01.14 15:21 Сейчас в теме
(8) n_kremko, вот я например абсолютно не понял, что Вы хотите сделать. у разных строчек таблицы значений разные пути к данным?? только один вопрос, а зачем? чего Вы хотите добиться в целом?
10. Rothschild 12.01.14 15:27 Сейчас в теме
(9) jigourt,
насколько я понял задача состоит в создании в форме
несколько полей формы,
привязанных к конкретной ячейке конкретных строк таблицы значений:
ПолеФормы0 - к ТаблицаСостояний[0].Значение
ПолеФормы1 - к ТаблицаСостояний[1].Значение
ПолеФормы2 - к ТаблицаСостояний[2].Значение

ну конечно привязывать надо после того, как эти строки добавлени в таблицу.
:)
11. jigourt 31 12.01.14 16:12 Сейчас в теме
(10) Rothschild, а если строк 100, то 100 полей создавать?? ))
12. Rothschild 12.01.14 16:23 Сейчас в теме
(11) Шура,
логика бывает:
математической, женской и прикладной
...
и именно в этом порядке следования
;)
13. n_kremko 16.01.14 09:38 Сейчас в теме
(9) jigourt


11.
jigourt
12.01.14 16:12

(10) Rothschild, а если строк 100, то 100 полей создавать?? ))


Да. Именно 100 и создавать. Хотя 100 их там скорее всего не будет.

Тип у реквизита строка неограниченной длины.

Нужно хотя- бы такое решение, которое позволит добавить ПолеВвода, добавить реквизит, присвоить ему значение, и связать данное полеВвода с реквизитом на форме, причем имя поля и реквизита ЗАРАНЕЕ НЕИЗВЕСТНО И ЗАДАЕТСЯ ПРИ добавлении на форму.

при использовании ИзменитьРеквизиты(....) в хелпе написано что к добавленному реквизиту можно обратиться ТОЛЬКО Этаформа.<ИмяДобавленногоРеквизита>
и действительно, отладчик реквизиты добавленные показывает, но через Этаформа["<ИмяДобавленногоРеквизита>"] обратиться к ним не удается.

ЗначениеВРеквизитФормы("значение", "<ИмяДобавленногоРеквизита>");
ЗначениеВРеквизитФормы("значение", "Этаформа.<ИмяДобавленногоРеквизита>") и пр. не проходят, им похоже не нравиться тип реквизита.

работает , ТОЛЬКО так:
Этаформа.<ИмяДобавленногоРеквизита> = "Значение",

ps. тестирую в тонком клиенте , ибо это для данного режима мне нужно.
Bukaska; Rothschild; +2 Ответить
14. Bukaska 140 16.01.14 10:05 Сейчас в теме
(13) n_kremko, Это только в том случае, если у реквизита тип: строка неограниченной длины? Или вообще?
15. jigourt 31 16.01.14 10:28 Сейчас в теме
(13) n_kremko, в силу того, что решение довольно-таки странное, почему нужно использовать поле ввода, а не например список значений?
16. n_kremko 16.01.14 23:16 Сейчас в теме
2 jigourt

9.
jigourt
12.01.14 15:21

(8) n_kremko, вот я например абсолютно не понял, что Вы хотите сделать. у разных строчек таблицы значений разные пути к данным?? только один вопрос, а зачем? чего Вы хотите добиться в целом?


В целом, в (1) и в (9) там написанно , чего я хочу добиться


15.
jigourt
16.01.14 10:28

(13) n_kremko, в силу того, что решение довольно-таки странное, почему нужно использовать поле ввода, а не например список значений?


Потому , что мне нужно поле ввода, а не список значений.
17. OlaIa 24.08.17 09:47 Сейчас в теме
Добрый день.
Ветка старая, но решения не содержит. Если кому интересно, публикую решение.

Тоже столкнулась с такой задачей в Документообороте для отображения на своей форме нескольких реквизитов для изменения.

При заполнении табличной части для каждой строки запускаю такую процедуру:

&НаСервере
Процедура СоздатьПолеРеквизита(СтрокаТЧ)
	НомерстрокиТЧ = СтрокаТЧ.НомерСтроки-1;
        ИдентификаторСтроки = "Строка"+СтрЗаменить(НомерстрокиТЧ,Символы.НПП,"");
	Заголовок = СтрокаТЧ.Наименование;

	ПутьКДанным="Объект.ЗначенияРеквизитов["+НомерстрокиТЧ+"].Значение";
	// Добавляем поле ввода.
	Если Элементы.Найти(ИдентификаторСтроки) <> Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Поле = Элементы.Добавить("ИдентификаторСтроки, Тип("ПолеФормы")); 

	Поле.Заголовок = Заголовок;
	Поле.Вид = ВидПоляФормы.ПолеВвода;
	Поле.ПутьКДанным = ПутьКДанным;
	//Поле.УстановитьДействие("ПриИзменении", "Подключаемый_хххПриИзменении");
	Поле.Видимость = истина; 
	Если ЗначениеЗаполнено(СтрокаТЧ.ДополнительныйРеквизит) Тогда
		ТипРеквизита =  ПолучитьТипНаСервере(СтрокаТЧ.ДополнительныйРеквизит);
	Иначе
		ТипРеквизита =  ПолучитьТипОснРеквизитаНаСервере(СтрокаТЧ.Наименование);
	КонецЕсли;

		Поле.ОграничениеТипа = ТипРеквизита;

		Если ТипЗнч(СтрокаТЧ.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") Тогда
			НовыйПараметр = Новый ПараметрВыбора("Отбор.Владелец", СтрокаТЧ.ДополнительныйРеквизит);
			НовыйМассив = Новый Массив();
			НовыйМассив.Добавить(НовыйПараметр);
			НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
			Поле.ПараметрыВыбора = НовыеПараметры;
			Поле.КнопкаВыбора = Истина;
	
		КонецЕсли;

		Поле.ОграничениеТипа.ПривестиЗначение();

КонецПроцедуры

&НаСервере
Функция ПолучитьТипНаСервере(ДопРеквизит)
	Возврат ДопРеквизит.ТипЗначения;	
КонецФункции

&НаСервере
Функция ПолучитьТипОснРеквизитаНаСервере(ИмяРеквизита)
	Возврат Метаданные.Справочники.ВнутренниеДокументы.Реквизиты[ИмяРеквизита].Тип;	
КонецФункции
Показать
18. a111169 20.08.18 13:52 Сейчас в теме
(17) Добрый день.
Не сдержался, столько ошибок в коде... Хоть и год уже сообщению
&НаСервере
Процедура СоздатьПолеРеквизита(СтрокаТЧ)
    //НомерстрокиТЧ = СтрокаТЧ.НомерСтроки-1; //если индекс строки больше 999, будет ошибка при назначении пути к данным поля формы.
    НомерстрокиТЧ = Формат(Объект.ЗначенияРеквизитов.Индекс(СтрокаТЧ),"ЧДЦ=; ЧН=; ЧГ="); //лучше воспользоваться функцией "Индекс" и преобразовать в строку.
    //НомерстрокиТЧ = XMLСтрока(Объект.ЗначенияРеквизитов.Индекс(СтрокаТЧ)); //или можно так... надо бы сравнить быстродействие функций "Формат" и "XMLСтрока", но лень.
        //ИдентификаторСтроки = "Строка"+СтрЗаменить(НомерстрокиТЧ,Символы.НПП,"");
        ИдентификаторСтроки = "Строка"+НомерстрокиТЧ ; //там уже строка без НПП.
    Заголовок = СтрокаТЧ.Наименование;

    ПутьКДанным="Объект.ЗначенияРеквизитов["+НомерстрокиТЧ+"].Значение";
    // Добавляем поле ввода.
    Если Элементы.Найти(ИдентификаторСтроки) <> Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    //Поле = Элементы.Добавить("ИдентификаторСтроки, Тип("ПолеФормы")); //лишняя кавычка
    Поле = Элементы.Добавить(ИдентификаторСтроки, Тип("ПолеФормы"));
.....
       //Поле.ОграничениеТипа.ПривестиЗначение(); // это вообще к чему? функция ПривестиЗначение без параметра выдает значение по умолчанию для описания типов. Если Вам это требуется, то присвойте его чему нибудь...
       // Возможно имелось в виду
       СтрокаТЧ.Значение=Поле.ОграничениеТипа.ПривестиЗначение(СтрокаТЧ.Значение);
.....
Показать
user1021675; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот