ПОмогите пожалуйста! Я тока начал осваивать терасофт, никак не пойму вообще как он программируется, ни документации ничего толком нет.. Вот никак не могу узнать как сделать мне функцию автоматического создания задач в отдел монтажа по договору (Монтаж оборудования по договору для транспортных средств по договору). Начал с элементарного. При нажатии на кнопку вызвал окно с окном грида транспортных средств по договору( во вкладке договоры которое отображается внизу в пейдж контроле), Новое окно с гридом естественно пустое.. Нужно как то передать параметр ContractID для нового окна, и соответственно в новом окне отфильтровать записи по этому ID. Как передать параметр, как добавляется Dataset, как отфильтровать, на какое событие это все вешать..я тут пока ниче толком не могу понять. Если есть у кого примеры похожие - поделитесь пожалуйста! Я так понимаю, готовое окно с гридом которое я прикрепил к вызываемому мною новому окну уже имеет свой датасорс, квери и тд. Как это все отфильтровать? Что писать куда писать? Как передать номер договора на новое окно чтобы там отфильтровать?

Нравится

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

Здравствуйте, Раймир!

Рекомендую обратить Ваше внимание на меню Действия в левом верхнем углу раздела Договоры. В частности, в данном меню уже реализовано создание задачи по проекту.

Вы можете взять пример программного кода из данного действия, и применить у себя.

Найти его можно в скрипте раздела scr_ContractsWorkspace

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

Здравствуйте, подскажите, как получить ссылку на интересуемый датасет (в частности, на датасет 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.

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

Доброго времени суток.
Помогите с такой проблемой: мне нужно обойти датасет с большим количеством данных по записям. Но при вызове метода Open() процесс Террасофт отъедает 2 ГБ памяти и падает. Я так думаю, что это из-за большого количества записей. Поэтому интересуюсь, возможно ли программно получать данные из датасета порциями? В гридах же записи по 40 штук как-то отображаются.

Нравится

2 комментария

Так можно получить первые 40:

	Dataset.FetchRecordsCount =40;// -1 - все записи
	Dataset.Open();

Получать все порции по очереди можно попробовать с помощью фильтра по дате создания.

Спасибо, то, что нужно.

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

Добрый день!

Подскажите, пожалуйста, логику работы DataGrid, совсем запутался.

Что я делаю:
- Есть SELECT запрос,
- есть DataSet к этому запросу,
- есть форма, на ней лежит управление и DataGrid с прописанным DatasetLink,
- есть не визуальный компонент DatasetLink (приписан соответственно),
- есть DataGridView, приписана к DataGrid,
- 2 столбца видимы.

Работает так - вводится в текстовое поле фильтр (в SELECT подставляется), нажимается кнопка и должны появиться записи в гриде, в соответствии с селектом. А ничего нет.

Я чувствую что я не делаю какую-то принципиальную вещь.

Спасибо заранее!

Нравится

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

Доброго времени суток, Алексей.
Тут: "Работает так - вводится в текстовое поле фильтр (в SELECT подставляется)" - подробнее пожалуйста. Какое поле, куда и как подставляется SELECT? Как он связан с DataGrid и DatasetLink.
В прочем, задача тоже пока не ясна.

Задача - найти в таблице tblContacts дубли фамилий, посчитать их количество, отобразить список найденных контактов в гриде.

У SELECT 2 поля - ID и Name FROM tbl_Contact WHERE фильтр типа LIKE по параметру, который включается программно.

При нажатии на, допустим, кнопку:

 if (!Assigned(ds)) {
   var ds = Services.GetNewItemByUSI('ds_findDoubleFIO');
   }
 
   var str = 'Яковлева Яна'; // Здесь данные из текстового поля
   ApplyDatasetFilter(ds, 'FIO', str, true); 
 
   ds.Close();
   ds.Open();
 
   ShowInformationDialog(ds.RecordsCount;); // для проверки работоспособности
 
   ShowEditWindowEx('wnd_findDoubleFIO'); 
  }

Количество записей показывает, т.е. датасет заполняется запросом.

Соответственно окно wnd_findDoubleFIO содержит небольшую инфу и грид, куда и надо вывести список записей датасета ds.

А как что связано у меня описано в первом сообщении.

Подскажите, что не так, пожалуйста.

Добрый день. В коде выше нет связи между ShowEditWindowEx('wnd_findDoubleFIO'); и отфильтрованым датасетом ds.
Попробуйте сначала сделать .Prepare() кокна.
Затем на его датасет наложить фильтр, или передать массивом ID записей, котороые оно должно отобразить.

В текущей реализации, окно wnd_findDoubleFIO открывается с пустым датасетом.

Я так понял - присвоение датасета гриду не означает что грид заполняется?

Если это так, то подскажите, пожалуйста, кодом - что надо дописать.

Спасибо!

Вы можете сразу с датасетом окна работать. не создавая датасет в конфигурации.

Пример из конфигурации:

	var Window = GetSingleItemByCode('wnd_SearchForSolution');
	Window.Prepare();
 
//	обратитесь к датасету окна:
	var ds = Window.ComponentsByName('dlData').Dataset
 
   var str = 'Яковлева Яна'; // Здесь данные из текстового поля
   ApplyDatasetFilter(ds, 'FIO', str, true); 
   RefreshDataset(ds);
 
   if(ds.RecordsCount > 0) {
	Window.Show();      
   }

То что надо! Спасибо!

Появилась новая проблема, мне нужно отображать в окне tbl_Contact.Name и ответственного за него, но в таблице tbl_Contact есть только tbl_Contact.OwnerID. Как мне в одном запросе и отобразить tbl_Contact.Name и найти Name по tbl_Contact.OwnerID ?

Или можно только программно сравнивать ID и подставлять в строчку уже NAME?

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

"Соляник Алексей" написал:Как мне в одном запросе и отобразить tbl_Contact.Name и найти Name по tbl_Contact.OwnerID ?

Если я правильно поняла проблему, то нужно отобразить ответственного по контакту?
В запросе sq_ContactЮ для поля ответсвенного есть 2 колонки: OwnerID (про которую Вы говорите, из таблицы tbl_Contact.OwnerID) и OwnerName (из таблицы tbl_Owner.Name, которая приджойнена к основной таблице: Left join tbl_Contact as tbl_Owner). В датасете для поля-справочника источник данных указан как ds_Owner.
Если же Вы и так работаете с датасетом Контакта, а значение нужно вывести в текстовое поле, то можно попробовать написать так:
var OwnerName = Dataset.DisplayValues('OwnerID')
или
var OwnerName = Dataset.DataFields('OwnerID').DisplayValue, что, в принципе, одно и то же...
Или Вы имели что-то другое ввиду, задавая этот вопрос?

Или Вы имели что-то другое ввиду, задавая этот вопрос?

Да, к сожалению другое.

Есть одна таблица tbl_Contact, в ней есть поля ID, Name, OwnerID и другие. Поле OwnerID - это ссылка на tbl_Contact.ID.

Т.е. по-русски говоря все контакты в одной таблице, у каждого есть ответственный (owner), который находится также в этой же таблице как простой контакт.

Алексей, в запросе sq_Contact присутствует колонка OwnerName, которая отображает Name ответственного у контакта.
Если Вам нужно строковое поле, которое будет отображать имя ответственного у контакта, добавьте в датасет поле со ссылкой на данную колонку.

Спасибо!!!

Сделал по аналогии с sq_Contact в своем запросе left join и все стало ок! Спасибо еще раз!

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

Добрый день!
Суть дела такова: каким образом связать в FastReport Dataset и MemoryDataset? C двумя Dataset'ами - все понятно, ну а с MemoryDataset - вопрос, так как он заполняется не из select query. Или все же связь будет, если и там и там будет поле одинакового названия, например, ds_A.ID и mds_B.ID?

Нравится

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

Здравствуйте.

От обычного датасета MemoryDataset отличается лишь тем, что у него нет SelectQuery, он не работает с базой вообще и может лишь хранить список записей (не постранично), и позволять вставку, редактирование, удаление и навигацию по записям. Заполнять датасет лучше всего в обработчике его события OnDatasetAfterOpen. Это значит, выполнять нужное количество раз операции:

Dataset.Append();
Dataset.Values('MyField') = MyValue;
Dataset.Post();

Такой датасет можно использовать в отчете, но при использовании его как DetailData Dataset, вам нужно каждый раз на OnDatsetAfterOpen заполнять вручную теми данными, которые являются "дочерними" для MasterData.

Также рекомендую ознакомится со следующей темами: http://www.community.terrasoft.ua/forum/topic/1630
http://www.community.terrasoft.ua/forum/topic/1312

Спасибо, Дмитрий, за ответ. Тему http://www.community.terrasoft.ua/forum/topic/1630 я уже видел, мне подобный способ не подходит. Этот вопрос был задан для реализации такого функционала http://www.community.terrasoft.ua/forum/topic/8365, а с помощью компонента DBCrossTab я не вижу возможности добиться подобной гибкости.

Constantine, в таком случае нужно вручную в коде заполнять MDS теми данными, которые бы мы получили в обычном Dataset'e c помощью sq, со включенным фильтром сравнения tbl_ChildTable.ParentID = :Parameter ParentID.

"Олейник Дмитрий" написал:в таком случае нужно вручную в коде заполнять MDS теми данными, которые бы мы получили в обычном Dataset'e c помощью sq, со включенным фильтром сравнения tbl_ChildTable.ParentID = :Parameter ParentID.

это все понятно, но как связать MasterData и DetailData? у них у обоих есть поле ID, в которых хранятся равные значения для связи, но как системе указать, что связывать их нужно именно по этим полям? на данный момент, как только я после MasterData ставлю DetailData, никаких данных не выводится вообще

Здравствуйте.

Master и Detail Data связываются указанием для Detail Data свойства MasterData. Для Master Data и Detail Data также привязываются датасеты (главный и подчиненный соответственно). Для того, чтобы в Detail Data была отображена только та информация, которая является подчиненной по какому либо признаку по отношению к Master Data, в сервисе Select query мы включаем фильтр сравнения, по какому либо полю таблицы, которое будет сравниваться с значением первичного ключа (ID) главного датасета.
Соответственно, в Detail Data, датасетом которой является MDS, такой фильтр включить не получится, именно потому, для корректного построения отчета, необходимо вручную заполнять его теми данными, которые будут уже отфильтрованы по полю внешнего ключа (т.е по первичному полю для главного датасета).

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

Добрый день!!!

Можно ли в TS создавать динамический запрос SelectQuery, на основе его создавать колонки в DataSet, и на основе DataSet создавать GridColumns?

Задача такая: в зависимости от выбранного типа операции в Grid'e нужно показывать тот или иной набор столбцов данных. Конечное число столбцов неизвестно, т.к. каждый месяц для новых операций могут быть разные кол-во столбцов и их типы данных.

Нравится

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

Здравствуйте, Нурбек.

В следующем примере создается динамически запрос SelectQuery, на основе его создаются поля DataField в Dataset, и на основе созданных DataField добавляются колонки в GridView:

funtion Test()
{
var sq = CreateSelectQuery("Common\\" , 'sq_MySelect4');
var FromTable = Services.GetNewItemByUSI('tbl_MyTable');
var Select = CreateSelectQuerySelect(sq, FromTable, 'MySelect');
var GrivView = Services.GetNewItemByUSI('gvGridView');
AddColumn(Select, FromTable.Fields('ID'));
AddColumn(Select, FromTable.Fields('Namus'));
 
var Dataset = CreateDataset('Common\\' , 'ds_MySelect4' ,sq);
var DataFields = Dataset.DataFields;
var DataField = AddStringDataField(DataFields, 'ID', 'ID', 38, true, false);
//AddStringDataField(DataFields, DataFieldName, DataFieldCaption, TextLength, IsDisplayField, IsSearchField)
DataField.IsFilteringField = false;
DataField.IsReadOnly = true;
Dataset.KeyDataField = DataField;
var GridColumn = CreateGridColumn(DataField, GridView)
DataField = AddStringDataField(DataFields, 'Namus', 'Namus', 250, true, true);
GridColumn = CreateGridColumn(DataField, GridView)
}

Однако, для реализации Вашей задачи, рекомендую Вам добавить в GridView все существующие колонки, а потом, при выборе определенного типа, скрывать "не нужные" колонки:

function wnd_BaseGridAreaOnPrepare(Window) {
        Initialize(Window);
        colTitle.IsVisible = false;
}

У меня список операций, может часто меняться. И в зависимости от новых операций нужно добавлять поля в таблицу-справочник. а оттуда уже нужно динамически генерировать запрос с переменным числом столбов.

Запрос динамически как получить уже понял (разработана функция, возвращает SQL запрос с разным числом столбцов). Остается запрос присвоить сервису SelectQuery

select o.rec_id_billing,
s.name_service,
max(decode(f.name_field, 'msisdn', o.value)) msisdn,
max(decode(f.name_field, 'balance', o.value)) balance
from tbl_ServiceFields sf,
tbl_Fields f,
tbl_Services s,
tbl_Types t,
tbl_OperValues o
where s.service_id = 1
and s.service_id = sf.id_service
and f.id_field = sf.id_field
and t.id_type = f.id_type
and sf.ids = o.serv_field_id
group by o.rec_id_billing, s.name_service
order by o.rec_id_billing, s.name_service

У меня вот такой вот запрос. Здесь каждый раз динамически добавляются столбцы вида max(decode(f.name_field, 'msisdn', o.value)) msisdn. Можно ли такой Custom столбец указать в FromTable? Такой столбец выбирается не из основной таблицы. Как такой столбец добавить в SelectQuery? И в случае когда в запросе есть group by как в selectQuery добавить такую группировку?

Нурбек, для начала Вам необходимо создать сервис SelectQuery:

var sq = CreateSelectQuery("Common\\" , 'sq_MySelect');

Далее, указать с какой таблицы будет производиться выборка данных:

var FromTable = Services.GetNewItemByUSI('tbl_MyTable');

Далее создать блок Select для созданного SelectQuery:

var Select = CreateSelectQuerySelect(sq, FromTable, 'MySelect');

и добавить нужное Вам число колонок с таблицы:

AddColumn(Select, FromTable.Fields('ID'));

Предлагаю сгенерированный Вами SQL запрос разбить на массив строк по некоторому признаку, так чтобы получить название строк которые необходимо выбрать. К примеру
var SQLQuery = 'SELECT ID, Name FROM tbl_Table';
SQLQuery = SQLQuery.split(' ');

Тогда добавлять колонки в блок Select для созданного SelectQuery можно в цикле:

for(var i = 1; SQLQuery.length; i++)
{
if(SQLQuery[i] == 'FROM')
{
break;
}
var SQLColumn = SQLQuery[i].split(',');
AddColumn(Select, FromTable.Fields('SQLColumn[0]'));
}
}

var GridColumn = CreateGridColumn(DataField, GridView)
var GridColumn = CreateGridColumn(DataField, GridView)
DataField = AddStringDataField(DataFields, 'Namus', 'Namus', 250, true, true);
GridColumn = CreateGridColumn(DataField, GridView)

В самой последней строке возникает ошибка, система не может найти функцию CreateGridColumn(DataField, GridView). Где находится эта функция? (у нас версия 3.3.2.210)
По GrepSearch система не может ее найти

Здравствуйте, Нурбек!

Функция CreateGridColumn(DataField, GridView) имеет следующий вид:

function CreateGridColumn(DataField, GridView) {
	var FieldType = DataField.FieldType;
	var FieldName = DataField.Name;
	var ColName = 'col' + GridView.Name + FieldName;
	var GridColumn = Self.CreateComponent('DataGridColumn', ColName);
	GridColumn.DataFieldName = FieldName;
    var Dataset = DataField.ParentDataFields.ParentDataset;    
    if (Dataset.Columns) {    
		var DatasetColumn = Dataset.Columns.CoreItemsByKey(DataField.KeyValue);
		if (DatasetColumn) {
	    	GridColumn.SummaryType = DatasetColumn.SummaryType;
		}
	}
	GridView.Add(GridColumn);
	return GridColumn;
}

Отлично, спасибо. Сделали все по вашим постам. Все работает

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

Если для двух полей в датасете с одинаковым заголовком (в моем случае «контрагент») установить свойство Display Field (поле для отображения), то при обращении к датасету (в моем случае, использовании справочника) будет происходить свал с текстом:

1

Поэтому одинаковых заголовков следует избегать

1

Нравится

Поделиться

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

Создал таблицу из трех полей Name, Address, Balance. Создал запрос на выборку, набор данных и форму для вывода содержимого этой таблицы. На форме разместил DataGrid и три поля ввода. Все привязал к набору данных. Также сделал три кнопки btnAppend, btnPost и btnClick с такими обработчиками событий:

function btnAppendOnClick(Control) {
        dlCustomer.Dataset.Append();
}

function btnPostOnClick(Control) {
        dlCustomer.Dataset.Post();
}

function btnDeleteOnClick(Control) {
        dlCustomer.Dataset.Delete();
}

function wnd_CustomerOnPrepare(Window) {
        dlCustomer.Dataset.Open();
}

Обновление и удаление записей происходит нормально. Но при изменении одного поля происходит следующее: значение измененного поля в базу попадает, а все остальные поля этой становятся пустыми.
Как мне сделать так, чтобы другие поля не устанавливались в Null?

Нравится

2 комментария

Здравствуйте, Петр!

При редактировании датасета необходимо:

1. Установить указатель на текущую запись (либо отфильтровать)
2. Открыть датасет на чтение Dataset.Open();
3. Открыть датасет на запись Dataset.Edit();
4. Присвоить полю значение.
5. Записать в базу данных Dataset.Post()

Эта проблема возникает только если Update выполняется из Terrasoft Administrator. Для того, что бы обновления работало правильно, запустите созданное Вами окно с помощью параметра командной строки, например TSClient.exe /wnd=wnd_Customer.

Учтите что обычно в одном окне в Террасофт одновременно не производится и редактирование и отображение данных. Для этого отдельно создается окно реестра и редактирования.

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

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

Нравится

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

Мне кажется, у элемента управления должно быть событие OnExit.

Если имеются ввиду изменения значений в полях датасета, то для этого у него есть событие OnDatasetDataChange

Здравствуйте, Валерий!

Если речь идет о Terrasoft 3.Х, то, как и написала Ольга, у поля есть событие OnExit.

img1

Если же речь идет о BPMonline (поскольку данный пост находится в ветке форума BPMonline), то там у полей есть событие "Фокус потерян".

img2

Инна Безверхняя,
II линия службы поддержки Terrasoft.

Речь идет именно о Terrasoft 3.Х.
Изменил метку записи.

Спасибо, за ответы, но неужели нельзя было сделать это при окончательном изменении и выходе из поля.
Если что-то очень быстро печатать в textdatacontrol или numericdatacontrol или в datagrid'e, то ядро не успевает обрабатывать изменения и выходит exception.

Пришлось сделать на Ondatachange флаг изменен и на onexit IntegerDataControl при наличии этого флага выполнить изменения.

А как быть с DataGrid? Какое событие выполняется при переходе на другую колонку?

Здравствуйте, Валерий.

Для отлавливания перехода на другую колонку в гриде можно использовать событие OnSelectionChange грида. В это событие передается DataGrid у которого есть свойство SelectedColumn, таким образом Вы сможете отследить, если колонка изменилась.

Инна Безверхняя,
II линия службы поддержки Terrasoft.

Спасибо Инна, спасибо Ольга, спасибо Валерий!
Проблема улажена!
Удачного вам дня!

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

Здравствуйте.

Сделал свою форму редактирования справочника, по этому описанию. Но, в моем справочнике есть поля типа boolean, для которых я добавил на форму редактирования контрол CheckBox (можно и RadioButton). У этих контролов нет свойства DataField, следовательно нужно при сохранении как-то читать значения из этих контролов, и руками пихать их в сохраняемую строку датасета. Кто-нибудь реализовывал такое?

Нравится

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

Вам нужен BoolDataControl.

"Глова Сергей" написал:Вам нужен BoolDataControl.

Сергей, большое спасибо, заработало).

"Глова Сергей" написал:

Вам нужен BoolDataControl.


Использую BoolDataControl для трёх полей, а возможно ли использовать в форме checkbox, при клике на который автоматически ставятся галочки в полях BoolDataControl?

Здравствуйте, Максим.

Для автоматической установки галочек в соответствии с содержимым базы данных служит BoolDataControl. Поведение CheckBox можно отдельно описать в скриптах карточки, обращаясь к свойству IsChecked:

Пример:

if (Dataset('BoolFiled') == true){
  CheckBox.IsChecked == true;
}

"Alimova Anna" написал:

Здравствуйте, Максим.

Для автоматической установки галочек в соответствии с содержимым базы данных служит BoolDataControl. Поведение CheckBox можно отдельно описать в скриптах карточки, обращаясь к свойству IsChecked:

Пример:

if (Dataset('BoolFiled') == true){

  CheckBox.IsChecked == true;

}

С уважением, Анна Алимова

Специалист II линии технической поддержки Terrasoft


при попытке что в оригинале (с заменой переменных), что с модифицированным скриптом выдаёт ошибку.

Попробуйте CheckBox.IsChecked = true

Уточните, пожалуйста, как у Вас называется элемент управления чекбокс?

В каком месте программного кода Вы пытаетесь добавить проверку? Объявлена ли там переменная датасета?

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