1. Посоветуйте нормальную документацию, то что у разработчиков она более свежая и честно мало чего дало. У нас то что идет в комплекте с СМ, версия 1.9.2 довольно старая) или может есть курсы или специалист что за плату покажет основы работы
2. И помогите пожалуйста с отчетом, стоит очень срочная задача, не могу сделать очень простую вещь.
Отчет выводит артикули и наименование товара, хотел сделать чтобы можно было группировать по категориям, но все рушится. Не видит NormTree как я понял это прямо в запросе надо писать, а как и что непонятно. Делал по аналогии с другими отчетами которые выводят нормально.
Ошибка
Цитата: 2021.05.21 (Friday) 15:05:38 1.43.1.0 sp4 Sm.Main ( NREPOR )
----- Прерывание работы программы -----
сообщение: "ORA-00904: "T_CLASS"."NORMTREE": недопустимый идентификатор"
исключение: Oracle.ManagedDataAccess.Client.OracleException
источник: Oracle Data Provider for .NET, Managed Driver
данные: соединено с: База данных=CO; Пользователь=Павлов
текст команды: SELECT c.article, c.name ,t_class.Tree||' '||t_class.ClassName NormTree,t_class.NormTree GroupName FROM supermag.smcard c, (select ost.article, sum(ost.quantity) qty from supermag.smgoods ost group by ost.article ) ost, (select distinct logi.article from supermag.smcardsecuritylog logi where logi.actioncode=1 and logi.eventtime>=current_date-180 ) clog, (select distinct s.article from supermag.smdocuments d, supermag.smspec s where d.doctype in ('OR', 'WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE') and s.doctype=d.doctype and s.docid=d.id and d.createdat>=current_date-180 and d.docstate>=2 ) docs WHERE c.accepted=1 AND c.datatype<>5 AND ost.article(+)=c.article AND clog.article(+)=c.article AND docs.article(+)=c.article AND NVL(ost.qty, 0)=0 AND clog.article is null AND docs.article is null ORDER BY NormTree
тип команды: 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.GroupHeaderBand.InitDataSource()
в FastReport.Engine.ReportEngine.RunGroup(GroupHeaderBand groupBand)
в 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, ReportParametersList commonParameters, ReportParametersList 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)
Сам код.
SQL код:
<?xml version="1.0" encoding="utf-8"?>
<Report ScriptLanguage="CSharp" ReferencedAssemblies="System.dll
System.Drawing.dll
System.Windows.Forms.dll
System.Data.dll
System.Xml.dll
System.Data.OracleClient.dll
Sm.Objects.dll
Sm.Interfaces.dll
Sm.Core.dll
Sm.Forms.dll
Sm.AppServer.Interfaces.dll
Sm.AppServer.Link.dll
Sm.FastReports.dll
Sm.FastReports.Link.dll" ConvertNulls="false" StartReportEvent="_StartReport" ReportInfo.Created="06/22/2010 10:01:00" ReportInfo.Modified="04/20/2017 21:51:26" ReportInfo.CreatorVersion="1.9.2.0">
<ScriptText>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using FastReport;
using FastReport.Data;
using FastReport.Dialog;
using FastReport.Table;
using FastReport.Utils;
using FastReport.Format;
using Sm.FastReports;
using Sm.FastReports.Link;
using Sm.Interfaces;
using Sm.Objects;
using Sm.Core;
namespace FastReport
{
public class ReportScript
{
RepHost host;
// название отчета
private string sRepName = "Какой то отчет";
// подзаголовок отчета: места хранения
private string sLocName;
// подзаголовок отчета: группы товаров
private string sGroupName;
// подзаголовок отчета: период отчета
private string sDateName;
// контрагент "От имени"
private string sUserName;
private void _StartReport(object sender, EventArgs e)
{
// Хост отчёта даёт доступ к полезным сервисам
host = new RepHost(Report);
// Стартуем транзакцию
RepTransaction transaction = new RepTransaction(host.Connection);
// контрагент "От имени"
sUserName = RepClientInfo.GetClientName(host.Connection, Report.GetParameterValue("P_USER_ID"));
// заголовок отчета
sRepName = "Остатки по состоянию на " + ToString(Report.GetParameterValue("P_DATE"));
// фильтр по местам хранения
RepOracleRunner.ExecuteProcedure(host.Connection,"Supermag.RepTools.LoadLoc",
Report.GetParameterValue("P_STORED_ALL"),
Report.GetParameterValue("P_STORED_NAME"),
Report.GetParameterValue("P_PARTNER"),
null);
// подзаголовок отчета: места хранения
sLocName = RepOracleRunner.ExecuteScalar<string>(host.Connection, "select supermag.RepTools.LocString(10) from dual");
// фильтр по группам товаров
RepOracleRunner.ExecuteProcedure(host.Connection,"Supermag.RepTools.LoadClass",
Report.GetParameterValue("P_GROUP_ALL"),
Report.GetParameterValue("P_BGROUP"),
Report.GetParameterValue("P_GROUP_TREE"));
// подзаголовок отчета: группы товаров
sGroupName = RepOracleRunner.ExecuteScalar<string>(host.Connection, "select supermag.RepTools.ClassString(10) from dual");
// группировка по группам товаров
if ( ReportGroupClassOption.No == ToInt32(Report.GetParameterValue("P_GROUP_ALL")) )
{
GroupHeaderClass.Visible = false;
GroupFooterClass.Visible = false;
}
// подзаголовок отчета: группы товаров
sGroupName = RepOracleRunner.ExecuteScalar<string>(host.Connection, "select supermag.RepTools.ClassString(10) from dual");
// подзаголовок отчета: период отчета
string sFirstDate = ToString(Report.GetParameterValue("P_FIRSTDATE"));
string sLastDate = ToString(Report.GetParameterValue("P_LASTDATE"));
int iCountDay = (RepConvert.ToSmDate(sLastDate)-RepConvert.ToSmDate(sFirstDate)).Days;
string sCountDay = Safe.ToSqlNumber( iCountDay );
sDateName = "с "+sFirstDate+" по "+sLastDate+" ( "+sCountDay+" дн. )";
// данные отчета
string sSQL =
SqlFormat(" SELECT c.article, c.name "+
",{0:U} NormTree"+
",{1:U} GroupName"+
" FROM supermag.smcard c, "+
" (select ost.article, sum(ost.quantity) qty "+
" from supermag.smgoods ost "+
" group by ost.article "+
" ) ost, "+
" (select distinct logi.article "+
" from supermag.smcardsecuritylog logi "+
" where logi.actioncode=1 "+
" and logi.eventtime>=current_date-180 "+
" ) clog, "+
" (select distinct s.article "+
" from supermag.smdocuments d, supermag.smspec s "+
" where d.doctype in ('OR', 'WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE') "+
" and s.doctype=d.doctype and s.docid=d.id "+
" and d.createdat>=current_date-180 "+
" and d.docstate>=2 "+
" ) docs "+
" WHERE c.accepted=1 AND c.datatype<>5 "+
" AND ost.article(+)=c.article "+
" AND clog.article(+)=c.article "+
" AND docs.article(+)=c.article "+
" AND NVL(ost.qty, 0)=0 "+
" AND clog.article is null "+
" AND docs.article is null "+
" ORDER BY NormTree "
// выражения для группировки по группам товаров
, RepOracleRunner.ExecuteScalar<string>(host.Connection,"Select supermag.RepTools.ClassString(14) from dual")
, RepOracleRunner.ExecuteScalar<string>(host.Connection,"Select supermag.RepTools.ClassString(0) from dual")
);
host.TableDataSourcePreInit("RepData", sSQL);
}
}
}
</ScriptText>
<Dictionary>
<SupermagFastReportConnection Name="Connection" LoginPrompt="true">
<TableDataSource Name="Table2" Alias="RepData" DataType="System.Int32" Enabled="true" SelectCommand="SELECT
NormTree
,'' GroupName
,'' ARTICLE
'' NAME
''">
<Column Name="NORMTREE" DataType="System.String"/>
<Column Name="GROUPNAME" DataType="System.String"/>
<Column Name="ARTICLE" DataType="System.String"/>
<Column Name="NAME" DataType="System.String"/>
</TableDataSource>
</SupermagFastReportConnection>
<Relation Name="DocSpec_DocSpecScale" ParentDataSource="Table2" ChildDataSource="null" ParentColumns="SPECITEM" ChildColumns="SPECITEM" Enabled="true"/>
<Parameter Name="P_STORED_ALL" DataType="System.Int32"/>
<Parameter Name="P_STORED_NAME" DataType="System.String"/>
<Parameter Name="P_PARTNER" DataType="System.Int32"/>
<Parameter Name="P_BGROUP" DataType="System.Int32"/>
<Parameter Name="P_GROUP_ALL" DataType="System.Int32"/>
<Parameter Name="P_GROUP_TREE" DataType="System.String"/>
<Parameter Name="P_FIRSTDATE" DataType="System.String"/>
<Parameter Name="P_LASTDATE" DataType="System.String"/>
<Parameter Name="P_SURNAME" DataType="System.String"/>
<Parameter Name="P_USER_ID" DataType="System.Int32"/>
<Parameter Name="P_DATE" DataType="System.String"/>
</Dictionary>
<ReportPage Name="Page1" RawPaperSize="9" FirstPageSource="15" OtherPagesSource="15" Fill.Color="White" TitleBeforeHeader="false" PaperWidth="280">
<PageHeaderBand Name="PageHeader" Width="800.06" Height="40.12" CanGrow="true">
</PageHeaderBand>
<GroupHeaderBand Name="GroupHeaderClass" Top="199.51" Width="718.2" Height="22.68" CanGrow="true" KeepWithData="true" Condition="[RepData.NORMTREE]" SortOrder="None">
<TextObject Name="Text140" Top="3.78" Width="710.64" Height="18.9" CanGrow="true" CanBreak="false" Text="[RepData.GROUPNAME]" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
<DataBand Name="DataSpec" Top="167.1" Width="718.2" CanGrow="true" DataSource="Table2" PrintIfDetailEmpty="true" PrintIfDatasourceEmpty="true" >
<TextObject Name="txtArticle" VertAlign="Center" Width="100" Height="29.00" CanGrow="true" CanBreak="false" Text="[RepData.ARTICLE]" HorzAlign="Left" Font="Arial, 8pt" Border.Lines="Right, Bottom, left,top" Border.Width="0.3" />
<TextObject Name="txtNAME" VertAlign="Center" Left="100" Width="700" Height="29.00" CanGrow="true" CanBreak="false" Text="[RepData.NAME]" Font="Arial, 8pt" Border.Lines=" Bottom, left, right,top" Border.Width="0.3"/>
</DataBand>
<GroupFooterBand Name="GroupFooterClass" Top="246.8" Width="718.2" Height="18.9" CanGrow="true">
</GroupFooterBand>
</GroupHeaderBand>
</ReportPage>
</Report>