Dialog List

  • Автор темы San40S
  • Дата начала
S

San40S

Всем привет!
Есть поле типа Dialog List. Значениями поля являются:

Название документа | Айдишка документа
value | Alias

пользователь видит Значение, а программно мы получаем Алиас.
Вопрос, как можно взять значения (value) Dialog List-a, потому-что у меня всегда берет Алиас Диалог Листа???
 
A

Akupaka

никак, если прямо

можно делать алиас иначе, вместо "value | Alias", делать "value | value | Alias"
тогда фактически алиас будет содержать и значение и алиас

все зависит от задачи
 
K

K-Fire

В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
Найти документ по алиасу не проблема, тем более что алиас это юнид. Далее вытащить значение - тем более не проблема.

Этот код повесить либо на кнопку (а тип поля с диалог листа заменить на текст), либо на событие какое-нить.

Все просто :)
 
S

San40S

В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
Найти документ по алиасу не проблема, тем более что алиас это юнид. Далее вытащить значение - тем более не проблема.

Этот код повесить либо на кнопку (а тип поля с диалог листа заменить на текст), либо на событие какое-нить.

Все просто :)

Да, мне твоя мысль тоже в голову приходила, но это лишние операции (найти документ по ЮНИДу, взять значения полей и т.д.)!
З.Ы. Я не любитель нагружать многими операциями работу, но раз простого пути нет, придется делать именно так, как ты написал!

Спасибо всем ;)
 
A

Akupaka

San40S, ты бы задачу описал ширее, может, найдется более оптимальное решение :)
кроме того, K-Fire не даром уточнил, что
В диалог лист же данные откуда-то грузятся? Из другого поля или из вьюшки.
думаю, он имел в виду, что ты в диалоге можешь источником инфы указать поле, в которое предварительно будет записана инфа (value|alias).
потом, когда нужно будет определить value по алиасу, ты значение алиаса берешь из поля-диалога, а поле источник разбиваешь на двое через вертикальную черту, получаешь список значений и список алиасов, в списке алиаса находишь позицию того алиаса, что взял из поля диалога, и уже по позиции находишь нужное значение в списке значений
 
S

San40S

San40S, ты бы задачу описал ширее, может, найдется более оптимальное решение :)
кроме того, K-Fire не даром уточнил, что
думаю, он имел в виду, что ты в диалоге можешь источником инфы указать поле, в которое предварительно будет записана инфа (value|alias).
потом, когда нужно будет определить value по алиасу, ты значение алиаса берешь из поля-диалога, а поле источник разбиваешь на двое через вертикальную черту, получаешь список значений и список алиасов, в списке алиаса находишь позицию того алиаса, что взял из поля диалога, и уже по позиции находишь нужное значение в списке значений

Попытаюсь описать подробней:
Есть некая заявка. В этой заявке есть поле (Dialog List) - в нем хранятся НАЗВАНИЕ|ЮНИД шаблона для печати. Когда пользователь нажимает на кнопку "Печать", берется значение из Диалог Листа, по каким шаблонам печатать. Если там одно значение, то просто печатается документ, если же значений в Диалог Листе несколько, то пользователь выбирает руками (из Prompt) по какому шаблону печатать заявку.
У меня возник трабл - в окне Промпта показываються ЮНИДы документов-шаблонов, а хотелось бы отображать там названия шаблонов ;)

З.Ы.:
Диалог Лист: @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2)
Prompt: cc = w.Prompt (4, "Шаблоны для печати", "Выберите шаблоны для печати", ,shapecode)
shapecode - это переменная типа Вариант, которая вмещает значения Диалог Листа.

З.Ы.Ы. Надеюсь уже более понятно. Хелп плз. Как показывать в Промпте не алиасы а сами значения?
 
A

Akupaka

а почему тип поля диалог лист? (Диалог Лист: @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2))
этот диалог лист интерфейсный, т.е. это поле для пользователя чего-то делает?..

сделай обычное многозначное поле, в которое будешь подтягивать формулой @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2) значения

потом в промте придется показать часть значений поля до вертикальной черты, и по этому значению найти унид, по позиции.

если же использовать вместо промта диалог-лист поле, то для него достаточно будет указать источником поле содержащее значения с алиасами, тогда пользователь будет выбирать из видимых значений, а диалог-поле будет хранить уже выбраный унид...

т.е. реализация зависит от того, какой интерфейс нужно организовать...
 
S

San40S

а почему тип поля диалог лист? (Диалог Лист: @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2))
этот диалог лист интерфейсный, т.е. это поле для пользователя чего-то делает?..
Надо было изначально мне уточнить такой момент, что БД уже написана была до меня, мне всего лишь нужно дописать "примочку", потому менять там что-либо крайне не рекоммендуется!!!

сделай обычное многозначное поле, в которое будешь подтягивать формулой @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2) значения
не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.

если же использовать вместо промта диалог-лист поле, то для него достаточно будет указать источником поле содержащее значения с алиасами, тогда пользователь будет выбирать из видимых значений, а диалог-поле будет хранить уже выбраный унид...
не вижу как использовать Диалог лист... если документ может печататься только по одному шаблону, то он просто возьмет и напечатается. Если же, документ может печататься по нескольким шаблонам, то пользователю должна даваться возможность выбрать по какому именно шаблону, из возможных, нужно печатать документ.
 
H

hosm

не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.
Всё решаемо ;)
A поля вам свои запрещено добавлять для расчета своего списка шаблонов на основе всего списка шаблонов?
Evaluate можно в скрипте использовать.
Что мешает формулами в обычном мультизначном поле по выбранным в диалог-листе юнидам получить нужные для отображения элементы списка "название|юнид" из общего списка шаблонов? (общий список получаем по @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2) и на формулах xотя бы через @For пройтись по выбранным юнидам, можно и поэлегантней придумать).
List:="A|1":"B|2":"C|3";
(@DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2) в вашем случае)
Selected :="|2":"|3"; ("|" + юнид в вашем случае)
@Trim(@Transform(List; "x"; @If(@Ends(x; Selected); @LeftBack(x; "|"); @Nothing))) вернет "B":"C". (список выбранных названий)
Если @LeftBack(x; "|") заменить на x, то вернет "B|2":"C|3"; (список выбранных названий и юнидов)
Еще идея с формулой лежит тут:

не вижу как использовать Диалог лист... если документ может печататься только по одному шаблону, то он просто возьмет и напечатается. Если же, документ может печататься по нескольким шаблонам, то пользователю должна даваться возможность выбрать по какому именно шаблону, из возможных, нужно печатать документ.
ну, можно диалог организовать - нарисовать (под)форму с нужным полем, содержащем "название|юнид" и вывести ее пользователю для выбора, если документ может печататься по нескольким шаблонам. (пример формулы уже есть выше)
Можно просто вычислить значения и вывести в промт (учтите - обрезает возвращаемое значение, надеюсь, названия не слишком длинные). Можно перенумеровать названия, в конце концов, если лень вычислять позицию выбранного значения в списке.
 
A

Akupaka

потому менять там что-либо крайне не рекоммендуется
знакомая картина ;)

не получиться, - пользователь Диалог Листом, когда документ создавался, выбирает по каким шаблонам вообще возможна печать сего док-а.
получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
сейчас у тебя есть диалог-поле DialogFilter1 (например) с источником-формулой @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2)
если добавить обычное многозначное поле DialogSource1, computed for display (либо computed, если значение нужно будет хранить) с вышеуказанно формулой, а в источник DialogFilter1 указать просто имя поля DialogSource1 (вместо текущей формулы), то для пользователя ничего не изменится. он сможет так же работать дальше.

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

теперь к печати.
предположим, что при создании документа пользователь указал возможные шаблоны, тогда
DialogSource1 будет содержать все шаблоны, что есть в базе.
DialogFilter1 будет содержать только те, что являются возможными для текущего дока, но только алиасы, т.е. часть данных, что хранится в DialogSource1.

чтобы пользователю выбрать конечный шаблон можно сделать еще одно поле DialogSource2 (computed for display) с формулой:
Код:
values := @Left(DialogSource1; "|");
aliases := @Right(DialogSource1; "|");

aliasesInvert := @Replace(aliases; DialogFilter1; "");
aliasesFilter := @Replace(aliases; aliasesInvert; "");

valuesInvert := @Replace(aliases; aliasesInvert; values);
valuesFilter := @Replace(values; valuesInvert; "");

@Trim(@Replace(valuesFilter + "|" + aliasesFilter; "|"; ""))
теперь это поле будет содержать только те пары value|alias, алиасы которых выбраны в поле-диалоге DialogFilter1

теперь для выбора конкретного значения формулой можно сделать так (код на кнопке):
Код:
values := @Left(DialogSource2; "|");
aliases := @Right(DialogSource2; "|");

selectedValue := @Prompt([OkCancelList]; "Выбор шаблона"; "Укажите шаблон:"; values[1]; values);
selectedValueIndex := @Member(selectedValue; values);
selectedAlias := aliases[selectedValueIndex];

@Prompt([Ok]; "Алиас выбранного шаблона"; selectedAlias)
 
S

San40S

знакомая картина ;)


получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
сейчас у тебя есть диалог-поле DialogFilter1 (например) с источником-формулой @DbColumn("";Server:patch;"ShapeKI";1)+"|"+@DbColumn("";Server:patch;"ShapeKI";2)
если добавить обычное многозначное поле DialogSource1, computed for display (либо computed, если значение нужно будет хранить) с вышеуказанно формулой, а в источник DialogFilter1 указать просто имя поля DialogSource1 (вместо текущей формулы), то для пользователя ничего не изменится. он сможет так же работать дальше.

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

теперь к печати.
предположим, что при создании документа пользователь указал возможные шаблоны, тогда
DialogSource1 будет содержать все шаблоны, что есть в базе.
DialogFilter1 будет содержать только те, что являются возможными для текущего дока, но только алиасы, т.е. часть данных, что хранится в DialogSource1.

чтобы пользователю выбрать конечный шаблон можно сделать еще одно поле DialogSource2 (computed for display) с формулой:
Код:
values := @Left(DialogSource1; "|");
aliases := @Right(DialogSource1; "|");

aliasesInvert := @Replace(aliases; DialogFilter1; "");
aliasesFilter := @Replace(aliases; aliasesInvert; "");

valuesInvert := @Replace(aliases; aliasesInvert; values);
valuesFilter := @Replace(values; valuesInvert; "");

@Trim(@Replace(valuesFilter + "|" + aliasesFilter; "|"; ""))
теперь это поле будет содержать только те пары value|alias, алиасы которых выбраны в поле-диалоге DialogFilter1

попробовал сделать что-то подобное...

но вот эта часть нужна на скрипте, писал-писал, но моцк выдохся наверное :(
теперь для выбора конкретного значения формулой можно сделать так (код на кнопке):
Код:
values := @Left(DialogSource2; "|");
aliases := @Right(DialogSource2; "|");

selectedValue := @Prompt([OkCancelList]; "Выбор шаблона"; "Укажите шаблон:"; values[1]; values);
selectedValueIndex := @Member(selectedValue; values);
selectedAlias := aliases[selectedValueIndex];

@Prompt([Ok]; "Алиас выбранного шаблона"; selectedAlias)
 
A

Akupaka

ну... посмотри в справке Evaluate, notesuiworkspace.prompt, arraygetindex... очень лениво сейчас писать, если не разберешься, завтра попробуем вместе ;)
 
S

San40S

Всем спасибо за внимание, спасибо за помощь!
Сделал все следующим образом (примерно так, как предлагал K-Fire):
Тобишь, в качестве алиаса, в Диалог Листе у меня хранятся ЮНИДы документов-шаблонов. Зная ЮНИД, могу найди самы эти документы... далее из найденых документов беру значение поля (такое же значение отображает, ранее упомянутый Диалог Лист), и отображаю эти значения в Промпте.
Вот, собсна говоря, и все! :)

Еще раз всем thnks!
 
30.05.2006
1 345
12
BIT
0
а чтобы НЕ через UI???
Гм.. Это "значение" только в UI и существует (где-то в коде формы закопано). Убери их от туда, положи в базу (а в форме будешь формулой их доставать) - тогда сможешь преобразования "значение"->"алиас" воспроизвести и в коде
 

Eugen

Green Team
22.03.2012
210
1
BIT
1
Добрый день.

Дабы не плодить темы спрошу здесь:

у меня имеется поле DialogList, в котором лежат значения с алиасами:
Паспорт|01
Военный билет|02
и тд...
В таком случае в самом лотусе, насколько я понимаю будут храниться именно алиасы, а отображаться соответствующие им вырианты.
Также моя база общается с веб-сервисом через xml. Значения элементов в xml тоже будут алиасы?
Еще у меня есть что - то типа выгрузки в ворд - агент кладет значения определенных полей в закладки ворда. То есть получается, что в ворд мне надо передать отображаемый вариант, а в xml его алиас. В принципе можно было бы создать скрытое вычисляемое поле с формулой типа @If(docType="01";"Паспорт";docType="02";"Военный билет") и т.д., но у меня там будет больше сотни вариантов, и прописывать все это очень неохота... Кто что может подсказать по этому поводу?
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Еще у меня есть что - то типа выгрузки в ворд -
перед выгрузкой сохраняете массивчик значение-алиас и в процессе выгрузке подменяете алиас значением
 
N

nvyush

Сохраняйте в скрытом поле документа соответствующее текстовое значение.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!