Связь документов

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

Гость
#1
Добрый вечер! Подскажите, пожалуйста, как организовать такую базу. Имеется форма "Блюдо" с полем списком выбора типа блюда "Первое", "Второе", "Салат" и с полем для ввода названия конкретного блюда. Имеется также форма "Заказ" с редактируемым полем "Заказчик" и с тремя полями-списками (значения в каждом из них ищутся по лукапу по ключу "Первое", "Второе"или "Салат" соответственно из документов по первой форме). Необходимо, чтобы при изменении названия конкретного блюда в документе по первой форме, менялось название заказанного блюда в документе по второй форме. Что-то мне подсказывает, что надо использовать @DocumentUniqueID и искать значения ID документов по первой форме. Но как именно организовать изменение наименований блюд во второй-непонятно?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#2
Как вариант во втором документе значения списков заполнять в виде:
"Суп харчо|unid1"
"Борщ украинский|unid2"
...
и взвести галку "Allow keyword synonyms"
Тогда в качестве значения поля будут сохраняться юниды, а отображаться названия блюд. Правда в таком варианте нельзя будет показать названия блюд в представлениях, если только не сохранять их в отдельных полях.
 
K

Klido

Гость
#3
чтобы при изменении названия конкретного блюда в документе по первой форме, менялось название заказанного блюда в документе по второй форме
а правильно ли это? я заказал одно, а мне в заказ сделали другое? тем более историческая ретроспектива - что заказывал. то и должно быть написано...

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

Гость
#4
В документе по форме заказ необходимо лукапом искать название конкретного блюда из документа по форме блюдо. Но если ставлю аллиас после лукапа(@DbLookUp(...)|unid) в Choises полz типа DialogList, то при создании документа выводит: Incorrect data type for operator or @function:number expected. Не подскажете кратенько, как пользоваться юнидами? И что такое справочник?)
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#5
Должно быть просто @DbLookUp(...), а значения вида "Блюдо|unid" должны быть уже в столбце представления. UNID — это специальный тип данных, так что если Вы не храните его копию в документе в текстовом поле, то в формуле столбца нужно писать ...|@Text(@DocumentUniqueID)
 

Гость
#6
Так и не получилось решить эту задачу. Агентом еще не пользовался, но что-то подсказывает, что без него не обойтись) Ведь нужно чтобы в ранее созданных документах по форме заказ менялось название заказанного блюда. То есть в вид "Блюдо" z lj,fdkz.
 

Гость
#7
То есть в виде "Блюдо" я создаю колонку номер 3 со значением поля "Unid", содержащего @Text(@DocumentUniqueID). Но как использовать полученные идентификаторы для изменения значения полей Салат Первое Второе в документах вида Заказ при изменении соответствующих значений в документах по форме блюдо?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#8
Димитрий1
Если создать в представлении "Блюдо" столбец с формулой Блюдо|@Text(@DocumentUniqueID), т.е. чтобы значения столбца выглядели как
"Суп харчо|аааааааааааааааааааа"
"Борщ украинский|bbbbbbbbbbbbbbbbb"
и т.д. и лукапить именно этот столбец, то в поле со списком будет выбираться название блюда, а сохраняться — юнид. Т.о. стоит изменить название блюда, автоматически оно изменится и в документе "заказ", поскольку в нём хранится юнид, а название берётся из базы по юниду (если нет кэширования). Минус такого подхода, что нельзя отобразить название блюда из документа "заказ" в представлении и разработка должна вестись с нуля. Если же заказы уже забиты в базу, то можно в форме редактирования блюда при изменении его названия запускать агент, который отбирает коллекцию заказов с изменившимся названием блюда и сохранаяет новое значение. Для отбора документов использовать представление по форме "Заказ" с первым сортированным столбцом с названием блюда, документы получать по view.GetAllDocumentsByKey.