Ссылка на интересуемый датасет

Здравствуйте, подскажите, как получить ссылку на интересуемый датасет (в частности, на датасет ds_Invoice)?

Нравится

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

Добрый день!
Можно создать экземпляр датасета:
var DS = Services.GetNewItemByUSI('ds_Invoices');
есть также функция фильтрация датасета, ApplyDataSetFilter, посмотрите примеры в конфигурации воспользовавшись глобальным поиском alt+shift+S

Мне в чате подсказали, что это можно сделать так:
var ContractDataset = Services.GetNewItemByUSI('ds_Invoice');
Однако, при передаче первым параметром СontractDataset в функцию ApplyDatasetFilter() Террасофт ругается на именно на первый параметр.

Общая задача: отфильтровать выборку значений поля

Листинг обработчика поля

function edtContractIDOnPrepareSelectWindow(LookupDataControl) {//обработчик поля "Договор"
    var OrderDataset = dlData.Dataset;
    var InvoiceID = GetFieldValueFromDisabledField(OrderDataset, 'InvoiceID');
    var ContractDataset = Services.GetNewItemByUSI('ds_Invoice');    
    ContractDataset.DisableEvents();
    var IsEnabled = (!IsEmptyValue(InvoiceID));
    ApplyDatasetFilter(ContractDataset, 'InvoiceID', InvoiceID, IsEnabled);	
    ContractDataset.Open();
    ContractDataset.Close();	   
}

:

"Борисов Михаил Евгеньевич" написал:

var Dataset = Services.GetSingleItemByUSI('ds_Invoice');


Не помогло, всё равно - ошибка

Оно ругается, поскольку в sq_Invoice нет фильтра InvoiceID. Вы вообще что хотите получить, отфильтровать договор по значению счёта?

Тогда нужно так:

function edtContractOnPrepareSelectWindow(LookupDataControl) {
        var Dataset = dlData.Dataset;
        var InvoiceID = GetFieldValueFromDisabledField(Dataset, 'InvoiceID');
        var LookupDataset = LookupDataControl.DataField.LookupDataset;
        var IsEnabled = (!IsEmptyValue(InvoiceID));
        ApplyDatasetFilter(LookupDataset, 'InvoiceID', InvoiceID, IsEnabled);
}

А ссылка на ds_Invoice тут не нужна.

Александр, соглашусь, я уже тут подзапутался и действительно, мой скрипт неправильный.
Я пробовал, как Вы говорите. В sq_Contract не было необходимого параметра, поэтому я сначала добавил соответствующие изменения сначала в tbl_Contract (новое поле "Связанный счет"), потом в ds_Contract, а потом добавил параметр InvoiceID в sq_Contract
Однако, работа скрипта типа того, что вы мне написали (в названии "ID" после edtContract пропущено) фильтрует абсолютно все записи.
И связано это с тем, что при создании договора новое поле "InvoiceID" ("Связанный счет") не инициализируется. От счета можно перейти к связанному договору, а обратно - нет. Получается мне сначала нужно реализовать эту обратную связь, чтобы при заполнении в счёте поля "Договор" в самом договоре инициализровалось поле связанный счет? Тогда подскажите как это сделать?

Сначала объясните, что вообще хотите сделать. Добавлять новое поле, если оно не используется, не нужно.

Как у вас связаны между собой договор и счёт, какие договора хотите получить, зная счёт?

В заявке есть поле "Счет" и есть поле "Договор". В свою очередь у счета тоже есть поле "Договор" (то есть, договор связанный с этим, конкретным счетом). Мне нужно, чтобы в заявке, при заполнении поля "Договор" осуществлялась выборка только тех договоров, которые связаны с выбранным счетом.

А смысл тогда вообще фильтровать, если со счётом может быть связан только один договор? Выбор из одного варианта?
Может, лучше просто при выборе счёта автоматически записывать в поле "договор" заявки договор из счёта?

Я не уточнил, нужно дать возможность добавить новый или оставить поле пустым.
Вариант фильтрации устраивает, но он не работает

В таком случае, можно так:

function edtContractIDOnPrepareSelectWindow(LookupDataControl) {
        var Dataset = dlData.Dataset;
        var InvoiceID = GetFieldValueFromDisabledField(Dataset, 'InvoiceID');
        var ContractID = GetDatasetFieldValueByID('ds_Invoice', InvoiceID, 'ContractID');//вместо кучи кода с Services.GetNewItemByUSI
        var LookupDataset = LookupDataControl.DataField.LookupDataset;
        var IsEnabled = (!IsEmptyValue(ContractID));
        ApplyDatasetFilter(LookupDataset, 'ID', ContractID, IsEnabled);
}

Благодарю, всё получилось!
Займусь разбором написанного Вами кода по SDK.

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