Коллеги, мне кажется странным, что для ввода значений в CheckBox используется нормальная, всем привычная картинка, а для отображения в списке почему-то Yes/No (при этом в обычных полях отображается нормальной галочкой).Предлагаю перейти к единому, принятому во всем софтварном мире (уж, выбирайте - классический стиль или Apple-стиль) отображению логического поля в списке. Это намного нагляднее и понятнее.
Владимир, спасибо за обратную связь.
Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях.
"Вильшанский Дмитрий" написал:Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях
Спасибо! Хочу получить обратную связь по этому вопросу. Возможно, уже сейчас имеется какая-то недокументированная возможность (Например, вместо Yes отображать "X", а вместо No - пусто)
"Владимир Соколов" написал:
Вильшанский Дмитрий пишет:
Данная информация была передана в департамент разработки для рассмотрения реализации функционала в будущих версиях
Спасибо! Хочу получить обратную связь по этому вопросу. Возможно, уже сейчас имеется какая-то недокументированная возможность (Например, вместо Yes отображать "X", а вместо No - пусто)
Недокументированная возможность есть. Можно поменять константу, которая отвечает за отображение. Другой вопрос, что эта константа может использоваться еще где то кроме реестра. Соответственно, где то может пропасть слово No, а где то изменится слово Yes. Хотя, на первый взгляд константа используется только в реестре.
Чтобы поменять константу нужно:
1. Создать новый модуль. Назвать как угодно и вписать нуда новое значение для константы
Если добавить агрегирующие функции в итоги типа "список" (как в графиках), то это упростит отчётности. Например, отобразить суммарные значения (сумма в валюте, сумма в базовой валюте, сумма налога и т.п.) по всем выписанным счетам за период по датам
Это действительно самый простой способ. Формирование списка происходит на уровне ядра. В него можно вмешаться программно, но для этого нужно чистить список, и заново добавлять значения в том порядке, в каком необходимо.
Очистить список:
Page.MyComboBoxEdit.ListPrepared=false;
Добавить пункты в список:
Page.MyComboBoxEdit.AddItem(type.Id, type.Name);
Кроме того, рекомендую обратить внимание на признак сортировки в карточке для данного контрола:
Помогите разрешить ситуацию с выбором контрагента для поставщика в счете. Сейчас список выбора поставщика включает в себя всех контрагентов имеющихся в системе, а как сделать что бы в этом списке отображались только контрагенты, у которых тип "Наша компания"?
Нужно на событие 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);}
Откройте MS SQL Management Studio и выполните следующий запрос:
select * from tbl_AccountType where Name ='Наша компания'
После этого измените функцию следующим образом:
function edtSupplierOnPrepareSelectWindow(LookupDataControl){
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var TypeID ='{12B90989-C863-42D4-A90B-DDD6024A7FED}';
ApplyDatasetFilter(LookupDataset, 'AccountTypeID', TypeID, true);}
В случае возникновения ошибки, пожалуйста, укажите здесь её текст.
Александр сообщение об ошибке не появляется, вылетает дебагер и в общем то на этом все виснет. Можно закрыть дебагер, но тогда система работает как обычно, ни какой реакции при нажатии не происходит.
Дмитрий выполнил запрос к бзае, код у меня такой же как и у вас с Александром. Сделал вставку вашего кода, проверил и ни каких изменений не произошло.
Версия Террасофта 3.3.2.107 - ни какой реакции.
Версия Террасофта 3.3.2.262 - ошибка, появляется дебагер.
Для того чтобы в списке контрагентов, при выборе поставщика в счете, отображались только контрагенты с типом "Наша компания" необходимо:
1) Запустить Terrasoft Administrator;
2) Открыть сервис sq_Account и добавить входящий параметр AccountTypeID типа уникальный идентификатор:
3) В этом же сервисе в блоке "Where" добавить фильтр сравнения AccountTypeID:
4) На событие OnPrepareSelectWindow лукапа выбора поставщика повесить обработчик:
function edtSupplierOnPrepareSelectWindow(LookupDataControl){
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var AccountTypeID ='{12B90989-C863-42D4-A90B-DDD6024A7FED}';
ApplyDatasetFilter(LookupDataset, 'AccountTypeID', AccountTypeID, true);}
5) Сохранить изменения и перезапустить клиентское приложение Terrasoft .
Проявилась проблема, теперь во всех карточках, где требуется выбрать контрагента, пусто и поиск не срабатывает (все время пусто). Как справиться с этой ситуацией?
Открыл ds_Account нашел "Поле фильтрации" и убрал галку. Ни каких изменений не произошло.
Александр возможно вы имели ввиду другую галку, в другом месте?
Для преобразования строки (набора нескольких значений через запятую) в список, предлагаю следующий пример:
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; }
Немного не так, в коде выше напутаны названия переменных, нужно писать так
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 динамически в коде, возможно ли это?
Или есть другой вариант решения задачи?
Подскажите, пожалуйста, а можно добавлять/удалять элементы у сервиса Enum через код перед его открытием (ShowSelectEnumItemWindow(EnumUSI))? Мне это сделать не удалось. Наверно, что-то не так делаю.
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){returnfalse;}
но список оказывается пустым при открытии перечисления.