Добрый день.

 

Возможно ли реализовать в системе следующую логику:

При нажатии на кнопку, появляется окно, с текстом, например, "Количество", и рядом есть возможность прописать числовое значения, тоесть, пользователь нажал кнопку, внес количество в открывшемся окне, нажал Ок, и окно закрылось.

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

 

Кнопку добавил, а вот скрипт для вышеперечисленного не могу нигде найти.

 

Спасибо. 

Нравится

2 комментария
Лучший ответ

Павел, добрый день,

Обратите внимание на метод Terrasoft.showInputBox, с его помощью можно вызвать необходимое вам всплывающее окно. Примеры реализации можно найти в других обсуждениях, например тут:

https://community.terrasoft.ua/questions/ostavit-kommentariy-po-knopke

Павел, добрый день,

Обратите внимание на метод Terrasoft.showInputBox, с его помощью можно вызвать необходимое вам всплывающее окно. Примеры реализации можно найти в других обсуждениях, например тут:

https://community.terrasoft.ua/questions/ostavit-kommentariy-po-knopke

Благодарю, реализовал, все работает.

 

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

Добрый день!
3.4.0
В разделе E-mail есть кнопка "Показать связи" - при нажатии на которое открывается
окно

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

Нравится

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

Спасибо, вопрос отменен - форма этого окна формируется динамически

Это окно wnd_MailLinks. В дизайнере в нём нет полей, они добавляются динамически в скрипте окна.

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

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

Нравится

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

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

Из "дочернего" окна можно узнать, есть ли у него родительское:

Self.Attributes('NotifyObject')

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

ZakazWindow.Prepare();
ZakazWindow.Show();
Self.Attributes('ChildForms').push(ZakazWindow);

где

Self.Attributes('ChildForms') = [];

Вроде бы получилось.
Используется аттрибут окна заказа PerformedForms
При открытии окна заказа
wndSandBurn = ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
присваивается +
wndSandBurn.Attributes('PerformedForms') ='+';
При закрытии окна заказа присваивается -
Self.Attributes('PerformedForms') = '-';
...
wnd_BaseDBEditOnCloseQuery(Window, CanClose);

В окне звонка со своими дочерними окнами можно связаться:

в wnd_CallEditScript
var Skolko = getPermission('wnd_OpportunityOrderEdit','wnd_CallEdit',Self.InstanceID);
if(Skolko > 0)
......

function getPermission(USI, USI2, RecordID) {
var Item;
for (var i = 0; i < WinCache_Windows.length; i++) {
Item = WinCache_Windows[i];
if (Item.USI == USI && Item.Instance.Attributes('NotifyObject').InstanceID == RecordID && Item.Instance.Attributes('PerformedForms') == '+')
return 1;

}
return 0;
}

Несколько модифицировав функцию, можно получать количество дочерних окон или конкретные данные из объекта.
Вопрос в чем: нет ли в таком подходе каких-то "подводных камней". При тестировании все нормально - окно видит свои дочерние окна и правильно реагирует, но мало ли...

Добрый день.

Сложно сказать. Такого функционала как сделали Вы в "коробке" нет, а значит он не тестировался.
Чисто визуально - вроде бы всё ок, проблем быть не должно.

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

ПОмогите пожалуйста! Я тока начал осваивать терасофт, никак не пойму вообще как он программируется, ни документации ничего толком нет.. Вот никак не могу узнать как сделать мне функцию автоматического создания задач в отдел монтажа по договору (Монтаж оборудования по договору для транспортных средств по договору). Начал с элементарного. При нажатии на кнопку вызвал окно с окном грида транспортных средств по договору( во вкладке договоры которое отображается внизу в пейдж контроле), Новое окно с гридом естественно пустое.. Нужно как то передать параметр ContractID для нового окна, и соответственно в новом окне отфильтровать записи по этому ID. Как передать параметр, как добавляется Dataset, как отфильтровать, на какое событие это все вешать..я тут пока ниче толком не могу понять. Если есть у кого примеры похожие - поделитесь пожалуйста! Я так понимаю, готовое окно с гридом которое я прикрепил к вызываемому мною новому окну уже имеет свой датасорс, квери и тд. Как это все отфильтровать? Что писать куда писать? Как передать номер договора на новое окно чтобы там отфильтровать?

Нравится

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

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

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

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

Найти его можно в скрипте раздела scr_ContractsWorkspace

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

В администраторе создал окно, однако, не смог его изменить его размеры растягивая окно (нет возможности), только изменяя свойства height и width.
Действительно ли отсутствует возможность изменения окна "вручную", либо необходимо указать какие-то параметры для активации такой возможности?

Нравится

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

Тоже удивился такому изменению в редакторе окон )

Удивлением это назвать сложно. Такое изменение ставит палки в колеса разработчику. Создал окно, набросал полей, а потом еще сиди и циферки подгоняй в поле height. На мой взгляд, думаю я не одинок, предыдущая реализация была более удобной с точки зрения разработки.

Исправим обязательно в ближайшее время. Хочу отметить, что такая проблема есть только с окнами у которых BorderStyle не равно wbsSizeable.

Спасибо. Жду решение.

Олег, данная проблема исправлена в сборке 3.4.0.56. Для пакета обновления, пожалуйста, напишите на suport@terrasoft.ru

Анна, спасибо. Уже запросил.

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

Почти в каждом COM-объекте Terrasoft есть методы по умолчанию. В описании интерфейса эти методы имеют нулевой id. Например, ComponentsByName в IWindow, Values в IDataset или ItemsByName в IDataFields и т.д.
А доступ к этим методам выполняется быстрее, если обращаться к ним именно как методам по умолчанию.

Т.е вместо Window.ComponentsByName('EditName') использовать Window('EditName'), вместо Dataset.Values('FieldName') использовать Dataset('FieldName') и т.д.

Для доказательства во вложении два сервиса. В примере тестирование 1 000 000 обращений к компоненту окна двумя способами.
Результаты теста:

  • через Self.ComponentsByName('Edit'): 12,1 с
  • через Self('Edit'): 8,1 с

Таким образом использование свойств по умолчанию дает ускорение в 1,5 раза.

P.S. Навеяно блогом Артема: Dataset(Название_поля>)

Нравится

Поделиться

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

Недавно заказчик захотел, чтобы, при появлении нового напоминания, свернутое окно напоминаний разворачивалось и выводилось на передний план.
В версии Terrasoft XRM 3.3.1 в стандартном функционале окно напоминаний не разворачивается при появлении нового напоминания - выполняется метод BringToFront(), но он не разворачивает свернутое окно:

Посмотрел в SDK и не нашел там еще какой-либо функции для разворачивания окна. Найти метод окна, который бы выполнял нужные мне действия, помог отладчик:

Это метод окна ForceBringToFront(), он разворачивает свернутое окно и выводит его на передний план.
Заменил вызов метода BringToFront() на ForceBringToFront(), и получил желаемый результат.

Нравится

Поделиться

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

Здраствуийте! У меня такая проблема: Создал новое окно на которое поместил два фрема. На первом фрейме расположил DataGrid а на втором кнопки. Грид связал с даталинком. Но почему то данные не отображаються в Гриде?

Нравится

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

возможно, у грида не указан ActiveView?

Странно что в дизайнере при создании первого View он не проставляется активным.

нет ActiveView указан. Проблема в чем то другом?

Там даже название полей отображаються вот только когда я данные заношу они не отображаються.

проверьте, не включен ли по умолчанию фильтр по ID в select query datasetа, данные из которого отображает грид

Нет не включен там вообще не фильтров?

А можно подробно описать порядок создания окна?

Может у Вас не окрывается датасет?
Как насчет унаследовать окно от wnd_BaseGridArea. Там много чего уже реализовано и нужно только указать правильный датасет и набор колонок.

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

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

Имеется такой вопрос: чем может грозить замена порядка Show-Prepare в функции

function ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues, UseCache) {
        if (IsUndefined(UseCache) || UseCache) {
                if (Assigned(Attributes)) {
                        var RecordID = Attributes('RecordID');
                        if (IsUndefined(RecordID) || RecordID == GUID_NULL) {
                                RecordID = EmptyStr;
                        }
                } else {
                        var RecordID = EmptyStr;
                }
                var EditWindow = WinCache_Get(EditWindowUSI, RecordID);
                if (!Assigned(EditWindow)) {
                        return;
                }
        } else {
                var EditWindow = Services.GetNewItemByUSI(EditWindowUSI);
        }
        SetAttributesByDictionary(EditWindow, Attributes);
        SetAttribute(EditWindow, 'DefaultValues', DefaultValues);
        EditWindow.Show();
        System.BeginProcessing();
        System.ProcessMessages();
        EditWindow.Prepare();
        System.EndProcessing();
        return EditWindow;
}

(скрипт scr_WindowUtils)
Замена следующая:

...
SetAttribute(EditWindow, 'DefaultValues', DefaultValues);
        System.BeginProcessing();
        System.ProcessMessages();
        EditWindow.Prepare();
        System.EndProcessing();
        EditWindow.Show();
        return EditWindow;
}

Нравится

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

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

Изменение последовательности Show-Prepare ничем страшным не грозит.

ShowEditWindowEx используется везде, где нужно открыть окно редактирования. Поэтому, если Вы хотите поменять реализацию этой функции только для каких-то конкретных случаев, можно переписать ее так:

function ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues, UseCache,

ShowAfterPrepare) {

if ((!Services.AlwaysGetLastItemVersion) &&

(IsUndefined(UseCache) || UseCache)) {

if (Assigned(Attributes)) {

var RecordID = Attributes('RecordID');

if (IsUndefined(RecordID) || RecordID == GUID_NULL) {

RecordID = EmptyStr;

}

} else {

var RecordID = EmptyStr;

}

var EditWindow = WinCache_Get(EditWindowUSI, RecordID);

if (!Assigned(EditWindow)) {

return;

}

} else {

var EditWindow = Services.GetNewItemByUSI(EditWindowUSI);

}

SetAttributesByDictionary(EditWindow, Attributes);

SetAttribute(EditWindow, 'DefaultValues', DefaultValues);

if (!ShowAfterPrepare) {

EditWindow.Show();

}

System.BeginProcessing();

System.ProcessMessages();

EditWindow.Prepare();

System.EndProcessing();

if (!!ShowAfterPrepare) {

EditWindow.Show();

}

return EditWindow;

}

А в нужном для Вас месте вызываем эту функцию с ShowAfterPrepare=true. И получим последовательность выполнения Prepare, Show. Тогда как по всей системе останется Show, Prepare

Если же хотите, чтобы эта последовательность работала по всей системе, То можно реализовать функцию так как написали Вы. Ошибки могут возникнуть только в тех окнах, в которых есть обработчики событий OnShow, при этом в них инициализируются некоторые данные, которые используются в OnPrepare.

Terrasoft Support Team

Добрый день, Дмитрий!

Реализовать данную замену не рекомендуется. Функция ShowEditWindowEx используется для показа абсолютно всех окон редактирования в системе. В случае, если происходит показ окна редактирования, в котором необходимо показать пользовательские поля, то это может привести к нарушению размеров окна (исправить которое будет очень непросто, т.к. изменение размеров выполняется компонентом UserFieldsGroup из ядра системы).
Не совсем понятно, почему возник данный вопрос. При использовании достаточно быстрых машин промежуток времени с момента показа окна и до момента завершения обработчика OnPrepare достаточно невелик и незаметен пользователю.
Желаю успехов!

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

Добрый день! Для выбора продукта в карточке "Продукт в документе"(wnd_OfferingDetailEdit) для контрола выбора продукта (edtOfferingName) создал новое окно справочника SelectWindowUSI - wnd_OfferingChoice. wnd_OfferingChoice - это новое окно от родительского wnd_OfferingsWorkspace. Для того чтобы можно было выбрать продукт быстро переключаясь по динамическим группам. Для wnd_OfferingChoice создал свой скрипт, куда скопировал весь скрипт wnd_OfferingsWorkspaceScript и добавил одну кнопку "ОК", повесил на неё обработчик:

..............
function btnOKOnClick(Control) {
    var OfferingID = dlOfferings.Dataset.Values('ID');
    Self.Close();
    return OfferingID;
}

Результат окно закрывается но в поле OfferingID карточки "Продукт в документе" ничего не записывается :(
Может как-то по-другому надо вернуть значение? Заранее спасибо!

Нравится

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

Добрый день, Сергей!

Спасибо за интересный вопрос.
Решение кроется в тексте функции ReturnSelectedValue() скрипта scr_SelectData. Там реализовано сохранение выбранных пользователем значений в атрибуты окна выбора. В Вашем случае необходимо реализовать установку значения в атрибут KeyValue Вашего окна (окно раздела Продукты, в котором осуществляется выбор). Передача выбранных значений из окна выбора в вызывающий элемент (в Вашем случае LookupDataControl) обычно реализуется через сохранение значений в атрибутах окна выбора. Вызывающий элемент затем сам считает эти значения.

Желаю успехов!

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