Перейти к содержанию

Scripts

Материал из Химсофт Вики

Общие сведения

Раздел Scripts предназначен для добавления программной логики непосредственно в файл макета отчета.

Это позволяет отчету быть самодостаточным: код из раздела выполняется в процессе формирования отчета.

Внутри раздела можно создавать собственные вспомогательные функции для выполнения сложных вычислений прямо «на лету».

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): Символ или текст, который будет стоять между элементами (например, запятая или пробел). ParamArray fields() (Object): Список аргументов любого количества. Благодаря ParamArray в функцию можно передать как массив, так и просто перечислить значения через запятую.

Выходные данные

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