Полезным оказался нескольким пользователям функционал радеатирования записи детали по, скажем, контрагенту, из его карточки редактирования. Реализация не сложная, много времни не заберет ;)
Покажу на примере карточки контрагента, и Детали[Платежные реквизиты].
Предположим, в карточке контрагента нужно иметь выбрать одну из записей датели с платежными реквизитами.
Начнем с сервисов раздела контрагенты:
- Запускаем Terrasoft Administrator, неходим и открываем в нем сервис Accounts\General\Main Grid\tbl_Account
- Добавляем в него новое поле типа GUID, AccountINNID
- Добавляем связь по вторичному ключу для этого поля (Relation)
Сохраняем сервис tbl_Account с обновлением структуры таблицы в БД.
- Находим и открываем сервис Accounts\General\Main Grid\sq_Account, добавьте в него выборку поля AccountINNID
- После того как в выборку будет добавленно поле AccountINNID в Select, привязываем к ней через Join таблицу tbl_AccountBillingInfo
Настраиваем привязку по полям tbl_AccountBillingInfo.ID = tbl_Account.AccountINNID
- Затем добавляем в Select выборку поля INN из таблицы tbl_AccountBillingInfo и задаем ему псевдоним (Alias) = AccountINN
- Теперь можно добавить поле AccountINNID справочного типа LookupDataField в Датасет Accounts\General\Main Grid\ds_Account, связав его с датасетом ds_AccountBillingInfo, и указав поле для отображения AccountINN
- Открываем сервис карточки редактирования контрагента, wnd_AccountEdit, добавьте в него поле типа LookupDataControl связав его с полем AccountINNID датасета
- Для этого же поля, перейдя на закладку События задаем обработчик события OnPrepareSelectWindow:
В тело обработчика вставляем код:
function edtAccountINNOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
var LookupDataset = LookupDataControl.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'AccountID', dlData.Dataset('ID'), true);
SelectWindow.Attributes('DisplayFieldNames') = 'Name;INN';
SelectWindow.Attributes('SearchFieldNames') = 'INN';
SelectWindow.Attributes('KeyFieldName') = 'ID';
SelectWindow.Attributes('KeyValue') = null;
SelectWindow.Attributes('SearchFieldName') = 'INN';
var DefaultValues = GetNewDictionary();
DefaultValues.Add('AccountID', dlData.Dataset('ID'));
DefaultValues.Add('INN', null);
SelectWindow.Attributes('DefaultValues') = DefaultValues;
LookupDataset.Attributes('EditWindowUSI') = 'wnd_AccountBillingInfoEdit';
}
- При необходимости вывести поле Account INN в реестр контрагентов, включите его в сервисе wnd_AccountGridArea
После того как все вышеописанное будет проделано, сохранено и перезагружено клиентское приложение, в карточке контрагента, появится lookup контрол, позволяющий выбирать, устанавливать, управлять платежными реквизитами контрагента прямо из его карточки редактирования.
В случае необходимости сделать поле INN обязательным для всех типов реквизитов, отвяжите его в настройках пользовательских полей от всех типов записей:
Файл :: Настройки :: Пользовательские поля:
И добавьте его вручную на форму редактирования платежных реквизитов в сервисе Accounts\Details\Billing Information\wnd_AccountBillingInfoEdit как строковое.