Вопрос

Доброго времени суток! Подскажите, пожалуйста, как добавить CheckBox в средства связи. Для средства связи добавил в объекте логическое значение, например с названием "UsrIsMain".

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

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

Мягко говоря не тривиальная задача, посмотрите как в BaseCommunication формируются конфиги для элементов управления для существующих в короюке типов комуникации и по аналогии для своего (добавленного) логического типа создайте конфиг для контрола. 

Григорий Чех,

В принципе мне понятно, как конфиг строится. Добавлял TextEdit поле, Lookup поле. А вот CheckBox не получается, выбрасывает ошибку следующую:
 

message: Cannot read property 'changeEvent' of undefined 
 date: Thu Jun 13 2019 11:01:45 GMT+0300 (Москва, стандартное время)
moduleId: CardModuleV2_########GUID###########_ContactPageV2_detail_ContactCommunication
moduleName: DetailModuleV2

Строил сам CheckBox вот так:
{
                        className: "Terrasoft.CheckBoxEdit",
                        id: "CheckBoxEditId",
                        classes: {
                            wrapClass: ["communication-detail-edit-user-class", "communication-additional-edit-label-wrap"]
                        },
                        value: {
                            bindTo: "UsrIsMain"
                        },
                        change: {
                            bindTo: "changeIsMainFlag"
                        }
  };

Сама функция changeIsMainFlag объявлена в ViewConfig'е.

 

Григорий Чех,

Вообще видел уже два поста в коммьюнити, которые тоже не понимали, как CheckBox вставить в Средства связи. Ответа там так и не было.

В детали средств связи контакта в пакете MarketingCampaign есть такое поле «Не актуальный» (NonActual) у каждого средства связи. Посмотреть на реализацию можно в схеме ContactCommunicationDetail.

Войдите или зарегистрируйтесь, чтобы комментировать
Идея
Часто бывает нужен CheckBox с 3 состояниями:Yes - позитивный вариант (TRUE) No - негативный вариант (FALSE) ? - вариант не выбран (NULL) Сейчас приходится обходить это специальным Lookup, но там выбирать не так удобное. Для третьего варианта можно использовать, например, изображение с gmail
Обсуждение
1 комментарий

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

Владимир, технически не получится, так как логический тип хранится в памяти с использованием одного бита, поэтому может хранить в себе только два значения 1 или 0 (True или False).

Детальное описание логического типа находится по ссылке: https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%8…

Поэтому для решения задачи следует подбирать обходные варианты, например, как в Вашем случае со справочником.

Войдите или зарегистрируйтесь, чтобы комментировать
Идея
Коллеги, мне кажется странным, что для ввода значений в CheckBox используется нормальная, всем привычная картинка, а для отображения в списке почему-то Yes/No (при этом в обычных полях отображается нормальной галочкой).Предлагаю перейти к единому, принятому во всем софтварном мире (уж, выбирайте - классический стиль или Apple-стиль) отображению логического поля в списке. Это намного нагляднее и понятнее.
Ревью
3 комментария

Владимир, спасибо за обратную связь.
Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях.

"Вильшанский Дмитрий" написал:Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях

Спасибо! Хочу получить обратную связь по этому вопросу. Возможно, уже сейчас имеется какая-то недокументированная возможность (Например, вместо Yes отображать "X", а вместо No - пусто)

"Владимир Соколов" написал:
Вильшанский Дмитрий пишет:

Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях

Спасибо! Хочу получить обратную связь по этому вопросу. Возможно, уже сейчас имеется какая-то недокументированная возможность (Например, вместо Yes отображать "X", а вместо No - пусто)

Недокументированная возможность есть. Можно поменять константу, которая отвечает за отображение. Другой вопрос, что эта константа может использоваться еще где то кроме реестра. Соответственно, где то может пропасть слово No, а где то изменится слово Yes. Хотя, на первый взгляд константа используется только в реестре.

Чтобы поменять константу нужно:
1. Создать новый модуль. Назвать как угодно и вписать нуда новое значение для константы

Создание модуля

define("UsrChangeLookupRowCountModule", ["terrasoft"], function(Terrasoft){
Terrasoft.Resources.CommonUtils.FalseStringValue = " ";
Terrasoft.Resources.CommonUtils.TrueStringValue = "+";
});

Пример создания модуля.

модуль

2. Заместить BootstrapModules и добавить свой модуль. Не пропустить комы между модулями.

Создание замещающего модуля

Замещение

3. Все сохранить, почистить кеш, перезайти на сайт.
4. Наслаждаться.

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

Добрый день!
Столкнулся с задачей - необходимо сбросить чекбокс в карточке счета при выполнении бизнес-процесса.
Какое значение нужно присвоить колонке?
скрин

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

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

Рома, здравствуйте.

Установить необходимо true или false.

Спасибо, Максим!

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

Нужно кодом проставить "галочку" в CheckBoxEdit, при этом необходимо избежать срабатывания обработчика, назначенного на IsMyEditCheck.
Такой вариант не помогает, обработчик все равно срабатывает:sad:

Page.MyEdit.SuspendAjaxEvents();
...
Page.MyEdit.ResumeAjaxEvents();

Подскажите, как бы добиться отключения событий?

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

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

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

Уточните, вы точно вызываете эти два метода для контрола CheckBox, а не Edit?

Page.PeriodCheckBox.SuspendAjaxEvents();
Page.PeriodCheckBox.ResumeAjaxEvents();

Попробуйте следующим способом:

Page.MyEdit.SuspendAjaxEvents();
Page.AddScript(Page.MyEdit.ClientID + “.setChecked(1)”);
Page.MyEdit.ResumeAjaxEvents();

А вот еще родился интересный вопрос.
Допустим, мне надо отключить события для кучи полей на карточке, заполнить их значениями и затем включить обратно.

Page.FieldAEdit.SuspendAjaxEvents();
Page.FieldBEdit.SuspendAjaxEvents();
Page.FieldCEdit.SuspendAjaxEvents();
// много много раз

А может есть какой способ для Page и всего ее содержимого события отключить? Чтобы не писать для каждого контрола индивидуально...

Для всей станицы, насколько я знаю нет, я вот для фрейма (который включает в себе n-контролов) - да.

А что мешает сделать параметр-флаг и во всех обработчиках проверять его значение, если установлен, то выходить.

"Олейник Дмитрий" написал:

Для всей станицы, насколько я знаю нет, я вот для фрейма (который включает в себе n-контролов) - да.


Спасибо, попробую!
"Зверев Александр" написал:

А что мешает сделать параметр-флаг и во всех обработчиках проверять его значение, если установлен, то выходить.


Тоже вариант решения, но интересна была возможность массовых операций:smile:

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

Доброго дня, уважаемое террасофт-сообщество!

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

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

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

Чтобы редактировать данные в реестре у Datagrid свойство IsEditable нужно установить в true.

По собственной невнимательности просмотрел.
Спасибо, Ольга.

Всегда пожалуйста :)

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

Добрый день.

Я пока не сильно разобрался во всей структуре 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(и в случае необходимости можно было бы его изменить прям там), а если вызванна форма для редактирования данных то значение берется из БД.

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

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

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

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

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

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