Создаю карточку счета в БП. Затем мне надо открыть деталь продукты в счете как отдельное окно. Для этого использую следующий скрипт:
var OfferingInInvoiceGridArea = GetSingleItemByCode('wnd_OfferingsDetailTreeArea', Connector.GenGUID());
OfferingInInvoiceGridArea.Attributes('ParentItemFieldName') = 'InvoiceID';
OfferingInInvoiceGridArea.Attributes('DatasetUSI') = 'ds_OfferingInInvoice';
OfferingInInvoiceGridArea.Prepare();
OfferingInInvoiceGridArea.Attributes('ParentItemID') = InvoiceID;
var Dataset = OfferingInInvoiceGridArea.ComponentsByName('dlData').Dataset;
ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, true);
Dataset.Open();
OfferingInInvoiceGridArea.ShowModal();
Вся проблема в том что окно модальное, иначе БП перейдет к следующему шагу, не дождавшись закрытия окна. Как сделать, чтобы это окно открывалось наподобие карточки счета не модально и учитывалось как шаг БП? Только, пожалуйста, не предлагайте мне ставить курсор на деталь в реестре счетов и не спрашивайте почему я не хочу так делать.
Нравится
А куда я запишу все те действия которые происходят в скрипте? В карточке ведь можно настроить только ограниченные вещи?
"Рябенко Андрей" написал:А куда я запишу все те действия которые происходят в скрипте?
не вижу в приведенном коде каких-то "действий", если у вас там еще что-то происходит, то опять же смотря что :smile: Возможно это что-то можно сделать после открытия окна (если эти действия не касаются открываемого грида)
А какой пункт выбрать: Карточка редактирования или другое окно? Если другое окно, то как настроить фильтрацию? Если карточку редактирования то окно может закрыться только по кнопке ОК, а там этой кнопки нет
"Рябенко Андрей" написал:как настроить фильтрацию
в данном случае (OfferingInInvoiceGridArea) надо вот это
ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, true); Dataset.Open();
перенести в OfferingInInvoiceGridArea.
А атрибуты можно передавать из параметров на второй вкладке настройки действия
Вы можете подробнее расписать как и куда перенести, и более конкретно, я не совсем понял?
"Рябенко Андрей" написал:Вы можете подробнее расписать как и куда перенести, и более конкретно
могу но попозже :smile:
Хорошо, буду ждать, для меня это очень важный вопрос. С параметрами я понял, для меня непонятна фильтрация
в wnd_OfferingInInvoiceGridAreaScript в функцию Initialize() добавьте
var ParentItemFieldName = GetAttribute(Window, 'ParentItemFieldName'); var ParentItemID = GetAttribute(Window, 'ParentItemID'); if (!IsEmptyValue(ParentItemFieldName) && !IsEmptyGUID(ParentItemID)) { ApplyDatasetFilter(Dataset, ParentItemFieldName, ParentItemID, true); }
Соответственно, атрибуты ParentItemFieldName и ParentItemID надо передать из БП вместе с остальными атрибутами окна
Насколько я понял при таком раскладе Dataset останется закрытым, поэтому вопрос: где его открыть и закрыть, чтобы все прошло корректно?
Он откроется ниже в BaseGridArea
если мало ли нет - добавьте туда же Dataset.Open()
Сделал все как описано, но при этом БП не переходит на следующий элемент. Окно платежных реквизитов закрыл, а в элементах Платежные реквизиты стоят в состоянии "ОЖИДАНИЕ". В чем может быть проблема? Это глюк?
Андрей, вложите, пожалуйста, сервисы БП для тестирования.
У нас конфигурация сильно изменена, поэтому мой БП у вас скорее всего не будет работать. Дело не в моем БП. Возмите версию 3.4 и посмотрите модуль wa_OpenWindowScript. После нажатия на ОК в этом модуле просходит нотификация элемента БП и проставляется признак завершения. В случае, если выбрано другое окно и оно не содержит кнопки ОК, а закрывается по крестику, то соответственно нотификации не происходит и элемент остается в состоянии ожидания. Можете сами у себя проверить с любым окном без кнопки ОК.
Я правильно понял, что вы просто открываете окно детали для просмотра, ничего не выбираете и закрываете "крестиком", после чего ваш БП должен идти дальше?
Если так? то передайте ему атрибут-маркер, по которому на OnClose() отработайте Workflow-логику (SendNotify(wa_OpenWindow_OBJECT, MSG_OK))
Хорошо, но тогда как получить ссылку на wa_OpenWindow_OBJECT в моем окне?
нужно его передать в атрибуты, например, как это происходит в function ProcessCloseOptions (которая вызывается при подготовке окна к открытию) если установлен признак "Ожидать закрытия":
SetAttribute(Window, 'NotifyObject', WorkflowAction);
тогда в окне вы сможете его считать:
GetAttribute(Self, 'NotifyObject')