Здравствуйте.
Возможно ли напечатать fast report для документов из грида детали workSpace-а ?
см. picture1.jpg
С помощью этой строки:
var ID = ReportPreviewer.ParentWindow.Attributes.Values('DatasetIDs')[0];
получаю ID выбранного документа в основном гриде.
А как получить ID выбранного документа в гриде детали ?
Есть пример ?
Спасибо.
Нравится
Здравствуйте, Марина!
Да, возможно.
Посмотрите, как реализован вызов отчета в функции ReportMenuItemExecute в скрипте scr_ReportUtils.
Получить ID выбранного документа в основном гриде можно ещё таким образом:
var ID = wndGridData.Window.ComponentsByName('grdData').SelectedIDs[0];
"Марина Карапетян" написал:А как получить ID выбранного документа в гриде детали ?
Не совсем понятно, что Вы имеете ввиду.
Если нужно получить ID документа для записи в детали, тогда можно получить значение поля DocumentID детали при условии, что деталь связана с основной таблицой документов.
Если Вы просто хотите из детали получить ID документа, который выбран в данный момент в основном гриде, тогда это можно сделать через окно раздела (Workspace).
При инициализации детали в качестве аттрибута ему можно передать окно основного грида, а потом, получить ID выбранного документа аналогично описанному выше, получив значение из аттрибута.
Почему-то рисунок не прикрепляется. Попытаюсь без рисунка объяснить. Основной грид имеет деталь_1. В детали_1 находятся дочерние документы каждого из документов основного грида соответственно. При выборе документа в основном гриде, происходит обновление детали_1. связь Родительский документ : дочерний документ один : многие Например: основной грид Родительский документ_Номер1 Родительский документ_Номер2 ... Родительский документ_НомерN деталь_1 (если выбран Родительский документ_Номер1) Дочерний документ_1_Родительского документа_Номер1 Дочерний документ_2_Родительского документа_Номер1 ... Дочерний документ_N_Родительского документа_Номер1 деталь_1 (если выбран Родительский документ_Номер2) Дочерний документ_1_Родительского документа_Номер2 Дочерний документ_2_Родительского документа_Номер2 ... Дочерний документ_M_Родительского документа_Номер2 Нужно получить ID дочернего документа, который выбран в детали_1. Но получить ID нужно в скрипте fast report-а в событии OnPreview, чтобы задать как параметр ADODataset - у, а там уже с помощью SQL запроса запрашиваются нужные данные. Спасибо.
Здравствуйте, Марина!
Вы можете передавать нужное значение ID документа через атрибут ReportPreviewer.
Так, например, как атрибут ReportPreviewer, передается объект Report в функции ShowSelectedRecordsReport.
А определять ID, как мы обсуждали в предыдущих комментариях к этому посту.
Здравствуйте Алла.
Вы написали:
Если нужно получить ID документа для записи в детали, тогда можно получить значение поля DocumentID детали при условии, что деталь связана с основной таблицой документов.
что это за поле и что означает деталь связана с основной таблицой документов?
Спасибо.
Здравствуйте, Марина.
Если мы говорим о стандартной связке основной раздел - деталь, то обычно они связаны по полю ID записи основного раздела связью один ко многим.
То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.
В окно грида детали это значение передается через атрибут 'ParenItemtID'.
Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').
Если мы говорим о стандартной связке основной раздел - деталь, то обычно они связаны по полю ID записи основного раздела связью один ко многим.
Да, у меня есть такая связь.
То есть, если это раздел [Документы] и какая-то деталь этого раздела, то в датасете, запросе на выборку и таблице детали есть поле DocumentID, которое заполнено значением поля ID из таблицы документов.
Это раздел [Заявки физ. лиц.]. В датасете, запросе на выборку и таблице детали есть соответствующее поле, которое заполнено значением поля ID из таблицы заявок.
В окно грида детали это значение передается через атрибут 'ParenItemtID'.
Это тоже сделала.
Таким образом получить значение поля DocumentID в окне грида детали, можно так: Self.Attributes('ParentItemID').
Но мне нужно получить не DocumentID (где записан ID записи основного грида) а ID именно записи детали. Ведь надо напечатать конкретную запись детали.
То есть, нажав на конкретную запись в основном гриде, в детали получаю соответствующие записи.
Далее нажимая на конкретную запись детали, надо напечатать ее с помощью fast report-а.
Спасибо
Получить ID выбранной записи грида можно так:
var ID = Window.ComponentsByName('grdData').SelectedIDs[0]
где Window - это название окна грида, его можно ещё заменить на Self
Так как я пишу в скрипте fast report-а, то Self в этом скрипте = "FastReport"
поэтому попыталась получить Window так:
var Window = Services.GetNewItemByUSI('wnd_XXXGridArea'); // где wnd_XXXGridArea - имя окна
var ID = Window.ComponentsByName('grdData').SelectedIDs[0];
и получаю undefined.
Посмотрела debugger-ом
Window.ComponentsByName('grdData').SelectedIDs {...} CoClassGUID: "{D143A918-4CBE-48F9-AEB5-E373F6D6679D}" CommaText: "" Connector: {...} Count: 0 InstanceID: "{83BD163D-9070-4543-9A89-A2A8FF3218BE}" IsCaseSensitive: false IsSorted: false IsUnique: false Items: Invalid number of parameters. ObjectState: 0 Text: ""
Window.ComponentsByName('grdData').SelectedIDs[0] undefined
Спасибо.
Вам нужно получить ID записи раньше, а потом передать его через атрибуты ReportPreviewer (выше я уже об этом писала).
Если писать так, как Вы, то получается, что обращение идет к другому экземпляру окна, а не к тому, которое является окном реестра в детали. Соответственно, что и никакие записи в нём не выбраны.
Здравствуйте Алла.
// scr_BaseWorkspace
function ReportMenuItemOnExecute(ActionMenuItem)
{
...
ChildIDs = Self.ComponentsByName('wndDetail1Grid').Window.ComponentsByName('grdData').SelectedIDs.CommaText;
// где Self-окно workspace-а(wnd_ContactCreditWorkspace) , wndDetail1Grid - деталь окна
ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, ExtractUSICodeEx(Self.USI), ChildIDs);
}
// scr_ReportUtils
function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName, ChildIDs)
{
...
ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, SelectedIDs, FilterForm, ChildIDs);
...
}
// scr_ReportUtils
function ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, GridDatasetIDs, FilterForm, ChildIDs)
{
...
SetAttribute(ReportPreviewer, 'ChildDatasetIDs', ChildIDs);
...
}
И все работает. Спасибо большое!!!
Может мой вопрос покажется глупым, но объясните пожалуйста, что такое окно реестра?
Окно реестра — это страница, на которой находится грид. Обычно название таких страниц заканчивается на «GridArea». В Вашем случае есть основное окно реестра в разделе и по одному для каждой детали.