|
УНФ Дополнительные сведения на форме | ☑ | ||
---|---|---|---|---|
0
vladimir80
04.04.17
✎
19:33
|
Привет! Возможно кто-то что-то похожее делал, или просто имеет понимание как организовать следующий функционал:
Нужно вывести в форме элемента номенклатуры дополнительные сведения, по типу вывода дополнительных реквизитов. Дополнительные сведения хранятся не вместе с объектом, а в регистре сведений. Что делаю (понятно что неверно, но мозги пока в этом направлении думают): Создал в расширении реквизит формы типа таблицазначений "ТаблицаДополнительныхСведений". При создании формы заполняю эту таблицу запросом, и уже из нее хочу выводить эти поля на форму. На данный момент проблема с указанием пути к данным... Запрос = Новый Запрос("ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка КАК ДополнительноеСведение |ПОМЕСТИТЬ ТаблицаСведенийВсех |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение = ИСТИНА | И ДополнительныеРеквизитыИСведения.НаборСвойств = &Набор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДополнительныеСведения.Свойство КАК Сведение, | ДополнительныеСведения.Значение КАК Значение |ИЗ | ТаблицаСведенийВсех КАК ТаблицаСведенийВсех | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения | ПО ТаблицаСведенийВсех.ДополнительноеСведение = ДополнительныеСведения.Свойство | И (&ЭтотОбъект = ДополнительныеСведения.Объект)"); Запрос.УстановитьПараметр("Набор", Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие); Запрос.УстановитьПараметр("ЭтотОбъект", Объект.Ссылка); ТаблицаДополнительныхСведений.Загрузить( Запрос.Выполнить().Выгрузить() ); // Сначала надо создать группу, в которую помещать поля сведений НоваяГруппаФормы = Элементы.Добавить("ГруппаДополнительныеСведения",Тип("ГруппаФормы"),Элементы.ЛеваяКолонка); НоваяГруппаФормы.Вид = ВидГруппыФормы.ОбычнаяГруппа; Итератор = 0; Для Каждого Элемент ИЗ ТаблицаДополнительныхСведений Цикл НовоеПолеФормы = Элементы.Добавить("ПолеСведения"+Строка(Итератор), Тип("ПолеФормы"), НоваяГруппаФормы ); НовоеПолеФормы.Заголовок = Элемент.Сведение.Наименование; НовоеПолеФормы.Вид = ВидПоляФормы.ПолеВвода; //НовоеПолеФормы.ПутьКДанным = "Объект.ТаблицаДополнительныхСведений"; //тут дело заглохло... Итератор = Итератор + 1; КонецЦикла; Сразу скажу, знаний по УФ очень нехватает, буду благодарен за пинок в нужном направлении |
|||
1
jsmith82
04.04.17
✎
20:01
|
ппц
|
|||
2
AlvlSpb
04.04.17
✎
21:51
|
(0) Много лишних действий. Зачем таблица? раз уж работаете в расширении, создайте просто поле ввода Свойства номенклатуры в карточке номенклатуры с типом Список значений и режимом выбора Из списка. Список заполняете Запросом значениями из регистра сведений с отбором (Где) по Номенклатуре. Собственно и все.
|
|||
3
vladimir80
04.04.17
✎
22:00
|
Наверное не слишком четко описал задачу. Количество добавляемых полей произвольное.
То есть все возможные пары свойство - значение хотелось бы вывести в виде Заголовок поля = свойство.название , поле.значение = значениесвойства. Почему именно в виде полей - единообразие с текущим выводом в форму доп.реквизитов. Насколько я понимаю, технически связать реквизит формы типа таблица значений связать с полем формы невозможно? |
|||
4
DrShad
04.04.17
✎
22:01
|
[знаний по УФ очень нехватает] т.е. на ОФ ты бы это сделал?
|
|||
5
vladimir80
04.04.17
✎
22:16
|
Сделал бы, причем абсолютно без проблем... Да и что за проблема,
Поле0 = Таблица[0].Значение; Поле1 = Таблица[1].Значение; |
|||
6
vladimir80
04.04.17
✎
22:17
|
Всмысле, конкретно в моем случае, Поле.Текст = Таблица[0].Значение и т.п.
|
|||
7
DrShad
04.04.17
✎
22:18
|
да ладно!? садись двойка
|
|||
8
DrShad
04.04.17
✎
22:25
|
не надо врать на форуме
|
|||
9
AlvlSpb
04.04.17
✎
22:36
|
(3) Хотя и не понимаю зачем выводить все свойства, когда их можно посмотреть по кнопке на той же форме..., но раз хочется/надо...
"Насколько я понимаю, технически связать реквизит формы типа таблица значений связать с полем формы невозможно?" А что мешает заполнять Табличную часть? Создайте ТЧ на форме и заполняйте ее выборкой из запроса. Ну или, если важна ТЗ - выгружайте результат запроса в ТЗ, делайте все нужные действия с ней и загружайте ТЗ в ТЧ формы |
|||
10
vladimir80
04.04.17
✎
22:57
|
(8) Ну так не ври...
Процедура ПриОткрытии() // Вставить содержимое обработчика. Итер = 1; Для Каждого С ИЗ Таблица Цикл Эл = ЭлементыФормы.Добавить(Тип("ПолеВвода"),С.Имя,Истина,ЭлементыФормы.Панель1); Эл.Имя = "Поле_"+Итер; Эл.Подсказка = С.Имя; Эл.Значение = С.Значение; Эл.Видимость = Истина; Эл.Данные = ""; Эл.Значение = С.Значение; Эл.Верх = 30 * Итер; Эл.Лево = 20; Эл.Ширина = 200; Эл.Высота = 2; Итер = Итер + 1; КонецЦикла; КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) // Вставить содержимое обработчика. Таблица.Колонки.Добавить("Имя"); Таблица.Колонки.Добавить("Значение"); НС = Таблица.Добавить(); НС.Имя = "ййййййй"; НС.Значение = "4444"; НС = Таблица.Добавить(); НС.Имя = "ццццццц"; НС.Значение = "5555"; КонецПроцедуры Реквизит Таблица (ТаблицаЗначений) Элемент Панель1 Играйся... Блин, просишь помощи, сразу стадо критиков прибегает. На обычных формах путем манипуляций любых параметров полей несложно передать что угодно куда угодно.... На самом деле на УФ уже сделана отрисовка полей на форме из табличной части справочника. Сделано все через создание реквизитов формы, а затем уже элементов, связанных с этими реквизитами. |
|||
11
DrShad
04.04.17
✎
23:01
|
(10) где путь к данным? ))) на УФ этот момент ничем не отличается)))
|
|||
12
vladimir80
04.04.17
✎
23:02
|
(11) Путь к данным при обработке в расщеплении имени поля. получении индекса строки ТЗ и работе с ним. На УФ поле же просто не выводится без пути к данным.
|
|||
13
DrShad
04.04.17
✎
23:10
|
(12) в (10) не решение задачи из (0) просто нарисовать таблицу на форме особого труда не надо, а вот связать элементы с данными другого объекта это задача, но тоже не сложная - кода много, смотри типовую конфу как там выведены доп реквизиты
|
|||
14
AlvlSpb
04.04.17
✎
23:10
|
(12) Посмотри, может пригодиться http://forum1s.ru/read/programmnoe-sozdanie-rekvizita-v-upravliaemom-prilozhenii-1s/
|
|||
15
vladimir80
04.04.17
✎
23:13
|
(13) Подскажи как нарисовать без пути, буду благодарен, т.к. опыта, напомню. нет.
Тот же пример на УФ с пустым путем или пустой строкой : Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(42)}: Ошибка при установке значения атрибута контекста (ПутьКДанным) НовоеПолеФормы.ПутьКДанным = ""; по причине: Недопустимое значение |
|||
16
vladimir80
04.04.17
✎
23:15
|
(14) Спасибо, это именно то что мне нужно (теперь понятно. что нужно еще и реквизиты рисовать, а не просто поля, хотя смысла в реквизитах ровно 0, кроме пути для миграции данных от клиента к серверу), будет проще решать задачу, т.к. в типовых адские портянки...
|
|||
17
DrShad
04.04.17
✎
23:17
|
(15) сможешь объяснить зачем необходимо именно такое извращение - помогу
а вообще тут достаточно динамического списка, где основная таблица это твой регистр сведений + отбор по объекту |
|||
18
DrShad
04.04.17
✎
23:17
|
зачем каждое свойство в отдельное поле ввода оформлять и не иметь при этом обратной связи поля с РС - не понимаю
|
|||
19
vladimir80
04.04.17
✎
23:20
|
С чего не иметь, если в регистре два измерения - справочникссылка, которое равно ссылке открытого элемента, и значения поля первой колонки? А значение - ресурс, строка, с которой и работаешь в поле на форме?
|
|||
20
vladimir80
04.04.17
✎
23:20
|
Мне не нужен список, мне нужно n полей ввода.
|
|||
21
DrShad
04.04.17
✎
23:21
|
Подскажи как нарисовать без пути, буду благодарен
и что потом с ними делать? |
|||
22
vladimir80
04.04.17
✎
23:22
|
(21) Не вижу смысла продолжать. Хотел бы - показал. Решение найдено.
|
|||
23
vladimir80
04.04.17
✎
23:36
|
(21) Что с ними делать? Заполнять, отправлять на сервер, писать в регистр.... Как отправить на сервер данные из полей следующий вопрос будет? Или как их там обработать? Пришел блин, за ответом.... адинэсники, блин, где фантазия и творческий подход? Скажи мне как нарисовать поля формы без путей к данным, а я нарисую полностью рабочий код общения этих полей с РС.
|
|||
24
vladimir80
05.04.17
✎
03:57
|
Возможно кому-то пригодится мой гвнКод, выкладываю просто для ищущих, может кому-то облегчит жизнь. Повторюсь, пишу вслепую, УФ не знаю.
Код в расширении, на форме создан реквизит ТаблицаДополнительныхСведений, с колонками Сведение и Значение. Отображает дополнительные сведения на форме так же, как и дополнительные реквизиты. У меня используются только общие дополнительные сведения, если что - подрихтуйте запрос. &НаСервере Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Вставить содержимое обработчика Запрос = Новый Запрос("ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка КАК ДополнительноеСведение |ПОМЕСТИТЬ ТаблицаСведенийВсех |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение = ИСТИНА | И ДополнительныеРеквизитыИСведения.НаборСвойств = &Набор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДополнительныеСведения.Значение КАК Значение, | ТаблицаСведенийВсех.ДополнительноеСведение КАК Сведение |ИЗ | ТаблицаСведенийВсех КАК ТаблицаСведенийВсех | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения | ПО ТаблицаСведенийВсех.ДополнительноеСведение = ДополнительныеСведения.Свойство | И (&ЭтотОбъект = ДополнительныеСведения.Объект)"); Запрос.УстановитьПараметр("Набор", Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие); Запрос.УстановитьПараметр("ЭтотОбъект", Объект.Ссылка); ДобавляемыеРеквизиты = Новый Массив; МассивТипов = новый Массив; МассивТипов.Добавить(Тип("Строка")); ТаблицаДополнительныхСведений.Загрузить( Запрос.Выполнить().Выгрузить() ); Ит = 0; Для Каждого Стр ИЗ ТаблицаДополнительныхСведений Цикл ДобавляемыеРеквизиты.Добавить( Новый РеквизитФормы("РеквизитСведение_"+Ит,новый ОписаниеТипов(МассивТипов),"", СтрЗаменить(Стр.Сведение, " (""Общие"")", ""), Истина)); Ит = Ит + 1; КонецЦикла; ИзменитьРеквизиты(ДобавляемыеРеквизиты); // Сначала надо создать группу, в которую помещать поля сведений НоваяГруппаФормы = Элементы.Добавить("ГруппаДополнительныеСведения",Тип("ГруппаФормы"),Элементы.ЛеваяКолонка); НоваяГруппаФормы.Вид = ВидГруппыФормы.ОбычнаяГруппа; ЭтаФорма.Элементы["ГруппаДополнительныеСведения"].Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; ЭтаФорма.Элементы["ГруппаДополнительныеСведения"].ОтображатьЗаголовок = Ложь; ЭтаФорма.Элементы["ГруппаДополнительныеСведения"].Отображение = ОтображениеОбычнойГруппы.Нет; ЭтаФорма.Элементы.Переместить(НоваяГруппаФормы, Элементы.ОсновныеРеквизиты, Элементы.ГруппаСгруппированныеРеквизиты); Итератор = 0; Для Каждого Элемент ИЗ ТаблицаДополнительныхСведений Цикл НовоеПолеФормы = Элементы.Добавить("ПолеВводаСтроки_"+Строка(Итератор), Тип("ПолеФормы"), НоваяГруппаФормы ); НовоеПолеФормы.ПутьКДанным = "РеквизитСведение_"+Строка(Итератор); НовоеПолеФормы.Вид = ВидПоляФормы.ПолеВвода; НовоеПолеФормы.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоСведения"); Итератор = Итератор + 1; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоСведения(Элемент) ЗаписатьСведенияНаСервере(СтрЗаменить(Элемент.Имя, "ПолеВводаСтроки_", "")); КонецПроцедуры &НаСервере Процедура ЗаписатьСведенияНаСервере(ИндексТаблицы) НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Объект.Ссылка); НаборЗаписей.Отбор.Свойство.Установить(ТаблицаДополнительныхСведений.Получить(ИндексТаблицы).Сведение); Запись = НаборЗаписей.Добавить(); Запись.Объект = Объект.Ссылка; Запись.Свойство = ТаблицаДополнительныхСведений.Получить(ИндексТаблицы).Сведение; Запись.Значение = ЭтотОбъект["РеквизитСведение_"+ИндексТаблицы]; НаборЗаписей.Записать(); КонецПроцедуры |
|||
25
vladimir80
05.04.17
✎
04:09
|
Забыл при создании реквизитам значения присвоить, но думаю сами без труда это сделаете. Всем спасибо за помощь!
|
|||
26
toypaul
гуру
05.04.17
✎
08:31
|
самый простой вариант (как я разбирался) это создать все ручками, а потом в отладчике смотреть все свойства.
|
|||
27
_KaA
05.04.17
✎
10:06
|
(0) Не понял, зачем каждое Доп. свойство выводить отдельным реквизитом? Почему нельзя вывести динамический список и в нем править все что необходимо?
|
|||
28
vladimir80
05.04.17
✎
13:41
|
(27) Единообразие на форме, наверное...
Скажем прямо, нужно иметь на каждый товар н-названий и описаний номенклатуры. Это для интернет-магазинов, требуется масимальная разница в описаниях и названиях товаров, т.е. для каждого узла по сути свои данные. В любом случае, требования руководства не обсуждаются. Да и как по мне, достаточно удобно, наглядно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |