Привет всем! Возвращаясь к вопросу отказа от изобретения собственных велосипедов, в данном обзоре рассмотрю наиболее полезные функции и процедуры в конфигурации "Зарплата и управление персоналом 3.1". С большой вероятностью, что вы уже "изобретали" что-то подобное собственное, работая с данной конфигурацией.
Ни для кого не секрет, что выражение для программиста "все уже придумано до вас" - это уже истина.
Итак, посмотрим что есть полезного:
1.Некоторые полезные функции работы со временем и датами:
Функция 1.1
ДнейВПериоде(Знач ДатаНачала, Знач ДатаОкончания, Знач ПроверятьКорректностьПериода = Ложь)
Данная функция определяет количество дней в заданном периоде, работает вот так:
Дата1 = "01.06.2020 0:00:00";
Дата2 = "21.08.2020 0:00:00";
Результ = ЗарплатаКадрыКлиентСервер.ДнейВПериоде(Дата1,Дата2,Истина); //82
Функция 1.2
ДобавитьДней(Знач ДатаСобытия, Знач КоличествоДней)
Эта функция возвращает дату, которая получается, при "увеличении" входящей даты на определенное количество дней. Пример вот такой:
Дата1 = "01.06.2020 0:00:00";
Результ = ЗарплатаКадрыКлиентСервер.ДобавитьДней(Дата1,5); //05.06.2020 0:00:00
Функция 1.3
ПредставлениеВременногоИнтервала(Знач ДатаНачала, Знач ДатаОкончания)
Еще одна очень классная функция, возвращает строку, представляя заданный период:
Дата1 = "01.06.2020 0:00:00";
Дата2 = "21.08.2020 0:00:00";
Результ = ЗарплатаКадрыКлиентСервер.ПредставлениеВременногоИнтервала(Дата1,Дата2); //2 месяца 20 дней
Функция 1.4
ДлительностьСутокВСекундах()
Простейшая функция, определяющая количество суток в секундах, тем не менее, она встроена в конфигурацию.
Функция ДлительностьСутокВСекундах() Экспорт
Возврат 24 * 60 * 60;
КонецФункции
Функция 1.5
ПолучитьПредставлениеМесяца(ДатаНачалаМесяца)
Так же, простая функция, которая возвращает месяц/год , в зависимости от "даты на входе".
Функция ПолучитьПредставлениеМесяца(ДатаНачалаМесяца) Экспорт
Возврат Формат(ДатаНачалаМесяца, "ДФ='ММММ гггг'");
КонецФункции
2.Полезные методы работы с кадровым учетом:
Функция 2.1
СотрудникиОрганизации(Истина, Параметры)
Данная функция возвращает таблицу значений - соответствие сотрудника и физического лица.
Пример работы такой:
&НаСервере
Процедура ВыполнитьНаСервере()
Парам = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
СотрудникиТЗ = КадровыйУчет.СотрудникиОрганизации(Истина, Парам);
Возврат СотрудникиТЗ;
КонецПроцедуры
Где Парам - это структура параметров, формируемая функцией ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц() - можно не заморачиваться, что в этой структуре.
СотрудникиТЗ - таблица значений с колонками "Период, ПолеПорядка0, ПолеПорядка1, ПолеПорядка2, Сотрудник, ФизическоеЛицо".
Например:
Период: 01.01.0001 0:00:00 (Дата)
ПолеПорядка0: "00001" (Строка)
ПолеПорядка1: 1 (Число)
ПолеПорядка2: "Иванов Иван Иванович" (Строка)
Сотрудник: Иванов Иван Иванович (Сотрудники)
ФизическоеЛицо: Иванов Иван Иванович (Физические лица)
Функция 2.2
ОсновныеСотрудникиФизическихЛиц(МассивФизическихЛиц, ТолькоРазрешенные, Организация, Период)
Данная функция возвращает таблицу значений с такими колонками:
ГоловнаяОрганизация (Организации)
Период (Дата)
Сотрудник (Сотрудники)
ФизическоеЛицо (Физические лица)
Пример работы такой:
&НаСервере
Процедура ВыполнитьНаСервере()
МассивФизическихЛиц = Новый Массив;
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000036"));
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000032"));
СотрудникиТЗ = КадровыйУчет.ОсновныеСотрудникиФизическихЛиц(МассивФизическихЛиц, Истина, Организация, Дата1); // Таблица значений
КонецПроцедуры
Здесь формирую массив физических лиц и отправляю его в эту функцию. По каждому лицу получаю сотрудника и организацию, в которой он находится на данный момент Дата1.
Если не указывать параметр Организация, то можно получить все организации базы.
В основе данной функции лежит работа с запросом к периодическому регистру сведений ОсновныеСотрудникиФизическихЛиц.
Функция 2.3
ФизическиеЛицаСотрудников(МассивСотрудников)
Данная функция возвращает массив физических лиц, согласно передаваемому массиву сотрудников. Тоже все писали что-то подобное. Работает вот так:
&НаСервере
Процедура ВыполнитьНаСервере()
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("00ЗК-00035"));
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("00ЗК-00036"));
ФизЛицо = КадровыйУчет.ФизическиеЛицаСотрудников(МассивСотрудников); // Массив физических лиц
КонецПроцедуры
Функция 2.4
ДоговорыФизическихЛиц(ТаблицаФизическихЛиц)
Данная функция получает таблицу значений и возвращает таблицу значений по договору на физическое лицо. Пример работы такой:
&НаСервере
Процедура ВыполнитьНаСервере()
ТаблицаФизическихЛиц = Новый ТаблицаЗначений;
ТаблицаФизическихЛиц.Колонки.Добавить("ФизическоеЛицо",Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
ТаблицаФизическихЛиц.Колонки.Добавить("ГоловнаяОрганизация",Новый ОписаниеТипов("СправочникСсылка.Организации"));
ТаблицаФизическихЛиц.Колонки.Добавить("НачалоПериода",Новый ОписаниеТипов("Дата"));
ТаблицаФизическихЛиц.Колонки.Добавить("ОкончаниеПериода",Новый ОписаниеТипов("Дата"));
НовСтр = ТаблицаФизическихЛиц.Добавить();
НовСтр.ФизическоеЛицо = Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000034");
НовСтр.ГоловнаяОрганизация = Организация;
НовСтр.НачалоПериода = Дата1;
НовСтр.ОкончаниеПериода = Дата2;
ДоговорыФЗ = КадровыйУчет.ДоговорыФизическихЛиц(ТаблицаФизическихЛиц);
КонецПроцедуры
Соблюдение типов на "входе" для ТаблицыФизическихЛиц в данном случае обязательно. Возвращаемая таблица ДоговорыФЗ имеет такие колонки "ВидДоговора, ВидДоговораГПХ, Дата, Начало, Окончание, Номер, Организация, ФизическоеЛицо".
Функция 2.5
ДокументыФизическихЛиц(СписокФизическихЛиц, ТолькоРазрешенные, ВидДокумента = Неопределено, ДатаПолученияДанных = Неопределено)
Данная функция позволяет получить таблицу значений документов физических лиц по списку - массиву (СписокФизическихЛиц) на определенную дату.
Работает вот так:
&НаСервере
Процедура ВыполнитьНаСервере()
МассивФизическихЛиц = Новый Массив;
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000036"));
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000032"));
ДокументыФЗ = КадровыйУчет.ДокументыФизическихЛиц(МассивФизическихЛиц,Истина,,ТекущаяДата());
КонецПроцедуры
Так же можно сделать отбор по виду документа, например, выбрать все паспорта.
Функция 2.6
ФизическиеЛицаРаботавшиеВОрганизации(ТолькоРазрешенные, Организация, НачалоПериода, ОкончаниеПериода, Подразделение = Неопределено)
Данная функция возвращает таблицу значений физических лиц, которые попали в отбор входящих параметров. Работает достаточно просто:
&НаСервере
Процедура ВыполнитьНаСервере()
ТаблицаФЛ= КадровыйУчет.ФизическиеЛицаРаботавшиеВОрганизации(Истина,Организация,Дата1,Дата2);//ТаблицаФизическихЛиц;
КонецПроцедуры
Можно отобрать по подразделению.
Функция 2.7
КадровыеДанныеСотрудников(ТолькоРазрешенные, СписокСотрудников, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено, ФормироватьСПериодичностьДень = Истина)
Это функция из разряда "хочу все и сразу". Возвращает таблицу значений из колонок КадровыеДанные по списку сотрудников (массив сотрудников). Пример работы функции:
&НаСервере
Процедура ВыполнитьНаСервере()
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("ЗК-0000036"));
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("ЗК-0000032"));
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("ЗК-0000035"));
МассивСотрудников.Добавить(Справочники.Сотрудники.НайтиПоКоду("ЗК-0000034"));
ИменаКадровыхДанных = "ФИОПолные,Пол,ГоловнаяОрганизация";
Результат = КадровыйУчет.КадровыеДанныеСотрудников(Истина,МассивСотрудников,ИменаКадровыхДанных,ТекущаяДата());
КонецПроцедуры
Строка перечисления кадровых данных может быть такая, например:
ИменаКадровыхДанных = "ФИОПолные,Пол,ГоловнаяОрганизация,Организация,ДатаПриема,ДатаУвольнения,ПриказОбУвольнении,ПриказОбУвольненииДата,ВидЗанятости,EMailПредставление";
Функция 2.8
КадровыеДанныеФизическихЛиц(ТолькоРазрешенные, СписокФизическихЛиц, КадровыеДанные, ДатаПолученияДанных = '00010101', ПоляОтбораПериодическихДанных = Неопределено)
Еще одна функция из разряда "хочу все и сразу" - возвращает таблицу значений с колонками кадровых данных (на входе строка с возможными колонками через запятую). Работает так:
&НаСервере
Процедура ВыполнитьНаСервере()
МассивФизическихЛиц = Новый Массив;
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000036"));
МассивФизическихЛиц.Добавить(Справочники.ФизическиеЛица.НайтиПоКоду("ЗК-0000032"));
ИменаКадровыхДанных = "ИменаКадровыхДанных = "ФИОПолные,Пол,ДатаРождения,Фамилия,Имя,Отчество,КоличествоДетей,СостояниеВБраке, ИННВСтранеГражданства,ОбщийСтажВид";
";
Результат = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина,МассивФизическихЛиц,ИменаКадровыхДанных,ТекущаяДата());
КонецПроцедуры
Кадровые данные могут быть такие (это обширнейшие возможности):
//Информация о гражданстве
// - ГражданствоПериодРегистрации, Страна, ИННВСтранеГражданства
//
//Информация о документе, удостоверяющем личность.
//- ДокументПериодРегистрации, ДокументВид, ДокументКодМВД, ДокументСерия,
//- ДокументНомер, ДокументДатаВыдачи, ДокументСрокДействия, ДокументКемВыдан,
//- ДокументКодПодразделения, ДокументСтранаВыдачи, ДокументПредставление
//
//Информация о фамилии, имени, отчестве.
//- ФИОПериодРегистрации, Фамилия, Имя, Отчество,
//- ФИОПолные, ФамилияИО, ИОФамилия
//
//Информация о сведениях об инвалидности.
//- ИнвалидностьПериодРегистрации, Инвалидность,
//- ИнвалидностьДатаВыдачи, ИнвалидностьСрокДействияСправки
//
//- СтатусНалогоплательщикаПериодРегистрации, СтатусНалогоплательщика
//
//- ВидЗастрахованногоЛицаПериодРегистрации, ВидЗастрахованногоЛица
//
//Сведения о стажах:
//- ОбщийСтажВид, ОбщийСтажПериодРегистрации, ОбщийСтажРазмерДней,
//- ОбщийСтажРазмерМесяцев, ОбщийСтажДней, ОбщийСтажМесяцев, ОбщийСтажЛет
//
//- СеверныйСтажВид, СеверныйСтажПериодРегистрации,
//- СеверныйСтажРазмерДней, СеверныйСтажРазмерМесяцев,
//- СеверныйСтажДней, СеверныйСтажМесяцев, СеверныйСтажЛет
//
//- НепрерывныйСтажВид, НепрерывныйСтажПериодРегистрации, НепрерывныйСтажРазмерДней,
//- НепрерывныйСтажРазмерМесяцев, НепрерывныйСтажДней, НепрерывныйСтажМесяцев, НепрерывныйСтажЛет.
//
//- СтажНаНадбавкуЗаВыслугуЛетВид, СтажНаНадбавкуЗаВыслугуЛетПериодРегистрации,
//- СтажНаНадбавкуЗаВыслугуЛетРазмерДней, СтажНаНадбавкуЗаВыслугуЛетРазмерМесяцев,
//- СтажНаНадбавкуЗаВыслугуЛетДней, СтажНаНадбавкуЗаВыслугуЛетМесяцев, СтажНаНадбавкуЗаВыслугуЛетЛет.
//
//- ОбщийНаучноПедагогическийСтажВид,ОбщийНаучноПедагогическийСтажПериодРегистрации, ОбщийНаучноПедагогическийСтажРазмерДней
//- ОбщийНаучноПедагогическийСтажРазмерМесяцев, ОбщийНаучноПедагогическийСтажДней
//- ОбщийНаучноПедагогическийСтажМесяцев, ОбщийНаучноПедагогическийСтажЛет.
//
//- ПедагогическийСтажВид, ПедагогическийСтажПериодРегистрации, ПедагогическийСтажРазмерДней
//- ПедагогическийСтажРазмерМесяцев, ПедагогическийСтажДней
//- ПедагогическийСтажМесяцев, ПедагогическийСтажЛет.
//
//- СтраховойСтажВид, СтраховойСтажПериодРегистрации,
//- СтраховойСтажРазмерДней, СтраховойСтажРазмерМесяцев,
//- СтраховойСтажДней, СтраховойСтажМесяцев, СтраховойСтажЛет.
//
//- РасширенныйСтраховойСтажВид, РасширенныйСтраховойСтажПериодРегистрации,
//- РасширенныйСтраховойСтажРазмерДней, РасширенныйСтраховойСтажРазмерМесяцев,
//- РасширенныйСтраховойСтажДней, РасширенныйСтраховойСтажМесяцев, РасширенныйСтраховойСтажЛет.
//
//- ПрочийСтажВид, ПрочийСтажПериодРегистрации,
//- ПрочийСтажРазмерДней, ПрочийСтажРазмерМесяцев,
//- ПрочийСтажДней, ПрочийСтажМесяцев, ПрочийСтажЛет.
//
//- ВыслугаЛетНаГосударственнойСлужбеВид, ВыслугаЛетНаГосударственнойСлужбеПериодРегистрации,
//- ВыслугаЛетНаГосударственнойСлужбеРазмерМесяцев, ВыслугаЛетНаГосударственнойСлужбеРазмерДней,
//- ВыслугаЛетНаГосударственнойСлужбеДней,ВыслугаЛетНаГосударственнойСлужбеМесяцев,
//- ВыслугаЛетНаГосударственнойСлужбеЛет.
//
//- ВыслугаЛетНаВоеннойСлужбеВид, ВыслугаЛетНаВоеннойСлужбеПериодРегистрации,
//- ВыслугаЛетНаВоеннойСлужбеРазмерМесяцев, ВыслугаЛетНаВоеннойСлужбеРазмерДней,
//- ВыслугаЛетНаВоеннойСлужбеДней, ВыслугаЛетНаВоеннойСлужбеМесяцев, ВыслугаЛетНаВоеннойСлужбеЛет.
//
//Состояния в браке:
//- СостояниеВБракеПериодРегистрации, СостояниеВБраке
//
//Воинский учет:
//- ВоинскийУчетПериодРегистрации, ВоинскийУчетКатегорияЗапаса, ВоинскийУчетЗвание,
//- ВоинскийУчетСостав, ВоинскийУчетВУС, ВоинскийУчетВоенкомат, ВоинскийУчетНомерКомандыПартии,
//- ВоинскийУчетПунктПеречня, ВоинскийУчетНаличиеМобпредписания, ВоинскийУчетОтношениеКВоинскойОбязанностикойОбязанности
//- ВоинскийУчетОтношениеКВоинскомуУчету
//
//Сведения о бронировании:
//- ВоинскийУчетЗабронированОрганизациейПериодРегистрации, ВоинскийУчетЗабронированОрганизациейРегистратор, ВоинскийУчетЗабронированОрганизацией
//
//Сведения о государственном служащем:
//- КлассныйЧинРангПериодРегистрации, КлассныйЧинРанг
//
//Сведения о воинских специальных званиях:
//- ВоинскоеСпециальноеЗваниеПериодРегистрации, ВоинскоеСпециальноеЗвание
//
//Сведения о составах семей:
//- КоличествоДетей, КоличествоИждивенцев, КоличествоРодственников
Назвал бы ее тоже универсальной функцией по получению информации о физическом лице.
На этом, пожалуй, все. Я сделал обзор наиболее интересных функций, встречающихся в конфигурации "Зарплата и управление персоналом 3.1". Спасибо, что дочитали данный материал до конца. Так же, прошу ознакомиться с моими предыдущими статьями и обработками:
Возможности работы со строками при помощи БСП, которые должен знать каждый программист
Доступность ролей пользователей в конфигурации
Все привет и до новых встреч!