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

Сведения о работниках лаборатории: различия между версиями

Материал из Химсофт Вики
Строка 32: Строка 32:
|-
|-
|Заголовок||Текущая дата <code>Today.ToString("dd.MM.yyyy")</code>||<syntaxhighlight lang="vb">="По состоянию на: " & Today.ToString("dd.MM.yyyy")</syntaxhighlight>
|Заголовок||Текущая дата <code>Today.ToString("dd.MM.yyyy")</code>||<syntaxhighlight lang="vb">="По состоянию на: " & Today.ToString("dd.MM.yyyy")</syntaxhighlight>
|-
|rowspan="3"|Подписи||Подстановка должности из фильтра <code>Parameters!ReportParameterPosition.Value</code>||<syntaxhighlight lang="vb">=Parameters!ReportParameterPosition.Value</syntaxhighlight>
|-
|Подстановка Фамилии Имени Отчества из фильтра <code>Parameters!ReportParameterFio.Value</code>||<syntaxhighlight lang="vb">=Code.FormatAsInitialsSurname(Parameters!ReportParameterFio.Value)</syntaxhighlight>
|-
|Преобразование в формат И.О. Фамилия <code>Code.FormatAsInitialsSurname()</code>||<syntaxhighlight lang="vb">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
</syntaxhighlight> функция принимает строку полных Фамилии, Имени и Отчества;
полученное значение сохраняется в переменной <code>trimmedName</code> после удаления начальных и конечных пробелов (если они были) с помощью встроенной функции <code>Trim()</code>;
в массиве <code>nameParts()</code> сохраняются составные части строки (слова), разбитые с помощью встроенной функции <code>Split()</code>;
если имя содержит менее двух частей (например, только "Иван" или только "Петров"), функция возвращает исходную строку <code>fullName</code> без изменений;
в переменной surname сохраняется первый элемент массива <code>nameParts(0)</code> - Фамилия;
в переменной <code>firstNameInitial</code> сохраняется из второго элемента массива первая буква <code>nameParts(1)(0)</code> – инициал имени;
создается переменная <code>middleNameInitial</code>, которая по умолчанию назначается пустой (на случай отсутствия отчества);
при количестве элементов массива более или равных 3 (при наличии отчества), переменной <code>middleNameInitial</code> в качестве значения присваивается из третьего элемента массива первая буква <code>nameParts(2)(0)</code> – инициал отчества;
создается переменная <code>result</code>, в которую объединяются «И.» + «О.» + « Фамилия»;
функция возвращает значение <code>result</code> в выражение ячейки для дальнейшего отображения
|-
|rowspan="3"|Нижний колонтитул||Имя программы <code>Code.Globals.GetProgramName()</code>||<syntaxhighlight lang="vb">=Code.Globals.GetProgramName()</syntaxhighlight>
|-
|Номер страницы <code>Globals!PageNumber</code>||rowspan="2"|<syntaxhighlight lang="vb">="Страница " & Globals!PageNumber & " из " & Globals!TotalPages</syntaxhighlight>
|-
|Всего страниц <code>Globals!TotalPages></code>
|-
|-
|style="text-align: center;" colspan="3"|<b>Основная таблица</b>
|style="text-align: center;" colspan="3"|<b>Основная таблица</b>

Версия от 09:51, 20 января 2026

Параметры

В форме используются 5 фильтров параметров:

  1. Выберите лабораторию: (выбор одного из вариантов); выводятся в алфавитном порядке лаборатории, имеющие сотрудников;
  2. Укажите ФИО уполномоченного лица: (выбор одного из вариантов); выводятся только сотрудники выбранной в п.1 лаборатории;
  3. Укажите должность уполномоченного лица: (выбор одного из вариантов); выводятся должности, относящиеся к выбранному в п.2 сотруднику;
  4. Сотрудники (область аккредитации): (доступные значения – «в области аккредитации», «вне области аккредитации»);
  5. Введите начальное значение нумерации строк: (ввод целого числа); по умолчанию 1, возможен ввод в т.ч. 0 или отрицательного числа.

Атрибуты

В наборе данных (SQL-запрос для DataSet) в таблице ATTRIBUTE_NAME используются атрибуты со следующими значениями NAME:

  • 'СНИЛС' – snils;
  • 'Форма привлечения труда' – form;
  • 'Тип занятости' – type;
  • 'Номер договора' – number;
  • 'Дата договора' – date;
  • 'Выполняемые функции, исследования, испытания, измерения' – func;
  • 'Наименование учебного заведения' – univer;
  • 'Год окончания' – uni_year;
  • 'Квалификация по документу' – prof;
  • 'Реквизиты документа об образовании' – diplom;
  • 'Дата начала практического опыта' – start;
  • 'В области аккредитации' – accred.

Поля, данные, выражения и формулы

Поля Данные и выражения Формулы
Верхний колонтитул Название лаборатории =Parameters!ReportParameterLaboratory.Value Персонал >> Привязка или Редактировать >> Карточка сотрудника >> Привязка
Владелец версии Code.Globals.GetVersionOwner()
="Владелец версии: " & Code.Globals.GetVersionOwner()
Заголовок Текущая дата Today.ToString("dd.MM.yyyy")
="По состоянию на: " & Today.ToString("dd.MM.yyyy")
Подписи Подстановка должности из фильтра Parameters!ReportParameterPosition.Value
=Parameters!ReportParameterPosition.Value
Подстановка Фамилии Имени Отчества из фильтра Parameters!ReportParameterFio.Value
=Code.FormatAsInitialsSurname(Parameters!ReportParameterFio.Value)
Преобразование в формат И.О. Фамилия Code.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
функция принимает строку полных Фамилии, Имени и Отчества;

полученное значение сохраняется в переменной trimmedName после удаления начальных и конечных пробелов (если они были) с помощью встроенной функции Trim(); в массиве nameParts() сохраняются составные части строки (слова), разбитые с помощью встроенной функции Split(); если имя содержит менее двух частей (например, только "Иван" или только "Петров"), функция возвращает исходную строку fullName без изменений; в переменной surname сохраняется первый элемент массива nameParts(0) - Фамилия; в переменной firstNameInitial сохраняется из второго элемента массива первая буква nameParts(1)(0) – инициал имени; создается переменная middleNameInitial, которая по умолчанию назначается пустой (на случай отсутствия отчества); при количестве элементов массива более или равных 3 (при наличии отчества), переменной middleNameInitial в качестве значения присваивается из третьего элемента массива первая буква nameParts(2)(0) – инициал отчества; создается переменная result, в которую объединяются «И.» + «О.» + « Фамилия»; функция возвращает значение result в выражение ячейки для дальнейшего отображения

Нижний колонтитул Имя программы Code.Globals.GetProgramName()
=Code.Globals.GetProgramName()
Номер страницы Globals!PageNumber
="Страница " & Globals!PageNumber & " из " & Globals!TotalPages
Всего страниц Globals!TotalPages>
Основная таблица
№ п/п Вывод сквозной нумерации строк RowNumber()
=RowNumber() + Parameters!ReportParametrNumberFirstString.Value  1
из счетчика RowNumber() вычитается единица, чтобы скорректировать смещение относительно числа, введенного пользователем; при вводе пользователем, например, числа 50, для первой строки отчета RowNumber() вернет 1: выражение вычисляется как 1 + 50 - 1, что дает в результате 50 (желаемый начальный номер); для второй строки RowNumber() вернет 2, и выражение даст 2 + 50 - 1 = 51, и так далее
Начальное значение нумерации строк из параметра фильтра: Parameters!ReportParametrNumberFirstString.Value – 1
Фамилия, имя, отчество (при наличии), страховой номер индивидуального лицевого счета, дата и место рождения Вывод ФИО Fields!fio.Value Редактировать >> Карточка сотрудника >> Информация >> Фамилия:
Редактировать >> Карточка сотрудника >> Информация >> Имя:
Редактировать >> Карточка сотрудника >> Информация >> Отчество:
Вывод СНИЛС Fields!snils.Value Редактировать >> Карточка сотрудника >> Информация >> СНИЛС:
Условие IIF()
=IIF( Not IsNothing(Fields!snils.Value), Fields!fio.Value + vbLF + "СНИЛС " + Fields!snils.Value, Fields!fio.Value)
если поле БД, содержащее СНИЛС, не пустое, то в ячейку вносится значение ФИО + перенос на новую строку + надпись «СНИЛС: » + значение поля СНИЛС; иначе вносится только значение ФИО
Сравнение с пустой ячейкой Not IsNothing()
Перенос строки vbLF
Основание для привлечения личного труда (трудовой договор, гражданско-правовой договор или иное), работа по основному месту работы или по совместительству Форма договора Fields!form.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Форма привлечения труда:
Номер договора Fields!number.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Номер договора:
Дата договора Fields!date.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Дата договора
Вид работы Fields!type.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Тип занятости
Условие IIF()
=IIF(IsNothing(Fields!form.Value) And IsNothing(Fields!number.Value) And IsNothing(Fields!date.Value) And IsNothing(Fields!type.Value), "-", Fields!form.Value + " " + Fields!number.Value + IIF( Not IsNothing(Fields!date.Value), " от " + Fields!date.Value, "") + " (" + Fields!type.Value + ")")

если все 4 поля БД, содержащие форму, номер, дату и тип являются пустыми, то в строку заносится прочерк; иначе вносятся форма + номер + (если дата не пустая, то « от » + дата, если пустая то ничего) + тип

Сравнение с пустой ячейкой Not IsNothing()
Выполняемые функции, проводимые исследования, испытания, измерения Выполняемые функции Fields!func.Value Редактировать >> Карточка сотрудника >> Информация >> Выполняемые функции, исследования, испытания, измерения
Условие IIF()
=IIF(IsNothing (Fields!func.Value), "-", Fields!func.Value)<
если поле БД, содержащее функцию, пустое, то вносится прочерк, иначе вносится функция из поля
Сравнение с пустой ячейкой Not IsNothing()
Образование (наименование учебного заведения, год окончания, квалификация по документу об образовании, реквизиты документа об образовании) Название учебного заведения Fields!univer.Value Редактировать >> Карточка сотрудника >> Информация >> Образование >> Наименование учебного заведения
Год окончания Fields!uni_year.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Год окончания
Квалификация Fields!prof.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Квалификация по документу
Реквизиты диплома Fields!diplom.Value Редактировать >> Карточка сотрудника >> Информация >> Трудовые отношения >> Реквизиты документа об образовании
Условие IIF()
=IIF(IsNothing(Fields!univer.Value) And IsNothing(Fields!uni_year.Value) And  IsNothing(Fields!prof.Value) And  IsNothing(Fields!diplom.Value), "-", IIF( Not IsNothing(Fields!univer.Value), Fields!univer.Value  & ", ", "") &IIF( Not IsNothing(Fields!uni_year.Value), Fields!uni_year.Value & ", ", "") & IIF( Not IsNothing(Fields!prof.Value), Fields!prof.Value & ", ", "") & Fields!diplom.Value)

если все 4 поля БД (учебное заведение, год окончания, специальность и реквизиты диплома) пустые, то вносится прочерк; иначе к трем полям применяется условие – если поле не пустое, выводится поле и запятая, если пустое, то ничего; к последнему полю применяется условие без запятой – если поле не пустое, то выводится поле, если пустое, то ничего;

Сравнение с пустой ячейкой Not IsNothing()
Практический опыт по исследованиям, испытаниям, измерениям, включенным в область аккредитации (в годах, с указанием, в каких организациях, в какой период и по каким видам исследований (испытаний) измерений получен) Дата начала трудовой деятельности Fields!start.Value Редактировать >> Карточка сотрудника >> Информация >> Дата начала практического опыта
Условие IIF()
=IIF(IsNothing(Fields!start.Value), "-", Code.ReturnYearsWithSuffix (Fields!start.Value)  & vbLF & Fields!start.Value & " - по текущую дату")

если в БД поле даты начала трудовой деятельности пустое, выводится прочерк; иначе ‒ вызывает функцию ReturnYearsWithSuffix(), возвращающую количество лет и текстовый суффикс « год/года/лет» в зависимости от числа лет стажа; ‒ переносит строку (vbLF); ‒ выводит год начала трудовой деятельности + «по текущую дату»

Количество лет DateDiff(DateInterval.Year, Fields!start.Value, Now()
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

функция принимает числовое значение количества лет трудового стажа; DateDiff() вычисляет разницу между двумя датами (между третьим и вторым аргументами), при этом первый аргумент DateInterval.Year указывает функции, в каких единицах измерения нужно вернуть разницу (в данном случае, в полных годах), второй аргумент inputDate начало периода, третий аргумент Now() конец периода (текущая системная дата и время на момент выполнения кода); результат вычисления присваивается переменной yearsDiff; значение сохраняется в виде строки в переменной resultString; создается переменная resultDate и ей присваивается ранее вычисленное значение лет из переменной yearsDiff (для последующих вычислений суффикса); если количество лет более 20, то resultDate делится на 10 и получившийся остаток перезаписывается в переменную resultDate; переменная resultDate для определения соответствующего суффикса отправляется в оператор Select Case, где в зависимости от ее значения к ранее полученной строке resultString дописывается через пробел необходимый суффикс «год/года/лет»; функция возвращает итоговую строку в вызвавшее ее выражение в ячейке для дальнейшей обработки (соединения с другими данными)