Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Использование внедренного кода в Reporting Services / 12 сообщений из 12, страница 1 из 1
30.10.2012, 10:08
    #38018123
EvgenOrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
Доброго времени суток.
При построении отчета используется множество вычисляемых полей использующих одинаковые условия и одинаковый код
Чтобы не плодить практически идентичные функции можно ли их вычислить в пользовательском коде (Отчет-свойства отчета-код) и как запустить их расчет
Т.е. использовать что то наподобие
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Dim var1 as Double
Public Dim var2 as Double
....
Public Dim varN as Double
Public sub setData (f as microsoft.reportingservices.reportprocessing.reportobjectmodel.fields)
 if f!field0.value=0 then
     var1=f!field1
     var2=f!field2
else 
     var1=-f!field2
     var2=0
end if
varN=var1+var2
varN-1=var1-var2
End Sub


В итоге в поля отчета должны вставлятся
=Code.var1
....
= Code.varN

И откуда можно запустить выполнение этого кода(Code.setData(Fields))
...
Рейтинг: 0 / 0
30.10.2012, 10:35
    #38018171
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
...
Рейтинг: 0 / 0
30.10.2012, 11:00
    #38018244
EvgenOrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
тут все понятно, приблизительно так же как и написал, только переменная задается в другом месте.

Весь вопрос в том откуда делать вызов:
Код: sql
1.
Code.setData(Fields)


Для одной переменной все просто - одна функция - одна переменная. Но когда таких переменных много? И, как писал выше - для нескольких переменных используются одни и теже условия - получится много одинаковых функций
Я пробовал делать так
Public Dim v as Integer
Publict Function setD()
v=20
return 0
End Function

В отчет добавлял textbox = Code.setD()
и textbox =Code.v который выводит значение 0.
как вывести 20?
...
Рейтинг: 0 / 0
30.10.2012, 11:29
    #38018304
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
EvgenOrel,

не поняла, почему это функций должно быть много??
Одна функция может обслужить много переменных, поскольку внутри тела функции никак не используется имя переменной. Переменная же по ссылке передается.
в примере так
Код: vbnet
1.
2.
3.
4.
Public Function SetVariableValue(val as Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, newval As Integer) as Integer
val.Value = val.Value + newval
Return Val.Value
End Function




ее можно передать так
Код: vbnet
1.
=Code.SetVariableValue(Variables!v1, 2)

или
так
Код: vbnet
1.
=Code.SetVariableValue(Variables("v1"), 2)



или вообще так
Код: vbnet
1.
=Code.SetVariableValue(Variables(Fields!VariableName.Value), Fields!ParameterToCalcVariable.Value)



тогда если сделать tablix, основанный на dataset с полем, в котором содержатся имена переменных (VariableName) и другим полем, в котором содержатся соответствующие значения (ParameterToCalcVariable), то ниже этого tablix все значения переменных будут рассчитаны

проверила - работает


Но если вдруг в dataset в поле VariableName будут имена переменные, которые в отчете не определены , то все повалится:)


P.S. Это все в предположении, что я правильно поняла, что Вам требуется
...
Рейтинг: 0 / 0
30.10.2012, 11:33
    #38018311
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
EvgenOrel,

когда я говорю про переменные, я имею в виду переменные, определенные в ReportProperties Variables, а не внутри сегмента Code. даже не пробовала с такими (из сегмента Code) работать в теле отчета
...
Рейтинг: 0 / 0
30.10.2012, 12:09
    #38018372
EvgenOrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
Andrews25,

Дело в том что не одной переменной нужно опеределить значение, а несколько переменных, которые вычисляются в зависимости друг от друга:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public sub setData (f as microsoft.reportingservices.reportprocessing.reportobjectmodel.fields)
 if f!field0.value=0 then
     var1=f!field1
     var2=f!field2
else 
     var1=-f!field2
     var2=0
end if
varN=var1+var2
varN-1=var1-var2
End Sub


все переменные var1,var2,...,varN выводятся в теле отчета, то есть в одном поле мне нужно вывести var1 а в другом varN
Можно все это сделать функцией, где указывать параметр какую переменную возвращать
Код: sql
1.
2.
3.
4.
5.
select par
  case 1 return var1
....
  case N return varN
end select


но опять таки - функция будет вызываться в каждом месте, вместо того чтобы выполнить ее один раз
...
Рейтинг: 0 / 0
30.10.2012, 12:48
    #38018458
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
EvgenOrel,

если переменных конечное количество, то передайте их каждую своим отдельным параметром. Измените значение переменных в коде функции. Как передать туда коллекцию полей - пока не знаю :)


Код: vbnet
1.
2.
3.
Public Function SetVariableValue2(val as Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, val2 as Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable)
val2.Value = val.Value + 15
End Function



в expression для textbox ПЕРЕД место , где должны использоваться переменные v1 и v2 - пишу


Код: vbnet
1.
=Code.SetVariableValue2(Variables!v1,Variables!v2)
...
Рейтинг: 0 / 0
30.10.2012, 13:09
    #38018507
EvgenOrel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
Andrews25, принцип я понял, хотя хотелось все таки немного другого - в коде описать все переменные и использовать их оттуда.Но все равно спасибо )
...
Рейтинг: 0 / 0
30.10.2012, 14:20
    #38018682
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
EvgenOrel,

кстати
можно передать всю коллекцию Variables одни махом
синтаксис обращения к конкретной переменной обычный

Код: vbnet
1.
2.
3.
Public Function SetVariableValue3(vars as Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variables)
vars("v1").Value = 88
End Function



а с коллекцией Fields все еще непонятно
...
Рейтинг: 0 / 0
30.10.2012, 14:50
    #38018753
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
EvgenOrel,

ну параметр Fields определенный вообще без Namespace понимает!!!


Код: vbnet
1.
2.
3.
Public Function SetVariableValue4(falls as Fields)
RETURN Cstr(falls("какое-то имя поля").Value)
End Function



вызов
Код: vbnet
1.
=Code.SetVariableValue4(Fields)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.04.2014, 13:18
    #38630059
philips
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
А как получить коллекцию Fields если более 1 DataSet?
...
Рейтинг: 0 / 0
30.04.2014, 15:46
    #38630317
Andrews25
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование внедренного кода в Reporting Services
Хм

Для этого надо вызывать функцию из той части отчета, в которой ВИДИМ нужный вам dataset
Т.е. добавить tablix или chart, который берет данный из этого dataset

Может что-то более хитрое есть - но я не в курсе
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Использование внедренного кода в Reporting Services / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]