Добрый день!
Дано: карточка "Продажи", поле "состояние", поле "причина победы".
В данный момент поле "причина победы" становится доступным для заполнения только если в поле "состояние" значение "выполнена".
Вопрос: как расшить эти поля, т.е. поле "причина победы" должно быть доступно для заполнения в любом случае.

Спасибо!

Нравится

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

Нужно открыть скрипт карточки wnd_OpporttunityEditScript. Там есть функции:

function UpdateFinishControls(IsEnabled){
	edtWinner.IsEnabled = IsEnabled;
	edtWinningReason.IsEnabled = IsEnabled;
}
 
function UpdateFinishControlsByDataset(Dataset) {
	var StatusID = Dataset.Values('StatusID');
	var IsFinish;
	if (!IsEmptyGUID(StatusID)){
		IsFinish = GetDetailSummary('tbl_OpportunityStatus', 'ID', StatusID, 
			'IsFinish', stNone);
	} else {
		IsFinish = false;
	}
	//this needs to handle null values
	var IsFinishControlsEnabled = (IsFinish == true);
	UpdateFinishControls(IsFinishControlsEnabled);
}

Собственно, первая включает или выключает поля, связанные с победой. А вторая - проверяет состояние продажи и если оно относится к конечным - запускает первую для изменения доступности этих полей.

Если эта логика не нужна - можно закомментировать содержимое функции UpdateFinishControlsByDataset целиком или только её последнюю строку.

"Зверев Александр" написал:

Если эта логика не нужна - можно закомментировать содержимое функции UpdateFinishControlsByDataset целиком или только её последнюю строку.


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

Например, так:

function UpdateFinishControlsByDataset(Dataset) {
/*
         var StatusID = Dataset.Values('StatusID');
         var IsFinish;
         if (!IsEmptyGUID(StatusID)){
                 IsFinish = GetDetailSummary('tbl_OpportunityStatus', 'ID', StatusID, 
                         'IsFinish', stNone);
         } else {
                 IsFinish = false;
         }
         //this needs to handle null values
         var IsFinishControlsEnabled = (IsFinish == true);
         UpdateFinishControls(IsFinishControlsEnabled);
*/
}

Поле перестало быть доступным при любом значении поля "состояние" :sad:

А, ещё в функции wnd_OpportunityEditOnPrepare закомментировать строку:

 	UpdateFinishControls(OpportunityEdit.OldStatusIsFinish);

то есть станет:

 	//UpdateFinishControls(OpportunityEdit.OldStatusIsFinish);

Всё, работает! Спасибо!

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

Есть необходимость сделать обязательным поле "Ответственный" в карточке контрагента, так чтобы нельзя было сохранить карточку с пустым полем.
Где это можно сделать в TSAdmin? Или есть другие варианты?
Заранее спасибо!

Нравится

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

Откройте в TSAdmin сервис ds_Account, спозиционируйтесь на поле Owner и поставьте галочку "Обязательное для заполнения".

Здравствуйте, Дмитрий!
если поле все время должно быть обязательным, то достаточно поставить галочку "обязательное" в датасете:
датасет
если обязательность зависит от определенного условия, то скриптом это можно реализовать так:

if(условие) {
Dataset.DataFields('OwnerID').IsRequired = true;
}
else {
Dataset.DataFields('OwnerID').IsRequired = false;
}

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

Да, надо чтобы постоянно.
Все сделал! Спасибо обеим Ольгам :)

"Ольга Прилипко" написал:

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



если обязательность зависит от определенного условия, то скриптом это можно реализовать так:

if(условие) {

Dataset.DataFields('OwnerID').IsRequired = true;

}

else {

Dataset.DataFields('OwnerID').IsRequired = false;

}

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

Ольга, а как быть, если работа ведется в окне без датасета(просто окно с полями, которые необходимо делать обязательными для заполнения в зависимости от условий)?

Аналогично:

<имя поля>.IsRequired = <условие>;

"Раловец Ольга" написал:

Аналогично:

<имя поля>.IsRequired = <условие>;

Пробовал, не получается

Возможно необходимо подключить какой-то скрипт(подключен только scr_WindowUtils)?

у простых контролов, не Дата, нет такого свойства (IsRequired). как вариант, могу предложить прописать проверку заполненности полей при нажатии на кнопку "ок". если что-то не заполнено, то выдавать сообщение, а саму карточку в таком случае не закрывать.

Спасибо, такое решение я знаю, описывать подробно нет необходимости.

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

Есть необходимость переименовать во всей системе, глобально, где есть упоминания два поля: Ответственный и Автор на Исполнитель и Ответственный соотв., т.к. нам кажется такой порядок более логичным и понятным.

Посему вопрос: нет ли здесь подводных камней, не столкнемся ли с проблемами к примеру, при обновлении версии и пр, и можно ли это сделать на уровне запроса в БД или эти наименования могут храниться не только в БД?

Нравится

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

изменения будут храниться (1) в сервисах таблиц и датасетов (меняем соответствующие названия полей), т. е. метаданные; (2) в названиях полей таблиц непосредственно в базе (так как переименовываем в сервисах таблиц).
повлияет на процесс перехода на новую версию однозначно - пакет перехода делается универсальным, а у вас внесены изменения - поэтому при обновлении версии переносим свои изменения руками

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

Добрый день!

В БД в таблице tbl_TaskType присутствует поле Field1, но в сервисе tbl_TaskType в Администраторе Terrasoft это поле не отображается. При попытке добавить поле в сервис, отображается ошибка о повторении имени поля.
В этой колонке содержатся нужные данные, каким образом можно его подтянуть в сервис?

Нравится

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

Попробуйте сначала сохранить сервис таблицы без сохранения в БД, а потом с.

простите, не поняла:confused:

Создаете в сервисе таблицы tbl_TaskType поле Field1. Сохраняете. На вопрос "изменить таблицу в БД?" отвечаете "нет".
Переоткрываете сервис, переименовываете поле Field1. Сохраняете. На вопрос "изменить таблицу в БД?" отвечаете "да".

Спасибо, Сергей, именно, это я имела ввиду :) По идее при такой последовательности должно восстановиться соответствие.

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

Добрый день!
Вопрос следующий, можно ли из скрипта элемента процесса "Задача" изменять свойства полей той задачи которая будет использоваться?
Т.е. в обработчике события OnAfterExecute элемента "Задача" я бы хотел изменять свойства IsReadOnly или IsVisible некоторых полей.
Возможно ли такое ?
Если нет то какие варианты можете предложить кроме использования элементов DataEdit и Datatransfer?

Нравится

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

Андрей, в обработчике события OnAfterExecute это вряд ли получится, так как в этот момент карточка задачи уже сформирована и открыта. Можно попробовать реализовать следующую схему: при обработке события OnBeforeExecute элемента процесса устанавливать значение некоторого параметра (в котором, например, сохранять список названий полей для изменения), потом в OnExecute скрипта элемента процесса анализировать его значение и передавать с помощью атрибутов в скрипт окна редактирования, и уже в скрипте окна редактирования при обработке OnPrepare анализировать значение переданного атрибута (если задача является элементом процесса) и в зависимости от его значения изменять свойства контролов.

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

Здравствуйте, Коллеги!
Проконсультируйте, плз., по такому вопросу:
Создаём новое поле типа Справочник в карточке контрагента (к примеру, поле "Специалст Юридического отдела" со ссылкой на справочник Контакты). Значение заносится, но не сохраняется. После сохранения и закрытия карточки, открываем вновь - поле пусто. Подскажите в чём может быть проблема?
Версия TS XRM 3.3.0.
Заранее благодарен.

С уважением,
Сергей.

Нравится

Поделиться

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

Проверьте sq_Account, скорее всего "потерялась" привязка поля из таблицы к колонке запроса.

Спасибо, Валерий!
Помогло. Действительно с sq_Account немного намудрили.

Сергей.

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

Добрый день!
Возникла потребность в создании поля на общем окне TasksWorkspace. В поле должно отображаться количество задач которые есть в реестре. То есть, когда пользователь заходит на закладку "Все задачи" и снимает галочку с "себя" и с "показать за период" то в данном поле должно отображаться общее количество задач.
Подскажите как можно организовать такой подсчет записей.

Нравится

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

Можно просто в гриде включить "Итоги" и выбрать для какой-нибудь колонки итог "Количество", тогда такое поле и подсчет не понадобится.
--------------------------------------------
Лабитек
Центр разработки приложений

Разместите элемент окна типа NumericEdit в окне wnd_TasksWorkspace и на событие компонента dlTasks OnDatasetAfterOpen этого же окна заполняйте его свойство Value значением Dataset.RecordsCount. Только имейте ввиду, что обращение к свойству RecordsCount набора данных порождает дополнительный запрос вида SELECT COUNT(*) FROM ...

"Репко Артём" написал:Dataset.RecordsCount

Артем можно еще использовать GetSummaries и GetSummary

Спасибо, очень помогло !

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

Есть проблема:
в карточке есть поле "Состояние", имеет аттрибут обязательного, источник - справочник.
Выставил на него уровень доступа - только чтение. Соответственно поле стало серым, то есть не активным. С созданными ранее карточками проблем нет.
Но есть проблема с вновь создаваемыми карточками: по-умолчанию данные не хотят вставляться, хотя при полном доступе все ок, система требует заполнить обязательное поле и следовательно карточка не сохраняется.

Как решается?

Нравится

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

Тут одно или другое, не может быть обязательное поле на чтение. Или уберите ограничение на чтение, или уберите ограничение обязательное.

"Осауленко Александр" написал:Тут одно или другое, не может быть обязательное поле на чтение. Или уберите ограничение на чтение, или уберите ограничение обязательное.

система не умеет автоматически ставить данные в ограниченные поля?
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

Ну если у поля стоит признак только на чтение, то было бы странно, чтобы можно было положить туда значение.

а как тогда решить этот вопрос?
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

Сначала Вам необходимо решить какое из ограничений важнее. Или оба?

оба важны
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

Необходимо отказаться от проверки ограничения чего-то одного на уровне БД. И реализовать это ограничение на уровне приложения.

Нужно разобраться с бизнес-логикой. Объясните зачем Вам понадобилось такое противоречие?
Пользователь, может только заводить документы, но не должен управлять их состояниями?
Тогда нужно оставить доступ на поле на изменение, но пусть пользоватеь видит (доступ на чтение) только то состояние, которое проставляется по-умолчанию (например, "Новый").
Правда для этого нужно будет включить раздачу прав по записям на этот справочник и скриптами раздавать доступ на записи состояния.

Юлия, карточку могут создавать все, только определенная группа не может изменять состояние этой карточки(записи).
Насколько я вижу, в системе при раздаче прав доступа на поле есть только "Полный доступ", "Запрет" и "Чтение", а "Изменения" там нет.

"Старун Юлия" написал:Правда для этого нужно будет включить раздачу прав по записям на этот справочник и скриптами раздавать доступ на записи состояния.

спасибо, передам программисту
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

Полный доступ - это и есть изменение :)
А вот то, что определенная группа не может именно "менять" состояние. Т.е. должны иметь право видеть ВСЕ состояния, но не менять его. При этом иметь возможность записывать начальное состояние.
Мой предыдущий вариант не проходит.
Тут нужно именно скриптами закрыть право изменения поля в карточке группе пользователей.

"Старун Юлия" написал: Я попрошу глянуть пример реализации разработчиков.

спасибо
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

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

Как при добавлении записи формировать одно поле из других,
например поля [Заголовок] формировать по шаблону: «Клиент» / «Дата»?

Нравится

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

Александр, Вы можете это реализовать в обработчике события dlDataOnDatasetDataChange окна редактирования записи. Если название изменяемого поля совпадает с названием поля "Клиент" или "Дата" в датасете, устанавливаем значение поля "Заголовок". Например, так:

function dlDataOnDatasetDataChange(DataField) {
        var DataFields = DataField.ParentDataFields;
        var Dataset = DataFields.ParentDataset;	
	var Value = DataField.Value;
	var Name = DataField.Name;
        ...
	switch (Name) {
		case ('ClientID'):
		case ('Date'):
                        var DateValue = DataFields.ItemsByName('Date').Value;
                        var ClientName = DataFields.ItemsByName('ClientID').DisplayValue;
			Dataset.Values('Title') = ClientName + ' / ' + DateValue; 
			break;
		...
	}
}

Предполагается, что в датасете имена полей следующие: "Заголовок" - строковое поле Title; "Клиент" - поле типа "Справочник" ClientID; "Дата" - поле типа "Дата/время" Date.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Спасибо, Олег - все работает.

У меня есть еще вопрос.

Для каждой записи есть поле «Статус» и поле «Вариант».
Как изначально заблокировать поле «Вариант» и
если выбран статус «Выполнен», разблокировать поле «Вариант» и сделать обязательным для заполнения?

SDK
SDK1

Там все подробно расписано.

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

Доброго дня !
Я добавив декілька елементів типу IntegerDataControl на карточку контрагента, коли я створюю новий запис все добре вводиться і зберігається, але коли я пробую редагувати ці поля в старих записах - дані, які я ввожу, не зберігаються в цих полях. Тобто на карточці дані обнуляються після вводу, на місці потрібного числа автоматично встановлюється "0".
Невже мені прийдеться поновому переписувати всю інформацію ?

Нравится

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