19.12.2018 05:29
АндрейСупермаг
 
Как известно история по документам в супермаге не содержит детализации по конкретному товару. Т.е. есть информация о том что делалось с документом но построчной детализации нет.
Изменение данных по соглашению оказалось в данном случае критичным. Кто то добавил товар в соглашение, пошла перетарка, на вопрос кто виноват ответа нет так как нет истории. Все административные способы регулирования вопроса себя исчерпали.
Решил помочь менеджерам и написать отчет который бы при помощи versions BETWEEN scn запрашивал историю изменений за прошлый период, далее они могли бы сохранить эти данные в xls и хранить для дальнейшей проверки.
Проверил запуск запроса через Navicat все работает. Запускаю отчет и появляется ошибка Привилегий недостаточно. Grand на таблицу предоставил. Вопрос - каких привилегий недостаточно и как их предоставить.

Текст запроса:
SQL код:
select
scn_to_timestamp 
(VERSIONS_STARTSCN) as timestamp, case when VERSIONS_OPERATION='D' THEN 'Удален' else 'Добавлен' end status  articleDOCID from
supermag
.SMSPECCQ versions BETWEEN scn minvalue and
maxvalue where versions_startscn 0
ORDER BY ARTICLE
DOCID 
Текст ошибки:
2018.12.19 (Wednesday) 09:18:51 1.38.0.0 sp1 Sm.Main ( NREPOR )
----- Прерывание работы программы -----
сообщение: "Неправильный результат из-за исключения, возникшего во время операции. См. описание исключения в InnerException."
исключение: System.Reflection.TargetInvocationException
источник: System
метод: Void RaiseExceptionIfNecessary()
в System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
в Sm.Core.RunWorkerCompletedEventArgs`1.get_Result()
в Sm.FastReports.Domain.FastReportDomainPanel.<>c__DisplayClass2.<RunSingleReport>b__0(Object sender, RunWorkerCompletedEventArgs`1 e)
----- Причина исключения, уровень вложения 1 -----
сообщение: "ORA-01031: привилегий недостаточно"
исключение: Oracle.ManagedDataAccess.Client.OracleException
источник: Oracle Data Provider for .NET, Managed Driver
данные: соединено с: База данных=CO; Пользователь=
текст команды: select scn_to_timestamp (VERSIONS_STARTSCN) as timestamp, case when VERSIONS_OPERATION='D' THEN 'Удален' else 'Добавлен' end status , article, DOCID from supermag.SMSPECCQ versions BETWEEN scn minvalue and maxvalue where versions_startscn > 0 ORDER BY ARTICLE, DOCID
тип команды: Text
метод: Boolean ReadBuffer(System.Collections.ObjectModel.ReadOnlyCollection`1[TRecord] ByRef)
в Sm.BusinessServer.BackgroundReaderBase`1.ReadBuffer(ReadOnlyCollection`1& result)
в Sm.FastReports.Server.FastReportBO.Sm.FastReports.Link.IFastReportBO.FillTableDataNext(BusinessOperation businessOperation, ReadOnlyCollection`1& dataTable)
в Sm.FastReports.SupermagFastReportConnection.<>c__DisplayClass8.<FillTableData>b__5(IFastReportBO bo)
в Sm.BusinessServer.LocalServer.LocalClient`1.Do(Action`1 action)
в Sm.FastReports.SupermagFastReportConnection.TransactedBusinessObject.Do(Action`1 action)
в Sm.FastReports.SupermagFastReportConnection.FillTableData(DataTable table, String selectCommand, CommandParameterCollection parameters)
в FastReport.Data.DataConnectionBase.FillTable(TableDataSource source)
в FastReport.Data.TableDataSource.LoadData(ArrayList rows)
в FastReport.Data.DataSourceBase.Init(Relation relation, String filter, SortCollection sort, Boolean useAllParentRows)
в FastReport.Data.DataSourceBase.Init(DataSourceBase parentData, String filter, SortCollection sort, Boolean useAllParentRows)
в FastReport.DataBand.InitDataSource()
в FastReport.Engine.ReportEngine.RunDataBand(DataBand dataBand)
в FastReport.Engine.ReportEngine.RunBands(BandCollection bands)
в FastReport.Engine.ReportEngine.RunReportPage(ReportPage page)
в FastReport.Engine.ReportEngine.RunReportPages()
в FastReport.Engine.ReportEngine.RunReportPages(ReportPage page)
в FastReport.Engine.ReportEngine.Run(Boolean runDialogs, Boolean append, ReportPage page)
в FastReport.Report.Prepare(Boolean append)
в Sm.FastReports.Domain.FastReportDomainModel.ExecuteReport(Report report, String reportFile, List`1 commonParameters, List`1 objectParameters, Int32 moduleRole, Int32 functionRole)
в Sm.FastReports.Domain.FastReportDomainPanel.Report_DoWork(Object sender, TaskWorkEventArgs`3 e)
в Sm.Core.TaskWorker`3.OnDoWork(DoWorkEventArgs e)
в Sm.Core.TaskWorkerBase.InternalBackgroundWorker.OnDoWork(DoWorkEventArgs e)
в System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
19.12.2018 05:32
АндрейСупермаг
 
Проверил запуск запроса через Navicat все работает конечно из под пользователя supermag
19.12.2018 07:23
OlegON
 
Оно все же grant... Кому и что грантовал-то? И вообще, откуда уверенность, что VERSIONS_STARTSCN пригодно для этих целей? Flashback достаточно сильно ограничен по времени...
19.12.2018 12:09
АндрейСупермаг
 
Альтернатив VERSIONS_STARTSCN не нашел, менеджер будет крутить и сохранять себе данный отчет ежедневно. Был конечно вариант создать отдельную таблицу и запустить шедулер который бы сохранял в эту таблицу данные (но отказались, хотя на тесте работало).
Гранд выдавал отчету на таблицу SMSPECCQ. Кстати ради интереса убрал из запроса в отчете VERSIONS_STARTSCN оставив только Select и отчет сработал без ошибок выдав печатную форму. Т.е. привилегий явно не хватает на VERSIONS_STARTSCN, но это ведь не таблица, не функция и гранд на него не выдашь.
19.12.2018 12:58
Mtirt
 

Тебе надо той роли, которая создалась для отчета дать привилегии:
Цитата:
Grant flashback privileges to users, roles, or applications that need to use flashback features, as follows:
DBMS_FLASHBACK package - Grant EXECUTE privilege on DBMS_FLASHBACK to provide access to the features in this package.
Flashback Query and Flashback Version Query - Grant FLASHBACK and SELECT privileges on specific objects to be accessed during queries, or grant the FLASHBACK ANY TABLE privilege to allow queries on all tables.
Flashback Transaction Query - Grant the SELECT ANY TRANSACTION privilege.
Execution of undo SQL code - Grant SELECT, UPDATE, DELETE, and INSERT privileges for specific tables, as appropriate, to permit execution of undo SQL code retrieved by a Flashback Transaction Query.
To enable flashback operations on specific LOB columns of a table, use the ALTER TABLE command with the RETENTION option. Because undo data for LOB columns can be voluminous, you must define which LOB columns to use with flashback
21.12.2018 03:48
АндрейСупермаг
 
Спасибо)) Все получилось. Тему можно закрывать

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.