Полезным оказался нескольким пользователям функционал радеатирования записи детали по, скажем, контрагенту, из его карточки редактирования. Реализация не сложная, много времни не заберет ;)

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

Начнем с сервисов раздела контрагенты:

  1. Запускаем Terrasoft Administrator, неходим и открываем в нем сервис Accounts\General\Main Grid\tbl_Account
  2. Добавляем в него новое поле типа GUID, AccountINNID2_tbl_account_1.png
  3. Добавляем связь по вторичному ключу для этого поля (Relation)
    3_tbl_account_1.png
    3_tbl_account_2.png
    Сохраняем сервис tbl_Account с обновлением структуры таблицы в БД.
  4. Находим и открываем сервис Accounts\General\Main Grid\sq_Account, добавьте в него выборку поля AccountINNID
    4_sq_account_1.png
  5. После того как в выборку будет добавленно поле AccountINNID в Select, привязываем к ней через Join таблицу tbl_AccountBillingInfo
    5_sq_account_1.png
    Настраиваем привязку по полям tbl_AccountBillingInfo.ID = tbl_Account.AccountINNID
    5_sq_account_2.png
  6. Затем добавляем в Select выборку поля INN из таблицы tbl_AccountBillingInfo и задаем ему псевдоним (Alias) = AccountINN
    6_sq_account_1.png
  7. Теперь можно добавить поле AccountINNID справочного типа LookupDataField в Датасет Accounts\General\Main Grid\ds_Account, связав его с датасетом ds_AccountBillingInfo, и указав поле для отображения AccountINN
    7_sq_account_1.png
  8. Открываем сервис карточки редактирования контрагента, wnd_AccountEdit, добавьте в него поле типа LookupDataControl связав его с полем AccountINNID датасета
    8_wnd_account_1.png
  9. Для этого же поля, перейдя на закладку События задаем обработчик события OnPrepareSelectWindow:
    9_wnd_account_1.png
    В тело обработчика вставляем код:
    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';

    }
  10. При необходимости вывести поле Account INN в реестр контрагентов, включите его в сервисе wnd_AccountGridArea
    13_wnd_account_1.png

После того как все вышеописанное будет проделано, сохранено и перезагружено клиентское приложение, в карточке контрагента, появится lookup контрол, позволяющий выбирать, устанавливать, управлять платежными реквизитами контрагента прямо из его карточки редактирования.
14_result_1.png
14_result_2.png
14_result_3.png
14_result_4.png
В случае необходимости сделать поле INN обязательным для всех типов реквизитов, отвяжите его в настройках пользовательских полей от всех типов записей:
Файл :: Настройки :: Пользовательские поля:
14_result_5.png
И добавьте его вручную на форму редактирования платежных реквизитов в сервисе Accounts\Details\Billing Information\wnd_AccountBillingInfoEdit как строковое.
14_result_6.png

Нравится

Поделиться

1 комментарий

Спасибо, Павел !!! побольше бы таких уроков ! Супер!

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