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

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

Материал из Химсофт Вики
 
(не показано 17 промежуточных версий этого же участника)
Строка 1: Строка 1:
==Общий вид==
[[Файл:p_1.png|center|border]]
==Параметры==
==Параметры==


Строка 92: Строка 96:
и данные <code style="background-color: #fff3e0;>...</code> >> <code style="background-color: #fff3e0;>...</code>
и данные <code style="background-color: #fff3e0;>...</code> >> <code style="background-color: #fff3e0;>...</code>
!Код и комментарии
!Код и комментарии
|-
|colspan = "3"|Сведения о работниках лаборатории
|-
|-
|Текущая дата  
|Текущая дата  
Строка 112: Строка 118:
|-
|-
|Фамилия, имя, отчество (при наличии), страховой номер индивидуального лицевого счета, дата и место рождения
|Фамилия, имя, отчество (при наличии), страховой номер индивидуального лицевого счета, дата и место рождения
|<code style="background-color: #d4edda;>Персонал</code> >> Выбрать запись >> <code style="background-color: #d4edda;>Карточка сотрудника</code> >> <code style="background-color: #d4edda;>Фамилия</code>; <code style="background-color: #d4edda;>Имя</code>; <code style="background-color: #d4edda;>Отчество</code>; <code style="background-color: #d4edda;>СНИЛС</code>; <code style="background-color: #d4edda;>Дата рождения</code>
|<code style="background-color: #d4edda;>Персонал</code> >> Выбрать запись >> <code style="background-color: #d4edda;>Карточка сотрудника</code> >> <code style="background-color: #d4edda;>Фамилия</code>, <code style="background-color: #d4edda;>Имя</code>, <code style="background-color: #d4edda;>Отчество</code>, <code style="background-color: #d4edda;>СНИЛС</code>
<code style="background-color: #fff3e0;>Fields!fio.Value</code> >> <code style="background-color: #fff3e0;>fio / MainDataSet</code> >> <code style="background-color: #fff3e0;>SURNAME; NAME; PATRONYMIC / EMPLOYEE</code>
<code style="background-color: #fff3e0;>Fields!surname.Value, Fields!name.Value, Fields!patronimyc.Value,</code> >> <code style="background-color: #fff3e0;>surname, name, patronimyc / MainDataSet</code> >> <code style="background-color: #fff3e0;>SURNAME; NAME; PATRONYMIC / EMPLOYEE</code>


<code style="background-color: #fff3e0;>Fields!snils.Value</code> >> <code style="background-color: #fff3e0;>snils / MainDataSet</code> >> <code style="background-color: #fff3e0;>STRING_VALUE / EMPLOYEE_ATTRIBUTE</code>
<code style="background-color: #fff3e0;>Fields!snils.Value</code> >> <code style="background-color: #fff3e0;>snils / MainDataSet</code> >> <code style="background-color: #fff3e0;>STRING_VALUE / EMPLOYEE_ATTRIBUTE</code>
|<syntaxhighlight lang="vb">=Code.ConcatFields(vbLF, Fields!fio.Value,  Fields!snils.Value)</syntaxhighlight>  
|<syntaxhighlight lang="vb">=ConcatFields(vbLF, FormatFio(Fields!surname.Value, Fields!name.Value, Fields!patronymic.Value, 0),  Fields!snils.Value)</syntaxhighlight>  
если поле БД, содержащее СНИЛС, не пустое, то в ячейку вносится значение ФИО + перенос на новую строку + значение поля СНИЛС; иначе вносится только значение ФИО;<br>для соединения полей используется функция [[Scripts#ConcatFields()|<code>ConcatFields()</code>]]
в ячейку вносятся (через перенос на новую строку) значение ФИО и значение поля СНИЛС (если не пустое);<br>используются:
*для соединения полей функция [[Scripts#ConcatFields()|<code>ConcatFields()</code>]]
*для преобразования ФИО функция [[Scripts#FormatFio()|<code>FormatFio()</code>]]
|-
|-
|Основание для привлечения личного труда (трудовой договор, гражданско-правовой договор или иное), работа по основному месту работы или по совместительству
|Основание для привлечения личного труда (трудовой договор, гражданско-правовой договор или иное), работа по основному месту работы или по совместительству
Строка 124: Строка 132:


<code style="background-color: #fff3e0;>Fields!contract_date.Value</code> >> <code style="background-color: #fff3e0;>contract_date / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
<code style="background-color: #fff3e0;>Fields!contract_date.Value</code> >> <code style="background-color: #fff3e0;>contract_date / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
|<syntaxhighlight lang="vb">=IIF(IsNothing(Fields!employment_form.Value) And IsNothing(Fields!contract_number.Value) And IsNothing(Fields!contract_date.Value) And IsNothing(Fields!employment_type.Value), "-", Fields!employment_form.Value + " " + Fields!contract_number.Value +IIF( Not IsNothing(Fields!contract_date.Value), " от " + DateValue(Fields!contract_date.Value), "") + " (" + Fields!employment_type.Value + ")")</syntaxhighlight>
|<syntaxhighlight lang="vb">=Code.ConcatFields(", ", Fields!employment_form.Value, Fields!contract_number.Value, Format(Fields!contract_date.Value, "dd.MM.yyyy"), Fields!employment_type.Value)</syntaxhighlight>
если все 4 поля БД, содержащие форму, номер, дату и тип являются пустыми, то в строку заносится прочерк; иначе вносятся форма + номер + (если дата не пустая, то « от » + дата, если пустая то ничего) + тип
если все 4 поля БД, содержащие форму, номер, дату и тип являются пустыми, то в строку заносится прочерк; иначе вносятся через запятую форма, номер, дата и тип;<br>для соединения полей используется функция [[Scripts#ConcatFields()|<code>ConcatFields()</code>]]
|-
|-
|Выполняемые функции, проводимые исследования, испытания, измерения
|Выполняемые функции, проводимые исследования, испытания, измерения
Строка 137: Строка 145:


<code style="background-color: #fff3e0;>Fields!uni_year.Value</code> >> <code style="background-color: #fff3e0;>uni_year / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
<code style="background-color: #fff3e0;>Fields!uni_year.Value</code> >> <code style="background-color: #fff3e0;>uni_year / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
|<syntaxhighlight lang="vb">=IIF(IsNothing(Fields!uni.Value) And IsNothing(Fields!uni_year.Value) And  IsNothing(Fields!prof.Value) And  IsNothing(Fields!diplom.Value), "-", IIF( Not IsNothing(Fields!uni.Value), Fields!uni.Value & ", ", "") &IIF( Not IsNothing(Fields!uni_year.Value), Fields!uni_year.Value & ", ", "") & IIF( Not IsNothing(Fields!prof.Value), Fields!prof.Value & ", ", "") & Fields!diplom.Value)</syntaxhighlight>
|<syntaxhighlight lang="vb">=Code.ConcatFields(", ",Fields!uni.Value,  Fields!uni_year.Value, Fields!prof.Value, Fields!diplom.Value)</syntaxhighlight>
если все 4 поля БД (учебное заведение, год окончания, специальность и реквизиты диплома) пустые, то вносится прочерк; иначе к трем полям применяется условие – если поле не пустое, выводится поле и запятая, если пустое, то ничего; к последнему полю применяется условие без запятой – если поле не пустое, то выводится поле, если пустое, то ничего;  
если все 4 поля БД (учебное заведение, год окончания, специальность и реквизиты диплома) пустые, то вносится прочерк; иначе через запятую выводятся только не пустые поля;<br>для соединения полей используется функция [[Scripts#ConcatFields()|<code>ConcatFields()</code>]]
|-
|-
|Практический опыт по исследованиям, испытаниям, измерениям, включенным в область аккредитации (в годах, с указанием, в каких организациях, в какой период и по каким видам исследований (испытаний) измерений получен)
|Практический опыт по исследованиям, испытаниям, измерениям, включенным в область аккредитации (в годах, с указанием, в каких организациях, в какой период и по каким видам исследований (испытаний) измерений получен)
|<code style="background-color: #d4edda;>Персонал</code> >> Выбрать запись >> <code style="background-color: #d4edda;>Карточка сотрудника</code> >> <code style="background-color: #d4edda;>Дата получения диплома</code>
|<code style="background-color: #d4edda;>Персонал</code> >> Выбрать запись >> <code style="background-color: #d4edda;>Карточка сотрудника</code> >> <code style="background-color: #d4edda;>Дата получения диплома</code>
<code style="background-color: #fff3e0;>Fields!diplom_date.Value</code> >> <code style="background-color: #fff3e0;>diplom_date / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
<code style="background-color: #fff3e0;>Fields!diplom_date.Value</code> >> <code style="background-color: #fff3e0;>diplom_date / MainDataSet</code> >> <code style="background-color: #fff3e0;>DATE_VALUE / EMPLOYEE_ATTRIBUTE</code>
|<syntaxhighlight lang="vb">=IIF(IsNothing(Fields!diplom_date.Value), "-", Code.ReturnYearsWithSuffix(DateValue(Fields!diplom_date.Value)) & vbLF & Fields!diplom_date.Value & " - по текущую дату")</syntaxhighlight>
|<syntaxhighlight lang="vb">=GetExperience(Fields!diplom_date.Value)</syntaxhighlight>
если в БД поле даты начала трудовой деятельности пустое, выводится прочерк;
<syntaxhighlight lang="vb">
иначе
Public Function GetExperience(diplomDate As Object) As String
‒ вызывает функцию <code>ReturnYearsWithSuffix()</code>, возвращающую количество лет и текстовый суффикс « год/года/лет» в зависимости от числа лет стажа;
If IsDBNull(diplomDate) OrElse diplomDate Is Nothing Then
‒ переносит строку (<code>vbLF</code>);
Return "-"
‒ выводит год начала трудовой деятельности + «по текущую дату»
End If
<syntaxhighlight lang="vb">Public Function ReturnYearsWithSuffix(inputDate As Date) As String
   
Return YearsWithSuffix(diplomDate) & vbLF & Format(diplomDate, "dd.MM.yyyy") & " - по текущую дату"
End Function
</syntaxhighlight>
<syntaxhighlight lang="vb">
Public Function YearsWithSuffix(inputDate As Date) As String
Dim yearsDiff As Long = DateDiff(DateInterval.Year, inputDate, Now())
Dim yearsDiff As Long = DateDiff(DateInterval.Year, inputDate, Now())
Dim resultDate As Long = yearsDiff
Dim resultDate As Long = yearsDiff
Строка 168: Строка 181:
Return resultString
Return resultString
End Function</syntaxhighlight>
End Function
функция принимает числовое значение количества лет трудового стажа;
</syntaxhighlight>
<code>DateDiff()</code> вычисляет разницу между двумя датами (между третьим и вторым аргументами), при этом первый аргумент <code>DateInterval.Year</code> указывает функции, в каких единицах измерения нужно вернуть разницу (в данном случае, в полных годах), второй аргумент <code>inputDate</code> начало периода, третий аргумент <code>Now()</code> конец периода (текущая системная дата и время на момент выполнения кода); результат вычисления присваивается переменной <code>yearsDiff</code>;
значение сохраняется в виде строки в переменной <code>resultString</code>;
создается переменная <code>resultDate</code> и ей присваивается ранее вычисленное значение лет из переменной <code>yearsDiff</code> (для последующих вычислений суффикса);
если количество лет более 20, то <code>resultDate</code> делится на 10 и получившийся остаток перезаписывается в переменную <code>resultDate</code>;
переменная <code>resultDate</code> для определения соответствующего суффикса отправляется в оператор <code>Select Case</code>, где в зависимости от ее значения к ранее полученной строке <code>resultString</code> дописывается через пробел необходимый суффикс «год/года/лет»;
функция возвращает итоговую строку в вызвавшее ее выражение в ячейке для дальнейшей обработки (соединения с другими данными)
|-
|-
|}
|}
Строка 198: Строка 205:
|-
|-
|ФИО
|ФИО
|Получение данных из фильтра <code>Parameters!ReportParameterFio.Label</code> и преобразование в формат И.О. Фамилия <code>Code.FormatAsInitialsSurname()</code>
|Получение данных из фильтра <code>Parameters!ReportParameterFio.Label</code> и преобразование в формат И.О. Фамилия
|<syntaxhighlight lang="vb">=Code.FormatAsInitialsSurname(Parameters!ReportParameterFio.Label)</syntaxhighlight>
|<syntaxhighlight lang="vb">=FormatFio(First(Fields!surname.Value, "FilterPosition"), First(Fields!name.Value, "FilterPosition"), First(Fields!patronymic.Value, "FilterPosition"), 2)</syntaxhighlight>
<syntaxhighlight lang="vb">Public Function FormatAsInitialsSurname(fullName As String) As String
для преобразования ФИО используется функция [[Scripts#FormatFio()|<code>FormatFio()</code>]]
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> в выражение ячейки для дальнейшего отображения
|-
|-
|}
|}

Текущая версия от 01:39, 2 апреля 2026

Общий вид

Параметры

Параметр Тип поля Данные Сортировка
1 Выберите лабораторию: выбор значения лаборатории, имеющие записи в журналах сначала головное учреждение, затем остальные по алфавиту
2 Укажите ФИО уполномоченного лица: выбор значения сотрудники из лаборатории (п.1) по алфавиту
3 Укажите должность уполномоченного лица: выбор значения должности сотрудника (п.2) по алфавиту
4 Сотрудники (область аккредитации): выбор одного из 2-х вариантов - «в области аккредитации», «вне области аккредитации» отметка проставляется ТОЛЬКО для сотрудников лаборатории -
5 Введите начальное значение нумерации строк: ввод числа начальное значение, с которого будет начинаться нумерация строк (по умолчанию 1) -

Атрибуты

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

  • СНИЛС
  • Форма привлечения труда
  • Тип занятости
  • Номер договора
  • Дата договора
  • Выполняемые функции
  • Образовательное учреждение
  • Период обучения
  • Специальность, специализация, квалификация
  • Реквизиты документа об образовании
  • Дата получения диплома
  • В области аккредитации

Внимание!

Описание атрибутов приведено в соответствии с базой данных ASTRA-PG13 на основе созданных пользователем полей.

В других базах этих полей может не быть либо их наименование может отличаться!!!

Отсутствующие в базе атрибуты не будут выводиться в документе. Для корректной работы документа актуализируйте атрибуты в соответствии с приведенным списком.

Поля, данные, выражения, элементы интерфейса и код

Верхний колонтитул

Поля Интерфейс ... >> ...

и данные ... >> ...

Код и комментарии
Название лаборатории Parameters!ReportParameterLaboratory.Label
=Parameters!ReportParameterLaboratory.Label
Владелец версии Code.Globals.GetVersionOwner()
="Владелец версии: " & Code.Globals.GetVersionOwner()

Заголовок

Поля Интерфейс ... >> ...

и данные ... >> ...

Код и комментарии
Сведения о работниках лаборатории
Текущая дата Today.ToString("dd.MM.yyyy")
="По состоянию на: " & Today.ToString("dd.MM.yyyy")

Основная информация

Поля Интерфейс ... >> ...

и данные ... >> ...

Код и комментарии
№ п/п Сквозная нумерация строк RowNumber(), начальное значение нумерации строк из параметра фильтра Parameters!ReportParametrNumberFirstString.Value – 1
=RowNumber() + Parameters!ReportParametrNumberFirstString.Value  1
из счетчика RowNumber() вычитается единица, чтобы скорректировать смещение относительно числа, введенного пользователем; при вводе пользователем, например, числа 50, для первой строки отчета RowNumber() вернет 1: выражение вычисляется как 1 + 50 - 1, что дает в результате 50 (желаемый начальный номер); для второй строки RowNumber() вернет 2, и выражение даст 2 + 50 - 1 = 51, и так далее
Фамилия, имя, отчество (при наличии), страховой номер индивидуального лицевого счета, дата и место рождения Персонал >> Выбрать запись >> Карточка сотрудника >> Фамилия, Имя, Отчество, СНИЛС

Fields!surname.Value, Fields!name.Value, Fields!patronimyc.Value, >> surname, name, patronimyc / MainDataSet >> SURNAME; NAME; PATRONYMIC / EMPLOYEE

Fields!snils.Value >> snils / MainDataSet >> STRING_VALUE / EMPLOYEE_ATTRIBUTE

=ConcatFields(vbLF, FormatFio(Fields!surname.Value, Fields!name.Value, Fields!patronymic.Value, 0),  Fields!snils.Value)

в ячейку вносятся (через перенос на новую строку) значение ФИО и значение поля СНИЛС (если не пустое);
используются:

  • для соединения полей функция ConcatFields()
  • для преобразования ФИО функция FormatFio()
Основание для привлечения личного труда (трудовой договор, гражданско-правовой договор или иное), работа по основному месту работы или по совместительству Персонал >> Выбрать запись >> Карточка сотрудника >> Форма привлечения труда; Номер договора; Дата договора; Тип занятости

Fields!employment_form.Value; Fields!contract_number.Value; Fields!employment_type.Value >> employment_form; contract_number; employment_type / MainDataSet >> STRING_VALUE / EMPLOYEE_ATTRIBUTE

Fields!contract_date.Value >> contract_date / MainDataSet >> DATE_VALUE / EMPLOYEE_ATTRIBUTE

=Code.ConcatFields(", ", Fields!employment_form.Value, Fields!contract_number.Value, Format(Fields!contract_date.Value, "dd.MM.yyyy"), Fields!employment_type.Value)

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

Выполняемые функции, проводимые исследования, испытания, измерения Персонал >> Выбрать запись >> Карточка сотрудника >> Выполняемые функции

Fields!function_value.Value >> function_value / MainDataSet >> STRING_VALUE / EMPLOYEE_ATTRIBUTE

=IIF(IsNothing (Fields!function_value.Value), "-", Fields!function_value.Value)
если поле БД, содержащее функцию, пустое, то вносится прочерк, иначе вносится функция из поля
Образование (наименование учебного заведения, год окончания, квалификация по документу об образовании, реквизиты документа об образовании) Персонал >> Выбрать запись >> Карточка сотрудника >> Образовательное учреждение; Дата получения диплома; Специальность, специализация, квалификация; Реквизиты документа об образовании

Fields!uni.Value; Fields!prof.Value; Fields!diplom.Value >> uni; prof; diplom / MainDataSet >> STRING_VALUE / EMPLOYEE_ATTRIBUTE

Fields!uni_year.Value >> uni_year / MainDataSet >> DATE_VALUE / EMPLOYEE_ATTRIBUTE

=Code.ConcatFields(", ",Fields!uni.Value,  Fields!uni_year.Value, Fields!prof.Value, Fields!diplom.Value)

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

Практический опыт по исследованиям, испытаниям, измерениям, включенным в область аккредитации (в годах, с указанием, в каких организациях, в какой период и по каким видам исследований (испытаний) измерений получен) Персонал >> Выбрать запись >> Карточка сотрудника >> Дата получения диплома

Fields!diplom_date.Value >> diplom_date / MainDataSet >> DATE_VALUE / EMPLOYEE_ATTRIBUTE

=GetExperience(Fields!diplom_date.Value)
Public Function GetExperience(diplomDate As Object) As String
	If IsDBNull(diplomDate) OrElse diplomDate Is Nothing Then
		Return "-"
	End If
    
	Return YearsWithSuffix(diplomDate) & vbLF & Format(diplomDate, "dd.MM.yyyy") & " - по текущую дату"
End Function
Public Function YearsWithSuffix(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

Для вывода основной информации также использовались:

Подписи

Поля Интерфейс ... >> ...

и данные ... >> ...

Код и комментарии
Должность Подстановка из фильтра Parameters!ReportParameterPosition.Label
=Parameters!ReportParameterPosition.Label
ФИО Получение данных из фильтра Parameters!ReportParameterFio.Label и преобразование в формат И.О. Фамилия
=FormatFio(First(Fields!surname.Value, "FilterPosition"), First(Fields!name.Value, "FilterPosition"), First(Fields!patronymic.Value, "FilterPosition"), 2)

для преобразования ФИО используется функция FormatFio()

Нижний колонтитул

Поля Интерфейс ... >> ...

и данные ... >> ...

Код и комментарии
Имя программы Code.Globals.GetProgramName()
=Code.Globals.GetProgramName()
Нумерация страниц Номер страницы Globals!PageNumber и всего страниц Globals!TotalPages
="Страница " & Globals!PageNumber & " из " & Globals!TotalPages