Что-то "потух" я и не могу сообразить: Как из отфильтрованного датасета получить отчет аналогичный кнопке Печать в реестре записей (то есть fr_DataGrid).
Типа функцию BasePrintDataset(Dataset){}
сделал простейшим образом:
var Report = Services.GetNewItemByUSI('fr_DataGrid');
SetAttribute(Report,'Dataset', dlData.Dataset);
ShowReport(Report);
AlexLS, к сожалению, не получится так просто вывести отчет, аналогичный кнопке "Печать" в реестре записей.
Так как сам отчет fr_DataGrid пустой, его наполнение и формирование структуры выполняется динамически на уровне ядра, в зависимости от реестра, из которого вызывается.
Т.е. чтобы реализовать аналогичную функциональность из конфигурации, нужно прописать всю логику, которая обрабатывает кнопку в ядре.
В чем заключается Ваша задача, возможно достаточно будет создать собственный отчет FastReport и вызывать его в нужный момент для заданной выборки данных?
В чем заключается Ваша задача, возможно достаточно будет создать собственный отчет FastReport и вызывать его в нужный момент для заданной выборки данных?
Задача в том чтобы печатать реестр записей (как по кнопке Печать, то есть набор данных и колонок в отчете зависит от грида) с дополнительными динамическими фильтрами к датасету (пример: если пользователь Иванов, то вывести только за текущий день, если вчера была суббота или воскресение, то выводить в превьюер реестр за пятницу и т.п.)
, как я понимаю надо создавать некую копию датасета, чтобы не повредить представление в текущем реестре (то есть чтоб юзер продолжал видеть текущую страницу реестра и текущую выделенную запись и набор данных в реестре остался тот же)
"Бондарь Наталия" написал:В чем заключается Ваша задача, возможно достаточно будет создать собственный отчет FastReport и вызывать его в нужный момент для заданной выборки данных?
наверно основное это понять как динамически сформировать набор колонок :confused:
да, еще юзерам хочется "выделять записи", но при перелистывании на другие страницы выделения снимаются и остается выделение только в текущей странице. Это толи проблемка только в моей конфигурации, то ли глобальная проблема в террасофте :confused:
"AlexLS" написал:Задача в том чтобы печатать реестр записей (как по кнопке Печать, то есть набор данных и колонок в отчете зависит от грида) с дополнительными динамическими фильтрами к датасету
Попробуйте реализовать задачу таким образом:
1. Создать новый экземпляр окна реестра:
var newgrd = Services.GetNewItemByUSI(wnd_AccountsGridArea);
2. Вызвать метод Prepare окна newgrd .
3. Чтобы реестр созданного экземпляра окна содержал тот же набор колонок, что и реестр записей раздела, который нужно печатать, следует выполнить сериализацию:
var XMLData = SerializeXMLData(окно реестра записей раздела);
DeserializeXMLData(newgrd, XMLData);
4. Наложить требуемые фильтры на датасет реестра окна newgrd.
5. Вызвать реестр окна newgrd на печать используя метод Print():
"AlexLS" написал:да, еще юзерам хочется "выделять записи", но при перелистывании на другие страницы выделения снимаются и остается выделение только в текущей странице. Это толи проблемка только в моей конфигурации, то ли глобальная проблема в террасофте
Это не ошибка, а базовая логика работы реестра при переходе между страницами. При переходе перерисовывается грид и фокус изменяется (если переходите на страницу вперед - фокус устанавливается на первую запись на странице, если переходите назад - фокус устанавливается на последнюю запись на странице).
"Бондарь Наталия" написал:Попробуйте реализовать задачу таким образом:
Наталья, выполнил без п.4, но к сожалению, получил сообщение об ошибке: The following errors ) have occurred:
could not convert variant of type (null) into type (boolean)
Нашел свою ошибку.
Теперь выводит пустой отчет, хотя, как я понял должен выводить копию так же как и в скопированном реестре :sad:
Код в scr_TasksGridArea (новая кнопка Print в гридареа):
function btnPrintOnClick(Control){
var newgrd = Services.GetNewItemByUSI('wnd_TasksGridArea');
newgrd.Prepare();
var XMLData = SerializeXMLData(Control.ParentWindow);
DeserializeXMLData(newgrd, XMLData);
newgrd.ComponentsByName('grdData').Print();}
AlexLS, в последних сборках 3.3.2 (последняя на сегодняшний день 3.3.2.305) вынесены методы Print() и Export() для компонента DataGrid.
Обратитесь в службу технической поддержки для получения последней сборки.
Наталья, здравствуйте! К сожалению, набор колонок при экспорте (и при печати) этим методом не совпадает с набором колонок в реестре (ДАЖЕ при перезапуске TS). Как-то можно исправить?
AlexLS, вместо предложенного ранее используйте следующий код:
var ParentWindow = Control.ParentWindow;
var XMLStorage = GetNewXMLStorage();
XMLStorage.InitRootNode(xdnnRootNode);
var RootNode = XMLStorage.RootNode;
ParentWindow.Serialize(RootNode);
var PrintArea = Services.CreateItem('Window');
PrintArea.Deserialize(RootNode);
var grd = PrintArea.ComponentsByName('grdData');
grd.Build();
grd.Print();
AlexLS, вместо предложенного ранее используйте следующий код
Наталия, я правильно понимаю: Первая строка Вашего кода уже не нужна, но при этом появляется некая переменная "xdnnRootNode" (надеюсь террасофт ее "знает")?