Ты — мне, я — тебе!

Автор Сообщение
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 28.09.2004 13:52 Заголовок сообщения: Ты — мне, я — тебе!
Коллеги,

Мне кажется, что давным давно пора создать некое хранилище «наработок». Зачем изобретать велосипед, если можно его спионерить у соседа Wink
Вот я, например, недавно «бился» над проблемой построения иерархии заказов на работу в модуле «Управление производством». Если эта задача уже однажды выполнена, почему бы не сделать результат доступным всем остальным?
Вот он (для iScal’ы 2.2):

Код:
if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[AAV_WO_TREE]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[AAV_WO_TREE]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*
Процедура создана для облегчения построения дерева рабочих заказов на
основе заданной строки и № заказа покупателя.
Процедура поставляется "Как есть" без принятия автором каких-либо
претензий по ее использованию, однако комментарии, описания ошибок,
пожелания приветствуются (без гарантий немедленного усовершенствования,
исправления и т.п.)
***************************************************************************
Алексей Васильев (http://aav.ru/mail)
Дата создания/Последнего обновления:    30.09.2004/04.10.2004
***************************************************************************
*/
CREATE PROCEDURE [dbo].[AAV_WO_TREE] (@SONumber nvarchar(10),@SOLine nvarchar(6)) 
AS 
BEGIN
DECLARE
@WONumber nvarchar(10),
@OrderTree nvarchar(500),
@StartDate datetime,
@EndDate datetime,
@StockItem nvarchar(35),
@WOQuantity numeric(20,8),
— уровень вложенности. Предполагается, что уровень вложенности не может быть больше 5
@WOLevel int
print ‘Дата начала’ + CHAR(9) + ‘Дата завершения’ + CHAR(9) + ‘Заказ на работу’ + CHAR(9) + ‘Код запаса’ + CHAR(9) + ‘Родительский’ + CHAR(9) + ‘Код запаса’ + CHAR(9) +’Родительский’ + CHAR(9) + ‘Код запаса’ + CHAR(9) +’Родительский’ + CHAR(9) + ‘Код запаса’ + CHAR(9) +’Родительский’ + CHAR(9) + ‘Код запаса’ + CHAR(9) +’Главное изделие’ + CHAR(9) + ‘Главный заказ’ + CHAR(9) + ‘Количество изделий’ + CHAR(9) + ‘Уровень вложенности’
— Создаем курсор для того, чтобы можно было перебирать значения в цикле
DECLARE WO_cursor CURSOR FOR
   select MP64001, MP64012, MP64013, MP64002, MP64004 from MP640100
where (MP64009=@SONumber and MP64010=@SOLine and MP64001 not in(select MP64041 from MP640100 where (MP64009=@SONumber and MP64010=@SOLine and MP64041 <> REPLICATE(’ ‘,10))))
— Открываем курсор
OPEN WO_cursor
— Передаем значения из курсора в переменные
FETCH NEXT FROM WO_cursor INTO @WONumber, @StartDate, @EndDate, @StockItem, @WOQuantity
set @WOLevel = 1
set @OrderTree = @WONumber
while ((select MP64041 from MP640100 where ((MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))) is not null)
BEGIN
set @WOLevel = @WOLevel+1
set @StockItem=(select MP64002 from MP640100 where (MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))
set @WONumber=(select MP64041 from MP640100 where (MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))
set @OrderTree = @OrderTree + CHAR(9) + @StockItem + CHAR(9) + @WONumber
set @StockItem=(select MP64002 from MP640100 where (MP64001=@WONumber))
END
— Напечатаем то, что получилось
— Используем знак табуляции в качестве разделителя полей для того, чтобы можно было
— скопировать результат в таблицу Excel и получить значения в соответствующих ячейках:
— Дата начала, Дата завершения, Заказ на работу, Код запаса, Родительский, Код запаса,
— Родительский, Код запаса, Родительский, Код запаса, Родительский, Код запаса,
— Главное изделие, Главный заказ, Количество изделий, Уровень вложенности
print CONVERT(nvarchar, @StartDate, 104) + CHAR(9) + CONVERT(nvarchar, @EndDate, 104) + CHAR(9) + @OrderTree + CHAR(9) + @StockItem + CHAR(9) + REPLICATE(CHAR(9),(5-@WOLevel)*2) + @StockItem + CHAR(9) + @WONumber + CHAR(9) + CONVERT(nvarchar, @WOQuantity) + CHAR(9) + CONVERT(nvarchar, @WOLevel)

WHILE @@FETCH_STATUS = 0

BEGIN
— Повторяем
FETCH NEXT FROM WO_cursor INTO @WONumber, @StartDate, @EndDate, @StockItem, @WOQuantity
IF @@FETCH_STATUS = 0
BEGIN
set @OrderTree = @WONumber
set @WOLevel = 1
while ((select MP64041 from MP640100 where ((MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))) is not null)

BEGIN
set @WOLevel = @WOLevel+1
set @StockItem=(select MP64002 from MP640100 where (MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))
set @WONumber=(select MP64041 from MP640100 where (MP64001=@WONumber) and (MP64041 <> REPLICATE(’ ‘,10)))
set @OrderTree = @OrderTree + CHAR(9) + @StockItem + CHAR(9) + @WONumber
set @StockItem=(select MP64002 from MP640100 where (MP64001=@WONumber))
END
— Напечатаем то, что получилось
print CONVERT(nvarchar, @StartDate, 104) + CHAR(9) + CONVERT(nvarchar, @EndDate, 104) + CHAR(9) + @OrderTree + CHAR(9) + @StockItem + CHAR(9) + REPLICATE(CHAR(9),(5-@WOLevel)*2) + @StockItem + CHAR(9) + @WONumber + CHAR(9) + CONVERT(nvarchar, @WOQuantity) + CHAR(9) + CONVERT(nvarchar, @WOLevel)
END
END
— Закрываем и удаляем курсор
CLOSE WO_cursor
DEALLOCATE WO_cursor
— Конец процедуры
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[AAV_WO_TREE_BY_SO_NUMBER]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure [dbo].[AAV_WO_TREE_BY_SO_NUMBER]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dbo].[AAV_WO_TREE_BY_SO_NUMBER] (@SONumber nvarchar(10)) 
AS 
— Объявляем переменные
DECLARE @WONumber nvarchar(10), @SOLine nvarchar(6), @lines int, @counter int
set @lines = (select count(*) from (SELECT COUNT(*) AS counted FROM MP640100 WHERE (MP64009 = @SONumber) GROUP BY MP64010) as T1)
set @counter=0
DECLARE SO_cursor CURSOR FOR
   select distinct(MP64010) from MP640100
where (MP64009=@SONumber)
— Открываем курсор
OPEN SO_cursor
— Передаем значения из курсора в переменные
FETCH NEXT FROM SO_cursor INTO @SOLine
print ‘Заказы на работу для строки № ‘+@SOLine+ ‘ Заказа на Продажу № ‘+@SONumber
set @counter=@counter+1
exec dbo.AAV_WO_TREE @SONumber, @SOLine
print »
WHILE @lines>@counter
BEGIN
FETCH NEXT FROM SO_cursor INTO @SOLine
IF @lines>=@counter
BEGIN
print ‘Заказы на работу для строки № ‘+@SOLine+ ‘ Заказа на Продажу № ‘+@SONumber
exec dbo.AAV_WO_TREE @SONumber, @SOLine
print »
END
set @counter=@counter+1
END
CLOSE SO_cursor
DEALLOCATE SO_cursor

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


Оба эти скрипта написаны для компании 01. Безусловно, Вы легко сможете их модифицировать, если будет такая потребность.
Вызывать следует процедуру AAV_WO_TREE_BY_SO_NUMBER, передавая ей в качестве параметра № заказа на продажу, для которого создан заказ на работу и все подчиненные заказы, например, так:

Код:
exec AAV_WO_TREE_BY_SO_NUMBER ‘0000000070’


Результат можно скопировать в Excel и там уже сортировать, как Вам захочется. Wink

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 18.10.2004 15:52 Заголовок сообщения: Можно вызывать для интервала заказов
Можно вызывать так:

Код:
DECLARE @SONumber nvarchar(10), @FirstSONumber nvarchar(10), @LastSONumber nvarchar(10), @Orders int, @OrderCounter int
set @FirstSONumber = ‘0000000001’
set @LastSONumber = ‘0000999999’
set @Orders = (select count(*) from (select distinct(MP64009) from MP640100 where (MP64009 between @FirstSONumber and @LastSONumber)) as T1)
set @OrderCounter=0
DECLARE SOList_cursor CURSOR FOR
   select distinct(MP64009) from MP640100
where (MP64009 between @FirstSONumber and @LastSONumber)
— Открываем курсор
OPEN SOList_cursor
— Передаем значения из курсора в переменную
FETCH NEXT FROM SOList_cursor INTO @SONumber
set @OrderCounter=@OrderCounter+1
exec AAV_WO_TREE_BY_SO_NUMBER @SONumber
WHILE @Orders>@OrderCounter
BEGIN
FETCH NEXT FROM SOList_cursor INTO @SONumber
IF @Orders>=@OrderCounter
BEGIN
exec AAV_WO_TREE_BY_SO_NUMBER @SONumber
END
set @OrderCounter=@OrderCounter+1
END
CLOSE SOList_cursor
DEALLOCATE SOList_cursor


Получится такое… Shocked

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 18.10.2004 18:10 Заголовок сообщения: А если добавить FAST_FORWARD?
Предлагаю, по возможности, открывать курсоры как
…CURSOR FAST_FORWARD FOR … — это может ускорить процесс. Хотя я не разбирался, нужно ли это делать в этом коде. Все-таки попрошу AAV проверить.
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 19.10.2004 08:20 Заголовок сообщения: Re: А если добавить FAST_FORWARD?

Jugulator писал(а):
Предлагаю, по возможности, открывать курсоры как
…CURSOR FAST_FORWARD FOR … — это может ускорить процесс.


Будем попробовать. Я ведь не программист, а, скорее, постановщик задач. Самому приходится что-то «бацать» от безысходности. Когда мысль еще незрелая, зачастую самому сделать что-то (пусть и не очень красиво) проще, чем эту самую мысль оформить до того состояния, когда ею можно поделиться с профессиональными программерами. Я надеюсь, тем не менее, что мои коды все же могут быть полезны последним, именно с точки зрения заложенных в них идей Very Happy

Jugulator
Главный форумщик

Зарегистрирован: 08.10.2004
Сообщения: 428

Добавлено: 10.02.2005 11:18 Заголовок сообщения: FAST_FORWARD
Оказалось, я не одинок в привязанности к FAST_FORWARD:
http://www.sqlservercentral.com/columnists/kThaker/optimizingcursorperformance.asp
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 19.09.2005 17:09 Заголовок сообщения: Попробуем обменяться отчетами для MS SQL RS
Коллеги, недавно складские сотрудники попросили создать простенький отчет по складам для MS SQL Reporting Services, и вот я хочу поделиться с Вами одним из вариантов. Все зеленое ниже надо выделить и сохранить как SCTransactionLists.rdl, опубликовать на Вашем Репортинг Сервисе и подкорректировать DataSource. Или откорректировать по своему усмотрению в дизайнере отчетов.

Код:
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2003/10/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<rd:GridSpacing>0.25cm</rd:GridSpacing>
<PageHeader>
<ReportItems>
<Textbox Name="textbox5">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<rd:DefaultName>textbox5</rd:DefaultName>
<Width>18.75cm</Width>
<CanGrow>true</CanGrow>
<Value>="Список проводок по запасам за период с " &amp; Format(Parameters!d1.Value,"dd.MM.yyyy") &amp; " по " &amp; Format(Parameters!d2.Value,"dd.MM.yyyy")
&amp; ". Интервал кодов запасов: " &amp; Parameters!SC1.Value &amp; " — " &amp; Parameters!SC2.Value &amp; ". Интервал складов: " &amp; Parameters!WH1.Value &amp; " — " &amp; Parameters!WH2.Value</Value>
</Textbox>
</ReportItems>
<PrintOnLastPage>true</PrintOnLastPage>
<PrintOnFirstPage>true</PrintOnFirstPage>
<Style />
<Height>0.39375in</Height>
</PageHeader>
<RightMargin>1cm</RightMargin>
<Body>
<ReportItems>
<Table Name="table1">
<Style />
<Header>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox9">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>28</ZIndex>
<CanGrow>true</CanGrow>
<Value>Дата проводки</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox11">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>27</ZIndex>
<CanGrow>true</CanGrow>
<Value>№ заказа</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox12">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>26</ZIndex>
<CanGrow>true</CanGrow>
<Value>Ссылка</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox13">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>25</ZIndex>
<CanGrow>true</CanGrow>
<Value>Вид операции</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox2">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>24</ZIndex>
<rd:DefaultName>textbox2</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>Ячейка / Паллета</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox15">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>23</ZIndex>
<CanGrow>true</CanGrow>
<Value>Кол-во</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox4">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>22</ZIndex>
<rd:DefaultName>textbox4</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>Накопительно</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
<RepeatOnNewPage>true</RepeatOnNewPage>
</Header>
<Details>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="TransactionDate_1">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format>dd.MM.yyyy</Format>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>6</ZIndex>
<rd:DefaultName>TransactionDate_1</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>= IIF(Fields!TransactionType.Value="Сальдо на начало периода", "", Fields!TransactionDate.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="OrderNumber">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>5</ZIndex>
<CanGrow>true</CanGrow>
<rd:DefaultName>OrderNumber</rd:DefaultName>
<Value>=Fields!OrderNumber.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="Remark">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>4</ZIndex>
<rd:DefaultName>Remark</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>=Fields!Remark.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="TransactionType">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>3</ZIndex>
<rd:DefaultName>TransactionType</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>=Fields!TransactionType.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="BinNumber">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>2</ZIndex>
<rd:DefaultName>BinNumber</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>=Fields!BinNumber.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="Qty">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<ZIndex>1</ZIndex>
<rd:DefaultName>Qty</rd:DefaultName>
<Value>=Fields!Qty.Value</Value>
<CanGrow>true</CanGrow>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox17">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
</Style>
<rd:DefaultName>textbox17</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>= RunningValue(Fields!Qty.Value,sum,"table1_Group2")</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Details>
<DataSetName>ScalaDB</DataSetName>
<TableGroups>
<TableGroup>
<Header>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox14">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>Wheat</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontStyle>Italic</FontStyle>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>21</ZIndex>
<rd:DefaultName>textbox14</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>="Склад: " &amp; Fields!Warehouse.Value</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Header>
<Grouping Name="table1_Group1">
<GroupExpressions>
<GroupExpression>=Fields!Warehouse.Value</GroupExpression>
</GroupExpressions>
</Grouping>
<Footer>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox22">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>Wheat</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>10</ZIndex>
<rd:DefaultName>textbox22</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>="Итого по складу " &amp; Fields!Warehouse.Value &amp; " на конец периода"</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox8">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BackgroundColor>Wheat</BackgroundColor>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>9</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!Qty.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Footer>
</TableGroup>
<TableGroup>
<Header>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ColSpan>7</ColSpan>
<ReportItems>
<Textbox Name="textbox16">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>Azure</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>20</ZIndex>
<rd:DefaultName>textbox16</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>= Fields!StockCode.Value &amp; " (" &amp; Fields!Description.Value &amp; ")"</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="textbox25">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>19</ZIndex>
<CanGrow>true</CanGrow>
<Value>Дата проводки</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox27">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>18</ZIndex>
<CanGrow>true</CanGrow>
<Value>№ заказа</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox28">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>17</ZIndex>
<CanGrow>true</CanGrow>
<Value>Ссылка</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox29">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>16</ZIndex>
<CanGrow>true</CanGrow>
<Value>Вид операции</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox3">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>15</ZIndex>
<rd:DefaultName>textbox3</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>Ячейка / Паллета</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox31">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>14</ZIndex>
<CanGrow>true</CanGrow>
<Value>Кол-во</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox10">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>AliceBlue</BackgroundColor>
<BorderWidth>
<Bottom>1pt</Bottom>
</BorderWidth>
<BorderColor>
<Bottom>Black</Bottom>
</BorderColor>
<BorderStyle>
<Bottom>Solid</Bottom>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Center</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>13</ZIndex>
<rd:DefaultName>textbox10</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>Накопительно</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Header>
<Grouping Name="table1_Group2">
<GroupExpressions>
<GroupExpression>=Fields!StockCode.Value</GroupExpression>
</GroupExpressions>
<Parent>=Fields!Warehouse.Value</Parent>
</Grouping>
<Footer>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox30">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>Snow</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontStyle>Italic</FontStyle>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>8</ZIndex>
<rd:DefaultName>textbox30</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>="Итого для " &amp; Fields!StockCode.Value &amp; " на конец периода"</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox6">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BackgroundColor>Snow</BackgroundColor>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
</BorderStyle>
<FontSize>8pt</FontSize>
<FontStyle>Italic</FontStyle>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>7</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!Qty.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Footer>
</TableGroup>
</TableGroups>
<Footer>
<TableRows>
<TableRow>
<Height>0.5cm</Height>
<TableCells>
<TableCell>
<ColSpan>6</ColSpan>
<ReportItems>
<Textbox Name="textbox7">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<BackgroundColor>CornflowerBlue</BackgroundColor>
<BorderStyle>
<Default>Solid</Default>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>12</ZIndex>
<rd:DefaultName>textbox7</rd:DefaultName>
<CanGrow>true</CanGrow>
<Value>="Итого по всем складам на конец периода: "</Value>
</Textbox>
</ReportItems>
</TableCell>
<TableCell>
<ReportItems>
<Textbox Name="textbox19">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<Format># ### ##0.####;-# ### ##0.####;0</Format>
<BackgroundColor>CornflowerBlue</BackgroundColor>
<BorderWidth>
<Right>1pt</Right>
</BorderWidth>
<BorderColor>
<Right>Black</Right>
</BorderColor>
<BorderStyle>
<Default>Solid</Default>
<Right>Solid</Right>
</BorderStyle>
<FontSize>8pt</FontSize>
<TextAlign>Right</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<ZIndex>11</ZIndex>
<CanGrow>true</CanGrow>
<Value>=Sum(Fields!Qty.Value)</Value>
</Textbox>
</ReportItems>
</TableCell>
</TableCells>
</TableRow>
</TableRows>
</Footer>
<TableColumns>
<TableColumn>
<Width>2cm</Width>
</TableColumn>
<TableColumn>
<Width>2cm</Width>
</TableColumn>
<TableColumn>
<Width>2.5cm</Width>
</TableColumn>
<TableColumn>
<Width>6.25cm</Width>
</TableColumn>
<TableColumn>
<Width>1.5cm</Width>
</TableColumn>
<TableColumn>
<Width>2.02646cm</Width>
</TableColumn>
<TableColumn>
<Width>2.5cm</Width>
</TableColumn>
</TableColumns>
</Table>
</ReportItems>
<Style />
<Height>4cm</Height>
<ColumnSpacing>1cm</ColumnSpacing>
</Body>
<TopMargin>1cm</TopMargin>
<DataSources>
<DataSource Name="ScalaDB">
<rd:DataSourceID>0729e513-25da-43bd-aa21-986f080c8866</rd:DataSourceID>
<DataSourceReference>ScalaDB</DataSourceReference>
</DataSource>
</DataSources>
<Code />
<Width>18.77646cm</Width>
<DataSets>
<DataSet Name="ScalaDB">
<Fields>
<Field Name="StockCode">
<DataField>StockCode</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="TransactionDate">
<DataField>TransactionDate</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="Warehouse">
<DataField>Warehouse</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="OrderNumber">
<DataField>OrderNumber</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Remark">
<DataField>Remark</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="ToFromWarehouse">
<DataField>ToFromWarehouse</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="TransactionType">
<DataField>TransactionType</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Qty">
<DataField>Qty</DataField>
<rd:TypeName>System.Decimal</rd:TypeName>
</Field>
<Field Name="BinNumber">
<DataField>BinNumber</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>ScalaDB</DataSourceName>
<CommandText>SELECT
SC07003 AS [StockCode],
SC01002 + ‘ ‘ + SC01003 AS [Description],
» AS [TransactionDate],
SC07009 AS [Warehouse],
» AS [OrderNumber],
» AS [Remark],
» AS [ToFromWarehouse],
‘Сальдо на начало периода’ AS [TransactionType],
SUM(SC07004) AS [Qty],
[BinNumber] = CASE SC07026 WHEN » THEN ‘Н/У’ ELSE SC07026 END
FROM SC070100 OB
INNER JOIN SC010100 SC01 ON SC07003 = SC01001
WHERE (SC07003 BETWEEN @SC1 AND @SC2) AND (SC07001 IN (’00’, ’01’, ’02’, ’04’)) AND (SC07002 &lt; @d1) AND (SC07009 BETWEEN @WH1 AND @WH2)
GROUP BY SC07003, SC07009, CASE SC07026 WHEN » THEN ‘Н/У’ ELSE SC07026 END, SC01002 + ‘ ‘ + SC01003
HAVING SUM(SC07004) &lt;&gt; 0
UNION
SELECT
SC07003 AS [StockCode],
SC01002 + ‘ ‘ + SC01003 AS [Description],
SC07002 AS [TransactionDate],
SC07009 AS [Warehouse],
SC07007 AS [OrderNumber],
SC07006 AS [Remark],
SC07027 AS [ToFromWarehouse],
[TransactionType] = CASE
WHEN (SC07001 = ’00’ AND SUM(SC07004) &gt; 0) THEN ‘Приход на склад’
WHEN (SC07001 = ’00’ AND SUM(SC07004) &lt; 0) THEN ‘Возврат со склада’
WHEN (SC07001 = ’01’ AND SUM(SC07004) &lt; 0) THEN ‘Выдача со склада’
WHEN (SC07001 = ’01’ AND SUM(SC07004) &gt; 0) THEN ‘Возврат на склад’
WHEN (SC07001 = ’02’ AND SUM(SC07004) &gt; 0) THEN ‘Оприходование излишков’
WHEN (SC07001 = ’02’ AND SUM(SC07004) &lt; 0) THEN ‘Списание недостачи’
WHEN (SC07001 = ’04’ AND SUM(SC07004) &lt; 0) THEN ‘Перемещение на склад ‘ + SC07027
WHEN (SC07001 = ’04’ AND SUM(SC07004) &gt; 0) THEN ‘Перемещение со склада ‘ + SC07027 END,
SUM(SC07004) AS [Qty],
[BinNumber] = CASE SC07026 WHEN » THEN ‘Н/У’ ELSE SC07026 END
FROM SC070100 SC07
INNER JOIN SC010100 SC01 ON SC07003 = SC01001
WHERE (SC07003 BETWEEN @SC1 AND @SC2) AND (SC07001 IN (’00’, ’01’, ’02’, ’04’)) AND (SC07002 BETWEEN @d1 AND @d2) AND (SC07009 BETWEEN
@WH1 AND @WH2)
GROUP BY SC07003, SC01002 + ‘ ‘ + SC01003, SC07002, SC07009, CASE SC07026 WHEN » THEN ‘Н/У’ ELSE SC07026 END, SC07027, SC07007, SC07006, SC07001
HAVING SUM(SC07004) &lt;&gt; 0
ORDER BY Warehouse, StockCode, TransactionDate, BinNumber</CommandText>
<QueryParameters>
<QueryParameter Name="@SC1">
<Value>=Parameters!SC1.Value</Value>
</QueryParameter>
<QueryParameter Name="@SC2">
<Value>=Parameters!SC2.Value</Value>
</QueryParameter>
<QueryParameter Name="@d1">
<Value>=Parameters!d1.Value</Value>
</QueryParameter>
<QueryParameter Name="@WH1">
<Value>=Parameters!WH1.Value</Value>
</QueryParameter>
<QueryParameter Name="@WH2">
<Value>=Parameters!WH2.Value</Value>
</QueryParameter>
<QueryParameter Name="@d2">
<Value>=Parameters!d2.Value</Value>
</QueryParameter>
</QueryParameters>
</Query>
</DataSet>
<DataSet Name="WarehouseList">
<Fields>
<Field Name="SC23001">
<DataField>SC23001</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>ScalaDB</DataSourceName>
<CommandText>select SC23001, SC23001 + ‘ ‘ +SC23002 as Description from SC230100</CommandText>
<rd:UseGenericDesigner>true</rd:UseGenericDesigner>
</Query>
</DataSet>
</DataSets>
<LeftMargin>1cm</LeftMargin>
<rd:SnapToGrid>true</rd:SnapToGrid>
<PageHeight>29.7cm</PageHeight>
<rd:DrawGrid>true</rd:DrawGrid>
<Description />
<PageWidth>21cm</PageWidth>
<rd:ReportID>34196dad-f26a-41b4-a0d4-5c142c0b2c84</rd:ReportID>
<PageFooter>
<ReportItems>
<Textbox Name="textbox1">
<Style>
<PaddingLeft>2pt</PaddingLeft>
<FontFamily>Courier New</FontFamily>
<FontSize>7pt</FontSize>
<TextAlign>Left</TextAlign>
<PaddingBottom>2pt</PaddingBottom>
<PaddingTop>2pt</PaddingTop>
<PaddingRight>2pt</PaddingRight>
<FontWeight>700</FontWeight>
</Style>
<Width>18.75cm</Width>
<CanGrow>true</CanGrow>
<Value>="Список проводок по запасам за период с " &amp; Format(Parameters!d1.Value,"dd.MM.yyyy") &amp; " по " &amp; Format(Parameters!d2.Value,"dd.MM.yyyy")
&amp; ". Интервал кодов запасов: " &amp; Parameters!SC1.Value &amp; " — " &amp; Parameters!SC2.Value &amp; ". Интервал складов: " &amp; Parameters!WH1.Value &amp; " — " &amp; Parameters!WH2.Value &amp; ". Страница " &amp; Globals!PageNumber &amp; " из " &amp; Globals!TotalPages &amp; ". Дата и время подготовки отчета: " &amp; Format(Globals!ExecutionTime,"dd.MM.yyyy HH:mm:ss")</Value>
</Textbox>
</ReportItems>
<PrintOnLastPage>true</PrintOnLastPage>
<PrintOnFirstPage>true</PrintOnFirstPage>
<Style />
<Height>0.39375in</Height>
</PageFooter>
<BottomMargin>1cm</BottomMargin>
<ReportParameters>
<ReportParameter Name="d1">
<DataType>DateTime</DataType>
<DefaultValue>
<Values>
<Value>01.09.2005 0:00:00</Value>
</Values>
</DefaultValue>
<Prompt>От</Prompt>
</ReportParameter>
<ReportParameter Name="d2">
<DataType>DateTime</DataType>
<DefaultValue>
<Values>
<Value>30.09.2005 23:59:59</Value>
</Values>
</DefaultValue>
<Prompt>До</Prompt>
</ReportParameter>
<ReportParameter Name="SC1">
<DataType>String</DataType>
<Prompt>От кода запаса</Prompt>
</ReportParameter>
<ReportParameter Name="SC2">
<DataType>String</DataType>
<DefaultValue>
<Values>
<Value>ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ</Value>
</Values>
</DefaultValue>
<Prompt>До кода запаса</Prompt>
</ReportParameter>
<ReportParameter Name="WH1">
<DataType>String</DataType>
<Prompt>Склад от:</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>WarehouseList</DataSetName>
<ValueField>SC23001</ValueField>
<LabelField>Description</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
<ReportParameter Name="WH2">
<DataType>String</DataType>
<Prompt>Склад до:</Prompt>
<ValidValues>
<DataSetReference>
<DataSetName>WarehouseList</DataSetName>
<ValueField>SC23001</ValueField>
<LabelField>Description</LabelField>
</DataSetReference>
</ValidValues>
</ReportParameter>
</ReportParameters>
<Language>en-US</Language>
</Report>

vome
Народный форумщик

Зарегистрирован: 17.09.2004
Сообщения: 210
Откуда: Санкт-Петербург -> Москва

Добавлено: 20.09.2005 09:41 Заголовок сообщения: Re: Попробуем обменяться отчетами для MS SQL RS

aav писал(а):
Коллеги, недавно складские сотрудники попросили создать простенький отчет по складам для MS SQL Reporting Services, и вот я хочу поделиться с Вами одним из вариантов.


Скопировал, запустил, получилось, не сразу, пришлось менять код компании, у нас рабочая компания имеет другой код.
По результатам хотелось бы порекомендовать использовать для фильтра дату в формате varchar или nvarchar и конвертить в самом запросе, или там, где это нужно.
Или перед запросом дать команду : Set Language Russian, а то без переделок вывелись проводки с 09 января 2005 года.
И лично мне сложные запросы больше нравится писать в хранимых процедурах, во всяком случае в запросе из RS, мне не удалось вызвать пользовательскую функцию.

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 20.09.2005 10:16 Заголовок сообщения: Re: Попробуем обменяться отчетами для MS SQL RS

vome писал(а):
И лично мне сложные запросы больше нравится писать в хранимых процедурах…

Мне нравится меньше — не так наглядно. А если несколько отчетов используют одну и ту же хранимую процедуру и ее понадобится изменить, можно не вспомнить все места, где она использовалась и…
Дело вкуса. Кому-то нравится «Клинское», а кто-то «тащится» от «Балтики». Это надо отметить! Я не пью ни того, ни другого, но за отзыв спасибо, с меня рюмка кофе. Wink
В любом случае при использовании хранимых процедур важно не забывать давать пользователю отчета права на выполнение процедуры (он в отличие от разработчика отчетов не будет обладать административными правами) Very Happy

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 27.10.2005 08:14 Заголовок сообщения: Re: Попробуем обменяться отчетами для MS SQL RS

vome писал(а):
И лично мне сложные запросы больше нравится писать в хранимых процедурах


Я пришел к такому же выводу

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 23.12.2005 15:08 Заголовок сообщения: Проверим складские таблицы?
Иногда бывает полезно посмотреть, а не «покривело» ли:

Код:
/*
Расхождение информации по количествам между таблицами
складских проводок, партий, складов
В зависимости от количества данных выполнение процедуры может
занять от нескольких минут и больше времени.
Васильев А.А. 23.12.2005
*/
CREATE procedure usr_Difference_Qty_SC07_SC33_SC03
as
SELECT
SC07003 as StockCode,
SC07009 as WarehouseCode,
SC07004 as QtySC07,
isnull(SC33005,0) as QtySC33,
isnull(SC03003,0) as QtySC03
FROM
   (select
   SC07003,
   SC07009,
   sum(SC07004) as SC07004
   FROM SC070100
   WHERE
   SC07001 in (’00’,’01’,’02’,’04’)
   GROUP BY
   SC07003,
   SC07009) SC07
LEFT JOIN
   (select
   nbsp;SC33001,
   SC33002,
   sum(SC33005) as SC33005
   FROM
   SC330100
   GROUP BY SC33001,SC33002) SC33
ON SC33.SC33001=SC07.SC07003 and SC33.SC33002=SC07.SC07009
LEFT JOIN SC030100
ON SC03001=SC07003 and SC03002=SC07009
where
round(SC07004,4)<>round(isnull(SC33005,0),4)
OR round(SC07004,4)<>round(isnull(SC03003,0),4)
OR round(isnull(SC33005,0),4)<>round(isnull(SC03003,0),4)
ORDER BY SC07003,SC07009


А если «покривело» между проводками и таблицей партий, то тогда захочется поподробнее:

Код:
/*
Расхождение информации по количествам между таблицами
складских проводок и партий
В зависимости от количества данных выполнение процедуры может
занять от нескольких минут и больше времени.
Васильев А.А. 23.12.2005
*/
CREATE procedure usr_Difference_Qty_SC07_SC33
as
SELECT
SC07003 as StockCodeSC07,
SC07009 as WarehouseCodeSC07,
SC07021 as BatchIDSC07,
SC07004 as QtySC07,
isnull(SC33005,0) as QtySC33,
isnull(SC33003,’НЕТ В SC33!!’) as BatchIDSC33
FROM
   (select
   SC07003,
   SC07009,
   SC07021,
   sum(SC07004) as SC07004
   FROM SC070100
   WHERE
   SC07001 in (’00’,’01’,’02’,’04’,’09’)
   GROUP BY
   SC07003,
   SC07009,
   SC07021) SC07
LEFT JOIN
   SC330100
ON SC33001=SC07003 and SC33002=SC07009 and SC33003=SC07021
where
round(SC07004,4)<>round(isnull(SC33005,0),4)
ORDER BY SC07003, SC07009, SC07021


Самое смешное — запускать эту процедуру в базе данных, где изменения происходят в режиме реального времени: пока выполняется вторая часть подзапроса данные уже успевают измениться. Недаром системные утилиты в Скале разрешено запускать только в монопольном режиме.