Коллеги, мне кажется странным, что для ввода значений в 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. Наслаждаться.

Показать все комментарии
Если добавить агрегирующие функции в итоги типа "список" (как в графиках), то это упростит отчётности. Например, отобразить суммарные значения (сумма в валюте, сумма в базовой валюте, сумма налога и т.п.) по всем выписанным счетам за период по датам
1 комментарий

Добрый день!

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

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

BPM On-Site 5.2.0
На странице есть выпадающий список, в котором выводятся данные из справочника.

Вопрос: как задать в выпадающем списке строго определенную последовательность, а не отсортированную по алфавиту?

Нравится

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

Можно создать доп.поле в справочнике пронумеровать в нужном порядке 01,02 и т.д и по нему сортировать ...

Пока самый простой способ нашел: в значения полей дописывать:
1. Встреча
2. Звонок
3. Отправка e-mail

Здравствуйте, Илья!

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

Очистить список:

Page.MyComboBoxEdit.ListPrepared = false;

Добавить пункты в список:

Page.MyComboBoxEdit.AddItem(type.Id, type.Name);

Кроме того, рекомендую обратить внимание на признак сортировки в карточке для данного контрола:
SortDropDownImage

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

Здравствуйте Террасофт!

Помогите разрешить ситуацию с выбором контрагента для поставщика в счете. Сейчас список выбора поставщика включает в себя всех контрагентов имеющихся в системе, а как сделать что бы в этом списке отображались только контрагенты, у которых тип "Наша компания"?

Нравится

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

Нужно на событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик вроде:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	var LookupDataset = LookupDataControl.DataField.LookupDataset;	
	var TypeID = atOur;//константа с GUID, описать в scr_Consts
	ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Содержание константы - ID записи в tbl_AccountType с текстом "Наша компания".

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

"Березин Игорь Викторович" написал:"не нравится atOur". Прошу рабочее решение?

Нужно посмотреть значение поля ID в записи в таблице tbl_AccountType с текстом "Наша компания". Это можно сделать в СУБД или нажатием кнопки "предпросмотр" и затем "выполнить SQL" на sq_AccountType.

Потом в скрипт scr_Consts внести строку вроде:

//Наша компания
var atOur= '{12B90989-C863-42D4-A90B-DDD6024A7FED}';

Тогда заработает. Только значение константы может быть другим.

А ещё такая константа может быть изначально, попробуйте вместо atOur написать так:

 var TypeID = OurCompanyAccountType;

И ничего смотреть в БД не понадобится.

"Березин Игорь Викторович" написал:мне требуется сделать так, что бы по умолчанию было пусто

См. аналогичное решение здесь.

Не работает!
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.
В итоге такой скрипт получился:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
	//TODO
	var LookupDataset = LookupDataControl.DataField.LookupDataset;  
    var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';//константа с GUID, описать в scr_Consts
    ApplyDatasetFilter(LookupDataset, 'TypeID', TypeID, true);
}

Александр вы случаем не представитель компании Террасофт?
Когда вы отвечаете, мне почему то 7 сообщений подряд на почту приходит.
Не знаю куда сообщить о данном баге?

А так:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = OurCompanyAccountType;
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

Сообщения приходят при каждой правке комментария.

Ситуация со скриптом не изменилась.
OurCompanyAccountType - присутствует в scr_Consts.

По сообщениям понятно, спасибо.

"Березин Игорь Викторович" написал:Ситуация со скриптом не изменилась.

А какое сообщение об ошибке возникает?

Здравствуйте, Игорь!

Откройте MS SQL Management Studio и выполните следующий запрос:

select * from tbl_AccountType where Name = 'Наша компания'

1

После этого измените функцию следующим образом:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var TypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);
}

В случае возникновения ошибки, пожалуйста, укажите здесь её текст.

"Березин Игорь Викторович" написал:По сообщениям понятно, спасибо.

Как я вас понимаю...:smile:

Александр сообщение об ошибке не появляется, вылетает дебагер и в общем то на этом все виснет. Можно закрыть дебагер, но тогда система работает как обычно, ни какой реакции при нажатии не происходит.

Дмитрий выполнил запрос к бзае, код у меня такой же как и у вас с Александром. Сделал вставку вашего кода, проверил и ни каких изменений не произошло.
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.

Здравствуйте, Игорь!

Для того чтобы в списке контрагентов, при выборе поставщика в счете, отображались только контрагенты с типом "Наша компания" необходимо:

1) Запустить Terrasoft Administrator;
2) Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:
1
3) В этом же сервисе в блоке "Where" добавить фильтр сравнения AccountTypeID:
2
4) На событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик:

function edtSupplierOnPrepareSelectWindow(LookupDataControl) {
         var LookupDataset = LookupDataControl.DataField.LookupDataset;  
         var AccountTypeID = '{12B90989-C863-42D4-A90B-DDD6024A7FED}';
         ApplyDatasetFilter(LookupDataset, 'AccountTypeID', AccountTypeID, true);
}

5) Сохранить изменения и перезапустить клиентское приложение Terrasoft .

"Олейник Дмитрий" написал:Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:

Неужели этот фильтр не существует "в коробке" изначально? Удивительно.

Ура заработало!

Всем спасибо за помощь.

Проявилась проблема, теперь во всех карточках, где требуется выбрать контрагента, пусто и поиск не срабатывает (все время пусто). Как справиться с этой ситуацией?

Видимо, новосозданный фильтр AccountTypeID стал включенным. Надо снять галку у него.

Открыл ds_Account нашел "Поле фильтрации" и убрал галку. Ни каких изменений не произошло.
Александр возможно вы имели ввиду другую галку, в другом месте?

В sq_Account фильтр сравнения AccountTypeID должен быть отключён по умолчанию и включаться только когда надо.

Заработало!
Спасибо Александр.

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

Для преобразования строки (набора нескольких значений через запятую) в список, предлагаю следующий пример:

function CreateStringListByCommaString(CommaString) {
var StringsList = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.split(',');
for (var i in StringDataArray) {
var StrData = StringDataArray[i];
StringsList.Add(StrData);
}
}
return StringsList;
}

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

Подскажите пожалуйста можно ли этот StringsList отобразить в визуальном компоненте?

Можно отобразить его свойства Text и CommaText.

Немного не так, в коде выше напутаны названия переменных, нужно писать так

var CommaString = System.CreateObject('TSObjectLibrary.StringsList');
if (CommaString != null) {
var StringDataArray = CommaString.CommaText.split(',');
...

Пример:

function btnOKOnClick(Control) {
var my = GetAttribute(Control.ParentWindow, 'nn');		
 
if (my != null) {
var StringDataArray = my.CommaText.split(',');
for (var i in StringDataArray) {
MessageBox(StringDataArray[i]);
} 
}
 
 
}
 
function Main() {
	var Window = Services.GetNewItemByUSI('wnd_Testing');
	Window.IsDesigning = false;
	Window.Prepare();
	Window.Show();
}
 
function wnd_TestingOnPrepare(Window) {
var arr =  System.CreateObject('TSObjectLibrary.StringsList');
arr.Add('1');
arr.Add('2');
SetAttribute(Window, 'nn', arr);
}
Показать все комментарии

Добрый день!

Необходима помощь знающих людей в следующем вопросе:

на карточке редактирования есть два поля. Первое поле типа справочник. При выборе значения в первом поле необходимо заполнить выпадающий список для второго поля, что бы пользователь смог выбрать только определенные значения. Значения для списка второго поля вычисляются в коде. Они не постоянны, поскольку один из элементов вычисления имеет переменное значение.
Идеальным вариантом был бы мемори датасет, но не получилось привязать его к контролу EnumDataControl.
Так же есть идея заполнять сервис Enum динамически в коде, возможно ли это?
Или есть другой вариант решения задачи?

Заранее благодарю!!!

Нравится

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

http://terrasoft.com.ua/sdk/
IEnumExample.js - пример динамического заполнения перечисления.

спасибо!

Подскажите, пожалуйста, а можно добавлять/удалять элементы у сервиса Enum через код перед его открытием (ShowSelectEnumItemWindow(EnumUSI))? Мне это сделать не удалось. Наверно, что-то не так делаю.

www.informicus.ru

Конечно можно, IEnum в SDK посмотрите.
Что именно не удалось ?

1) Создала сервис Enum без значений.
2) далее заполняю и вызываю его следующим образом в коде:

var enm_ShowsForDay = Services.GetNewItemByUSI('enm_ShowsForDay');
	for (var i = 1; i <= 13; i++) {
	    var EnumItem = enm_ShowsForDay.CreateItem();
	    EnumItem.ID = EnumItem.Code = 'TranslationsPerBlock_' + i;
	    EnumItem.Caption = i;
	    enm_ShowsForDay.Add(EnumItem);
	}
 
	try{
		var TrsPerBlock = parseInt((ShowSelectEnumItemWindow('enm_ShowsForDay')).ResultValue.Caption);
	}
	catch (e){
		return false;
	}

но список оказывается пустым при открытии перечисления.

www.informicus.ru

Разобралась сама.
В функции ShowSelectEnumItemWindow просто заново объект создавался.

var Enum = Services.GetNewItemByUSI('EnumUSI');

создала рядом копию функции,но без вышеуказанной строки.

www.informicus.ru

Кстати перечисления кажется по GetSingleItemByUSI получать надо.

"Underscore a.k.a. _" написал:Кстати перечисления кажется по GetSingleItemByUSI получать надо.

Почему?
GetSingleItemByCode ()
Services.GetNewItemByUSI()

"Раловец Ольга" написал:Почему?
GetSingleItemByCode ()
Services.GetNewItemByUSI()

Прошу прощения, я Вас не совсем понял :)
Я хотел сказать что перечисления как и таблицы получаем с помощью метода GetSingleItemByUSI объекта Services.

Я всегда считала, что правильно Services.GetNewItemByUSI(), но похоже и Services.GetSingleItemByUSI() тоже работает.

:redface:

Но я надеюсь Вы осознаете и исправитесь :) На самом деле немного стыдно, два раза подряд Вас так ткунуть. Но это было сильнее меня :)

"Underscore a.k.a. _" написал:На самом деле немного стыдно, два раза подряд Вас так ткунуть

Что Вы, напротив, я ценю конструктивную критику.

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