29.04.2021 03:48
redesupar
 
У меня есть отчет Товар без движения и остатков склад
Стоит задача сделать такой же отчет, но товар должен быть создан более 3 месяцев назад с момента отчета и не участвует в определенных типов операций, но всеравно выходят все товары

SQL код:
 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 senderEventArgs e)
      {
        
// Хост отчёта даёт доступ к полезным сервисам
        
host = new RepHost(Report);
        
// Стартуем транзакцию
        
RepTransaction transaction = new RepTransaction(host.Connection);
        
        
// контрагент "От имени"
      
sUserName RepClientInfo.GetClientName(host.ConnectionReport.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(10from 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(10from 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.ToSqlNumberiCountDay );
      
sDateName = "с "+sFirstDate+&quotпо "+sLastDate+" ( "+sCountDay+&quotдн. )";
   
 
// данные отчета
    
string sSQL 
    
SqlFormat("select"+
    &
quot;  CMS.ARTICLECMS.name from  "+
    &
quot;  supermag.smcard cms left join (SELECT  ost.ARTICLEsum (OST.QUANTITYquanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ost on (ost.ARTICLE=CMS.ARTICLE and OST.QUANTO=0) "+
    &
quot;  LEFT JOIN (SELECT logi.article FROM supermag.SMCARDSECURITYLOG "+
    &
quot;  logi where logi.ACTIONCODE "+
    &
quot;  and logi.EVENTTIME between ("+RepSqlText.ToSqlDate(sLastDate)+")-90 and "+RepSqlText.ToSqlDate(sLastDate)+
    &
quot;  ) n on (n.article=cms.article) "+
    &
quot;  LEFT JOIN (SELECT reps.article from supermag.FFMAPREP reps  "+
    &
quot;  where reps.saletype NOT IN (WIWOIWCSCRPOPN) and REPS.SALEDATE between "+RepSqlText.ToSqlDate(sFirstDate)+" and "+RepSqlText.ToSqlDate(sLastDate)+
    &
quot;  )reps on (reps.ARTICLE=CMS.ARTICLE) "+
    &
quot;  where CMS.ARTICLE=OST.ARTICLE "+
    &
quot;  and OST.QUANTO is not null "+
    &
quot;  and cms.ACCEPTED=1  "+
    &
quot;  and n.article is null"+
    &
quot;  and reps.article is null"+
    &
quot;   GROUP BY CMS.ARTICLEcms.Name"
    );


      
host.TableDataSourcePreInit("RepData", sSQL);      
      }
  } 

29.04.2021 04:29
redesupar
 
Иподскажите пожалуйста как вывести доп данные? например SALETYPE вот так невыводит
SQL код:
<Dictionary>
    <
SupermagFastReportConnection Name="Connection" LoginPrompt="true">
      <
TableDataSource Name="Table2" Alias="RepData" DataType="System.Int32" Enabled="true" SelectCommand="SELECT  '' ARTICLE  '' NAME  '' SALETYPE ''>
        <Column Name="
ARTICLE" DataType="System.String"/>
        <Column Name="
NAME" DataType="System.String"/>
         <Column Name="
SALETYPE" 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>
    
    <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="Arial8pt"Border.Lines="RightBottomleft,top" Border.Width="0.3" HorzAlign="Center"/>
      <TextObject Name="
txtNAME"  VertAlign="Center" Left="100" Width="450" Height="29.00" CanGrow="true" CanBreak="false" Text="[RepData.NAME]" Font="Arial8pt" Border.Lines=" Bottomleftright,top" Border.Width="0.3"/>
     <TextObject Name="
txtSALETYPE"  VertAlign="Center" Left="100" Width="250" Height="29.00" CanGrow="true" CanBreak="false" Text="[RepData.SALETYPE]" Font="Arial8pt" Border.Lines=" Bottomleftright,top" Border.Width="0.3"/>
    
    </DataBand>
</ReportPage> 
29.04.2021 04:57
OlegON
 
опять неявное приведение типов в дате...
29.04.2021 05:40
redesupar
 
Цитата:
OlegON опять неявное приведение типов в дате...
подскажите пожалуйста что где и как?
29.04.2021 11:26
redesupar
 
Подскажите пожалуйста люди добрые
29.04.2021 12:09
vdm
 
Цитата:
redesupar но всеравно выходят все товары
Уточните, какое условие не выполняется. По дате создания или по операциям.
С операциями у вас странное
Код:
NOT IN (WI, WO, IW, CS, CR, PO, PN)
Непонятно, как запрос вообще работает, должен ошибку выдавать, т.к. WI и прочее должны быть в апострофах 'WI'
Вы уверены, что СМ запускает не стандартный, а ваш измененный отчет?

Насчет дат - по-хорошему их нужно оборачивать в TO_DATE(), чтобы не было зависимости от региональных настроек клиента.
Или вообще параметры запроса использовать, но не подскажу как в супермаговском fastreport это выглядит, давно не работал с ним.
30.04.2021 09:23
redesupar
 
Цитата:
string sSQL =
SqlFormat(&quot;select&quot;+
&quot; CMS.ARTICLE, CMS.name from &quot;+
&quot; supermag.smcard cms left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=CMS.ARTICLE and OST.QUANTO=0) &quot;+
&quot; LEFT JOIN (SELECT logi.article FROM supermag.SMCARDSECURITYLOG &quot;+
&quot; logi where logi.ACTIONCODE = 1 &quot;+
&quot; and logi.EVENTTIME <= to_date('(&quot;+RepSqlText.ToSqlDate(sLastDate)+&quot;)-90') &quot;+
&quot; ) n on (n.article=cms.article) &quot;+
&quot; LEFT JOIN (SELECT reps.article from supermag.FFMAPREP reps &quot;+
&quot; where reps.saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')&quot;+
&quot; )reps on (reps.ARTICLE=CMS.ARTICLE) &quot;+
&quot; where CMS.ARTICLE=OST.ARTICLE &quot;+
&quot; and OST.QUANTO is not null &quot;+
&quot; and cms.ACCEPTED=1 &quot;+
&quot; and n.article is null&quot;+
&quot; and reps.article is null&quot;+
&quot; GROUP BY CMS.ARTICLE, cms.Name&quot;
);
переделал так, но теперь выдает ошибку из за <= нехватает правой скобки ,незнаю как быть, а надо чтобы созданные товары должны быть более 3 месяцов и старше с начала LASTDATE
30.04.2021 09:44
Mtirt
 
Не хватает не скобок, а параметров у функции to_date. RTFM, плиз
Хотя, лично я не понимаю, зачем нужно
- приведение из параметра отчета к переменной
- а потом из переменной в дату?

И еще вопрос, а документы каких типов должны выходить в отчете?
И для чего в отчете нужен FFMAPREP? Что он там делает?
13.05.2021 03:05
redesupar
 
Цитата:
Mtirt Не хватает не скобок, а параметров у функции to_date. RTFM, плиз
Хотя, лично я не понимаю, зачем нужно
- приведение из параметра отчета к переменной
- а потом из переменной в дату?

И еще вопрос, а документы каких типов должны выходить в отчете?
И для чего в отчете нужен FFMAPREP? Что он там делает?

Здравствуйте, мне нужно выводить неактивные карты которые каким то образом остались активными (т.е. товар у которого остаток 0 и давно никуда не двигался, но постоянно выходит в инвентаризациях, статус активно а остатков 0 уже как год-два-три итд)
13.05.2021 03:09
redesupar
 
В общем сама задача по отчету:
Выводить карточки товаров которые созданы более 90 дней назад от выбранной даты с остатком 0 и никуда не двигались (т.е. не было новых заказов, перемещений от поставщиков итд итп, а только внутримагазинские операции типо инвентаризация итд) где стоит статус Активно и остаток 0
Часовой пояс GMT +3, время: 02:12.

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