Вопрос

не могу понять как работать с CheckBox

Добрый день.

Я пока не сильно разобрался во всей структуре CRM,поэтому прошу помощи у вас.

Проблема в слебующем:
На форме wnd_TaskEdit есть CheckBox (отображать в расписании). Задача банальная сделать так что бы он всегда был выбран, то есть свойство IsChecked при открытии окна было True, но всегда была возможность изменить это состояние при нажатии на него.

Установить ему это состояние на шаге обработки скрипта метода OnShow, получилось следующее:
Скрипт (scr_TaskEdit)
...
function wnd_TaskEditOnShow(Window) {
if (chbShowInScheduler.IsChecked == false){
chbShowInScheduler.IsChecked = true;
}
}
Но что то не отрабатывают эти строки как нужно.

Подскажите как быть в моей ситуации, есть ли более легкий способ?
Заранее благодарен.

P.S. Версия CRM 3.0

У меня такой же вопрос

7 комментариев
// scr_TaskEdit
function dlDataOnDatasetAfterAppend(Dataset) {
	...
	chbShowInScheduler.DataField.Value = true; // добавьте эту строку
}

Хм. Простите меня за не понятливось (я привык писать проги на делфи и поэтому немного в замешательстве в этом синтаксисе)

Я поробовал вставить выше написанную строку в function wnd_TaskEditOnShow(Window) {
но ничего не произошло.

на данный момент все выглядет как:
function dlDataOnDatasetAfterAppend(Dataset) {
if (chbShowInScheduler.IsChecked == false){
chbShowInScheduler.IsChecked = true;
chbShowInScheduler.DataField.Value = true;
}
Но все рано не работает.

Если можно поподробнее объясните все эти танцы с бубном...
Заранее благодарен.

вам нужно именно на событие AfterAppend (создание записи), функция OnShow не совсем верное решение, поскольку это событие вызывается всегда, когда вы открываете карточку редактирования, то есть даже если у вас в базе лежит false для указанного поля, то при открытии оно станет true - а это не верно. А AfterAppend происходит только при создании новой записи, как вам и нужно, если я верно понимаю. Затем вы можете смело менять его значение кликом и оно будет сохранено в базе, при последующем открытии карточки этой записи, вы увидите именно то значение, которое было в базе.

Поля Ответственный, Дата начала и тд, которые заполнены при создании новой Задачи, заполняются так же на событии AfterAppend.

// ds_TaskScript
function SelfOnDatasetAfterAppend(Dataset) {
	InitRecordOwnerData(Dataset);
	FillTaskDefaultValues(Dataset); // это функция заполненяет поля задачи: Ответственный и др
	ds_TaskScript.StatusChanged = false;
}
 
function FillTaskDefaultValues(Dataset) { 
	Dataset.DisableEvents();
	var DefaultTaskDateTime = GetDefaultTaskDateTime();
	Dataset.ValAsDateTime('StartDate') =
		DefaultTaskDateTime.StartDate.getVarDate();
	Dataset.ValAsDateTime('DueDate') =
		DefaultTaskDateTime.DueDate.getVarDate();
	UpdateDuration(Dataset);
	Dataset.Values('OwnerID') = Connector.CurrentUser.ContactID;
	Dataset.Values('AuthorID') = Connector.CurrentUser.ContactID;
	var TaskDefs = GetTaskDefs();
	Dataset.Values('StatusID') = TaskDefs.NotStartedStatusID;
	Dataset.Values('TypeID') = TaskDefs.TypeID;
	Dataset.Values('PriorityID') = TaskDefs.PriorityID;
        Dataset.Values('ShowInScheduler') = true; // можете добавить эту строку
	Dataset.EnableEvents();
 
}

Не мучайте событие OnShow, попробуйте AfterAppend - это точно работает.

Хм, очень интерессно, но тогда еще один вопрос просто ради развития:
"В делфи можно описать исключение из события, если на событие действует какой либо внешний фактор. Нпример это нажатие на кнопку "Добавить", т.е. при нажатии на не вешаем отображение созданной формы и можно изменять параметры в данном случае это будет CheckBox.checked := true а в другом событии. например открытие на редактирование записи из БД например CheckBox.checked := ADOTale1.FieldsByName('Столбец').asboolean".
Я и тут хочу реализовать именно вот эту ситуацию, что при создании задачи этот парамер по умолчанию находится в состоянии true(и в случае необходимости можно было бы его изменить прям там), а если вызванна форма для редактирования данных то значение берется из БД.

Если говорить прям аж совсем кратко то мне необходимо изменить состояние по умолчанию при создании задачи, а не присваивать значение в принудительном порядке.

AfterAppend - событие происходит только при создании новой записи
OnPrepare и OnShow - создание, редактирование записи.

"Чередниченко Олег Григорьевич" написал:Я и тут хочу реализовать именно вот эту ситуацию, что при создании задачи этот парамер по умолчанию находится в состоянии true(и в случае необходимости можно было бы его изменить прям там), а если вызванна форма для редактирования данных то значение берется из БД.

Именно так и получится, если вы добавите ту строку, о которой упомянуто выше.
Не бойтесь попробовать, если что-то не получится, вы всегда можете удалить ее:)

не совсем понятно значение фразы:

"Чередниченко Олег Григорьевич" написал:а не присваивать значение в принудительном порядке.

Все, разобрался.
Большое Спасибо.

Подскажите, а если сейчас столкнулись с таком же вопросом, данное решение поможет? Или теперь как то по другому делать нужно?

Войдите или зарегистрируйтесь, чтобы комментировать