Учимся редактировать записи детали раздела из карточки редактирования записи раздела

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

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

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

  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 комментарий

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

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