Проблема с отображением данных в LookupDataControl

Необходимо добавить в Задачу поле "продукт в договоре".
//Сервис tbl_
1. Добавил новое поле в таблицу (Уникальный идентификатор)
2. Добавил зависимость в таблицу на это поле
//Сервис sq_
3. Создал join с таблицей OfferintInContract, а так как у этой таблицы нет названия продукта к ней добавил 4.
4. Создал join между OfferingInContract и Offering
5. Добавил поле OfferingInContractID
6. Добавил поле OfferingInContractName - Name из 4 пункта
//Сервис ds_
7. Добавил поле OfferingInContractID а для отображения OfferingInContractName
//Сервис wnd_
8. Добавил LookupDataControl и указал созданное поле из ds_

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

Нравится

17 комментариев

1. В запрос необходимо вытянуть название из присоединенной таблицы tbl_Offering:

01

2. В датасете необходимо создавать поле типа LookupDataField:

02

3. Настройки поля датасета должны быть следующими:

03

А я разве ни так написал?

Здравствуйте Александр,
Мне немного непонятна ваша задача.
Вам в карточке Задача нужно отображать продукт, почему бы не добавить OfferingID в таблицу tbl_Task, добавить связать в sq_Task, вынести OfferingName с tbl_ tbl_Offering и OfferingID c таблицы tbl_Task, дальше добавить фильтровать данное лукапное поле по полю "Договор" в задаче.

Это можно сделать по событию OnPrepareSelectWindow лукапного поля, пример фильтрации в карточке Контрагент, фильтрация поле Город по выбранной ранее Стране

Александр,

а что у Вас в колонке запроса OfferingInContacName? Именно ее содержимое и подставляется в поле.

Александр,

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

Не нужно создавать поле Name в tbl_OfferingInContract - мы будем подтягивать его из tbl_Offering по идентификатору.

Переделайте поле OfferingInContractName так, как указано в моем первом комментарии:

001

В первом комментарии у вас sq_offeringininvoice, а я работаю с sq_task.
Пусть это не важно. В sq_task уже есть поле offering, как оно связанно с продуктом в договоре я так и не понял?

Удалил из sq_task поле OfferingInContacName и связанные таблицы из которых я это поле пытался вытащить. В sq_task оставил одно поле OfferingInContacID. Как нужно настроить его в ds_task, что бы решить эту проблему? И еще одно поле продукт будет пустым когда мы буде использовать поле "Продукт в договоре"

Алексей, мне нужно именно продукт в договоре, продукт в задаче уже есть, в договоре может быть два одинаковых продукта с разными ценами. Поэтому задача связать задачу именно с продуктом в договоре. А при выборе договора, я уже сделал фильтрацию для поля "продукт в договоре".

Александ, воспроизвёл данную проблему,
Суть в том что когда вы добавляете поле справочника, то указываете по какому ID (1) фильтровать справочник для отображения (2), и поле для отображения (3).
1

В Вашем случае OfferingInContractID - это ID записи в детали, и ID которое отображается в карточке, это и есть ID детали, в то время когда корректным для отображения будет OfferingID.

Советую вам сделать как описано в моем комментарии выше

Вы хотите сказать что поле OfferingInContractID в tbl_Task добавлять не нужно, а в место него добавить OfferingID, или я вас не правильно понял? Если правильно, то объясните, если в договоре два одинаковых продукта, как я узнаю к какому именно "продукту в договоре" принадлежит задача?

Александр, это определяется связями таблиц. Когда Вы связываете tbl_Task c tbl_Contact по идентификатору договора, у Вас подтягивается правильный договор. Затем связываете tbl_Contract уже отфильтрованный по договору с tbl_OfferingInContract, которая благодаря связи тоже фильтруется по идентификатору договора.

Анна, мы друг друга не понимаем, надеюсь что я Вас. Попытаюсь еще раз объяснить исходя из вашего последнего сообщения. У задачи есть поле OfferingID и поле ContractID.
Поле tbl_Task.ContractID связывается c tbl_OfferingInContract.ContractID.
У таблицы tbl_OfferingInContract есть поле OfferingID. Так вот В у договоров бывает два одинаковых продукта, т.е. в таблице по этому договору будет две записи с одинаковым OfferingId. Мне нужно создать задачу по этому продукту но т.к. OfferingID одинаковый мне как то нужно привязать к задаче нужный продукт, поэтому я не могу использовать OfferingID, так как он не уникальный, поэтому мне нужно использовать именно OfferingInContractID. Если я Вас не понял, напишите как сделать в скринах, буду очень благодарен. Я не думал что с такой пустяковой проблемой будет столько проблем.

Здравствуйте Александр,
Проверил еще раз, в моей реализации ID записи с детали подставляется только в случае первого добавления в карточку, после того как карточку пере открыть поле отображается корректно.
Обыграть такое поведения LookUpDataControl без дополнительного программирования не получится (возможно, даже подмена компоненты LookUpDataControl на Edit со смарт-кнопкой)
Данные действительно корректно подставляются с детали, и количество и сумма отображается корректно.
Если данное поведение LookUpDataControl критично будем думать над обходными вариантами.

Замечание:
Колонки для отображения
1
в справочнике можно устанавливать признаком "Поле для отображения" в ds_OfferingInContract
2

Алексей, насчет поля для отображения, я так и сделал. Насчет переоткрытия я то же знаю. Хочу попробовать изменить таблицу OfferingInContract и добавить туда OfferingName, ну и заполнять его когда создается новый продукт в договоре. Получиться обычный справочник. Буду пробовать.

Спасибо всем, разобрался сам, решение было действительно простым, сделал так же как и в начале, просто для лоокапного поля использовал не dsOfferingInContract а создал свое с нужными мне полями и все получилось. Еще раз, спасибо!!!

Показать все комментарии