знакомая картина
получится, смотри, диалог-лист использует источник информации, который формируется некой формулой. в итоге, источником является набор строк.
сейчас у тебя есть диалог-поле DialogFilter1 (например) с источником-формулой @DbColumn("";Server
atch;"ShapeKI";1)+"|"+@DbColumn("";Server
atch;"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