Как получить одно из значений полей главного реестра (по текущей позиции) при создании новой записи в детали.

Добрый день.
Коллеги я только начал программировать помогите новичку.
Задача: Отфильтровать значения в LookupDataControl находящейся а карточке редактирования детали по типу записей в основном реестре.

Т.е мне необходимо передать одно из значений полей основного реестра на котором в данный момент стоит курсор (к которой будут прикрепляться детали) для последующего передачи его в фильтр. Как получить данное значение?

Спасибо.

Нравится

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

Получаем ID записи в основном реестре:

ParentItemID = GetAttribute(Window, 'ParentItemID');

По нему получаем другое поле:

MyFieldID = GetDatasetFieldValueByID('ds_Account', ParentItemID, 'MyFieldID');

Затем по нему уже фильтруем:

var Dataset = LookupControl.LookupDatasetLink.Dataset;
ApplyDatasetFilter(Dataset, 'MyFieldID', MyFieldID, true);

Фильтрацию делать в обработчике события OnPrepareSelectWindow, а получение поля - заранее при открытии карточки, чтобы не выполнять его каждый раз.

Коллеги большое спасибо. Заработало.
Как я понял выражение
ParentItemID = GetAttribute(Window, 'ParentItemID');
позволяет получить ID ссылки на основную таблицу.
Скажите а как получить текущий ID записи область Detail.
Задача: При открытии формы редактирования из текущей таблицы (область Detail) заполнить поля формы.
Спасибо.

ID получить можно просто как dlData.Dataset('ID'). Если нужно написать свою логику заполнения полей при открытии карточки, её можно написать в обработчике OnPrepare окна. Но в начале или конце этой функции не забыть вписать wnd_BaseDBEditOnPrepare(Window); чтобы отработала стандартная логика.

Уважаемый Александр. при добавлении

function wnd_BaseDBEditOnPrepare(Window) {

var TekId = dlData.Dataset.Values('ID');
ShowInformationDialog(TekId);

wnd_BaseDBEditOnPrepare(Window);
}

система жалуется на то что dataset не открыт

Да, действительно, он как раз открывается в функции wnd_BaseDBEditOnPrepare. Её лучше перенести в начало, должно заработать.

Уважаемый Александр!
При переносе элемента wnd_BaseDBEditOnPrepare(Window); в начало выходит ошибка
0x800a001c - Ошибка выполнения Microsoft JScript: Недостаточно места в стеке

так же если до этого места (в конце) доходит компилятор.
Вот весь скрипт:

function wnd_BaseDBEditOnPrepare(Window) {
wnd_BaseDBEditOnPrepare(Window);
TekId = dlData.Dataset.Values('ID');
ShowInformationDialog(TekId);
}

Мне всего лишь необходимо определить ID таблицы детали на которой происходит вызов окна редактирования.

Заранее спасибо.

Обработчик события должен называтья иначе, чем базовый. Например, для карточки задачи function wnd_TaskEditOnPrepare(Window). Переименуйте в коде скрипта и списке событий окна, где она вызывается. Если очистить ячейку в списке событий формы и кликнуть двойным кликом, то заготовка функции сгенерируется сама. Туда и перенесите вызов базовой и свою логику.

Большое спасибо все заработало!!!

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