Dataset
датасет
Скрипты
Разработка

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

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

Нравится

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

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

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

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

Листинг обработчика поля[javascript]
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();
}
[/javascript]:

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

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


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

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

Тогда нужно так:
[javascript]
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);
}
[/javascript]

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

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

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

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

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

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

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

В таком случае, можно так:
[javascript]
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);
}
[/javascript]

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

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