Scripts: различия между версиями
Внешний вид
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 8: | Строка 8: | ||
==ConcatFields()== | ==ConcatFields()== | ||
Функция <code>ConcatFields()</code> - предназначена для объединения нескольких текстовых значений в одну строку с использованием заданного разделителя. | |||
<syntaxhighlight lang="vb"> | <syntaxhighlight lang="vb"> | ||
| Строка 31: | Строка 33: | ||
===Входные параметры=== | ===Входные параметры=== | ||
separator (String) | *<code>separator (String)</code> - cимвол или текст, который будет стоять между элементами (например - запятая, или пробел, или перенос на следующую строку); | ||
ParamArray fields() (Object) | *<code>ParamArray fields() (Object)</code> - список аргументов любого количества можно перечислить через запятую (также можно передать массив). | ||
===Выходные данные=== | ===Выходные данные=== | ||
String | *<code>String</code> - одна строка из объединенных элементов. | ||
*<code>-</code> (''дефис'') - если данных нет. | |||
===Алгоритм=== | ===Алгоритм=== | ||
*<code>If fields Is Nothing Then Return "-"</code> - | *<code>If fields Is Nothing Then Return "-"</code> - если массив аргументов вообще не передан, функция сразу возвращает дефис; | ||
*<code>Dim list As New System.Collections.Generic.List(Of String)</code> - | *<code>Dim list As New System.Collections.Generic.List(Of String)</code> - создается временный список для хранения "чистых" строковых элементов; | ||
*<code>For Each f As Object In fields</code> - | *<code>For Each f As Object In fields</code> - цикл по каждому полученному на входе значению; | ||
*<code>If f Is Nothing Then Continue For</code> - | *<code>If f Is Nothing Then Continue For</code> - если текущий элемент пуст (null), он пропускается; | ||
*<code>Dim elem As String = f.ToString().Trim()</code> - | *<code>Dim elem As String = f.ToString().Trim()</code> - значение переводится в строковый элемент и очищается от лишних пробелов по краям; | ||
*<code>If String.IsNullOrEmpty(elem) Then Continue For</code> - | *<code>If String.IsNullOrEmpty(elem) Then Continue For</code> - если после удаления пробелов строковый элемент оказался пустым, он пропускается; | ||
*<code>list.Add(elem)</code> - | *<code>list.Add(elem)</code> - корректный строковый элемент добавляется в итоговый список; | ||
*<code>If list.Count = 0 Then Return "-"</code> - | *<code>If list.Count = 0 Then Return "-"</code> - если после проверки всех элементов список пуст (все было null или пробелы), возвращается дефис; | ||
*<code>Return String.Join(separator, list.ToArray())</code> - | *<code>Return String.Join(separator, list.ToArray())</code> - все накопленные в списке элементы склеиваются в одну строку через указанный разделитель. | ||
==ReturnYearsWithSuffix()== | ==ReturnYearsWithSuffix()== | ||
Версия от 01:33, 4 марта 2026
Общие сведения
Раздел Scripts предназначен для добавления программной логики непосредственно в файл макета отчета.
Это позволяет отчету быть самодостаточным: код из раздела выполняется в процессе формирования отчета.
Внутри раздела можно создавать собственные вспомогательные функции для выполнения сложных вычислений прямо «на лету».
ConcatFields()
Функция ConcatFields() - предназначена для объединения нескольких текстовых значений в одну строку с использованием заданного разделителя.
Public Function ConcatFields(separator As String, ParamArray fields() As Object) As String
If fields Is Nothing Then Return "-"
Dim list As New System.Collections.Generic.List(Of String)
For Each f As Object In fields
If f Is Nothing Then Continue For
Dim elem As String = f.ToString().Trim()
If String.IsNullOrEmpty(elem) Then Continue For
list.Add(elem)
Next
If list.Count = 0 Then
Return "-"
Else
Return String.Join(separator, list.ToArray())
End If
End Function
Входные параметры
separator (String)- cимвол или текст, который будет стоять между элементами (например - запятая, или пробел, или перенос на следующую строку);ParamArray fields() (Object)- список аргументов любого количества можно перечислить через запятую (также можно передать массив).
Выходные данные
String- одна строка из объединенных элементов.-(дефис) - если данных нет.
Алгоритм
If fields Is Nothing Then Return "-"- если массив аргументов вообще не передан, функция сразу возвращает дефис;Dim list As New System.Collections.Generic.List(Of String)- создается временный список для хранения "чистых" строковых элементов;For Each f As Object In fields- цикл по каждому полученному на входе значению;If f Is Nothing Then Continue For- если текущий элемент пуст (null), он пропускается;Dim elem As String = f.ToString().Trim()- значение переводится в строковый элемент и очищается от лишних пробелов по краям;If String.IsNullOrEmpty(elem) Then Continue For- если после удаления пробелов строковый элемент оказался пустым, он пропускается;list.Add(elem)- корректный строковый элемент добавляется в итоговый список;If list.Count = 0 Then Return "-"- если после проверки всех элементов список пуст (все было null или пробелы), возвращается дефис;Return String.Join(separator, list.ToArray())- все накопленные в списке элементы склеиваются в одну строку через указанный разделитель.
ReturnYearsWithSuffix()
Public Function ReturnYearsWithSuffix(inputDate As Date) As String
Dim yearsDiff As Long = DateDiff(DateInterval.Year, inputDate, Now())
Dim resultDate As Long = yearsDiff
Dim resultString As String = yearsDiff.ToString()
If (resultDate > 20) Then
resultDate = resultDate Mod 10
End If
Select Case resultDate
Case 1
resultString &= $" год"
Case 2 To 4
resultString &= $" года"
Case Else
resultString &= $" лет"
End Select
Return resultString
End Function
FormatAsInitialsSurname()
Public Function FormatAsInitialsSurname(fullName As String) As String
Dim trimmedName As String = fullName.Trim()
Dim nameParts() As String = trimmedName.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
If nameParts.Length < 2 Then
Return fullName
End If
Dim surname As String = nameParts(0)
Dim firstNameInitial As Char = nameParts(1)(0)
Dim middleNameInitial As Char? = Nothing
If nameParts.Length >= 3 Then
middleNameInitial = nameParts(2)(0)
End If
Dim result As String = $"{firstNameInitial}."
If middleNameInitial.HasValue Then
result &= $"{middleNameInitial}."
End If
result &= $" {surname}"
Return result
End Function