diff --git a/docs/Lexema-HRM/sql запросы/Untitled-1.sql b/docs/Lexema-HRM/sql запросы/Untitled-1.sql new file mode 100644 index 0000000..c667714 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Untitled-1.sql @@ -0,0 +1,61 @@ +-- FUNCTION: aw.fnWorkerAbsence(bigint, integer, integer, date, date) + +-- DROP FUNCTION IF EXISTS aw."fnWorkerAbsence"(bigint, integer, integer, date, date); + +CREATE OR REPLACE FUNCTION aw."fnWorkerAbsence"( + "pIW" bigint DEFAULT 0, + "pYear" integer DEFAULT 0, + "pMonth" integer DEFAULT 0, + "pDateBeg" date DEFAULT NULL::date, + "pDateEnd" date DEFAULT NULL::date) + RETURNS text + LANGUAGE 'plpgsql' + COST 100 + VOLATILE PARALLEL UNSAFE +AS $BODY$ +/* Организация: ООО "ЭКОСОФТ", Дата: 11.06.2021 Автор: Ломанов С.Б. */ +/* выбрать список неявок сотрудника в виде строки через запятую: День даты началаДень даты концаБуквенный кодДокумент (наименование №... от ...) + параметры: + @pIW - ид-р сотрудника + @pYear/@pMonth - месяц выборки + @pDateBeg/@pDateEnd - период перемещения(назначения) */ +DECLARE _result text := ''; + _DN date; -- 1-й день месяца + _DK date; -- посл.день месяца + _DB date:= "pDateBeg"; -- дата начала перемещения + _DE date:= "pDateEnd"; -- дата конца перемещения +BEGIN + + -- проверяем заданные параметры и берем перемещения, попадающие на тек.месяц + IF coalesce("pIW", 0) <> 0 and coalesce("pYear", 0) <> 0 and coalesce("pMonth", 0) between 1 and 12 + and coalesce(_DB, '19000101') <> '19000101' THEN + _DN := make_date("pYear", "pMonth", 1); -- 1-й день месяца + _DK := comdoc."LexLastDayMonth"(_DN); -- посл.день месяца + _DE := case when coalesce(_DE, '19000101') = '19000101' then _DK else _DE end; -- дата конца перемещения не должна быть пустой - присвоим конец месяца); + IF _DB <= _DK and _DE >= _DN THEN + _DN := case when _DN < _DB then _DB else _DN end; + _DK := case when _DK > _DE then _DE else _DK end; + _result := (select string_agg(RIGHT('00' || extract(day from (case when v."DateBeg" < _DN then _DN else v."DateBeg" end))::varchar, 2) + || RIGHT('00' || extract(day from (case when coalesce(v."DateEnd", _DK) > _DK then _DK else coalesce(v."DateEnd", _DK) end))::text,2) + || RIGHT(' ' || v."Code"::varchar, 2) + || RIGHT(' ' || coalesce(v."AddDays", 0)::varchar, 2) + || RIGHT(' ' || coalesce(v."Hours", 0)::varchar, 4) -- для С и РВ + || RIGHT(' ' || coalesce(v."IdTypeTimeWork", 0)::varchar, 4) + || coalesce(v."NameDoc", ''::varchar), ',') + from aw."VRP_WorkerAbsenceActPer" as v + where v."IdWorker" = "pIW" + --and v."DateBeg" <= _DK + ----and v."DateEnd" >= _DN + ----and v."DateBeg" <= v."DateEnd" + --and coalesce(v."DateEnd", _DK) >= _DN + --and v."DateBeg" <= coalesce(v."DateEnd", _DK) + and comdoc."fnCrossPeriods"(v."DateBeg", v."DateEnd", _DN, _DK) = 1 + ); + END IF; + END IF; + RETURN _result; +END; +$BODY$; + +ALTER FUNCTION aw."fnWorkerAbsence"(bigint, integer, integer, date, date) + OWNER TO lib83; diff --git a/docs/Lexema-HRM/sql запросы/_1 Воинский учет.sql b/docs/Lexema-HRM/sql запросы/_1 Воинский учет.sql new file mode 100644 index 0000000..aa852ac --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/_1 Воинский учет.sql @@ -0,0 +1,211 @@ +--Список для сверки ВУ по возрастам на дату (с отметкой о снятии, при достижении предельного возраста) --заявка 11213 + +--declare @beginDate datetime +--select @beginDate = '20211031' + +SELECT + row_number() OVER() as "Id",* +from (SELECT --Id=identity(int) , + RP_Person."Family" || ' '|| RP_Person."Name" ||' '|| RP_Person."Father" AS "FIO" --"ФИО" + , RP_Person."Sex" AS Sex --"Пол" + , coalesce(rp."fnPersonAddress"(RP_Person."VCode",1,0),'') AS "PlaceBirthday" --"Место рождения" + , to_char(RP_Person."DateBirth"::timestamptz, 'DD.MM.YYYY'::text) AS "DateBirthday" --"Дата рождения" + , case when (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 60 and RP_Person."Sex" = 2 --мужской пол + then 'СНЯТ. ' + when (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 50 and RP_Person."Sex" = 1 --женский пол + then 'СНЯТА. ' + when (Catalog19."Name" like '%серж%' or Catalog19."Name" like '%прап%' or Catalog19."Name" like '%мичм%' or Catalog19."Name" like '%старшин%' or + Catalog19."Name" like '%рядов%' or Catalog19."Name" like '%солд%' or Catalog19."Name" like '%матр%') and + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 50 and RP_Person."Sex" = 2 + then 'СНЯТ. ' + when (Catalog19."Name" like '%серж%' or Catalog19."Name" like '%прап%' or Catalog19."Name" like '%мичм%' or Catalog19."Name" like '%старшин%' or + Catalog19."Name" like '%рядов%' or Catalog19."Name" like '%солд%' or Catalog19."Name" like '%матр%') and + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 45 and RP_Person."Sex" = 1 + then 'СНЯТА. ' + else '' end || ' ' || + replace(( + case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end || 'лет '|| + comdoc."datediff"('month', RP_Person."DateBirth", now()::date)- + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end*12) || 'мес.'),' 0мес.','') + AS "Age" --возраст + , Catalog17."Name" AS "VidObyaz" --"Вид воин.обязанности" + , Catalog21."Name" AS "Relation" --"Отношение к ВУ" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,13,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,13,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,13,now()::date) end + AS "VoenBilet" --"Военный билет (приписное удостоверение)" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,03,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,03,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,03,now()::date) end + AS "VidDoc" --"Вид документа" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,04,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,04,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,04,now()::date) end + AS "SerDoc" --"Серия" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,05,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,05,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,05,now()::date) end + AS "NomDoc" --"Номер" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,06,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,06,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,06,now()::date) end + AS "Vydan" --"Выдан" + , coalesce(RP_Organization1."NameFull",'') AS "Voenkomat" --"Военный комиссариат" + , case when coalesce(Catalog19."Name",Catalog17."Name")<>'Призывник' + then 'Общий' else '' end AS "Common" --Общий в/учет + + , Catalog19."Name" AS "MilRank" --"Воинское звание" + , replace(substring(Catalog20."Name", 1, case when strpos(Catalog20."Name", '.') > 0 --обрезание текста до первой точки + then strpos(Catalog20."Name", '.')-1 + else LENGTH(Catalog20."Name") end), + 'к военной службе','') AS "Fitness" --"Категория годности к ВС" + , replace(coalesce(Catalog18."Name",''),'категория', 'кат.') AS "Reserv" --"Категория запаса" + , Catalog22."Name" AS "Profil" --"Состав (профиль)" + , Catalog23."Name" AS "MilGroup" --"Группа учета" + , RP_PersonMilitary."VUS" AS "VUS" --"ВУС" + , RP_PersonMilitary."MobilDesign" AS "MobilDesign" --"Наличие МП" + , RP_PersonMilitary."DateBeg" AS "DateBegUchet" --"Дата начала действия записи учета" + , coalesce(rp."fnPersonEducation"(RP_Person."VCode",0,0),'') AS "Education" --"Образование" + , coalesce(rp."fnPersonAddress"(RP_Person."VCode",2,0), + rp."fnPersonAddress"(RP_Person."VCode",3,0), + rp."fnPersonAddress"(RP_Person."VCode",4,0)) AS "Adres" --"Место жительства/пребывания" + , RP_Person."SNILS" AS "SNILS" --"СНИЛС" + , RP_Person."INN" AS "INN" --"ИНН" + , Catalog16."Name" AS "Family" --"Семейное положение" + , Department."Name" ||', '|| RP_Post."Name"||', '|| + 'приказ '|| pr."fnNameDoc2"('', RP_DocMove."NumDoc", RP_DocMove."DateDoc") AS "DepPostNameDoc" --Подраз, должность, приказ № и дата + + , Department."Name" ||', '|| RP_Post."Name" + || '. Приказ '|| Coalesce(' № ' || Coalesce(LTrim(RTrim(RP_DocMove."NumDoc")), ''), '') + || Coalesce(' от ' || to_char(RP_DocMove."DateDoc"::timestamptz, 'DD.MM.YYYY'::text) || ' г.', '') + || case when comdoc."LexLastDayMonth"(RP_Worker."DateEnd") >= now()::date + then ' (Уволен '|| to_char(RP_Worker."DateEnd"::timestamptz, 'DD.MM.YYYY'::text) ||'г.)' + else '' end AS "DepPostNameDocUvol" --Подраз, должность, приказ № и дата +/* , own."PrintName" as "PrintName" + , own."LegalAddressText" as "LegalAddressText" + , own."ContactPhone" as "ContactPhone" --Данные организации + , own."JobTitleOfDirector" as "JobTitleOfDirector" + , own."FN_DirectorShort" as "FN_DirectorShort" + , own."FN_GAccountantShort" as "FN_GAccountantShort" + , responible."UnitName" AS "UnitName" + , responible."NameShort" AS "NameShort" + , responible."postName" AS "postName" + , to_char(now()::date, 'DD.MM.YYYY'::text) AS "beginDate" +*/ + FROM --RP_WorkerMove + rp."RP_Worker" as RP_Worker --ON RP_Worker.VCode = RP_WorkerMove.IdWorker + INNER JOIN rp."RP_Person" as RP_Person ON RP_Person."VCode" = RP_Worker."IdPerson" + left JOIN rp."RP_Catalog" AS Catalog16 ON Catalog16."VCode" = RP_Person."IdMaritalStatus" + LEFT JOIN rp."RP_PersonMilitary" as RP_PersonMilitary ON RP_PersonMilitary."Pcode" = RP_Person."VCode" + LEFT JOIN rp."RP_Catalog" AS Catalog17 ON Catalog17."VCode" = RP_PersonMilitary."IdTypeMilitaryDuty" + LEFT JOIN rp."RP_Catalog" AS Catalog19 ON Catalog19."VCode" = RP_PersonMilitary."IdSprMilitaryRank" + LEFT JOIN rp."RP_Catalog" AS Catalog20 ON Catalog20."VCode" = RP_PersonMilitary."IdSprMilitaryFitness" + LEFT JOIN rp."RP_Catalog" AS Catalog18 ON Catalog18."VCode" = RP_PersonMilitary."IdSprMilitaryReserv" + LEFT JOIN rp."RP_Catalog" AS Catalog22 ON Catalog22."VCode" = RP_PersonMilitary."IdSprMilitaryProfile" + LEFT JOIN rp."RP_Catalog" AS Catalog21 ON Catalog21."VCode" = RP_PersonMilitary."IdSprMilitaryRelation" + LEFT JOIN rp."RP_Catalog" AS Catalog23 ON Catalog23."VCode" = RP_PersonMilitary."IdSprMilitaryGroup" + LEFT JOIN rp."RP_Organization" AS RP_Organization1 ON RP_Organization1."VCode" = RP_PersonMilitary."IdOrgCommis" + LEFT JOIN rp."RP_Organization" AS RP_Organization2 ON RP_Organization2."VCode" = RP_PersonMilitary."IdOrgReserv" + + left join ( + select distinct b."IdWorker" as "IdWorker", + b."IdPost" as "IdPost", + b."IdDepartment" as "IdDepartment", + b."Pcode" as "Pcode", + b."DateBeg" as "DateBeg" +from ( + select + a."IdWorker" as "IdWorker", + a."IdPost" as "IdPost", + a."IdDepartment" as "IdDepartment", + a."Pcode" as "Pcode", + a."DateBeg" as "DateBeg", + a."p" as "p", + dense_rank () over(partition by a."IdWorker" order by a."DateBeg" desc ) as "i" + from ( + select + m2."IdWorker" as "IdWorker", + m2."IdPost" as "IdPost", + m2."IdDepartment" as "IdDepartment", + m2."Pcode" as "Pcode", + m2."DateBeg" as "DateBeg", + 2 as "p" + from rp."RP_WorkerMove" as m1 + join rp."RP_WorkerMove" as m2 on m1."IdWorker" = m2."IdWorker" and m1."VCode" = m2."WCode" + where (m1."IdPost" <> m2."IdPost" + or m1."IdDepartment" <> m2."IdDepartment" + or m1."IdStaffUnit" <> m2."IdStaffUnit") + and m2."DateBeg" <= now()::date + union all + select + r."IdWorker" as "IdWorker", + r."IdPost" as "IdPost", + r."IdDepartment" as "IdDepartment", + r."Pcode" as "Pcode", + r."DateBeg" as "DateBeg", + 1 as "p" + from ( + select + m1."IdWorker" as "IdWorker", + m1."IdPost" as "IdPost", + m1."IdDepartment" as "IdDepartment", + m1."Pcode" as "Pcode", + m1."DateBeg" as "DateBeg", + dense_rank () over(partition by m1."IdWorker" order by m1."DateBeg" ) as "p" + from rp."RP_WorkerMove" as m1 + where not exists (select 1 from rp."RP_WorkerMove" as m2 + where m1."IdWorker" = m2."IdWorker" + and m1."VCode" = m2."WCode" + and (m1."IdPost" <> m2."IdPost" + or m1."IdDepartment" <> m2."IdDepartment" + or m1."IdStaffUnit" <> m2."IdStaffUnit") + and m2."DateBeg" <= now()::date) + ) r + where p = 1 + )a +)b +where b.i = 1) m on RP_Worker."VCode" = m."IdWorker" + JOIN rp."RP_DocMove" as RP_DocMove ON RP_DocMove."VCode" = m."Pcode" + LEFT JOIN rp."RP_Post" as RP_Post ON RP_Post."VCode" = m."IdPost" + LEFT JOIN comdoc."Department" as Department ON Department."VCode" = m."IdDepartment" +/* , + comdoc."OwnRequisite"(1--:nCOrg--dbo.GetFilial() + ) own, + comdoc."RespPerson" as rp , + (select r."Name" as "UnitName" , wr."NameShort" as "NameShort", post."Name" as "postName" + from comdoc."RespPerson" as rp + join comdoc."Responsible" as r on r."VCode" = rp."Responsible" + join rp."RP_Worker" wr on wr."VCode" = rp."IdWorker" + join rp."RP_WorkerMove" m on m."IdWorker" = wr."VCode" + left join rp."RP_Post" post on post."VCode" = m."IdPost" + where r."VCode" = 14 + and now() between coalesce(m."DateBeg", '19000101') + and coalesce(m."DateEnd", '21000101') + limit 1) as responible */ + + WHERE RP_DocMove."FlagApp" = true + and now()::date between coalesce(RP_Worker."DateBeg", '19000101') and coalesce(RP_Worker."DateEnd", '21000101') + and coalesce(RP_PersonMilitary."IdTypeMilitaryDuty", 0) > 0 +-- and r."VCode" =14 --Ответственный за отчетность по воинскому учету +-- and now() between coalesce(mm."DateBeg", '19000101') and coalesce(mm."DateEnd", '21000101') + order by --Catalog17.Name, + coalesce(RP_Organization1."NameFull",'')||coalesce(Catalog22."Name",''), RP_Person."Family" || ' '|| RP_Person."Name" ||' '|| RP_Person."Father" +) as a \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/aw.PR_OpersAndTimes.sql b/docs/Lexema-HRM/sql запросы/aw.PR_OpersAndTimes.sql new file mode 100644 index 0000000..1f54bd4 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/aw.PR_OpersAndTimes.sql @@ -0,0 +1,504 @@ +CREATE OR REPLACE FUNCTION aw."PR_OpersAndTimes"( + ppn integer -- индекс текущей строки +, pworker bigint -- ид-р сотрудника +, pbeg date -- дата начала периода выбора +, pend date -- дата начала периода выбора +, pto bigint -- ид-р вида операции +, ptdc integer -- вид расчета ср/дн заработка +, pskkd double precision -- среднемесячное число календарных дней +, pmrot money -- минимальный размер оплаты труда +, pko integer -- количество операций по начислениям +, ptabls character varying -- имя таблицы Расчёт среднего заработка +, ptablo character varying -- имя таблицы Операции по начислениям +, pdb date -- ? +) +/* Выбрать из WorkerPayrollOperation по TypeDailyCalc: + * - помесячно сумму начислений; + * - по годам базу страховых взносов. + * Вместе с этим также выбрать: + * - время из WorkTabTimes/WorkerAbsence; + * - продолжительность рабочего времени для сотрудника по его виду графика. */ +RETURNS TABLE ( "IdPeriod" bigint + , "IdWorkerMove" bigint + , "DateBeg" date + , "DateEnd" date + , "SalPeriod" bigint + , "SumTotal" numeric + , "SumMROT" numeric + , "DaysCalendFund" integer + , "LastDayMonth" integer + , "DaysWorkCorr" double precision + , "DaysCalendAbsence" double precision + , "DaysCalendAbsence2" numeric + , "DaysWorkFund" numeric + , "HoursWorkFund" numeric + , "DaysWork" numeric + , "HoursWork" numeric + , "DaysWeek" numeric + , "Hours40" double precision + , "WorkingHours" double precision + , "Days429" numeric + , "TimPeriod" double precision + , "ITS" integer + , "Name" character varying +) +LANGUAGE 'plpgsql' +COST 100 +VOLATILE PARALLEL UNSAFE +ROWS 1000 +AS $BODY$ +DECLARE _o364 bigint := 364; -- База для ФСС (доход) +DECLARE _o157 bigint := 157; -- Явка (время работы) +DECLARE _o194 bigint := 194; -- Вых./празд. дни +DECLARE _o429 bigint := 429; -- Календ. отраб. дни +DECLARE _o192 bigint := 192; -- Фонд раб.времени по графику +DECLARE _nv integer := 40; -- Норма времени по КЗОТ: 40-часовая рабочая неделя +--DECLARE _nd date:= '19000101'; +declare _itp integer := 0; +DECLARE _yb integer := extract(year from pbeg); +DECLARE _ye integer := extract(year from pend); +declare _perbeg integer := pr."fnPeriodFromDate"(pbeg); +declare _perend integer := pr."fnPeriodFromDate"(pend); +declare _cm integer := aw."fnMonthsFromPeriod"(_perbeg, _perend, 0); -- кол-во месяцев, включая оба периода +declare _zp integer := aw."fnLastCalcPeriod"(pworker, pto, _perend); -- последний период расчета з/п с нач-ми, входящими в расчет среднедневного + _co bigint := (select "COrg" from rp."RP_Worker" where "VCode" = pworker); +BEGIN + IF NOT comdoc."isTableExists"('opersandtimes', 'temp') THEN + CREATE TEMP TABLE "opersandtimes"( + "IdPeriod" bigint + , "IdWorkerMove" bigint + , "DateBeg" date + , "DateEnd" date + , "SalPeriod" bigint + , "SumTotal" numeric + , "SumMROT" numeric + , "DaysCalendFund" integer + , "LastDayMonth" integer + , "DaysWorkCorr" double precision + , "DaysCalendAbsence" double precision + , "DaysCalendAbsence2" numeric + , "DaysWorkFund" numeric + , "HoursWorkFund" numeric + , "DaysWork" numeric + , "HoursWork" numeric + , "DaysWeek" numeric + , "Hours40" double precision + , "WorkingHours" double precision + , "Days429" numeric + , "TimPeriod" double precision + , "ITS" integer + , "Name" character varying(9) + ) ON COMMIT DROP; + END IF; + -- Начало периода неявки сотрудника DateBeg (для определения записи перемещения, вида графика работы и прод-ти раб. времени) + --pbeg := comdoc."IIF"(COALESCE(pbeg, _nd) = _nd, make_date(1900, 1, 1), pbeg); + --pend := comdoc."IIF"(COALESCE(pend, _nd) = _nd, make_date(9999, 12, 31), pend); + ptdc := COALESCE(ptdc, 0); + IF ptdc > 0 and _perbeg > 0 and _perend > 0 THEN + SELECT t."IdSprOper1", t."IdSprOper2", t."IdSprOper3" + into _o364, _o157, _o194 + FROM pr."PR_TypeOper" AS t + WHERE t."VCode" = pto + ; + IF _zp > 0 and _zp < _perend THEN + _perend := _zp; + _perbeg := aw."fnMonthsFromPeriod"(0, _zp, _cm - 1); + END IF; + + IF NOT comdoc."isTableExists"('operations', 'temp') THEN + CREATE TEMP TABLE "operations"( + "VCode" bigint + , "IdPeriod" bigint + , "IdWorkerMove" bigint + , "IdSprOper" bigint + , "SumOper" numeric + , "SumCalc" numeric + ) ON COMMIT DROP; + END IF; + INSERT INTO "operations" + SELECT wo."VCode", wo."IdPeriod", wo."IdWorkerMove", wo."IdSprOper", wo."SumOper", wo."SumCalc" + FROM pr."VPR_WorkerOperation" as wo + WHERE (COALESCE(pworker, 0) = 0 OR wo."IdWorker" = pworker) + AND wo."IdPeriod" BETWEEN _perbeg AND _perend + ORDER BY wo."IdPeriod", wo."IdWorkerMove" + ; + + -- Табличка из лет или месяцев заданного периода + IF NOT comdoc."isTableExists"('periods', 'temp') THEN + CREATE TEMP TABLE "periods"( + "VCode" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY + , "IdPeriod" integer + , "DateBeg" date + , "DateEnd" date + , "DaysCalendFund" integer + , "DaysWorkFund" numeric + , "SumMROT" numeric + , "ITS" integer + , "Name" varchar(9) + ) ON COMMIT DROP; + END IF; + + IF ptdc >= 100 THEN -- По годам от базы страховых взносов + WITH recursive "years" ("Year") AS ( -- Годы в заданном периоде + SELECT _yb AS "Year" + UNION ALL + SELECT x."Year" + 1 + FROM "years" AS x + WHERE x."Year" < _ye + ) + INSERT INTO "periods" ("IdPeriod", "DateBeg", "DateEnd", "DaysCalendFund", "SumMROT", "ITS", "Name") + SELECT t."Year" * 10000 + , make_date(t."Year", 1, 1) + , make_date(t."Year", 12, 31) + --, comdoc."IIF"(t."Year" % 4 = 0 AND t."Year" % 100 <> 0) OR (t."Year" % 400 = 0), 366, 365) + , comdoc."fnDaysPerYear"(t."Year") + , (pmrot * 12)::numeric + , ppn + , '' + FROM "years" AS t + ; + --добавили 25.10.21 из MS + IF ptdc = 102 THEN _itp := 45; END IF; + + -- создать табличку из расчёта с/в по заданному периоду + WITH "Salary" ("IdPeriod", "SumTotal") AS ( + SELECT FLOOR(x."IdPeriod" / 10000) * 10000 -- Период расчёта с/в + , SUM(x."SumOper") -- Сумма дохода по годам + FROM "operations" as x + WHERE _o364 <> 0 -- Задана настройка для операции дохода + AND x."IdSprOper" = _o364 -- База для ФСС + GROUP BY FLOOR(x."IdPeriod" / 10000) * 10000 + ), "Times" ("IdPeriod", "DaysWork", "Days429") AS ( + SELECT x."IdPeriod" + , SUM(x."SumOper")::numeric -- Время работы в днях + , 0::numeric + FROM "operations" as x + WHERE _o157 <> 0 -- Задана настройка для операции явки + AND x."IdSprOper" = _o157 -- Явка + GROUP BY x."IdPeriod" + UNION ALL + SELECT x."IdPeriod" + , 0::numeric + , SUM(x."SumOper") ::numeric -- Отработано календарных дней + FROM "operations" as x + WHERE _o429 <> 0 -- Задана настройка для операции календ. отр. + AND x."IdSprOper" = _o429 -- Календ. отр. + GROUP BY x."IdPeriod" + ) + insert into "opersandtimes" + ( "IdPeriod", "DateBeg", "DateEnd", "SalPeriod", "SumTotal", "SumMROT", "DaysCalendFund" + , "DaysWorkCorr", "DaysCalendAbsence", "DaysCalendAbsence2" + , "DaysWorkFund","HoursWorkFund" + , "DaysWork", "HoursWork" + , "DaysWeek", "Hours40", "WorkingHours", "Days429" + , "TimPeriod", "ITS", "Name" + ) + SELECT t."IdPeriod" + , t."DateBeg" + , t."DateEnd" + , s."IdPeriod" AS "SalPeriod" + , COALESCE(s."SumTotal", 0::numeric) AS "SumTotal" + , COALESCE(t."SumMROT", 0::numeric) AS "SumMROT" + , COALESCE(t."DaysCalendFund", 0) AS "DaysCalendFund" + , comdoc."IIF"(COALESCE(Times."DaysWork", 0) <> 0 + , ROUND((pskkd + * 12 + * comdoc."IIF"(COALESCE(Times."Days429", 0) <> 0 + , Times."Days429" + , COALESCE(t."DaysCalendFund", 0)::numeric - COALESCE(aw."DaysFromAbsence"(pworker, t."DateBeg", t."DateEnd", _itp), 0)::numeric + ) + / t."DaysCalendFund")::numeric + , 2) + , 0::numeric + ) AS "DaysWorkCorr" -- Приведённое количество отработанных календ. дней + , COALESCE(aw."DaysFromAbsence"(pworker, t."DateBeg", t."DateEnd",_itp), 0) AS "DaysCalendAbsence" -- Неотработанные календарные дни + , comdoc."IIF"( COALESCE(Times."Days429", 0) <> 0 + , COALESCE(t."DaysCalendFund", 0)::numeric - Times."Days429" + , 0::numeric + ) AS "DaysCalendAbsence2" -- н/отр календ 2 + , 0 AS "DaysWorkFund" + , 0 AS "HoursWorkFund" + , 0 AS "DaysWork" + , 0 AS "HoursWork" + , 0 AS "DaysWeek" + , 0 AS "Hours40" + , 0 AS "WorkingHours" + , 0 AS "Days429" + , 0 AS "TimPeriod" + , t."ITS" + , t."Name" + FROM "periods" AS t + LEFT JOIN (SELECT FLOOR(x."IdPeriod" / 10000) * 10000 AS "IdPeriod" + , SUM(x."DaysWork") AS "DaysWork" + , SUM(x."Days429") AS "Days429" + FROM "Times" AS x + GROUP BY FLOOR(x."IdPeriod" / 10000) * 10000 + ) AS Times ON t."IdPeriod" = Times."IdPeriod" + LEFT JOIN "Salary" s ON t."IdPeriod" = s."IdPeriod" + ; + ELSE -- Помесячно от зарплаты + insert into "opersandtimes" + ( "IdPeriod", "IdWorkerMove", "DateBeg", "DateEnd" + , "SumTotal", "DaysWork", "HoursWork", "DaysWeek", "Days429" + , "Hours40", "WorkingHours", "DaysWorkFund", "HoursWorkFund", "SumMROT" + , "DaysCalendFund", "LastDayMonth", "DaysWorkCorr", "DaysCalendAbsence" + , "DaysCalendAbsence2", "ITS", "Name" + ) + select z."IdPeriod" + , z."IdWorkerMove" + , z."DateBeg" + , z."DateEnd" + , z."SumTotal" -- заработок + , z."DaysWork" -- отработано рабочих дней + , z."HoursWork" -- отработано рабочих часов + , z."DaysWeek" -- выходных дней + , z."Days429" -- приведенные кал.дни (до внедрения) + , z."Hours40" -- часов в неделю в графике + , z."WorkingHours" -- прод.раб.дня + , z."DaysWorkFund" -- фонд раб.дней за месяц + , z."HoursWorkFund" -- фонд раб.часов за месяц + -- МРОТ: неполный день неполный месяц (в кал.днях) + , comdoc."IIF"(COALESCE(z."DaysWork", 0::numeric) = 0::numeric + , 0::numeric + , Round((pmrot + * z."Hours40" + / _nv + * (extract(day from z."DateEnd") - extract(day from z."DateBeg") + 1) + --* 1.00 + / extract(day from comdoc."LexLastDayMonth"(z."DateBeg")))::numeric + , 2) + ) as "SumMROT" + , (extract(day from z."DateEnd") - extract(day from z."DateBeg") + 1) as "DaysCalendFund" -- кал.фонд + , extract(day from comdoc."LexLastDayMonth"(z."DateBeg")) as "LastDayMonth" -- посл.день месяца + -- приведённое количество отработанных календ. дней + , comdoc."IIF"( COALESCE(z."DaysWork", 0::numeric) = 0::numeric + , 0::numeric + , Round((pskkd + * comdoc."IIF"( COALESCE(z."Days429", 0::numeric) <> 0::numeric + , z."Days429"::numeric + , (date_part('day',z."DateEnd") - date_part('day',z."DateBeg") + 1 - COALESCE(aw."DaysFromAbsence"(19908, z."DateBeg", z."DateEnd",0), 0) )::numeric + ) + --* 1.00 + / extract(day from comdoc."LexLastDayMonth"(z."DateBeg")))::numeric + , 2) + ) as "DaysWorkCorr" + , COALESCE(aw."DaysFromAbsence"(pworker, z."DateBeg", z."DateEnd",0), 0) as "DaysCalendAbsence" -- неотработанные календарные дни + , comdoc."IIF"( COALESCE(z."Days429", 0::numeric) = 0::numeric + , 0::numeric + , (extract(day from comdoc."LexLastDayMonth"(z."DateBeg")) - z."Days429")::numeric + ) as "DaysCalendAbsence2" -- н/отр календ 2 + , ppn as "ITS" -- индекс строки + , (SELECT x."NameFull" FROM aw."VTypeDays" x WHERE x."VCode" = extract(month from z."DateBeg") + 60) as "Name" -- наим.месяца + from (select s."IdPeriod" + , s."IdWorkerMove" + , comdoc."IIF"(aw."fnDateInPeriod2"(v."DateBeg", s."IdPeriod") = 1, v."DateBeg", aw."fnDatePeriod"(s."IdPeriod", 0)) as "DateBeg" + , comdoc."IIF"(aw."fnDateInPeriod2"(v."DateEnd", s."IdPeriod") = 1, v."DateEnd", aw."fnDatePeriod"(s."IdPeriod", 1)) as "DateEnd" + , s."SumTotal" + , s."DaysWork" + , s."HoursWork" + , s."DaysWeek" + , s."Days429" + , s."Hours40" + , s."WorkingHours" + , s."DaysWorkFund" + , s."HoursWorkFund" + from (select o."IdPeriod" + , o."IdWorkerMove" + , Sum(o."S1") as "SumTotal" + , Sum(o."S2") as "DaysWork" + , Sum(o."S3") as "HoursWork" + , Sum(o."S4") as "DaysWeek" + , Sum(o."S5") as "Days429" + , Sum(o."S6") as "Hours40" + , Sum(o."S7") as "WorkingHours" + , Sum(o."S8") as "DaysWorkFund" + , Sum(o."S9") as "HoursWorkFund" + from (SELECT x."IdPeriod" + , x."IdWorkerMove" + , x."SumOper" as "S1" + , 0::numeric as "S2" + , 0::numeric as "S3" + , 0::numeric as "S4" + , 0::numeric as "S5" + , 0::double precision as "S6" + , 0::double precision as "S7" + , 0::numeric as "S8" + , 0::numeric as "S9" + FROM "operations" x + WHERE EXISTS (SELECT t."VCode" + FROM pr."PR_TypeOperBase" as t + WHERE t."Pcode" = pto + AND t."IdSprOper" = x."IdSprOper" + ) + UNION ALL + SELECT x."IdPeriod" + , x."IdWorkerMove" + , 0::numeric as "S1" + , x."SumOper" as "S2" + , x."SumCalc" as "S3" + , 0::numeric as "S4" + , 0::numeric as "S5" + , 0::double precision as "S6" + , 0::double precision as "S7" + , 0::numeric as "S8" + , 0::numeric as "S9" -- время в днях, часах + FROM "operations" as x + WHERE _o157 <> 0 -- Задана настройка для операции явки + AND x."IdSprOper" = _o157 -- Явка + UNION all + SELECT x."IdPeriod" + , x."IdWorkerMove" + , 0::numeric as "S1" + , 0::numeric as "S2" + , 0::numeric as "S3" + , x."SumOper" as "S4" + , 0::numeric as "S5" + , 0::double precision as "S6" + , 0::double precision as "S7" + , 0::numeric as "S8" + , 0::numeric as "S9" -- Вых./празд. дни + FROM "operations" as x + WHERE _o194 <> 0 -- Задана настройка для операции вых./празд. + AND x."IdSprOper" = _o194 -- Вых./празд. + UNION all + SELECT x."IdPeriod" + , x."IdWorkerMove" + , 0::numeric as "S1" + , 0::numeric as "S2" + , 0::numeric as "S3" + , 0::numeric as "S4" + , x."SumOper" as "S5" + , 0::double precision as "S6" + , 0::double precision as "S7" + , 0::numeric as "S8" + , 0::numeric as "S9" -- Календ. отр. + FROM "operations" as x + WHERE _o429 <> 0 -- Задана настройка для операции календ. отр. + AND x."IdSprOper" = _o429 -- Календ. отр. + UNION all + SELECT x."IdPeriod" + , x."IdWorkerMove" + , 0::numeric as "S1" + , 0::numeric as "S2" + , 0::numeric as "S3" + , 0::numeric as "S4" + , 0::numeric as "S5" + , t."Code2"::double precision as "S6" -- Норма времени по графику сотрудника + , COALESCE(t."Prcn", 0)::double precision as "S7" -- Прод. раб. дня в часах + , 0::numeric as "S8" + , 0::numeric as "S9" + FROM "operations" as x + LEFT JOIN rp."RP_WorkerMove" as m ON x."IdWorkerMove" = m."VCode" + LEFT JOIN rp."RP_Catalog" as t ON m."IdTypeWorkSched" = t."VCode" + WHERE _o157 <> 0 -- Задана настройка для операции явки + AND x."IdSprOper" = _o157 -- Явка + AND x."VCode" = (SELECT MAX(_x."VCode") + FROM "operations" as _x + WHERE _x."IdWorkerMove" = x."IdWorkerMove" + AND _x."IdPeriod" = x."IdPeriod" + AND _x."IdSprOper" = _o157 + ) + UNION all + SELECT x."IdPeriod" + , x."IdWorkerMove" + , 0::numeric as "S1" + , 0::numeric as "S2" + , 0::numeric as "S3" + , 0::numeric as "S4" + , 0::numeric as "S5" + , 0::double precision as "S6" + , 0::double precision as "S7" + , x."SumOper" as "S8" + , x."SumCalc" as "S9" + FROM "operations" as x + WHERE _o192 <> 0 -- Задана настройка для операции фондов + AND x."IdSprOper" = _o192 -- Фонд + ) as o + group by o."IdPeriod", o."IdWorkerMove" + ) as s + left join rp."RP_WorkerMove" v ON s."IdWorkerMove" = v."VCode" + ) as z + -- добавить из документа Сведения о доходах и вычетах + union all + select z."IdPeriod" + , z."IdWorkerMove" + , z."DateBeg" -- начало периода + , z."DateEnd" -- конец периода + , z."Income" as "SumTotal" -- заработок + , 0 as "DaysWork" -- отработано рабочих дней + , 0 as "HoursWork" -- отработано рабочих часов + , 0 as "DaysWeek" -- выходных дней + , 0 as "Days429" -- приведенные кал.дни (до внедрения) + , 40 as "Hours40" -- часов в неделю в графике + , 8 as "WorkingHours" -- прод.раб.дня + , 0 as "DaysWorkFund" -- фонд раб.дней за месяц + , 0 as "HoursWorkFund" -- фонд раб.часов за месяц + , pmrot::numeric as "SumMROT" -- МРОТ + , z."LastDayMonth" as "DaysCalendFund" -- кал.фонд + , z."LastDayMonth" -- посл.день месяца + , ROUND((pskkd * z."DaysCalend" / z."LastDayMonth")::numeric, 2) as "DaysWorkCorr" -- приведенные кал.дни + , 0 as "DaysCalendAbsence" -- неотработанные календарные дни + , z."LastDayMonth" - z."DaysCalend" as "DaysCalendAbsence2" -- н/отр календ 2 + , ppn as "ITS" -- индекс строки + , (SELECT x."NameFull" FROM aw."VTypeDays" x WHERE x."VCode" = extract(month from z."DateBeg") + 60) as "Name" -- наим.месяца + from (select m."IdWorkerMove" + , p."IdPerson" + , s."IdPeriod" + , s."Income" + , s."DaysCalend" + , aw."fnDatePeriod"(s."IdPeriod"::integer, 0) as "DateBeg" + , aw."fnDatePeriod"(s."IdPeriod"::integer, 1) as "DateEnd" + , extract(day from aw."fnDatePeriod"(s."IdPeriod"::integer, 1)) as "LastDayMonth" + from pr."PR_PreviousWorksSalary" as s + join pr."PR_PreviousWorks" as p on s."PCode" = p."VCode" + join rp."fnWorkerMoveHiring"(_co, pworker) as m on p."IdPerson" = m."IdPerson" + where s."IdPeriod" between _perbeg and _perend + ) as z + ; + END IF; + END IF; + + RETURN QUERY + select v."IdPeriod" + , v."IdWorkerMove" + , v."DateBeg" + , v."DateEnd" + , v."SalPeriod" + , v."SumTotal" + , v."SumMROT" + , v."DaysCalendFund" + , v."LastDayMonth" + , v."DaysWorkCorr" + , v."DaysCalendAbsence" + , v."DaysCalendAbsence2" + , v."DaysWorkFund" + , v."HoursWorkFund" + , v."DaysWork" + , v."HoursWork" + , v."DaysWeek" + , v."Hours40" + , v."WorkingHours" + , v."Days429" + , v."TimPeriod" + , v."ITS" + , v."Name" + from "opersandtimes" as v + ; +END; +$BODY$; + +ALTER FUNCTION aw."PR_OpersAndTimes"( integer + , bigint + , date + , date + , bigint + , integer + , double precision + , money + , integer + , character varying + , character varying + , date + ) OWNER TO lib83; + +-- select * from aw."PR_OpersAndTimes"(); diff --git a/docs/Lexema-HRM/sql запросы/bt.queryCreateOrderOfPayment.sql b/docs/Lexema-HRM/sql запросы/bt.queryCreateOrderOfPayment.sql new file mode 100644 index 0000000..e4c3c5c --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/bt.queryCreateOrderOfPayment.sql @@ -0,0 +1,236 @@ +CREATE OR REPLACE FUNCTION bt."queryCreateOrderOfPayment"( + "_VCode_Parent" bigint) + RETURNS TABLE("VCode" bigint, "BTDocumentStatus" bigint, "COrg" integer, "WOrg" integer, "Receiver" bigint, "Payer" bigint, "VATRate" bigint, "PayFor" bigint, "ReceiverAccount" bigint, "PayerAccount" bigint, "Contract" bigint, "AdditionalContract" bigint, "SumWithVAT" numeric, "SumVAT" numeric, "Description" text, "AccountingDate" date, "PaymentDestination" text, "TypeName" character varying, "INN" character varying, "KPP" character varying, "Bank" bigint, "RAccount" character varying, "BIK" character varying, "AccountK" character varying, "BankOwn" bigint, "RAccountOwn" character varying, "BIKOwn" character varying, "AccountKOwn" character varying, "CDate" timestamp with time zone, "WDate" timestamp with time zone, "CHost" character varying, "WHost" character varying, "CUser" character varying, "WUser" character varying, "INNOwn" character varying, "KPPOwn" character varying, "ItemOfBdds" bigint, "Projects" bigint, "Department" bigint, "Currency" bigint) + LANGUAGE 'plpgsql' + COST 100 + VOLATILE PARALLEL UNSAFE + ROWS 1000 + +AS +$BODY$ +DECLARE _VCode BIGINT; +DECLARE _vl bigint; +DECLARE _vn bigint; +DECLARE _virtualUser varchar(255); +DECLARE _currentUser varchar(255); +DECLARE _TypeName VARCHAR(50); +DECLARE _docName1 text; +DECLARE _docSubj1 text; +DECLARE _docName2 text; +DECLARE _docSubj2 text; +DECLARE _VCode_Parent bigint; +DECLARE _vn_ch character varying; +DECLARE _StandardOperations bigint; +DECLARE _CostItems bigint; +DECLARE _COrg bigint; +DECLARE _AccountingDate date; +DECLARE _Debit character varying; _Credit character varying; +DECLARE _CurrencySum numeric; +DECLARE _SumWithVAT numeric; +DECLARE _SumVAT numeric; +DECLARE _CurrencyValue numeric; + +begin +select lex."getVirtualLogin"(), lex."getLogin"(), 'PaymentOrder', "_VCode_Parent" +into _virtualUser, _currentUser, _TypeName, _VCode_Parent ; + +select 'Заявка на платеж №' || coalesce(t."DocumentNumber"::varchar(10), 'б/н') || ' от ' || to_char(t."AccountingDate"::date, 'DD.MM.YYYY'), + nullif(t."PaymentDestination", ''), t."AccountingDate"::date, t."COrg" +from bt."RequestForPayment" t +where t."VCode" = _VCode_Parent +into _docName1, _docSubj1, _AccountingDate, _COrg; + +select l."VCode", l."ArtExpId", l."Debit", l."Credit" +from comdoc."mngGetDocOpers"( _TypeName::varchar(255), _COrg::int, _AccountingDate::date, true::boolean ) l +into _StandardOperations, _CostItems, _Debit, _Credit ; + + _vn_ch:= 'PaymentOrder'||_COrg::varchar(10)||'DocumentNumber'||(extract(YEAR from now()::date))::varchar(10); + + _VCode := lex."L8_sp_GenCode" ('Analytics',1); + _vl := lex."L8_sp_GenCode" ('DocflowLink',1); + _vn := lex."L8_sp_GenCode" (_vn_ch::varchar(255),1); + + +select 'Платежное поручение №'||_vn::varchar(10)||' от ' || to_char(now()::date, 'DD.MM.YYYY'), + 'На основании документа "' || _docName1 || '"' +into _docName2, _docSubj2 ; + +--проверяю уже созданные п/п из ЗПЛ +select sum(coalesce(p."CurrencySum",0)), sum(coalesce(p."SumWithVAT",0)), sum(coalesce(p."SumVAT",0)) +from bt."FinanceMoving" p +where p."SourceDocumentCode" = _VCode_Parent and "SourceDocumentType" = 'Base.PlannedRequestDDS' + and coalesce(p."KBDocumentStatus") <> 5 +into _CurrencySum, _SumWithVAT, _SumVAT; + +select "Value" +from comdoc."CurrencyRate"(now()::date,(select t."Currency" from bt."RequestForPayment" t where t."VCode" = "_VCode_Parent")) +into _CurrencyValue; + + + +-- raise notice '_vn_ch %,_VCode %, _vl %, _vn %, _docName2 %, _docSubj2 %, _docName1 %, _docSubj1 %, _AccountingDate %', +-- _vn_ch, _VCode , _vl , _vn , _docName2, _docSubj2, _docName1, _docSubj1, _AccountingDate; + +INSERT INTO bt."FinanceMoving" + ( + "VCode" + ,"DocumentNumber" + ,"SourceDocumentCode" + ,"SourceDocumentType" + ,"BTDocumentStatus" + ,"KBDocumentStatus" + ,"OrderOfPayments" + ,"COrg" + ,"WOrg" + ,"Receiver" + ,"Payer" + ,"VATRate" + ,"ReceiverAccount" + ,"PayerAccount" + ,"Contract" + ,"AdditionalContract" + ,"SumWithVAT" + ,"SumVAT" + ,"Description" + ,"DocumentDate" + ,"PaymentDestination" + ,"TypeName" + ,"INN" + ,"KPP" + ,"Bank" + ,"RAccount" + ,"BIK" + ,"AccountK" + ,"BankOwn" + ,"RAccountOwn" + ,"BIKOwn" + ,"AccountKOwn" + ,"CDate" + ,"WDate" + ,"CHost" + ,"WHost" + ,"CUser" + ,"WUser" + ,"INNOwn" + ,"KPPOwn" + ,"ItemOfBdds" + ,"Projects" + ,"Department" + ,"TypeOfpmBank" + ,"StandardOperations" + ,"CostItems" + ,"Debit", "Credit", "Currency", "CurrencyRate","CurrencySum" + ,"TaxDocumentNumber", "TaxDocumentDate", "TaxpayerStatus", "PaymentBase", "KBK", "TaxablePeriod", "OKATO", "OKTMO", "DocumentType") + +select _VCode, _vn + ,_VCode_Parent as "SourceDocumentCode" + ,'Base.PlannedRequestDDS' as "SourceDocumentType" + , 10 as "BTDocumentStatus" + , 1 as "KBDocumentStatus" + , t."OrderOfPayment" + , t."COrg" + , t."WOrg" + , t."Receiver" + , t."Payer" + , t."VATRate" + , t."ReceiverAccount" + , t."PayerAccount" + , t."Contract" + , t."AdditionalContract" + -- , t."SumWithVAT" + , case when coalesce(cur."IDnum"::int,0) in (0,643) + then coalesce(t."SumWithVAT",0) + else round(_CurrencyValue*t."SumWithVAT",2) end - coalesce(_SumWithVAT,0) + , coalesce(t."SumVAT",0) - coalesce(_SumVAT,0) + , t."Description" + , now()::date as "DocumentDate" + , t."PaymentDestination" + , _TypeName + , t."INN" + , t."KPP" + , t."Bank" + , t."RAccount" + , t."BIK" + , t."AccountK" + , t."BankOwn" + , t."RAccountOwn" + , t."BIKOwn" + , t."AccountKOwn" + , t."CDate" + , t."WDate" + , t."CHost" + , t."WHost" + , t."CUser" + , t."WUser" + , t."INNOwn" + , t."KPPOwn" + , t."ItemOfBdds" + , t."Projects" + , t."Department" + , (select m."VCode" from bt."TypeOfpmBank" m where m."IsDefault" is true limit 1) + , _StandardOperations + , _CostItems + , _Debit, _Credit + , case when coalesce(cur."IDnum"::int,0::int) not in (0,643) then t."Currency" end + , case when coalesce(cur."IDnum"::int,0) not in (0,643) then _CurrencyValue end as "CurrencyRate" + , case when coalesce(cur."IDnum"::int,0) not in (0,643) then t."SumWithVAT" end - coalesce(_CurrencySum,0) + , t."TaxDocumentNumber", t."TaxDocumentDate", t."TaxpayerStatus", t."PaymentBase", t."KBK", t."TaxablePeriod", t."OKATO", t."OKTMO", 1 +FROM bt."RequestForPayment" t + left join comdoc."Currency" cur on t."Currency" = cur."VCode" +WHERE t."VCode" = _VCode_Parent; + + +insert into comdoc."DocflowLink" ( + "VCode", "DocCode1", "DocType1", "DocName1", "DocSubject1", "DocCode2", "DocType2", "DocName2", "DocSubject2", "Duplex", "VirtualCUser", "CUser", "WUser", "CDate", "WDate"--, "CHost", "WHost" +) +values ( + _vl, _VCode_Parent, 'Base.RequestForPayment', _docName1, _docSubj1, _VCode, 'PaymentOrder', _docName2, _docSubj2, true, _virtualUser, _currentUser, _currentUser, + now(), now()--, host_name(), host_name() +); + +RETURN QUERY +select t."VCode" + , t."BTDocumentStatus" + , t."COrg" + , t."WOrg" + , t."Receiver" + , t."Payer" + , t."VATRate" + , t."PayFor" + , t."ReceiverAccount" + , t."PayerAccount" + , t."Contract" + , t."AdditionalContract" + , t."SumWithVAT" + , t."SumVAT" + , t."Description" + , t."AccountingDate" + , t."PaymentDestination" + , t."TypeName" + , t."INN" + , t."KPP" + , t."Bank" + , t."RAccount" + , t."BIK" + , t."AccountK" + , t."BankOwn" + , t."RAccountOwn" + , t."BIKOwn" + , t."AccountKOwn" + , t."CDate" + , t."WDate" + , t."CHost" + , t."WHost" + , t."CUser" + , t."WUser" + , t."INNOwn" + , t."KPPOwn" + , t."ItemOfBdds" + , t."Projects" + , t."Department" + , t."Currency" +FROM bt."FinanceMoving" t +WHERE t."VCode" = _VCode; +RETURN; +end; +$BODY$; diff --git a/docs/Lexema-HRM/sql запросы/crm.SaleSpecifications.sql b/docs/Lexema-HRM/sql запросы/crm.SaleSpecifications.sql new file mode 100644 index 0000000..5290e71 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/crm.SaleSpecifications.sql @@ -0,0 +1,148 @@ +CREATE OR REPLACE FUNCTION crm."SaleSpecifications"( + _doccode bigint DEFAULT NULL::bigint, + _doctype text DEFAULT NULL::text, + _orgid bigint DEFAULT NULL::bigint, + _accdate date DEFAULT NULL::date, + _contractor bigint DEFAULT NULL::bigint, + _contract bigint DEFAULT NULL::bigint, + _addcontract bigint DEFAULT NULL::bigint) + RETURNS TABLE("Number" bigint, "SpecificationRowVCode" bigint, "SpecificationCodeSale" bigint, "SpecName" text, "MaterialId" bigint, "MeasureId" bigint, "Quantity" numeric(25, 10), "PriceWithoutVAT" numeric(19, 4), "SumWithoutVAT" numeric(19, 4), "PriceWithVAT" numeric(19, 4), "SumWithVAT" numeric(19, 4), "SumVAT" numeric(19, 4), "VATRateId" bigint, "SpecRemains" numeric(25, 10), "LeftQty" numeric(25, 10), "MaterialNm" text, "VendorCode" text, "MeasureNm" text, "VATRateNm" text, "Rate" numeric(19, 4), "NomGroupId" bigint, "NomGroupNm" text, "ProductCode" text, "Cnt" integer) + LANGUAGE 'plpgsql' + COST 100 + VOLATILE PARALLEL UNSAFE + ROWS 1000 + +AS $BODY$ +/* +SELECT t.* FROM crm."SaleSpecifications"( + 88904 -- _doccode ::bigint - Код документа +, 'Base.CustomerOrder' -- _doctype ::text - Тип документа +, 1 -- _orgid ::bigint - Код системного филиала +, NULL -- _accdate ::date - Дата документа +, NULL -- _contractor ::bigint - Покупатель +, 88343 -- _contract ::bigint - Договор +, NULL -- _addcontract ::bigint - Спецификация +) AS t; +*/ +-- Окно выбора номенклатуры из спецификаций для заявки от клиента +DECLARE _qtydigits integer DEFAULT 4::integer; +DECLARE _source text; +DECLARE _aspec bigint[]; +BEGIN +_doccode := COALESCE(_doccode, -1); +_doctype := COALESCE(_doctype, 'NotFoundForm'); +_orgid := COALESCE(_orgid, comdoc."getFilial"()); +_accdate := COALESCE(_accdate, now()::date); +_contractor := NULLIF(_contractor, 0); +_contract := NULLIF(_contract, 0); +_addcontract := NULLIF(_addcontract, 0); +IF NOT comdoc."isTableExists"('tmp_salespec_spec', 'temp') THEN + CREATE TEMP TABLE tmp_salespec_spec( + "Number" bigint NULL + , "SpecificationRowVCode" bigint NULL + , "SpecificationCodeSale" bigint NULL + , "SpecName" text NULL + , "MaterialId" bigint NULL + , "MeasureId" bigint NULL + , "Quantity" numeric(25, 10) NULL + , "PriceWithoutVAT" numeric(19, 4) NULL + , "SumWithoutVAT" numeric(19, 4) NULL + , "PriceWithVAT" numeric(19, 4) NULL + , "SumWithVAT" numeric(19, 4) NULL + , "SumVAT" numeric(19, 4) NULL + , "VATRateId" bigint NULL + , "SpecRemains" numeric(25, 10) NULL + ) ON COMMIT DROP; +END IF; + +-- {{ Определение источников данных +SELECT t."TypeName" INTO _source FROM contract."Contract" AS t WHERE t."VCode" = _contract; +IF _source = 'Base.ValidContractDocument' THEN + _aspec := ARRAY[_contract]; +ELSEIF _addcontract IS NOT NULL THEN + _aspec := ARRAY[_addcontract]; +ELSE + _aspec := ARRAY( + SELECT t."VCode" FROM comdoc."lkpAddContracts"(NULL, NULL, NULL, NULL, _orgid, _contractor::text, _contract::text, _accdate, 'approved', NULL, 1, 1) AS t + ) AS a; +END IF; +-- }} Определение источников данных + +-- {{ Спецификации +WITH __spec AS( + -- Документ, имеющий силу договора + SELECT ROW_NUMBER() OVER(PARTITION BY s."MaterialLex", s."MeasureName" ORDER BY COALESCE(p."DateBegin", '1900-01-01'::date) DESC, p."VCode" DESC) AS id + , s."VCode", s."PCode", s."Number", s."MaterialLex", s."MeasureName", ROUND(COALESCE(s."Quantity"::numeric(25, 10), 0), _qtydigits) AS "Quantity" + , COALESCE(s."Price", 0) AS "PriceWithoutVAT", COALESCE(s."Sum", 0) AS "SumWithoutVAT", COALESCE(s."PriceWithVat", 0) AS "PriceWithVAT" + , COALESCE(s."SumWithVAT", 0) AS "SumWithVAT", COALESCE(s."VatSum", 0) AS "SumVAT", s."VatRate", p."FullName" + FROM contract."VLookupContracts" AS p + JOIN contract."SpecificationForContract" AS s ON s."PCode" = p."VCode" + WHERE s."PCode" = ANY(_aspec) + -- Приложение к договору + UNION ALL + SELECT ROW_NUMBER() OVER(PARTITION BY s."MaterialLex", s."MeasureName" ORDER BY COALESCE(p."DateBegin", '1900-01-01'::date) DESC, p."VCode" DESC) AS id + , s."VCode", s."PCode", s."Number", s."MaterialLex", s."MeasureName", ROUND(COALESCE(s."Quantity"::numeric(25, 10), 0), _qtydigits) AS "Quantity" + , COALESCE(s."Price", 0) AS "PriceWithoutVAT", COALESCE(s."Sum", 0) AS "SumWithoutVAT", COALESCE(s."PriceWithVat", 0) AS "PriceWithVAT" + , COALESCE(s."SumWithVAT", 0) AS "SumWithVAT", COALESCE(s."VatSum", 0) AS "SumVAT", s."VatRate", p."FullName" + FROM contract."VLookupAdditionalContracts" AS p + JOIN contract."SpecificationForContract" AS s ON s."PCode" = p."VCode" + WHERE s."PCode" = ANY(_aspec) +) +INSERT INTO tmp_salespec_spec( + "Number", "SpecificationRowVCode", "SpecificationCodeSale", "SpecName", "MaterialId", "MeasureId", "Quantity", "PriceWithoutVAT", "PriceWithVAT" + , "SumWithoutVAT", "SumWithVAT", "SumVAT", "VATRateId", "SpecRemains" +) +SELECT ROW_NUMBER() OVER(PARTITION BY s."PCode" ORDER BY s."Number" ASC) AS "Number", s."VCode" AS "SpecificationRowVCode", s."PCode" AS "SpecificationCodeSale" + , s."FullName" AS "SpecName", s."MaterialLex" AS "MaterialId", s."MeasureName" AS "MeasureId", s."Quantity", s."PriceWithoutVAT", s."PriceWithVAT" + , s."SumWithoutVAT" - COALESCE(r."SumWithoutVAT", 0) AS "SumWithoutVAT", s."SumWithVAT" - COALESCE(r."SumWithVAT", 0) AS "SumWithVAT" + , s."SumVAT" - COALESCE(r."SumVAT", 0) AS "SumVAT", s."VatRate" AS "VATRateId", s."Quantity" - COALESCE(r."Quantity", 0) AS "SpecRemains" +FROM __spec AS s + LEFT JOIN LATERAL( + SELECT SUM(ROUND(COALESCE(m."MaterialLexQuantity"::numeric(25, 10), 0), _qtydigits)) AS "Quantity" + , SUM(COALESCE(m."SumWithoutVAT", 0)) AS "SumWithoutVAT" + , SUM(COALESCE(m."SumWithVAT", 0)) AS "SumWithVAT" + , SUM(COALESCE(m."SumVAT", 0)) AS "SumVAT" + FROM mm."InventoryControl" AS p + JOIN mm."InventoryControlDetail" AS m ON m."PCode" = p."VCode" + WHERE m."SpecificationRowVCode" IS NOT NULL + AND m."SpecificationRowVCode" = s."VCode" + AND p."TypeName" = _doctype + AND p."VCode" != _doccode + ) AS r ON true +WHERE s.id = 1; +-- }} Спецификации + +RETURN QUERY +SELECT/*1 */t."Number" +/*2 */, t."SpecificationRowVCode" +/*3 */, t."SpecificationCodeSale" +/*4 */, t."SpecName" +/*5 */, t."MaterialId" +/*6 */, t."MeasureId" +/*7 */, t."Quantity" +/*8 */, t."PriceWithoutVAT" +/*9 */, t."SumWithoutVAT" +/*10*/, t."PriceWithVAT" +/*11*/, t."SumWithVAT" +/*12*/, t."SumVAT" +/*13*/, t."VATRateId" +/*14*/, t."SpecRemains" +/*15*/, NULL::numeric(25, 10) AS "LeftQty" +/*16*/, mat."ShortName" AS "MaterialNm" +/*17*/, mat."VendorCode"::text AS "VendorCode" +/*18*/, ms."ShortName"::text AS "MeasureNm" +/*19*/, vr."Name"::text AS "VATRateNm" +/*20*/, vr."Rate"::numeric(19, 4) AS "Rate" +/*21*/, gr."VCode" AS "NomGroupId" +/*22*/, gr."Name" AS "NomGroupNm" +/*23*/, mat."ProductCode"::text AS "ProductCode" +/*24*/, array_length(_aspec, 1) AS "Cnt" +FROM tmp_salespec_spec AS t + LEFT JOIN comdoc."Material" AS mat ON mat."VCode" = t."MaterialId" + LEFT JOIN comdoc."Measure" AS ms ON ms."VCode" = t."MeasureId" + LEFT JOIN comdoc."VatRate" AS vr ON vr."VCode" = t."VATRateId" + LEFT JOIN comdoc."UniAnalyt" AS gr ON gr."VCode" = mat."MaterialGroup" +ORDER BY t."SpecificationCodeSale" ASC, t."Number" ASC; +RETURN; +END; +$BODY$; \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/pr.VPR_DocBank.sql b/docs/Lexema-HRM/sql запросы/pr.VPR_DocBank.sql new file mode 100644 index 0000000..58b035f --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/pr.VPR_DocBank.sql @@ -0,0 +1,61 @@ +CREATE OR REPLACE VIEW pr."VPR_DocBank" AS +SELECT b."VCode" + , b."NumDoc" + , b."DateDoc" + --, t."Name" + -- ||Coalesce(' № '||trim(b."NumDoc"), '') + -- ||Coalesce(' от '||date_part('day', b."DateDoc")||' '||comdoc."LexGetMonthNames"(b."DateDoc",2)||' '||date_part('year', b."DateDoc")||' г.', '') AS "NameDoc" + , pr."fnNameDoc2"(t."Name", b."NumDoc", b."DateDoc") AS "NameDoc" + , b."IdTypeDocStaff" + , b."IdPeriod" + , s."Name" AS "NmPeriod" + , b."IdTypeDocBank" + , t."Name" AS "NmTypeDocBank" + , b."IdDocProjects" + , p."NameDoc" AS "NmDocProjects" + , b."FlagApp" + , b."FlagAll" + , b."IdDepartment" + , d."Name" AS "Department" + , b."UserNameP" + , (SELECT x."LastName" || ' ' || Left(x."FirstName", 1) || '. ' || Coalesce(Left(x."MiddleName", 1) || '.', '') + FROM comdoc."DocflowUser" AS x + WHERE x."VCode" = b."UserNameP") AS "UserFNFP" + , b."IdWorkerHO" + , b."Note" + --, COALESCE((SELECT SUM(x."SumOut") FROM pr."PR_WorkerBank" AS x WHERE x."Pcode" = b."VCode"), 0) AS "DocOut" + --, COALESCE((SELECT SUM(x."SumColl") FROM pr."PR_WorkerBank" AS x WHERE x."Pcode" = b."VCode"), 0) AS "DocColl" + , v."DocOut" + , v."DocColl" + , b."RCode" + , (SELECT string_agg(coalesce(x."Name", '') || case when coalesce(x."FIO", '') = '' then '' else ' - ' || x."FIO" end, ',') + FROM (SELECT DISTINCT + w."NSNT" AS "Name" + , comdoc."IIF"(w."IdPerson" = r."IdPerson", '', f."FamilyNF") as "FIO" + FROM pr."VPR_WorkerBank" AS r + JOIN pr."VPR_Worker" w ON r."IdWorker" = w."VCode" + LEFT JOIN pr."VPR_Person" f ON r."IdPerson" = f."VCode" + WHERE r."Pcode" = b."VCode" + ORDER BY w."NSNT" + ) as x + ) AS "WorkersList" + , b."IdTypeIncomePaid" + , b."IdTypePaidUralSib" + , b."CDate", b."CHost", b."CUser", b."COrg" + , b."WDate", b."WHost", b."WUser", b."WOrg" + , p."IdTypeBankFile" + , p."NmBank" + FROM pr."PR_DocBank" AS b + LEFT JOIN pr."VPR_DocProjects" AS p ON b."IdDocProjects" = p."VCode" + LEFT JOIN pr."VTypeDocBank" AS t ON b."IdTypeDocBank" = t."VCode" + LEFT JOIN aw."VListPeriod" AS s ON b."IdPeriod" = s."VCode" + LEFT JOIN comdoc."Department" AS d ON b."IdDepartment" = d."VCode" + LEFT JOIN LATERAL (SELECT SUM(x."SumOut") as "DocOut" + , SUM(x."SumColl") as "DocColl" + FROM pr."PR_WorkerBank" AS x + WHERE x."Pcode" = b."VCode" + ) as v on true + ORDER BY b."DateDoc", b."NumDoc" +; + +-- select * from pr."VPR_DocBank" diff --git a/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployed.sql b/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployed.sql new file mode 100644 index 0000000..aae4a48 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployed.sql @@ -0,0 +1,30 @@ +CREATE OR REPLACE FUNCTION rp."fnNumberOfEmployed"( + "pSU" bigint DEFAULT 0, -- ид-р штатной единицы + "pDate" date DEFAULT CURRENT_DATE -- дата для определения кол-ва +) +--RETURNS integer +RETURNS numeric +LANGUAGE 'plpgsql' +COST 100 +VOLATILE PARALLEL UNSAFE +AS $BODY$ +-- ТОЛЬКО для ПОЛНЫХ кадров +-- Организация: ООО "Лексема", Дата: 20.05.2021, Автор: Ломанов С.Б. +-- выдать кол-во занятых штатных единиц pSU на дату pDate: +DECLARE _result numeric := 0; +BEGIN + IF "pSU" <> 0 THEN + _result := (select sum(wm."Rate") + from rp."fnWorkerMoveInPeriod"((extract(year from "pDate") * 10000 + extract(month from "pDate") * 100 + 31)::bigint, null::bigint, 0) as m -- актуальные перемещения сотрудников + left join rp."RP_WorkerMove" as wm on m."VCode" = wm."VCode" + where m."IdStaffUnit" = "pSU" + and comdoc."fnDateInPeriod"(coalesce("pDate", current_date), m."DateBeg", m."DateEnd") = 1 -- перемещение на зад.дату + ); + END IF; + RETURN _result; +END; +$BODY$; + +ALTER FUNCTION rp."fnNumberOfEmployed"(bigint, date) OWNER TO lib83; + +--select rp."fnNumberOfEmployed" (1, null::date) \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployedStaffList.sql b/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployedStaffList.sql new file mode 100644 index 0000000..24d0c45 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/rp.fnNumberOfEmployedStaffList.sql @@ -0,0 +1,29 @@ +CREATE OR REPLACE FUNCTION rp."fnNumberOfEmployedStaffList"( + "pSL" bigint -- ид-р строки штатного расписания +, "pDate" date -- дата для определения кол-ва +) +RETURNS numeric +LANGUAGE 'plpgsql' +COST 100 +VOLATILE PARALLEL UNSAFE +AS $BODY$ +-- ТОЛЬКО для ПОЛНЫХ кадров +-- Организация: ООО "Лексема", Дата: 04.07.2024, Автор: Ломанов С.Б. +-- выдать кол-во занятых позиций строки штатного расписания "pSL" на дату "pDate": +DECLARE _result numeric := 0; +BEGIN + IF coalesce("pSL", 0) <> 0 THEN + _result := (select sum(wm."Rate") + from rp."fnWorkerMoveInPeriod"((extract(year from "pDate") * 10000 + extract(month from "pDate") * 100 + 31)::bigint, null::bigint, 0) as m -- актуальные перемещения сотрудников + left join rp."RP_WorkerMove" as wm on m."VCode" = wm."VCode" + where wm."IdStaffList" = "pSL" + and comdoc."fnDateInPeriod"(coalesce("pDate", current_date), m."DateBeg", m."DateEnd") = 1 -- перемещение на зад.дату + ); + END IF; + RETURN _result; +END; +$BODY$; + +ALTER FUNCTION rp."fnNumberOfEmployedStaffList"(bigint, date) OWNER TO lib83; + +--select rp."fnNumberOfEmployedStaffList" (1, null::date) \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/sq.sql b/docs/Lexema-HRM/sql запросы/sq.sql new file mode 100644 index 0000000..56bae03 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/sq.sql @@ -0,0 +1,362 @@ +-- View: rp.VRP_WorkerSearching + +-- DROP VIEW rp."VRP_WorkerSearching"; + +CREATE OR REPLACE VIEW rp."VRP_WorkerSearching" + AS + WITH tabl("Filial", "Code21", "Code07", "Code92") AS ( + SELECT comdoc."getFilial"() AS "getFilial", + 21 AS "?column?", + 7 AS "?column?", + 92 AS "?column?" + ) + SELECT wm."VCode", + wm."Pcode", + wm."WCode", + wm."IdDepartment", + d."Name" AS "Department", + wm."IdPost", + ps."Name" AS "Post", + wm."IdTerritory", + t."Name" AS "Territory", + wm."DateBeg" AS "MoveBeg", + wm."DateEnd" AS "MoveEnd", + wm."IdStaffUnit", + wm."IdTypeWorkSched", + ctw."Name" AS "TypeWorkSched", + wm."IdWorkContract", + wc."Name" AS "WorkContract", + wm."IdTypeBasisDoc", + ctb."Name" AS "TypeBasisDoc", + wm."IdWorkKind", + cwk."Name" AS "WorkKind", + wm."IdOper1", + so1."Code" AS "CdOper1", + so1."Name" AS "NmOper1", + wm."IdOper2", + so2."Code" AS "CdOper2", + so2."Name" AS "NmOper2", + wm."IdTypeTrans", + ctt."Name" AS "TypeTrans", + wm."Probation", + wm."IdRank", + cr."Name" AS "Rank", + wm."IdSkill", + cs."Name" AS "Skill", + wm."Rate", + wm."NumBasis", + wm."DateBasis", + wm."FlagRec", + wm."IdOrderNext", + wm."DateEndDoc", + wm."FlagPay", + wm."CDate", + wm."CHost", + wm."CUser", + wm."COrg", + wm."WDate", + wm."WHost", + wm."WUser", + wm."WOrg", + wm."IdWorker", + w."NumTab", + w."NameShort", + w."NameFull", + btrim(w."NameShort"::text) || + CASE + WHEN w."NumTab" IS NOT NULL THEN (' (Таб. №'::text || btrim(w."NumTab"::text)) || ')'::text + ELSE ''::text + END AS "NSNT", + ((btrim(w."NameShort"::text) || + CASE + WHEN w."NumTab" IS NOT NULL THEN (' (Таб. №'::text || btrim(w."NumTab"::text)) || ')'::text + ELSE ''::text + END) || ' '::text) || ps."Name"::text AS "NSNTNP", + w."NumCard", + w."IdContractor", + c."Name" AS "Contractor", + w."IdTypeExec", + e."Name" AS "TypeExec", + w."IdAccount", + a."Name" AS "Account", + w."IdCostItems", + ep."Name" AS "CostItems", + w."IdProjects", + pj."Name" AS "Projects", + w."FlagProfs", + w."FlagMOL", + w."FlagCombi", + w."DateBeg", + w."DateEnd", + w."IdTypeUptime", + u."Name" AS "TypeUptime", + w."IdTypeWorkerStatus", + ws."Name" AS "TypeWorkerStatus", + w."Note", + w."OldVCode", + w."IdOrderHiring", + h."NameDoc" AS "OrderHiring", + w."IdOrderQuit", + q."NameDoc" AS "OrderQuit", + w."IdBank", + b."Name" AS "Bank", + w."IdNorm", + w."IdTogsSize", + w."IdTogsRise", + w."IdFootSize", + w."IdHeadSize", + w."IdMaskSize", + w."IdRespSize", + w."IdGlovSize", + w."IdMittSize", + w."IdPantSize", + sc."Size" AS "TogsSizeName", + sg."Size" AS "TogsRiseName", + sf."Size" AS "FootSizeName", + sh."Size" AS "HeadSizeName", + sm."Size" AS "MaskSizeName", + sr."Size" AS "RespSizeName", + sv."Size" AS "GlovSizeName", + st."Size" AS "MittSizeName", + sp."Size" AS "PantSizeName", + sf."Size" AS "FeltSizeName", + w."IdPerson", + p."Family", + p."Name", + p."Father", + p."FamilyNF", + (((p."Family"::text || ' '::text) || p."Name"::text) || ' '::text) || COALESCE(p."Father"::text, ''::text) AS "FIO", + p."DateBirth", + p."PlaceBirth", + p."INN", + p."SNILS", + p."Sex", + p."FNFAccusative", + p."FNFDative", + p."FNFGenitive", + p."NumPass", + p."IFNS", + i."Code" AS "CodeIFNS", + p."IdCitizenship", + cc."Name" AS "Citizenship", + cn."Name" AS "Nationality", + p."IdMaritalStatus", + cm."Name" AS "MaritalStatus", + p."IdProfession", + cp."Name" AS "Profession", + p."IdProfession2", + cp2."Name" AS "Profession2", + p."IdTypePerson", + ctp."Name" AS "TypePerson", + p."IdTaxPayCateg", + cpc."Name" AS "TaxPayCateg", + p."IdTaxPayStatus", + cps."Name" AS "TaxPayStatus", + floor(rp."fnPersonAge"(p."VCode", CURRENT_DATE)) AS "Age", + rp."fnPersonAddress"(p."VCode", 1, 0) AS "Addr1", + rp."fnPersonAddress"(p."VCode", 2, 0) AS "Addr2", + rp."fnPersonAddress"(p."VCode", 3, 0) AS "Addr3", + rp."fnPersonAddress"(p."VCode", 4, 0) AS "Addr4", + rp."fnPersonAddress"(p."VCode", 5, 0) AS "Addr5", + rp."fnPersonAddress"(p."VCode", 6, 0) AS "Addr6", + rp."fnPersonAddress"(p."VCode", 7, 0) AS "Addr7", + rp."fnPersonCertificate"(p."VCode", tabl."Code21"::bigint, 0, CURRENT_DATE) AS "Pasp", + rp."fnPersonContact"(p."VCode", 1) AS "Cont1", + rp."fnPersonContact"(p."VCode", 2) AS "Cont2", + rp."fnPersonContact"(p."VCode", 3) AS "Cont3", + rp."fnPersonContact"(p."VCode", 4) AS "Cont4", + rp."fnPersonContact"(p."VCode", 5) AS "Cont5", + rp."fnPersonContact"(p."VCode", 6) AS "Cont6", + rp."fnPersonContact"(p."VCode", 7) AS "Cont7", + rp."fnPersonEducation"(p."VCode", 0, 0) AS "Educ0", + rp."fnPersonEducation"(p."VCode", 0, 2) AS "Educ001", + rp."fnPersonEducation"(p."VCode", 0, 3) AS "Educ002", + rp."fnPersonEducation"(p."VCode", 0, 4) AS "Educ003", + rp."fnPersonEducation"(p."VCode", 0, 5) AS "Educ004", + rp."fnPersonEducation"(p."VCode", 0, 6) AS "Educ005", + rp."fnPersonEducation"(p."VCode", 0, 7) AS "Educ006", + rp."fnPersonEducation"(p."VCode", 0, 8) AS "Educ007", + rp."fnPersonEducation"(p."VCode", 0, 9) AS "Educ008", + rp."fnPersonEducation"(p."VCode", 0, 10) AS "Educ009", + rp."fnPersonEducation"(p."VCode", 0, 11) AS "Educ010", + rp."fnPersonEducation"(p."VCode", 0, 12) AS "Educ011", + rp."fnPersonEducation"(p."VCode", 0, 0) AS "Educ012", + rp."fnPersonEducation"(p."VCode", 1, 0) AS "Educ1", + rp."fnPersonEducation"(p."VCode", 1, 2) AS "Educ101", + rp."fnPersonEducation"(p."VCode", 1, 3) AS "Educ102", + rp."fnPersonEducation"(p."VCode", 1, 4) AS "Educ103", + rp."fnPersonEducation"(p."VCode", 1, 5) AS "Educ104", + rp."fnPersonEducation"(p."VCode", 1, 6) AS "Educ105", + rp."fnPersonEducation"(p."VCode", 1, 7) AS "Educ106", + rp."fnPersonEducation"(p."VCode", 1, 8) AS "Educ107", + rp."fnPersonEducation"(p."VCode", 1, 9) AS "Educ108", + rp."fnPersonEducation"(p."VCode", 1, 10) AS "Educ109", + rp."fnPersonEducation"(p."VCode", 1, 11) AS "Educ110", + rp."fnPersonEducation"(p."VCode", 1, 12) AS "Educ111", + rp."fnPersonEducation"(p."VCode", 1, 0) AS "Educ112", + rp."fnPersonLanguage"(p."VCode", 0, 0) AS "Langs", + rp."fnPersonLanguage"(p."VCode", 1, 0) AS "Lang1", + rp."fnPersonLanguage"(p."VCode", 2, 0) AS "Lang2", + rp."fnPersonFamily"(p."VCode", 0) AS "Famils", + rp."fnPersonScience"(p."VCode", 0, 0) AS "ScDegr", + rp."fnPersonScience"(p."VCode", 0, 1) AS "ScDegr1", + rp."fnPersonScience"(p."VCode", 0, 2) AS "ScDegr2", + rp."fnPersonScience"(p."VCode", 0, 3) AS "ScDegr3", + rp."fnPersonScience"(p."VCode", 0, 4) AS "ScDegr4", + rp."fnPersonScience"(p."VCode", 0, 5) AS "ScDegr5", + rp."fnPersonScience"(p."VCode", 1, 0) AS "ScRank", + rp."fnPersonScience"(p."VCode", 1, 1) AS "ScRank1", + rp."fnPersonScience"(p."VCode", 1, 2) AS "ScRank2", + rp."fnPersonScience"(p."VCode", 1, 3) AS "ScRank3", + rp."fnPersonScience"(p."VCode", 1, 4) AS "ScRank4", + rp."fnPersonDisable"(p."VCode", 0) AS "Disable", + rp."fnPersonDisable"(p."VCode", 1) AS "Disable0", + rp."fnPersonDisable"(p."VCode", 2) AS "Disable1", + rp."fnPersonDisable"(p."VCode", 3) AS "Disable2", + rp."fnPersonDisable"(p."VCode", 4) AS "Disable3", + rp."fnPersonDisable"(p."VCode", 5) AS "Disable4", + rp."fnPersonDisable"(p."VCode", 6) AS "Disable5", + rp."fnPersonDisable"(p."VCode", 7) AS "Disable6", + rp."fnPersonDisable"(p."VCode", 8) AS "Disable7", + rp."fnPersonAccount"(p."VCode") AS "AccBank", + rp."fnPersonCertificate"(p."VCode", tabl."Code07"::bigint, 0, CURRENT_DATE) AS "Bilet1", + rp."fnPersonCertificate"(p."VCode", tabl."Code92"::bigint, 0, CURRENT_DATE) AS "Bilet0", + rp."fnPersonCertificateVU"(p."VCode", tabl."Code07"::bigint, 0, CURRENT_DATE, tabl."Code92"::bigint) AS "Bilet", + rp."fnPersonMilitary"(p."VCode", 0) AS "Milit0", + rp."fnPersonMilitary"(p."VCode", 1) AS "Milit1", + rp."fnPersonMilitary"(p."VCode", 2) AS "Milit2", + rp."fnPersonMilitary"(p."VCode", 3) AS "Milit3", + rp."fnPersonMilitary"(p."VCode", 4) AS "Milit4", + rp."fnPersonMilitary"(p."VCode", 5) AS "Milit5", + rp."fnPersonMilitary"(p."VCode", 6) AS "Milit6", + rp."fnPersonMilitary"(p."VCode", 7) AS "Milit7", + rp."fnPersonMilitary"(p."VCode", 8) AS "Milit8", + rp."fnPersonMilitary"(p."VCode", 9) AS "Milit9", + rp."fnPersonMilitary"(p."VCode", 10) AS "Milit10", + rp."fnPersonMilitary"(p."VCode", 11) AS "Milit11", + rp."fnPersonMilitary"(p."VCode", 12) AS "Milit12", + rp."fnPersonMilitary"(p."VCode", 13) AS "Milit13", + rp."fnPersonMilitary"(p."VCode", 14) AS "Milit14", + rp."fnPersonMilitary"(p."VCode", 15) AS "Milit15", + rp."fnPersonMilitary"(p."VCode", 16) AS "Milit16", + rp."fnPersonMilitary"(p."VCode", 17) AS "Milit17", + rp."fnPersonMilitary"(p."VCode", 24) AS "Milit24", + rp."fnPersonMilitary"(p."VCode", 25) AS "Milit25", + rp."fnPersonMilitary"(p."VCode", 27) AS "Milit27", + rp."fnWorkerExperience"(w."VCode", 0, NULL::date) AS "Exper0", + rp."fnWorkerExperience"(w."VCode", 1, NULL::date) AS "Exper1", + rp."fnWorkerExperience"(w."VCode", 2, NULL::date) AS "Exper2", + rp."fnWorkerExperience"(w."VCode", 3, NULL::date) AS "Exper3", + rp."fnWorkerSizes"(w."VCode") AS "Sizes", + ( SELECT sum("fnUseVacationDaysWorkingPeriods"."DaysLeft") AS sum + FROM rp."fnUseVacationDaysWorkingPeriods"(w."VCode", CURRENT_DATE, 1) "fnUseVacationDaysWorkingPeriods"("DateBeg", "DateEnd", "DaysNotw", "DaysAdm", "DaysBase", "DaysUsed", "DaysLeft", "DaysUS", "DaysLF", "ListHoly", "ListDocs", "DaysUSD")) AS "UnVac", + rp."fnWorkerRating"(w."VCode", 0) AS "Rating", + rp."fnWorkerRating"(w."VCode", 1) AS "Rating1", + rp."fnWorkerRating"(w."VCode", 2) AS "Rating2", + rp."fnWorkerRating"(w."VCode", 3) AS "Rating3", + rp."fnWorkerRating"(w."VCode", 4) AS "Rating4", + rp."fnWorkerRating"(w."VCode", 5) AS "Rating5", + rp."fnWorkerSkill"(w."VCode", 0) AS "Skills", + rp."fnWorkerSkill"(w."VCode", 1) AS "Skills1", + rp."fnWorkerSkill"(w."VCode", 2) AS "Skills2", + rp."fnWorkerSkill"(w."VCode", 3) AS "Skills3", + rp."fnWorkerSkill"(w."VCode", 4) AS "Skills4", + rp."fnWorkerSkill"(w."VCode", 5) AS "Skills5", + rp."fnWorkerSkill"(w."VCode", 6) AS "Skills6", + rp."fnWorkerSkill"(w."VCode", 7) AS "Skills7", + rp."fnWorkerSkill"(w."VCode", 8) AS "Skills8", + rp."fnWorkerSkill"(w."VCode", 9) AS "Skills9", + rp."fnWorkerSkill"(w."VCode", 10) AS "Skills10", + rp."fnWorkerRetrain"(w."VCode", 0) AS "Retrain", + rp."fnWorkerRetrain"(w."VCode", 1) AS "Retrain1", + rp."fnWorkerRetrain"(w."VCode", 2) AS "Retrain2", + rp."fnWorkerRetrain"(w."VCode", 3) AS "Retrain3", + rp."fnWorkerRetrain"(w."VCode", 4) AS "Retrain4", + rp."fnWorkerRetrain"(w."VCode", 5) AS "Retrain5", + rp."fnWorkerRetrain"(w."VCode", 6) AS "Retrain6", + rp."fnWorkerRetrain"(w."VCode", 7) AS "Retrain7", + rp."fnWorkerRetrain"(w."VCode", 8) AS "Retrain8", + rp."fnWorkerReward"(w."VCode", 0) AS "Rewards", + rp."fnWorkerExecution"(w."VCode", 0) AS "Executs", + CASE + WHEN wa."VCode" IS NOT NULL AND da."TypeName"::text = 'Base.RP_OrderAdmin'::text THEN concat(vtw."Name", ', с ', date_part('day'::text, wa."DateBeg"), ' ', comdoc."LexGetMonthName"(wa."DateBeg"), ' ', date_part('year'::text, wa."DateBeg"), ' по ', date_part('day'::text, wa."DateEnd"), ' ', comdoc."LexGetMonthName"(wa."DateEnd"), ' ', date_part('year'::text, wa."DateEnd")) + ELSE ''::text + END AS "VacAdmin", + CASE + WHEN wa."VCode" IS NOT NULL AND da."TypeName"::text = 'Base.RP_ChildcareAllowance'::text THEN concat(vtw."Name", ', с ', date_part('day'::text, wa."DateBeg"), ' ', comdoc."LexGetMonthName"(wa."DateBeg"), ' ', date_part('year'::text, wa."DateBeg"), ' по ', date_part('day'::text, wa."DateEnd"), ' ', comdoc."LexGetMonthName"(wa."DateEnd"), ' ', date_part('year'::text, wa."DateEnd")) + ELSE ''::text + END AS "Childcare", + cpct."Name" AS "PostCategory", + h."DateBeg" AS "DateBegHiring", + h."DateEnd" AS "DateEndHiring", + wm."DateBegPrev", + wm."DepartmentPrev", + wm."PostPrev", + wm."TerritoryPrev", + ccwc."Name" AS "ClassWorkCondition", + cswc."Name" AS "SpecialWorkCondition", + wa."DateBeg" AS "DateBegAbsence", + wa."DateEnd" AS "DateEndAbsence", + vtd."Name" AS "TypeDisability", + vttw."Name" AS "TypeAdminAbsence" + FROM rp."VRP_WorkerMove" wm + JOIN rp."RP_DocMove" dm ON dm."VCode" = wm."Pcode" + JOIN rp."RP_Worker" w ON w."VCode" = wm."IdWorker" + LEFT JOIN rp."RP_Person" p ON p."VCode" = w."IdPerson" + LEFT JOIN comdoc."Department" d ON d."VCode" = wm."IdDepartment" + LEFT JOIN rp."RP_Post" ps ON ps."VCode" = wm."IdPost" + LEFT JOIN rp."RP_Territory" t ON t."VCode" = wm."IdTerritory" + LEFT JOIN rp."VRP_WorkContract" wc ON wc."VCode" = wm."IdWorkContract" + LEFT JOIN rp."RP_Catalog" cwk ON cwk."VCode" = wm."IdWorkKind" + LEFT JOIN rp."RP_Catalog" ctw ON ctw."VCode" = wm."IdTypeWorkSched" + LEFT JOIN rp."RP_Catalog" ctb ON ctb."VCode" = wm."IdTypeBasisDoc" + LEFT JOIN rp."RP_Catalog" ctt ON ctt."VCode" = wm."IdTypeTrans" + LEFT JOIN rp."RP_Catalog" cr ON cr."VCode" = wm."IdRank" + LEFT JOIN rp."RP_Catalog" cs ON cs."VCode" = wm."IdSkill" + LEFT JOIN rp."RP_Catalog" cpct ON cpct."VCode" = ps."IdPostCategory" + LEFT JOIN pr."PR_SprOper" so1 ON so1."VCode" = wm."IdOper1" + LEFT JOIN pr."PR_SprOper" so2 ON so2."VCode" = wm."IdOper2" + LEFT JOIN rp."RP_StaffUnit" su ON su."VCode" = wm."IdStaffUnit" + LEFT JOIN rp."VClassWorkCond" ccwc ON ccwc."VCode" = su."IdClassWorkCond" + LEFT JOIN rp."VSpecialWorkCond" cswc ON cswc."VCode" = su."IdSpecialWorkCond" + LEFT JOIN rp."RP_Organization" c ON c."VCode" = w."IdContractor" + LEFT JOIN comdoc."Bank" b ON b."VCode" = w."IdBank" + LEFT JOIN acc."Account" a ON a."VCode" = w."IdAccount" + LEFT JOIN acc."Expenses" ep ON ep."VCode" = w."IdCostItems" + LEFT JOIN comdoc."Projects" pj ON pj."VCode" = w."IdProjects" + LEFT JOIN rp."VTypeWorkerStatus" ws ON ws."VCode" = w."IdTypeWorkerStatus" + LEFT JOIN rp."VTypeExecutors" e ON e."VCode" = w."IdTypeExec" + LEFT JOIN rp."VTypeUptime" u ON u."VCode" = w."IdTypeUptime" + LEFT JOIN rp."VRP_DocMove" h ON h."VCode" = w."IdOrderHiring" + LEFT JOIN rp."VRP_DocMove" q ON q."VCode" = w."IdOrderQuit" + LEFT JOIN mm."SO_SprSize" sc ON sc."VCode" = w."IdTogsSize" + LEFT JOIN mm."SO_SprSize" sg ON sg."VCode" = w."IdTogsRise" + LEFT JOIN mm."SO_SprSize" sf ON sf."VCode" = w."IdFootSize" + LEFT JOIN mm."SO_SprSize" sh ON sh."VCode" = w."IdHeadSize" + LEFT JOIN mm."SO_SprSize" sm ON sm."VCode" = w."IdMaskSize" + LEFT JOIN mm."SO_SprSize" sr ON sr."VCode" = w."IdRespSize" + LEFT JOIN mm."SO_SprSize" sv ON sv."VCode" = w."IdGlovSize" + LEFT JOIN mm."SO_SprSize" st ON st."VCode" = w."IdMittSize" + LEFT JOIN mm."SO_SprSize" sp ON sp."VCode" = w."IdPantSize" + LEFT JOIN aw."RP_WorkerAbsence" wa ON wa."IdWorker" = w."VCode" + JOIN aw."VTypeDisability" vtd ON vtd."VCode" = wa."IdTypeDisability" + JOIN aw."VTypeTimeWork" vttw ON vttw."VCode" = wa."IdTypePer" + LEFT JOIN comdoc."TaxInspection" i ON i."VCode" = p."IFNS" + LEFT JOIN rp."RP_Catalog" cc ON cr."VCode" = p."IdCitizenship" + LEFT JOIN rp."RP_Catalog" cn ON cs."VCode" = p."IdNationality" + LEFT JOIN rp."RP_Catalog" cm ON cs."VCode" = p."IdMaritalStatus" + LEFT JOIN rp."RP_Catalog" cp ON cp."VCode" = p."IdProfession" + LEFT JOIN rp."RP_Catalog" cp2 ON cp2."VCode" = p."IdProfession2" + LEFT JOIN rp."RP_Catalog" ctp ON ctp."VCode" = p."IdTypePerson" + LEFT JOIN rp."RP_Catalog" cpc ON cpc."VCode" = p."IdTaxPayCateg" + LEFT JOIN rp."RP_Catalog" cps ON cps."VCode" = p."IdTaxPayStatus" + LEFT JOIN aw."RP_WorkerAbsence" wab ON wab."IdWorker" = wm."IdWorker" + LEFT JOIN aw."RP_DocAbsence" dac ON wm."IdWorker" = dac."IdWorkerHO" + LEFT JOIN aw."VTypeTimeWork" vtw ON wab."IdTypePer" = vtw."VCode" + LEFT JOIN aw."RP_DocAbsence" da ON da."VCode" = wab."Pcode", + tabl + WHERE (wm."COrg" = tabl."Filial" OR tabl."Filial" < 1) AND dm."FlagApp" = true AND wm."FlagRec" <> 2; + +ALTER TABLE rp."VRP_WorkerSearching" + OWNER TO lib83; + diff --git a/docs/Lexema-HRM/sql запросы/zapros.sql b/docs/Lexema-HRM/sql запросы/zapros.sql new file mode 100644 index 0000000..3bfe784 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/zapros.sql @@ -0,0 +1,415 @@ +-- drop view rp."VRP_WorkerSearching" +CREATE OR REPLACE VIEW rp."VRP_WorkerSearching" AS +-- выбрать все актуальные перемещения сотрудников организации, исключая по неподписанным документам +-- или ошибочные (недействительные ключи у приказов, сотрудников и физ. лиц). +-- добавляя поля из сотрудников, ф/л и др. таблиц +-- далее: +-- - если выбрать из этой вьюшки информацию на дату - тогда будет список работающих на дату с доп.инфой по сотруднику или ф/л +-- - если выбрать за период, то будет список всех назначенний с доп. инфой по сотруднику или ф/л +with tabl ("Filial", "Code21", "Code07", "Code92") AS + --(SELECT comdoc."getFilial"(), c."VCode" FROM rp."RP_Catalog" c WHERE c."TypeName"::text = 'Base.RP_TypeCertificate'::text and c."Code"::int = 21::int + (select comdoc."getFilial"(), 21, 7, 92) -- 21 код ИФНС для паспорта РФ, 07 - военный билет, 92 - приписное свид, 100 В/Б игаче П/С +-- WorkerMove +SELECT WM."VCode", + WM."Pcode", + WM."WCode", + + WM."IdDepartment", + D."Name" AS "Department", + WM."IdPost", + PS."Name" AS "Post", + WM."IdTerritory", + T."Name" AS "Territory", + WM."DateBeg" AS "MoveBeg", + WM."DateEnd" AS "MoveEnd", + + WM."IdStaffUnit", + WM."IdTypeWorkSched", + CTW."Name" AS "TypeWorkSched", + WM."IdWorkContract", + WC."Name" AS "WorkContract", + WM."IdTypeBasisDoc", + CTB."Name" AS "TypeBasisDoc", + WM."IdWorkKind", + CWK."Name" AS "WorkKind", + + WM."IdOper1", + SO1."Code" AS "CdOper1", + SO1."Name" AS "NmOper1", + WM."IdOper2", + SO2."Code" AS "CdOper2", + SO2."Name" AS "NmOper2", + --WM."SumOper1", + --WM."SumOper2", + WM."IdTypeTrans", + CTT."Name" AS "TypeTrans", + WM."Probation", + WM."IdRank", + CR."Name" AS "Rank", + WM."IdSkill", + CS."Name" AS "Skill", + WM."Rate", + WM."NumBasis", + WM."DateBasis", + WM."FlagRec", + WM."IdOrderNext", + WM."DateEndDoc", + WM."FlagPay", + WM."CDate", WM."CHost", WM."CUser", WM."COrg", + WM."WDate", WM."WHost", WM."WUser", WM."WOrg", + + WM."IdWorker", +-- Worker + W."NumTab", + W."NameShort", + W."NameFull", + btrim(W."NameShort"::text) || + CASE WHEN W."NumTab" IS NOT NULL + THEN (' (Таб. №'::text || btrim(W."NumTab"::text)) || ')'::text + ELSE ''::text + END AS "NSNT", + btrim(W."NameShort"::text) || + CASE WHEN W."NumTab" IS NOT NULL + THEN (' (Таб. №'::text || btrim(W."NumTab"::text)) || ')'::text + ELSE ''::text + END || ' '::text || PS."Name"::text AS "NSNTNP", + W."NumCard", + W."IdContractor", + C."Name" AS "Contractor", + W."IdTypeExec", + E."Name" AS "TypeExec", + W."IdAccount", + A."Name" AS "Account", + W."IdCostItems", + EP."Name" AS "CostItems", + W."IdProjects", + PJ."Name" AS "Projects", + W."FlagProfs", + W."FlagMOL", + W."FlagCombi", + W."DateBeg", + W."DateEnd", + W."IdTypeUptime", + U."Name" AS "TypeUptime", + W."IdTypeWorkerStatus", + WS."Name" AS "TypeWorkerStatus", + W."Note", + W."OldVCode", + W."IdOrderHiring", + H."NameDoc" AS "OrderHiring", + W."IdOrderQuit", + Q."NameDoc" AS "OrderQuit", + W."IdBank", + B."Name" AS "Bank", + W."IdNorm", + W."IdTogsSize", + W."IdTogsRise", + W."IdFootSize", + W."IdHeadSize", + W."IdMaskSize", + W."IdRespSize", + W."IdGlovSize", + W."IdMittSize", + W."IdPantSize", + + SC."Size" AS "TogsSizeName", + SG."Size" AS "TogsRiseName", + SF."Size" AS "FootSizeName", + SH."Size" AS "HeadSizeName", + SM."Size" AS "MaskSizeName", + SR."Size" AS "RespSizeName", + SV."Size" AS "GlovSizeName", + ST."Size" AS "MittSizeName", + SP."Size" AS "PantSizeName", + SF."Size" AS "FeltSizeName", + W."IdPerson", +-- Person + P."Family", + P."Name", + P."Father", + P."FamilyNF", +--P.FIO, + P."Family"::text || ' '::text || P."Name"::text || ' '::text || coalesce(P."Father"::text, ''::text) AS "FIO", + P."DateBirth", + P."PlaceBirth", + P."INN", + P."SNILS", + P."Sex", + P."FNFAccusative", + P."FNFDative", + P."FNFGenitive", + P."NumPass", + P."IFNS", + I."Code" AS "CodeIFNS", -- код ИФНС + P."IdCitizenship", + CC."Name" AS "Citizenship", +-- P."Idnationality", + CN."Name" AS "Nationality", + P."IdMaritalStatus", + CM."Name" AS "MaritalStatus", + P."IdProfession", + CP."Name" AS "Profession", + P."IdProfession2", + CP2."Name" AS "Profession2", + P."IdTypePerson", + CTP."Name" AS "TypePerson", + P."IdTaxPayCateg", + CPC."Name" AS "TaxPayCateg", + P."IdTaxPayStatus", + CPS."Name" AS "TaxPayStatus", + + floor(rp."fnPersonAge"(P."VCode", current_date)) as "Age", -- Возраст (лет) + + rp."fnPersonAddress"(P."VCode", 1, 0) AS "Addr1", -- Адрес места рождения + rp."fnPersonAddress"(P."VCode", 2, 0) AS "Addr2", -- Адрес места жительства + rp."fnPersonAddress"(P."VCode", 3, 0) AS "Addr3", -- Адрес места пребывания + rp."fnPersonAddress"(P."VCode", 4, 0) AS "Addr4", -- Адрес места регистрации (прописки) + rp."fnPersonAddress"(P."VCode", 5, 0) AS "Addr5", -- Адрес для информирования физ.лица + rp."fnPersonAddress"(P."VCode", 6, 0) AS "Addr6", -- Адрес за пределами РФ + rp."fnPersonAddress"(P."VCode", 7, 0) AS "Addr7", -- Адрес места государственной регистрации юр.лица + + rp."fnPersonCertificate"(P."VCode",tabl."Code21"::bigint,0,current_date) AS "Pasp", -- документ + + rp."fnPersonContact"(P."VCode", 1) AS "Cont1", -- Телефон мобильный + rp."fnPersonContact"(P."VCode", 2) AS "Cont2", -- Телефон служебный + rp."fnPersonContact"(P."VCode", 3) AS "Cont3", -- Телефон домашний + rp."fnPersonContact"(P."VCode", 4) AS "Cont4", -- Адрес электронной почты + rp."fnPersonContact"(P."VCode", 5) AS "Cont5", -- Факс + rp."fnPersonContact"(P."VCode", 6) AS "Cont6", -- Логин + rp."fnPersonContact"(P."VCode", 7) AS "Cont7", -- Телефон внутренний + + rp."fnPersonEducation"(P."VCode", 0, 0) AS "Educ0", -- последнее основное образование + rp."fnPersonEducation"(P."VCode", 0, 2) AS "Educ001", -- ОКИН, + rp."fnPersonEducation"(P."VCode", 0, 3) AS "Educ002", -- код (VCode) + rp."fnPersonEducation"(P."VCode", 0, 4) AS "Educ003", -- вид док + rp."fnPersonEducation"(P."VCode", 0, 5) AS "Educ004", -- серия + rp."fnPersonEducation"(P."VCode", 0, 6) AS "Educ005", -- номер + rp."fnPersonEducation"(P."VCode", 0, 7) AS "Educ006", -- дата + rp."fnPersonEducation"(P."VCode", 0, 8) AS "Educ007", -- кем (учр) + rp."fnPersonEducation"(P."VCode", 0, 9) AS "Educ008", -- год + rp."fnPersonEducation"(P."VCode", 0,10) AS "Educ009", -- спец + rp."fnPersonEducation"(P."VCode", 0,11) AS "Educ010", -- квал + rp."fnPersonEducation"(P."VCode", 0,12) AS "Educ011", -- примечание + rp."fnPersonEducation"(P."VCode", 0, 0) AS "Educ012", -- вид док.+серия+номер+выдан... + rp."fnPersonEducation"(P."VCode", 1, 0) AS "Educ1", -- последнее професс. образование + rp."fnPersonEducation"(P."VCode", 1, 2) AS "Educ101", -- ОКИН, + rp."fnPersonEducation"(P."VCode", 1, 3) AS "Educ102", -- код (VCode) + rp."fnPersonEducation"(P."VCode", 1, 4) AS "Educ103", -- вид док + rp."fnPersonEducation"(P."VCode", 1, 5) AS "Educ104", -- серия + rp."fnPersonEducation"(P."VCode", 1, 6) AS "Educ105", -- номер + rp."fnPersonEducation"(P."VCode", 1, 7) AS "Educ106", -- дата + rp."fnPersonEducation"(P."VCode", 1, 8) AS "Educ107", -- кем (учр) + rp."fnPersonEducation"(P."VCode", 1, 9) AS "Educ108", -- год + rp."fnPersonEducation"(P."VCode", 1,10) AS "Educ109", -- спец + rp."fnPersonEducation"(P."VCode", 1,11) AS "Educ110", -- квал + rp."fnPersonEducation"(P."VCode", 1,12) AS "Educ111", -- примечание + rp."fnPersonEducation"(P."VCode", 1, 0) AS "Educ112", -- вид док.+серия+номер+выдан... + + rp."fnPersonLanguage"(P."VCode", 0, 0) AS "Langs", -- все языки со степенью знания + rp."fnPersonLanguage"(P."VCode", 1, 0) AS "Lang1", -- язык 1 со степенью знания + rp."fnPersonLanguage"(P."VCode", 2, 0) AS "Lang2", -- язык 2 со степенью знания + + rp."fnPersonFamily"(P."VCode", 0) AS "Famils", -- семья - список всех (полный состав) + + rp."fnPersonScience"(P."VCode", 0, 0) AS "ScDegr", -- уч.ст - посл. по дате + rp."fnPersonScience"(P."VCode", 0, 1) AS "ScDegr1", -- ОКИН - посл. по дате + rp."fnPersonScience"(P."VCode", 0, 2) AS "ScDegr2", -- отрасль науки - посл. по дате + rp."fnPersonScience"(P."VCode", 0, 3) AS "ScDegr3", -- дата присуждения - посл. по дате + rp."fnPersonScience"(P."VCode", 0, 4) AS "ScDegr4", -- номер документа - посл. по дате + rp."fnPersonScience"(P."VCode", 0, 5) AS "ScDegr5", -- полное наименование степени - посл. по дате + + rp."fnPersonScience"(P."VCode", 1, 0) AS "ScRank", -- уч.зв - посл. по дате + rp."fnPersonScience"(P."VCode", 1, 1) AS "ScRank1", -- ОКИН - посл. по дате + rp."fnPersonScience"(P."VCode", 1, 2) AS "ScRank2", -- специальность - посл. по дате + rp."fnPersonScience"(P."VCode", 1, 3) AS "ScRank3", -- дата присвоения - посл. по дате + rp."fnPersonScience"(P."VCode", 1, 4) AS "ScRank4", -- номер документа - посл. по дате + + rp."fnPersonDisable"(P."VCode", 0) AS "Disable", -- особая кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 1) AS "Disable0", -- вид особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 2) AS "Disable1", -- серия док. особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 3) AS "Disable2", -- № док. особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 4) AS "Disable3", -- датв выдачи док. особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 5) AS "Disable4", -- период действия: начало особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 6) AS "Disable5", -- период действия: оконч особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 7) AS "Disable6", -- период действия особой кат - посл. по пер + rp."fnPersonDisable"(P."VCode", 8) AS "Disable7", -- примечание особой кат - посл. по пер + + rp."fnPersonAccount"(P."VCode") AS "AccBank", -- счета - один по умолчанию + + rp."fnPersonCertificate"(P."VCode", tabl."Code07", 0, current_date) AS "Bilet1", -- документ В/Б + rp."fnPersonCertificate"(P."VCode", tabl."Code92", 0, current_date) AS "Bilet0", -- документ П/С + rp."fnPersonCertificateVU"(P."VCode", tabl."Code07", 0, current_date, tabl."Code92") AS "Bilet", -- документ В/Б (если нет, то П/С) + + rp."fnPersonMilitary"(P."VCode", 0) AS "Milit0", -- в/у все сведения + rp."fnPersonMilitary"(P."VCode", 1) AS "Milit1", -- в/у сведения + rp."fnPersonMilitary"(P."VCode", 2) AS "Milit2", -- в/у запас + rp."fnPersonMilitary"(P."VCode", 3) AS "Milit3", -- Дата начала действия записи учета + rp."fnPersonMilitary"(P."VCode", 4) AS "Milit4", -- Вид воинской обязанности + rp."fnPersonMilitary"(P."VCode", 5) AS "Milit5", -- Воинское звание + rp."fnPersonMilitary"(P."VCode", 6) AS "Milit6", -- Состав + rp."fnPersonMilitary"(P."VCode", 7) AS "Milit7", -- Категория годности к ВС + rp."fnPersonMilitary"(P."VCode", 8) AS "Milit8", -- Категория запаса + rp."fnPersonMilitary"(P."VCode", 9) AS "Milit9", -- Состав (профиль) + rp."fnPersonMilitary"(P."VCode",10) AS "Milit10", -- Группа учета (запас) + rp."fnPersonMilitary"(P."VCode",11) AS "Milit11", -- Отношение к ВУ + rp."fnPersonMilitary"(P."VCode",12) AS "Milit12", -- ВУС + rp."fnPersonMilitary"(P."VCode",13) AS "Milit13", -- Наличие МП + rp."fnPersonMilitary"(P."VCode",14) AS "Milit14", -- № команды + rp."fnPersonMilitary"(P."VCode",15) AS "Milit15", -- Военный комиссариат + rp."fnPersonMilitary"(P."VCode",16) AS "Milit16", -- Организация, выд.бронь + rp."fnPersonMilitary"(P."VCode",17) AS "Milit17", -- Служил/не служил + rp."fnPersonMilitary"(P."VCode",24) AS "Milit24", -- Вид воинской обязанности: Код + rp."fnPersonMilitary"(P."VCode",25) AS "Milit25", -- Воинское звание: Код + --rp."fnPersonMilitary"(P."VCode",26) AS "Milit26", -- Состав: Код + rp."fnPersonMilitary"(P."VCode",27) AS "Milit27", -- Категория годности к ВС: Код + --rp."fnPersonMilitary"(P."VCode",28) AS "Milit28", -- Категория запаса: Код + --rp."fnPersonMilitary"(P."VCode",29) AS "Milit29", -- Состав (профиль): Код + --rp."fnPersonMilitary"(P."VCode",30) AS "Milit30", -- Группа учета (запас): Код + --rp."fnPersonMilitary"(P."VCode",31) AS "Milit31", -- Отношение к ВУ: Код + +-- по сотр: + rp."fnWorkerExperience"(W."VCode", 0, NULL) AS "Exper0", -- стаж на предпр + rp."fnWorkerExperience"(W."VCode", 1, NULL) AS "Exper1", -- стаж общий + rp."fnWorkerExperience"(W."VCode", 2, NULL) AS "Exper2", -- стаж непрер + rp."fnWorkerExperience"(W."VCode", 3, NULL) AS "Exper3", -- стаж на высл + + rp."fnWorkerSizes"(W."VCode") AS "Sizes", -- размеры спецодежды + + --(SELECT SUM("DaysLeft") FROM rp."fnUseVacationDaysWorkingPeriods"(W."VCode")) AS "UnVac", -- неиспользованных дней отпуска + 0.00 AS "UnVac", -- неиспользованных дней отпуска + rp."fnWorkerRating"(W."VCode", 0) AS "Rating", -- атт. посл по дате + rp."fnWorkerRating"(W."VCode", 1) AS "Rating1", -- дата атт. посл по дате + rp."fnWorkerRating"(W."VCode", 2) AS "Rating2", -- Номер протокола атт. посл по дате + rp."fnWorkerRating"(W."VCode", 3) AS "Rating3", -- Дата протокола атт. посл по дате + rp."fnWorkerRating"(W."VCode", 4) AS "Rating4", -- Решение атт. посл по дате + rp."fnWorkerRating"(W."VCode", 5) AS "Rating5", -- Основание атт. посл по дате + + rp."fnWorkerSkill"(W."VCode", 0) AS "Skills", -- кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 1) AS "Skills1", -- вид кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 2) AS "Skills2", -- период обучения: начало кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 3) AS "Skills3", -- период обучения: конец кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 4) AS "Skills4", -- период обучения прописью кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 5) AS "Skills5", -- вид док кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 6) AS "Skills6", -- серия кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 7) AS "Skills7", -- № док кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 8) AS "Skills8", -- дата кв. посл по пер + rp."fnWorkerSkill"(W."VCode", 9) AS "Skills9", -- учр кв. посл по пер + rp."fnWorkerSkill"(W."VCode",10) AS "Skills10", -- основание кв. посл по пер + + rp."fnWorkerRetrain"(W."VCode", 0) AS "Retrain", -- п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 1) AS "Retrain1", -- спец посл по пер + rp."fnWorkerRetrain"(W."VCode", 2) AS "Retrain2", -- период обучения: начало п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 3) AS "Retrain3", -- период обучения: конец п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 4) AS "Retrain4", -- период обучения прописью п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 5) AS "Retrain5", -- вид док п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 6) AS "Retrain6", -- № док п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 7) AS "Retrain7", -- дата п/п посл по пер + rp."fnWorkerRetrain"(W."VCode", 8) AS "Retrain8", -- основание п/п посл по пер + + rp."fnWorkerReward"(W."VCode", 0) AS "Rewards", -- поощр - список + rp."fnWorkerExecution"(W."VCode", 0) AS "Executs", -- взыск - список + CASE + WHEN wa."VCode" IS NOT NULL and da."TypeName" = 'Base.RP_OrderAdmin' THEN CONCAT( + vtw."Name", + ', с ', + date_part('day', wa."DateBeg"), + ' ', + comdoc."LexGetMonthName"(wa."DateBeg"), + ' ', + date_part('year', wa."DateBeg"), + ' по ', + date_part('day', wa."DateEnd"), + ' ', + comdoc."LexGetMonthName"(wa."DateEnd"), + ' ', + date_part('year', wa."DateEnd") + ) ELSE ''::text + END AS "VacAdmin", + CASE + WHEN wa."VCode" IS NOT NULL and da."TypeName" = 'Base.RP_ChildcareAllowance' THEN CONCAT( + vtw."Name", + ', с ', + date_part('day', wa."DateBeg"), + ' ', + comdoc."LexGetMonthName"(wa."DateBeg"), + ' ', + date_part('year', wa."DateBeg"), + ' по ', + date_part('day', wa."DateEnd"), + ' ', + comdoc."LexGetMonthName"(wa."DateEnd"), + ' ', + date_part('year', wa."DateEnd") + ) ELSE ''::text + END AS "Childcare" + FROM rp."RP_WorkerMove" WM + JOIN rp."RP_DocMove" DM ON DM."VCode" = WM."Pcode" + JOIN rp."RP_Worker" W ON W."VCode" = WM."IdWorker" -- через JOIN убираем несуществующих сотрудников + LEFT JOIN rp."RP_Person" P ON P."VCode" = W."IdPerson" +--WM + LEFT JOIN comdoc."Department" D ON D."VCode" = WM."IdDepartment" + LEFT JOIN rp."RP_Post" PS ON PS."VCode" = WM."IdPost" + LEFT JOIN rp."RP_Territory" T ON T."VCode" = WM."IdTerritory" + LEFT JOIN rp."VRP_WorkContract" WC ON WC."VCode" = WM."IdWorkContract" + LEFT JOIN rp."RP_Catalog" CWK ON CWK."VCode" = WM."IdWorkKind" + LEFT JOIN rp."RP_Catalog" CTW ON CTW."VCode" = WM."IdTypeWorkSched" + LEFT JOIN rp."RP_Catalog" CTB ON CTB."VCode" = WM."IdTypeBasisDoc" + LEFT JOIN rp."RP_Catalog" CTT ON CTT."VCode" = WM."IdTypeTrans" + LEFT JOIN rp."RP_Catalog" CR ON CR."VCode" = WM."IdRank" + LEFT JOIN rp."RP_Catalog" CS ON CS."VCode" = WM."IdSkill" + LEFT JOIN pr."PR_SprOper" SO1 ON SO1."VCode" = WM."IdOper1" + LEFT JOIN pr."PR_SprOper" SO2 ON SO2."VCode" = WM."IdOper2" +--W + LEFT JOIN comdoc."Contractor" C ON C."VCode" = W."IdContractor" + LEFT JOIN comdoc."Bank" B ON B."VCode" = W."IdBank" + LEFT JOIN acc."Account" A ON A."VCode" = W."IdAccount" + LEFT JOIN acc."Expenses" EP ON EP."VCode" = W."IdCostItems" + LEFT JOIN comdoc."Projects" PJ ON PJ."VCode" = W."IdProjects" + LEFT JOIN rp."VTypeWorkerStatus" WS ON WS."VCode" = W."IdTypeWorkerStatus" + LEFT JOIN rp."VTypeExecutors" E ON E."VCode" = W."IdTypeExec" + LEFT JOIN rp."VTypeUptime" U ON U."VCode" = W."IdTypeUptime" + LEFT JOIN rp."VRP_DocMove" H ON H."VCode" = W."IdOrderHiring" + LEFT JOIN rp."VRP_DocMove" Q ON Q."VCode" = W."IdOrderQuit" + LEFT JOIN mm."SO_SprSize" SC ON SC."VCode" = W."IdTogsSize" + LEFT JOIN mm."SO_SprSize" SG ON SG."VCode" = W."IdTogsRise" + LEFT JOIN mm."SO_SprSize" SF ON SF."VCode" = W."IdFootSize" + LEFT JOIN mm."SO_SprSize" SH ON SH."VCode" = W."IdHeadSize" + LEFT JOIN mm."SO_SprSize" SM ON SM."VCode" = W."IdMaskSize" + LEFT JOIN mm."SO_SprSize" SR ON SR."VCode" = W."IdRespSize" + LEFT JOIN mm."SO_SprSize" SV ON SV."VCode" = W."IdGlovSize" + LEFT JOIN mm."SO_SprSize" ST ON ST."VCode" = W."IdMittSize" + LEFT JOIN mm."SO_SprSize" SP ON SP."VCode" = W."IdPantSize" +--P + LEFT JOIN comdoc."TaxInspection" I ON I."VCode" = P."IFNS" + LEFT JOIN rp."RP_Catalog" CC ON CR."VCode" = P."IdCitizenship" + LEFT JOIN rp."RP_Catalog" CN ON CS."VCode" = P."IdNationality" + LEFT JOIN rp."RP_Catalog" CM ON CS."VCode" = P."IdMaritalStatus" + LEFT JOIN rp."RP_Catalog" CP ON CP."VCode" = P."IdProfession" + LEFT JOIN rp."RP_Catalog" CP2 ON CP2."VCode" = P."IdProfession2" + LEFT JOIN rp."RP_Catalog" CTP ON CTP."VCode" = P."IdTypePerson" + LEFT JOIN rp."RP_Catalog" CPC ON CPC."VCode" = P."IdTaxPayCateg" + LEFT JOIN rp."RP_Catalog" CPS ON CPS."VCode" = P."IdTaxPayStatus" + left join aw."RP_WorkerAbsence" as wa on wa."IdWorker" = wm."IdWorker" + left join aw."RP_DocAbsence" as dac on wm."IdWorker" = dac."IdWorkerHO" + left join aw."VTypeTimeWork" as vtw on wa."IdTypePer" = vtw."VCode" + left join aw."RP_DocAbsence" as da on da."VCode" = wa."Pcode", + tabl + WHERE (wm."COrg" = tabl."Filial" OR tabl."Filial" < 1) + AND dm."FlagApp" = true -- только подписанные документы + AND wm."FlagRec" <> 2 -- без приказов об увольнении -- NOT IN (2, 3) и т.п. + AND (wc."COrg" = tabl."Filial" OR tabl."Filial" < 1); + +/* + Актуальные перемещения сотрудников, исключая по неподписанным документам + или ошибочные (недействительные ключи у приказов, сотрудников и физ. лиц). + + Для просмотра цепочки перемещений: + ORDER BY WM.IdWorker, WM.DateBeg, WM.FlagRec + + Для выборки текущего перемещения: + WHERE WM.IdOrderNext IS NULL + AND @spec_date BETWEEN + WM.DateBeg AND ISNULL([DateEnd], @spec_date) + где @spec_date - указанная дата. +*/ + --pWC.DateDoc,pWC.NumDoc, diff --git a/docs/Lexema-HRM/sql запросы/Ведомость.sql b/docs/Lexema-HRM/sql запросы/Ведомость.sql new file mode 100644 index 0000000..a1dc588 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Ведомость.sql @@ -0,0 +1,8 @@ +select * from pr."PR_DocStatement" - - шапка и грид ведомости +select * from pr."PR_DocStatement" +select * from pr."PR_WorkerStatement" where "COrg"=5 order by "PCode" +PR_WorkerStatement + +PR_DocStatement - ведомости шапка +PR_WorkerStatement - ведомости грид +PR_TypeStatement - справочник видов ведомостей \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Виды графиков работы.sql b/docs/Lexema-HRM/sql запросы/Виды графиков работы.sql new file mode 100644 index 0000000..db4ac02 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Виды графиков работы.sql @@ -0,0 +1,18 @@ +SELECT "VCode", "Pcode", "DayNum", "IdTypeTimeWork", "HoursDay", "HoursNight", "COrg", "WOrg", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser", "HoursWatch" + FROM rp."RP_TypeWorkSchedDays"; + +SELECT * FROM rp."RP_TypeWorkSchedDays" WHERE "VCode" = 1339 + +SELECT * FROM rp."RP_Catalog" WHERE "TypeName" = 'Base.RP_TypeWorkSched' -- виды графиков гработы + +SELECT "IdSpr", "TypeName", "Name" - +FROM rp."RP_Catalog" +WHERE "TypeName" = 'Base.RP_TypeWorkSched' + +UPDATE rp."RP_Catalog" --- удаление значений "основного графика во всех столбцах" +SET "IdSpr" = NULL +WHERE "TypeName" = 'Base.RP_TypeWorkSched' + +UPDATE rp."RP_Catalog" +SET "Flag" = TRUE +WHERE "TypeName" = 'Base.RP_TypeWorkSched' \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Воинский Учет.sql b/docs/Lexema-HRM/sql запросы/Воинский Учет.sql new file mode 100644 index 0000000..aa852ac --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Воинский Учет.sql @@ -0,0 +1,211 @@ +--Список для сверки ВУ по возрастам на дату (с отметкой о снятии, при достижении предельного возраста) --заявка 11213 + +--declare @beginDate datetime +--select @beginDate = '20211031' + +SELECT + row_number() OVER() as "Id",* +from (SELECT --Id=identity(int) , + RP_Person."Family" || ' '|| RP_Person."Name" ||' '|| RP_Person."Father" AS "FIO" --"ФИО" + , RP_Person."Sex" AS Sex --"Пол" + , coalesce(rp."fnPersonAddress"(RP_Person."VCode",1,0),'') AS "PlaceBirthday" --"Место рождения" + , to_char(RP_Person."DateBirth"::timestamptz, 'DD.MM.YYYY'::text) AS "DateBirthday" --"Дата рождения" + , case when (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 60 and RP_Person."Sex" = 2 --мужской пол + then 'СНЯТ. ' + when (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 50 and RP_Person."Sex" = 1 --женский пол + then 'СНЯТА. ' + when (Catalog19."Name" like '%серж%' or Catalog19."Name" like '%прап%' or Catalog19."Name" like '%мичм%' or Catalog19."Name" like '%старшин%' or + Catalog19."Name" like '%рядов%' or Catalog19."Name" like '%солд%' or Catalog19."Name" like '%матр%') and + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 50 and RP_Person."Sex" = 2 + then 'СНЯТ. ' + when (Catalog19."Name" like '%серж%' or Catalog19."Name" like '%прап%' or Catalog19."Name" like '%мичм%' or Catalog19."Name" like '%старшин%' or + Catalog19."Name" like '%рядов%' or Catalog19."Name" like '%солд%' or Catalog19."Name" like '%матр%') and + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end) >= 45 and RP_Person."Sex" = 1 + then 'СНЯТА. ' + else '' end || ' ' || + replace(( + case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end || 'лет '|| + comdoc."datediff"('month', RP_Person."DateBirth", now()::date)- + (case when EXTRACT(MONTH FROM RP_Person."DateBirth") > EXTRACT(MONTH FROM '2024-08-01'::date) + then comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01')-1 + else comdoc."datediff"('year', RP_Person."DateBirth", '2024-08-01') + end*12) || 'мес.'),' 0мес.','') + AS "Age" --возраст + , Catalog17."Name" AS "VidObyaz" --"Вид воин.обязанности" + , Catalog21."Name" AS "Relation" --"Отношение к ВУ" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,13,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,13,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,13,now()::date) end + AS "VoenBilet" --"Военный билет (приписное удостоверение)" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,03,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,03,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,03,now()::date) end + AS "VidDoc" --"Вид документа" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,04,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,04,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,04,now()::date) end + AS "SerDoc" --"Серия" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,05,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,05,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,05,now()::date) end + AS "NomDoc" --"Номер" + , case when rp."fnPersonCertificate"(RP_Worker."IdPerson",07,06,now()::date) <> '' + then rp."fnPersonCertificate"(RP_Worker."IdPerson",07,06,now()::date) + else rp."fnPersonCertificate"(RP_Worker."IdPerson",92,06,now()::date) end + AS "Vydan" --"Выдан" + , coalesce(RP_Organization1."NameFull",'') AS "Voenkomat" --"Военный комиссариат" + , case when coalesce(Catalog19."Name",Catalog17."Name")<>'Призывник' + then 'Общий' else '' end AS "Common" --Общий в/учет + + , Catalog19."Name" AS "MilRank" --"Воинское звание" + , replace(substring(Catalog20."Name", 1, case when strpos(Catalog20."Name", '.') > 0 --обрезание текста до первой точки + then strpos(Catalog20."Name", '.')-1 + else LENGTH(Catalog20."Name") end), + 'к военной службе','') AS "Fitness" --"Категория годности к ВС" + , replace(coalesce(Catalog18."Name",''),'категория', 'кат.') AS "Reserv" --"Категория запаса" + , Catalog22."Name" AS "Profil" --"Состав (профиль)" + , Catalog23."Name" AS "MilGroup" --"Группа учета" + , RP_PersonMilitary."VUS" AS "VUS" --"ВУС" + , RP_PersonMilitary."MobilDesign" AS "MobilDesign" --"Наличие МП" + , RP_PersonMilitary."DateBeg" AS "DateBegUchet" --"Дата начала действия записи учета" + , coalesce(rp."fnPersonEducation"(RP_Person."VCode",0,0),'') AS "Education" --"Образование" + , coalesce(rp."fnPersonAddress"(RP_Person."VCode",2,0), + rp."fnPersonAddress"(RP_Person."VCode",3,0), + rp."fnPersonAddress"(RP_Person."VCode",4,0)) AS "Adres" --"Место жительства/пребывания" + , RP_Person."SNILS" AS "SNILS" --"СНИЛС" + , RP_Person."INN" AS "INN" --"ИНН" + , Catalog16."Name" AS "Family" --"Семейное положение" + , Department."Name" ||', '|| RP_Post."Name"||', '|| + 'приказ '|| pr."fnNameDoc2"('', RP_DocMove."NumDoc", RP_DocMove."DateDoc") AS "DepPostNameDoc" --Подраз, должность, приказ № и дата + + , Department."Name" ||', '|| RP_Post."Name" + || '. Приказ '|| Coalesce(' № ' || Coalesce(LTrim(RTrim(RP_DocMove."NumDoc")), ''), '') + || Coalesce(' от ' || to_char(RP_DocMove."DateDoc"::timestamptz, 'DD.MM.YYYY'::text) || ' г.', '') + || case when comdoc."LexLastDayMonth"(RP_Worker."DateEnd") >= now()::date + then ' (Уволен '|| to_char(RP_Worker."DateEnd"::timestamptz, 'DD.MM.YYYY'::text) ||'г.)' + else '' end AS "DepPostNameDocUvol" --Подраз, должность, приказ № и дата +/* , own."PrintName" as "PrintName" + , own."LegalAddressText" as "LegalAddressText" + , own."ContactPhone" as "ContactPhone" --Данные организации + , own."JobTitleOfDirector" as "JobTitleOfDirector" + , own."FN_DirectorShort" as "FN_DirectorShort" + , own."FN_GAccountantShort" as "FN_GAccountantShort" + , responible."UnitName" AS "UnitName" + , responible."NameShort" AS "NameShort" + , responible."postName" AS "postName" + , to_char(now()::date, 'DD.MM.YYYY'::text) AS "beginDate" +*/ + FROM --RP_WorkerMove + rp."RP_Worker" as RP_Worker --ON RP_Worker.VCode = RP_WorkerMove.IdWorker + INNER JOIN rp."RP_Person" as RP_Person ON RP_Person."VCode" = RP_Worker."IdPerson" + left JOIN rp."RP_Catalog" AS Catalog16 ON Catalog16."VCode" = RP_Person."IdMaritalStatus" + LEFT JOIN rp."RP_PersonMilitary" as RP_PersonMilitary ON RP_PersonMilitary."Pcode" = RP_Person."VCode" + LEFT JOIN rp."RP_Catalog" AS Catalog17 ON Catalog17."VCode" = RP_PersonMilitary."IdTypeMilitaryDuty" + LEFT JOIN rp."RP_Catalog" AS Catalog19 ON Catalog19."VCode" = RP_PersonMilitary."IdSprMilitaryRank" + LEFT JOIN rp."RP_Catalog" AS Catalog20 ON Catalog20."VCode" = RP_PersonMilitary."IdSprMilitaryFitness" + LEFT JOIN rp."RP_Catalog" AS Catalog18 ON Catalog18."VCode" = RP_PersonMilitary."IdSprMilitaryReserv" + LEFT JOIN rp."RP_Catalog" AS Catalog22 ON Catalog22."VCode" = RP_PersonMilitary."IdSprMilitaryProfile" + LEFT JOIN rp."RP_Catalog" AS Catalog21 ON Catalog21."VCode" = RP_PersonMilitary."IdSprMilitaryRelation" + LEFT JOIN rp."RP_Catalog" AS Catalog23 ON Catalog23."VCode" = RP_PersonMilitary."IdSprMilitaryGroup" + LEFT JOIN rp."RP_Organization" AS RP_Organization1 ON RP_Organization1."VCode" = RP_PersonMilitary."IdOrgCommis" + LEFT JOIN rp."RP_Organization" AS RP_Organization2 ON RP_Organization2."VCode" = RP_PersonMilitary."IdOrgReserv" + + left join ( + select distinct b."IdWorker" as "IdWorker", + b."IdPost" as "IdPost", + b."IdDepartment" as "IdDepartment", + b."Pcode" as "Pcode", + b."DateBeg" as "DateBeg" +from ( + select + a."IdWorker" as "IdWorker", + a."IdPost" as "IdPost", + a."IdDepartment" as "IdDepartment", + a."Pcode" as "Pcode", + a."DateBeg" as "DateBeg", + a."p" as "p", + dense_rank () over(partition by a."IdWorker" order by a."DateBeg" desc ) as "i" + from ( + select + m2."IdWorker" as "IdWorker", + m2."IdPost" as "IdPost", + m2."IdDepartment" as "IdDepartment", + m2."Pcode" as "Pcode", + m2."DateBeg" as "DateBeg", + 2 as "p" + from rp."RP_WorkerMove" as m1 + join rp."RP_WorkerMove" as m2 on m1."IdWorker" = m2."IdWorker" and m1."VCode" = m2."WCode" + where (m1."IdPost" <> m2."IdPost" + or m1."IdDepartment" <> m2."IdDepartment" + or m1."IdStaffUnit" <> m2."IdStaffUnit") + and m2."DateBeg" <= now()::date + union all + select + r."IdWorker" as "IdWorker", + r."IdPost" as "IdPost", + r."IdDepartment" as "IdDepartment", + r."Pcode" as "Pcode", + r."DateBeg" as "DateBeg", + 1 as "p" + from ( + select + m1."IdWorker" as "IdWorker", + m1."IdPost" as "IdPost", + m1."IdDepartment" as "IdDepartment", + m1."Pcode" as "Pcode", + m1."DateBeg" as "DateBeg", + dense_rank () over(partition by m1."IdWorker" order by m1."DateBeg" ) as "p" + from rp."RP_WorkerMove" as m1 + where not exists (select 1 from rp."RP_WorkerMove" as m2 + where m1."IdWorker" = m2."IdWorker" + and m1."VCode" = m2."WCode" + and (m1."IdPost" <> m2."IdPost" + or m1."IdDepartment" <> m2."IdDepartment" + or m1."IdStaffUnit" <> m2."IdStaffUnit") + and m2."DateBeg" <= now()::date) + ) r + where p = 1 + )a +)b +where b.i = 1) m on RP_Worker."VCode" = m."IdWorker" + JOIN rp."RP_DocMove" as RP_DocMove ON RP_DocMove."VCode" = m."Pcode" + LEFT JOIN rp."RP_Post" as RP_Post ON RP_Post."VCode" = m."IdPost" + LEFT JOIN comdoc."Department" as Department ON Department."VCode" = m."IdDepartment" +/* , + comdoc."OwnRequisite"(1--:nCOrg--dbo.GetFilial() + ) own, + comdoc."RespPerson" as rp , + (select r."Name" as "UnitName" , wr."NameShort" as "NameShort", post."Name" as "postName" + from comdoc."RespPerson" as rp + join comdoc."Responsible" as r on r."VCode" = rp."Responsible" + join rp."RP_Worker" wr on wr."VCode" = rp."IdWorker" + join rp."RP_WorkerMove" m on m."IdWorker" = wr."VCode" + left join rp."RP_Post" post on post."VCode" = m."IdPost" + where r."VCode" = 14 + and now() between coalesce(m."DateBeg", '19000101') + and coalesce(m."DateEnd", '21000101') + limit 1) as responible */ + + WHERE RP_DocMove."FlagApp" = true + and now()::date between coalesce(RP_Worker."DateBeg", '19000101') and coalesce(RP_Worker."DateEnd", '21000101') + and coalesce(RP_PersonMilitary."IdTypeMilitaryDuty", 0) > 0 +-- and r."VCode" =14 --Ответственный за отчетность по воинскому учету +-- and now() between coalesce(mm."DateBeg", '19000101') and coalesce(mm."DateEnd", '21000101') + order by --Catalog17.Name, + coalesce(RP_Organization1."NameFull",'')||coalesce(Catalog22."Name",''), RP_Person."Family" || ' '|| RP_Person."Name" ||' '|| RP_Person."Father" +) as a \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/График работы.sql b/docs/Lexema-HRM/sql запросы/График работы.sql new file mode 100644 index 0000000..585d66b --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/График работы.sql @@ -0,0 +1,4 @@ +select * from aw."RP_WorkingSchedule" — графики работ + +UPDATE aw."RP_WorkingSchedule" — проставление во всех документах статуса "Утвержден" +SET "IdTypeStatusDocument" = 2 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Запрос по табелю.sql b/docs/Lexema-HRM/sql запросы/Запрос по табелю.sql new file mode 100644 index 0000000..47681aa --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Запрос по табелю.sql @@ -0,0 +1,23 @@ +select * from aw."RP_WorkTab" where "VCode" = 314 --шапка табеля +select * from aw."RP_WorkTab" where "Pcode" = 579 -- +select distinct * from aw."VRP_WorkTabTimes" where "Pcode" = 314 "IdWorker" = 271568 and --время по табелю (грид) +select * from aw."RP_WorkTabTotals" where "IdWorkerMove" = 6503 --итоги по табелю + +select distinct * from aw."RP_WorkTabTimes" where "VCode" = 579 + +select * from aw."RP_WorkTabTotals" where "Pcode" = 1034 and "IdWorkerMove" = 6503 --- итоги для ЗП + +select wm."NSNT",* from aw."RP_WorkTabTotals" wt +left join rp."VRP_WorkerMove" wm on wm."VCode"=wt."IdWorkerMove" +where wt."Pcode" = 2373 + +select * from aw."RP_WorkTabTotals" where "Pcode" = 2373 ----серые итоги + +select "Udal","UDate","UUser","CDate","CUser","FlagCheck" --- история по чекбоксу "Проверено" +from aw."RP_WorkTabTimes" m +where m."Pcode"= 694 and m."IdWorkerMove"=7009 +Order By "UDate" + +select "Udal",* +from aw."RP_WorkTabTimes" m +where m."Pcode"= 694 and m."IdWorkerMove"=6254 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Зарплата.sql b/docs/Lexema-HRM/sql запросы/Зарплата.sql new file mode 100644 index 0000000..32b36c5 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Зарплата.sql @@ -0,0 +1,20 @@ +select * from pr."PR_DocPayroll" where "VCode"=1570 --шапка документа расчет ЗП +select * from pr."PR_WorkerPayroll" where "Pcode"=857304 -- сотрудники детальная часть + +select * from pr."PR_WorkerPayrollOperation" where "VCode" In (857374, 857373,849909) -- операции в ЗП +select * from pr."PR_RollOper" where "VCode" In (1304944,1312628) -- история расчетов + +select * from pr."PR_RegistryNDFL" where "VCode" = 86 --- удаление с регистра НДФЛ + +select * from pr."PR_RegistryNDFL" where "IdPerson"=270758 + +select * from pr."PR_DocDeduction" --- Заявления на вычеты по НДФЛ +select * from pr."PR_DedDeduction" ---Грид Заявлений на вычеты по НДФЛ + +select * from pr."PR_SprOper" ---операции + +select * from pr."PR_OrderOneTime" + +select * from pr."PR_DocAccrual" p ,pr."PR_WorkerAccrual" m where p."VCode"=m."PCode" AND 'IdWorkerMove' = 271440--разовые выплаты + +select * from pr."PR_WorkerAccrual" where "VCode"=289805 --- разовые операции по коду строки \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Итоги табеля.sql b/docs/Lexema-HRM/sql запросы/Итоги табеля.sql new file mode 100644 index 0000000..9165f64 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Итоги табеля.sql @@ -0,0 +1 @@ +select * from aw."RP_WorkTabTotals" where "Pcode" = 2373 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Максимальный Vcode таблицы.sql b/docs/Lexema-HRM/sql запросы/Максимальный Vcode таблицы.sql new file mode 100644 index 0000000..25db3b5 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Максимальный Vcode таблицы.sql @@ -0,0 +1,6 @@ +SELECT "KeyName", "Value", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser" +FROM lex."L8_KeysOfCodes" +WHERE "KeyName" = 'RP_WorkerAbsenceOperation' + +--максимальный Vcode таблицы +SELECT MAX("VCode") from aw."RP_WorkerAbsenceOperation" \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Не заполненные поля из приказа об увольнении расчет компенсации.sql b/docs/Lexema-HRM/sql запросы/Не заполненные поля из приказа об увольнении расчет компенсации.sql new file mode 100644 index 0000000..66b10d4 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Не заполненные поля из приказа об увольнении расчет компенсации.sql @@ -0,0 +1 @@ +select * from rp."RP_WorkerMove" where "FlagRec" = 2 and "IdWorkerAbsence" is null --- and "Pcode" = 917 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Подразделения.sql b/docs/Lexema-HRM/sql запросы/Подразделения.sql new file mode 100644 index 0000000..f7fd95c --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Подразделения.sql @@ -0,0 +1,3 @@ +select * from comdoc."Department" + +update comdoc."Department" set "IdAccount" = 13 where "IdAccount" is null \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/Роли системы и статусы.sql b/docs/Lexema-HRM/sql запросы/Роли системы и статусы.sql new file mode 100644 index 0000000..d9c81ac --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/Роли системы и статусы.sql @@ -0,0 +1,11 @@ +--Роли системы +select * from comdoc."SystemRoles" order by "VCode" + +--Роли системы (Документы) +select * from comdoc."SystemRolesDetail" where "PCode" in (40) --Администратор по учёту труда(administrator_accounting_work) + +--найти max VCode в таблице статусов +select max("VCode") from comdoc."StatusAndReportsDetail" + +--Роли системы (Статусы) --вот тут добавлять строки статусов для нового Pcode=46 +select * from comdoc."StatusAndReportsDetail" where "PCode" in (40,46) \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/ШР и приказы.sql b/docs/Lexema-HRM/sql запросы/ШР и приказы.sql new file mode 100644 index 0000000..837ba1e --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/ШР и приказы.sql @@ -0,0 +1,37 @@ +select * from rp."RP_StaffUnit" where "VCode" = 212 -- строка позиции ШЕ + +select * from rp."RP_StaffList" where "VCode" = 25212 In (7493, 7494, 7495) -- строка позиции ШР +select * from rp."RP_Staffing" where "VCode" = 83 -- шапка ШР + +SELECT * FROM rp."RP_StaffListOper" WHERE "IdSprOper" IS NULL --- детальны грид по доплатам в ШР + +DELETE FROM rp."RP_StaffListOper" --- УДАЛЕНИЕ из детального грида пустых строчек в ШР +WHERE "IdSprOper" IS NULL + +select * from rp."RP_WorkerMove" where "Pcode" = 1936 -- строка приказа +select * from rp."RP_DocMove" where "VCode" = 7226 -- шапка приказа + +select * from rp."RP_WorkerMove" wm +left join rp."RP_WorkerMoveOper" wmo on wmo."PCode"=wm."VCode" +WHERE "IdSprOper" IS NULL +where wm."Pcode"=610 ---детальный нижний грид надбавок в приказах + +select * from rp."RP_WorkerMove" where "IdWorker" = 65993 order by "DateBeg" -- Приказы по сотруднику таблица +select * from rp."RP_WorkerMove" where "IdWorker" = 65993 order by "VCode" ASC -- Приказы отсортированы по сотруднику + +select * from rp."RP_Worker" where "VCode" = 115784 -- карточка сотрудника +select * from rp."VRP_WorkerRegistry" where "VCode" = 285398 -- реестр сотрудников + +call comdoc."allSee"(1, 'DriverAuto') + + + +select * from rp."RP_OrderWeekend" where "VCode" = 5867 - приказ сверхурочной работе + +select * from rp."RP_OrderOvertime" where "VCode" = 5869 - приказ о привлечении к работе в нерабочие дни работе +select * from rp."RP_WorkerMove" where "IdStaffUnit"=1574 -- занятость по ШЕ + +select * from pr."PR_DocPermanent" where "VCode" = 51 --- приказ о доплатах и надбавках +select * from pr."PR_WorkerPermanent" where "PCode" = 51 --- приказ о доплатах и надбавках + +select * from rp."RP_StaffUnit" where "VCode" = 212 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/все_записи_по_приказам_по_сотруднику.sql b/docs/Lexema-HRM/sql запросы/все_записи_по_приказам_по_сотруднику.sql new file mode 100644 index 0000000..ead70be --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/все_записи_по_приказам_по_сотруднику.sql @@ -0,0 +1,7 @@ +select * from rp."RP_WorkerMove" where "IdWorker" = 66032 --все записи по приказам грида +select * from aw."RP_DocAbsence" where "VCode" in (1247,1320) -- TypeName='Base.RP_OrderReplace' старая Компенсация за неисп. отпуск +-- Base.RP_CompensationVacation - новый вид компенсации +select * from aw."RP_WorkerAbsence" where "IdWorker" = 84309 +select * from aw."RP_DocAbsence" where "TypeName"='Base.RP_OrderReplace' + +select * from aw."RP_CompensationVacation" where "VCode" = 6650 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/график работы на год.sql b/docs/Lexema-HRM/sql запросы/график работы на год.sql new file mode 100644 index 0000000..5d660b1 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/график работы на год.sql @@ -0,0 +1,9 @@ +SELECT "VCode", "COrg", "WOrg", "Name", "Pcode", "Month", "IdTypeTimeWork", "DaysWork", "HoursWork", "IdTypeDays00", "Weekends","Workdays", + "HW01", "HW02", "HW03", "HW04", "HW05", "HW06", "HW07", "HW08", "HW09", "HW10", "HW11", "HW12", "HW13", "HW14", "HW15", + "HW16", "HW17", "HW18", "HW19", "HW20", "HW21", "HW22", "HW23", "HW24", "HW25", "HW26", "HW27", "HW28", "HW29", "HW30", "HW31", + "TD01", "TD02", "TD03", "TD04", "TD05", "TD06", "TD07", "TD08", "TD09", "TD10", "TD11", "TD12", "TD13", "TD14", "TD15", + "TD16", "TD17", "TD18", "TD19", "TD20", "TD21", "TD22", "TD23", "TD24", "TD25", "TD26", "TD27", "TD28", "TD29", "TD30", "TD31", + "FS", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser" +FROM aw."RP_WorkingScheduleDays" +where "Pcode" = 265 +order by "IdTypeDays00" \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/для_изменения_в_учетной_вида_пользователя.sql b/docs/Lexema-HRM/sql запросы/для_изменения_в_учетной_вида_пользователя.sql new file mode 100644 index 0000000..5c1bdf1 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/для_изменения_в_учетной_вида_пользователя.sql @@ -0,0 +1,3 @@ +select * from lex."UserMeta" where "UserName"='SchedulerUser' --- виды пользователя Админ или пользователь + +select * from lex."OrganizationUser" where "User"=16 \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/должности_и_категории_по_сотрудникам.sql b/docs/Lexema-HRM/sql запросы/должности_и_категории_по_сотрудникам.sql new file mode 100644 index 0000000..1056b92 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/должности_и_категории_по_сотрудникам.sql @@ -0,0 +1,14 @@ +select * from rp."RP_Post" + +select * from rp."RP_Worker" limit 10 + +select * from import."SprPostCategoryC2011" limit 10 + +select distinct w."NameShort" as "Фамилия И.О.", w."COrg", -- должности и категории по сотрудникам + p."Name" AS "Должность", + k."Name" AS "Категория" + from rp."VRP_Worker" w + JOIN rp."RP_Post" p ON w."IdPost" = p."VCode" + JOIN rp."RP_Catalog" k ON p."IdPostCategory" = k."VCode" + where k."TypeName" = 'Base.RP_PostCategory' and w."DateEnd" is null and w."FlagCombi" is null + order by w."COrg", w."NameShort" \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/история_блокирования_пользователей.sql b/docs/Lexema-HRM/sql запросы/история_блокирования_пользователей.sql new file mode 100644 index 0000000..17f4803 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/история_блокирования_пользователей.sql @@ -0,0 +1,3 @@ +select "Id", "WUser"from lex."OrganizationUser" where "Organization" = 2 +select * from lex."UserMeta" where "UserName" = 'sen' --241 +select * from lex."OrganizationUser" where "User" = 241 - если надо посмотреть историю, то OrganizationUser_h \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/контрагенты.sql b/docs/Lexema-HRM/sql запросы/контрагенты.sql new file mode 100644 index 0000000..4ceb271 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/контрагенты.sql @@ -0,0 +1,5 @@ +select * from comdoc."Contractor" where "VCode" = 1 +select * from rp."RP_WorkerMove" where IdWorker = 84309 + +select * from acc."AccountingPolitics" +select * from comdoc."Responsible" \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/неявки.sql b/docs/Lexema-HRM/sql запросы/неявки.sql new file mode 100644 index 0000000..5543a59 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/неявки.sql @@ -0,0 +1,3 @@ +select * from aw."RP_DocAbsence" where "VCode" = 23627 -- шапка неявок +select * from aw."RP_WorkerAbsence" where "Pcode" = 23627 --сотрудники неявок +select * from aw."RP_WorkerAbsenceOperation" where "VCode" = 283 -- операции по расчету \ No newline at end of file diff --git a/docs/Lexema-HRM/sql запросы/сокращенный воинский учет.sql b/docs/Lexema-HRM/sql запросы/сокращенный воинский учет.sql new file mode 100644 index 0000000..118da54 --- /dev/null +++ b/docs/Lexema-HRM/sql запросы/сокращенный воинский учет.sql @@ -0,0 +1,6 @@ +SELECT "VCode", "COrg", "WOrg", "Pcode", "IdTypeMilitaryDuty", "IdSprMilitaryReserv", "IdSprMilitaryRank", "IdSprMilitaryFitness", "IdSprMilitaryProfile", "IdSprMilitaryGroup", "IdOrgCommis", "IdSprMilitaryRelation", "VUS", "MobilDesign", "NumCommand", "IdOrgReserv", "DateBeg", "CDate", "WDate", "CHost", "WHost", "CUser", "WUser", "FlagServe" + FROM rp."RP_PersonMilitary"; + +select * from rp."RP_PersonMilitary" rpm +join rp."RP_Person" rpw +on rpw."VCode" = rpm."Pcode" \ No newline at end of file diff --git a/docs/Lexema-HRM/Общие справочники.7z b/docs/Lexema-HRM/Общие справочники.7z new file mode 100644 index 0000000..ea37430 Binary files /dev/null and b/docs/Lexema-HRM/Общие справочники.7z differ diff --git a/docs/Lexema-HRM/Основные шаги в системе.7z b/docs/Lexema-HRM/Основные шаги в системе.7z new file mode 100644 index 0000000..ce95885 Binary files /dev/null and b/docs/Lexema-HRM/Основные шаги в системе.7z differ diff --git a/docs/Lexema-HRM/Производственный календарь.7z b/docs/Lexema-HRM/Производственный календарь.7z new file mode 100644 index 0000000..612a17f Binary files /dev/null and b/docs/Lexema-HRM/Производственный календарь.7z differ diff --git a/docs/Lexema-HRM/Расчет зарплаты.7z b/docs/Lexema-HRM/Расчет зарплаты.7z new file mode 100644 index 0000000..1c70c37 Binary files /dev/null and b/docs/Lexema-HRM/Расчет зарплаты.7z differ diff --git a/docs/Lexema-HRM/Учет кадров.7z b/docs/Lexema-HRM/Учет кадров.7z new file mode 100644 index 0000000..8e6884a Binary files /dev/null and b/docs/Lexema-HRM/Учет кадров.7z differ diff --git a/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.docx b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.docx new file mode 100644 index 0000000..b62a16d Binary files /dev/null and b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.docx differ diff --git a/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.html b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.html new file mode 100644 index 0000000..e358c2c --- /dev/null +++ b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.html @@ -0,0 +1,2149 @@ + + +
+В «Lexema-HRM» ведется учет движения персонала, включая учет кадров по основному месту работы и по совместительству. Модуль позволяет хранить и обновлять личную информацию сотрудника с момента его поступления на работу до момента его увольнения, а также хранить информацию о бывших сотрудниках предприятия. Также обеспечивается формирование унифицированных форм по труду.
+Функциональный состав модуля:
+Работник или Сотрудник — субъект трудового права, физическое лицо, работающее по трудовому договору у работодателя и получающее за это заработную плату. Правовое положение работника определяется трудовым законодательством, трудовым и коллективным договорами, локальными нормативными актами организации. Работник имеет права и несет обязанности, установленные трудовым законодательством страны.
+
В реестре сотрудников представлены основные реквизиты, необходимые для управления кадровыми данными:
+Табельный №;
+ФИО;
+Подразделение;
+Должность;
+Статус сотрудника (активен / уволен);
+Дата приема на работу и т.д.
+Данные в реестре можно фильтровать, сортировать, группировать и настравить по любому из столбцов.
+Для быстрого поиска используйте поиск по различным столбцам, например на скрине офильтровано по неполному графику.
+
Фильтр по статусу сотрудника
+Для отображения сотрудников с определенным статусом используется фильтр, доступный через кнопку «Статус» на панели инструментов реестра.
+
По умолчанию реестр фильтруется по "Принятым" сотрудникам. При нажатии на кнопку открывается выпадающее меню со списком доступных статусов:
+Сотрудники со статусом «Принят»;
+Сотрудники со статусом «Уволен»;
+Сотрудники со статусом «Создан»;
+Сотрудники со статусом «Внештатный».
+Выбор одного из пунктов применяет фильтр к данным в реестре, оставляя в таблице только строки, соответствующие выбранному статусу.
+Для сброса фильтра и отображения всех сотрудников необходимо выбрать пункт «Сбросить фильтр».
+Карточка Сотрудника
+Полная информация по каждому сотруднику хранится в его индивидуальной карточке. +Для перехода к ней необходимо щёлкнуть по строке сотрудника в реестре.
+Карточка сотрудника отражает полную историю кадровых событий: приказы о приеме, переводах, изменениях условий труда, отпусках, больничных, командировках, увольнении, а также расчётный стаж для начисления пособий и другие сведения, связанные с трудовой деятельностью в организации. +Вся информация структурирована и размещена по тематическим вкладкам для удобства навигации и работы.
+
Во вкладке «Сведения» карточки сотрудника представлены основные реквизиты, характеризующие его трудовые отношения с организацией. Значения большинства полей заполняются автоматически на основании данных из кадровых приказов и справочников.
+ + + + + + <style> + html, body { + margin: 0; + padding: 0; + font-family: Arial, sans-serif; + width: 100%; + } + .container { + width: 100%; + padding: 20px; + box-sizing: border-box; + overflow-x: auto; + } + table { + width: 100%; + font-size: 8px; + border-collapse: collapse; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + min-width: 1100px; /* Гарантирует отсутствие переноса длинных строк */ + font-family: "Times New Roman", Times, serif; + font-size: 8px; + } + thead { + background-color: #f2f2f2; + } + th, td { + padding: 8px; + vertical-align: top; + border: 1px solid #ddd; + line-height: 1.2; + } + th { + color: black; + font-weight: bold; + text-align: center; + } + /* Столбец № — узкий, только под цифры 1–99 */
+ th:nth-child(1), td:nth-child(1) {
+ width: 40px;
+ text-align: center;
+ white-space: nowrap;
+ }
+
+ /* Столбец Реквизит — для длинного названия */
+ th:nth-child(2), td:nth-child(2) {
+ min-width: 380px;
+ text-align: left;
+ white-space: nowrap;
+ }
+
+ /* Столбец Источник — ширина по оставшемуся пространству */
+ th:nth-child(3), td:nth-child(3) {
+ min-width: 500px;
+ text-align: left;
+ white-space: normal; /* Разрешаем перенос в этом столбце, если не помещается */
+ }
+
+ /* Стили для строк */
+ tr:nth-child(even) {
+ background-color: #f9f9f9;
+ }
+ tr:hover {
+ background-color: #f0f8ff;
+ }
+
+ /* Стиль ссылки */
+ .document-link {
+ color: #0066cc;
+ text-decoration: none;
+ border-bottom: 1px dotted #0066cc;
+ }
+ .document-link:hover {
+ color: #ff6600;
+ border-bottom: 1px solid #ff6600;
+ }
+</style>
+
+
+
+ | № | +Реквизит | +Источник / способ заполнения | +
|---|---|---|
| 1 | +Физическое лицо, Полное ФИО, Краткое ФИО | +Подтягиваются из карточки физического лица при создании сотрудника | +
| 2 | +Статус сотрудника | +Заполняется автоматически при подписании приказа о приеме | +
| 3 | +Трудовой договор | +Ссылка на документ трудового договора | +
| 4 | +Прием: дата, по документу | +Заполняется автоматически на основании подписанного приказа о приеме. Прикреплена ссылка "по документу" для перехода в приказ | +
| 5 | +Увольнение: дата, по документу | +Заполняется автоматически на основании подписанного приказа об увольнении. Прикреплена ссылка "по документу" для перехода в приказ | +
| 6 | +Табельный № | +Присваивается автоматически при создании сотрудника | +
| 7 | +Подразделение | +Подтягивается автоматически при создании сотрудника | +
| 8 | +Должность | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 9 | +Разряд | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 10 | +Категория | +Автоматически подтягивается из занятой штатной единицы | +
| 11 | +Территория | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 12 | +Дата перехода на КЭДО | +Заполняется вручную при согласии сотрудника на электронный документооборот | +
| 13 | +Вид основной оплаты | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 14 | +Сумма | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 15 | +Вид надбавки | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 16 | +Сумма | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 17 | +Вид графика работы | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 18 | +Ставка | +Автоматически подтягивается из приказа о приеме (или последующих перемещений) | +
| 19 | +Вид занятости | +Выбирается при оформлении приказа о приеме | +
| 20 | +Совместительство | +Флаг, устанавливается при оформлении приказа о приеме | +
| 21 | +Характер работы | +Подтягивается из приказа о приеме | +
| 22 | +Испытательный срок | +Указывается в месяцах при оформлении приказа о приеме | +
| 23 | +Вид занятости | +Выбирается при оформлении приказа о приеме | +
| 24 | +Индивидуальный номер рабочего места (по СОУТ) | +Вводится вручную, используется при формировании отчета ЕФС-1 | +
| 25 | +Вид исполнителя | +Выбирается из справочника | +
| 26 | +Счет затрат | +При необходимости указывается счет из справочника, отличный от установленного для подразделения | +
| 27 | +Статья затрат | +При необходимости указывается счет из справочника, отличный от установленного для подразделения | +
| 28 | +Банк для перечислений | +Выбирается из справочника банков | +
| 29 | +Прежнее место работы | +Выбирается из справочника «Контрагенты» | +
| 30 | +Дата отказа от КЭДО | +Заполняется вручную при отказе сотрудника от КЭДО | +
| 31 | +Материально ответственное лицо | +Флаг, устанавливается вручную при необходимости | +
| 32 | +Член профсоюза | +Флаг, устанавливается вручную при необходимости | +
Вкладка «Перемещения»: +Все изменения в трудовых функциях и оплате труда сотрудника фиксируются в этой вкладке.
+Записи создаются автоматически при оформлении приказов о приеме, переводе, увольнении и других кадровых действиях двигающие перемещения сотрудника. +Данные в таблице являются историческими и не подлежат редактированию.
+
Вкладка «Прочие приказы» в карточке сотрудника предназначена для отображения и управления всеми кадровыми документами, которые не относятся к основным категориям (прием, перевод, увольнение и т.д), но влияют на его трудовые условия, статус или выплаты.
+Эта вкладка служит централизованным реестром для следующих типов документов:
+Приказы о доплатах и надбавках;
+Приказы об изменении ФИО;
+
Основные реквизиты в таблице:
+Документ — ссылка на сам приказ. При нажатии открывается полная форма документа.
+Номер — уникальный номер приказа, присвоенный системой.
+Дата — дата создания приказа.
+Приказ подписан — флажок, указывающий, что приказ официально подписан и вступил в силу.
+Период действия — дата начала и окончания действия приказа.
+Вид приказа — тип приказа (например, «О закреплении наставника», «О поощрении»).
+Операция — вид выплаты или начисления, связанного с приказом (например, «Доплата за совмещение», «Премия за выслугу лет»).
+Процент/Сумма — величина начисления (в процентах или фиксированной сумме).
+Вкладка «Отпуска» в карточке сотрудника предназначена для отображения и хранения всей информации по отпускам, предоставленным сотруднику за весь период его работы в организации.
+Эта вкладка состоит из двух подвкладок: «Приказы» и «Использование».
+Подвкладка Приказы
+Содержит список всех приказов на отпуск, оформленных для данного сотрудника. Информация формируется автоматически при создании соответствующих кадровых документов (приказ о предоставлении отпуска, приказ о предоставлении отпуска без сохранения заработной платы).
+
Основные реквизиты в таблице:
+Документ — ссылка на сам приказ. При нажатии открывается полная форма документа.
+Номер — уникальный номер приказа, присвоенный системой.
+Дата — дата создания приказа.
+Статус — статус документа (например,"Создан", "Утвержден", "Учтен", "Рассчитан","Выплачен" ).
+Период работы — дата начала и окончания периода, за который предоставляется отпуск.
+Период отпуска — дата начала и окончания самого отпуска.
+Вид отпуска — тип отпуска (например, «Ежегодный основной оплачиваемый отпуск», «Отпуск без сохранения заработной платы»).
+Дни — количество календарных дней отпуска.
+Подвкладка Использование (или «Использование отпусков»)
+Содержит сводную информацию по использованию отпусков сотрудником за весь период работы. Данные в этой таблице не редактируются, а формируются автоматически на основе загруженных данных, внесенных приказов в системе и ручного редактирования в документе "Использование отпусков".
+
Основные реквизиты в таблице:
+Код — код вида отпуска (например, ОО — доп.отпуск по вредности, ОТ — ежегодный основной отпуск).
+Вид отпуска — наименование вида отпуска.
+Период работы — дата начала и окончания периода, за который положены дни отпуска.
+Дни, не вход. в отп. стаж — количество календарных дней, которые не включаются в отпускной стаж.
+Календарные дни отпуска — детализация использования отпуска:
+Положено — количество дней, положенных сотруднику по закону или локальным актам за конкретный период работы.
+Использовано — количество дней, фактически использованных сотрудником.
+Не исп.-но (остаток) — количество дней, оставшихся неиспользованными (показывает остатки на текущую дату).
+Праздничные дни — количество праздничных дней, попавших в период отпуска.
+Дополнительно — ссылки на приказы, связанные с конкретным периодом работы, за который предоставлены дни отпуска.
+Вкладка «Прочие неявки» в карточке сотрудника предназначена для отображения и хранения информации о всех неявках на работу, которые не относятся к основным категориям Отпусков, но влияют на его рабочее время и расчет заработной платы.
+
Эта вкладка содержит список всех оформленных документов, фиксирующих периоды отсутствия сотрудника по различным основаниям. Информация в ней не редактируется, а формируется автоматически при создании соответствующих кадровых документов.
+Основные реквизиты в таблице: +Код строки — уникальный идентификатор записи в реестре. +Документ — ссылка на сам документ (приказ, лист нетрудоспособности). При нажатии открывается полная форма документа. +Номер — номер документа, присвоенный системой при создании. +Дата — дата создания документа. +Статус — статус документа (например, "Создан", "Утвержден", "Учтен", "Рассчитан","Выплачен"). +Период действия — дата начала и окончания периода неявки. +Вид отсутствия — тип неявки (например, «Командировка», «Временная нетрудоспособность»). +Дни — количество календарных дней неявки.
+Во вкладке «Поощрения» карточки сотрудника отражается история всех поощрений, применённых к данному сотруднику. Записи создаются автоматически при оформлении документов «Приказ о поощрении» и не подлежат редактированию.
+
Реквизиты таблицы:
+Код строки — уникальный идентификатор записи.
+Документ — ссылка на сам документ. При нажатии открывается полная форма документа.
+Номер — номер приказа о поощрении.
+Дата — дата создания приказа.
+Приказ подписан — флаг, указывающий, что приказ был подписан.
+Период действия — период, в течение которого действует поощрение (указывается в приказе).
+Дата начала — дата начала периода действия поощрения.
+Дата окончания — дата окончания периода действия поощрения.
+Вид поощрения — тип поощрения (например, «Премия», «Благодарность», «Ценный подарок»), выбирается из справочника.
+Мотив поощрения — текстовое описание причины поощрения, указанное в приказе.
+Основание — название документ или служебную запись, послужившую основанием для поощрения.
+Сумма — размер денежного поощрения, если таковое предусмотрено.
+Ежемесячно — флаг, устанавливаемый при назначении ежемесячной премии.
+Во вкладке «Взыскания» карточки сотрудника отражается история всех дисциплинарных взысканий, применённых к данному сотруднику. Записи создаются автоматически при оформлении документов «Приказ о взыскании за нарушение» и не подлежат редактированию.
+
Реквизиты таблицы:
+Код строки — уникальный идентификатор записи.
+Документ — ссылка на сам документ. При нажатии открывается полная форма документа.
+Номер — номер приказа о взыскании.
+Дата — дата создания приказа.
+Приказ подписан — флаг, указывающий, что приказ был подписан.
+Период действия — период, в течение которого действует взыскание (указывается в приказе).
+Дата начала — дата начала периода действия взыскания.
+Дата окончания — дата окончания периода действия взыскания.
+Вид взыскания — тип взыскания (например, «Замечание», «Выговор», «Увольнение»), выбирается из справочника.
+Вид нарушения — описание типа нарушения, послужившего основанием для взыскания, выбирается из справочника.
+Основание — текстовое поле, содержащее ссылку на документ или служебную запись, послужившую основанием для взыскания.
+Сумма — размер денежного удержания, если взыскание связано с материальной ответственностью.
+Ежемесячно — флаг, устанавливаемый при назначении ежемесячного удержания.
+Во вкладке «Медосмотры» карточки сотрудника отражается история прохождения медицинских осмотров. Записи создаются автоматически при оформлении документов «Приказ о прохождении медосмотра» и не подлежат редактированию.
+
Реквизиты таблицы:
+Документ — ссылка на сам документ. При нажатии открывается полная форма документа.
+Номер — номер приказа о прохождении медосмотра.
+Дата — дата создания приказа.
+Приказ подписан — флаг, указывающий, что приказ был подписан.
+Период действия - период, в течение которого длился медосмотр.
+Дата начала — дата начала периода действия приказа (указывается в приказе).
+Дата окончания — дата окончания периода действия приказа (указывается в приказе).
+Сумма — размер оплаты, связанной с прохождением медосмотра (если таковая предусмотрена).
+Эта информация используется для контроля сроков обязательных медицинских осмотров и учета связанных с ними выплат.
+Во вкладке «Аттестация» фиксируется история прохождения сотрудником аттестационных процедур. Записи вносятся вручную непосредственно в карточке сотрудника и не связаны с отдельными документами-приказами.
+
Реквизиты таблицы:
+Дата аттестации — дата проведения аттестации, указанная в приказе.
+Решение комиссии — текстовое поле с результатом аттестации (например, «Признать аттестованным», «Не аттестован», «Рекомендовать к повышению»).
+Протокол - документ, фиксирующий ход и результаты заседания аттестационной комиссии.
+Номер — номер протокола комиссии по аттестации.
+Дата — дата составления протокола.
+Основание — текстовое описание основания для проведения аттестации.
+Эта информация используется для формирования служебных записок, анализа квалификации персонала и принятия решений о назначении на должность, повышении или переводе.
+Во вкладке «Квалификации» отражается история повышения квалификации сотрудника. Записи вносятся вручную в карточке сотрудника и не связаны с отдельными документами-приказами.
+
Реквизиты таблицы:
+Период обучения:
+Дата начала — дата начала периода обучения;
+Дата окончания — дата окончания периода обучения.
+Вид повышения квалификации — тип обучения (например, «Краткосрочные», «Долгосрочные», «Профессиональная переподготовка»), выбирается из справочника.
+Учреждение послевузовского образования — наименование образовательного учреждения, в котором проходило обучение.
+Документ:
+Вид — тип документа, подтверждающего факт обучения (например, «Свидетельство», «Диплом», «Удостоверение»);
+Серия — серия документа;
+Номер — номер документа;
+Дата — дата выдачи документа.
+Основание — основание, послужившее причиной для направления на обучение.
+Эта информация используется для формирования служебных записок, анализа уровня подготовки персонала и принятия решений о назначении на должность или повышении.
+Во вкладке «Переподготовки» фиксируется информация о прохождении сотрудником программ профессиональной переподготовки. Записи вносятся вручную в карточке сотрудника и не связаны с отдельными документами-приказами.
+
Реквизиты:
+Период обучения: +Дата начала, Дата окончания — временные рамки программы переподготовки.
+Учреждение послевузовского образования — наименование образовательной организации.
+Документ:
+Вид — тип документа, подтверждающего факт обучения;
+Серия, Номер, Дата — реквизиты выданного диплома.
+Основание — текстовое описание причины направления на переподготовку.
+Эти вкладки предназначены для ведения учёта развития персонала и используются при формировании служебных записок, анализа компетенций и планирования карьерного роста.
+Во вкладке «Стаж работы» карточки сотрудника отражается история трудового стажа, необходимая для расчета пособий (в первую очередь — больничных) и формирования отчетности. Данные в этой вкладке используются системой при расчете среднего заработка для больничного листа.
+Вкладка состоит из двух основных разделов:
+В этом разделе отображаются итоговые значения стажа, рассчитанные на текущую дату.
+Вид стажа — тип стажа (например, «Общий», «В районах Крайнего Севера»).
+Дата — дата, на которую рассчитан стаж.
+Годы, Месяцы, Дни — разбивка стажа по периодам.
+Эти данные являются результатом автоматического расчета на основе информации, введенной во втором разделе — «Трудовая книжка».
+Здесь хранится детальная информация о предыдущих местах работы сотрудника. Записи создаются вручную непосредственно в карточке сотрудника и не связаны с отдельными документами-приказами.
+Реквизиты таблицы:
+Период работы:
+Дата начала — начало периода работы;
+Дата окончания — окончание периода работы;
+Стаж работы:
+Годы, Месяцы, Дни — продолжительность периода работы.
+Организация — наименование работодателя.
+Должность — должность, занимаемая сотрудником.
+Примечание — дополнительная информация (например, указывается в каком разряде работал «Электросварщик 2-го разряда» или если несколько должностей занимал).
+Важно: Эти записи являются источником данных для расчета стажа. При формировании больничного листа система использует информацию из этого раздела для определения общего и специального стажа, а также для расчета среднего заработка за 2 предыдущих года.
+Дополнительные функции:
+Расчет стажа — кнопка «Расчет стажа» позволяет пересчитать итоговые значения стажа на дату, указанных в "трудовой книжке".
+Наличие бумажной трудовой книжки — флажок, указывающий, что у сотрудника есть бумажная трудовая книжка (актуально при переходе на электронный документооборот).
+Дата перехода на электронную книжку — дата, с которой стаж считается по данным системы (по умолчанию — 15.03.2021).
+Примечание: Информация во вкладке «Стаж работы» используется исключительно для расчетов и отчетности. Она не заменяет официальную трудовую книжку и не является юридически значимым документом без соответствующей печати и подписи.
+Во вкладке «Спецодежда» карточки сотрудника фиксируются размеры специальной одежды, обуви и снаряжения, необходимых для выполнения трудовых обязанностей. Записи вносятся вручную непосредственно в карточке сотрудника и не связаны с отдельными документами-приказами.
+Размеры подтягиваются из справочника «Размеры СПО», который содержит стандартные значения для различных видов спецодежды (например, «Головной убор», «Одежда», «Обувь», «Перчатки», «Рукавицы»).
+
Эти данные используются при выдаче спецодежды со склада
+Во вкладке «Подотчет» карточки сотрудника отражается информация о выданном имуществе (спецодежде, инструменте, ТМЦ), которое сотрудник получил для выполнения служебных обязанностей.
+Записи в этой вкладке создаются автоматически в карточке сотрудника.
+Реквизиты таблицы:
+Код — уникальный идентификатор записи.
+Наименование — название выданного предмета или вида спецодежды (например, «Костюм рабочий», «Дрель», «Книга "Ремонт станков"»).
+Ед.изм. — единица измерения (например, «шт»).
+Кол-во — количество выданных единиц.
+Дата выдачи — дата передачи имущества сотруднику.
+Срок службы, мес — срок, на который выдается имущество (в месяцах).
+Дата окончания срока службы — дата, до которой имущество считается пригодным к использованию.
+Эта информация используется для контроля выдачи и возврата материальных ценностей, а также для формирования актов списания и отчетности по обеспечению персонала средствами индивидуальной защиты и инструментом.
+Кнопка «Печать» в карточке сотрудника предназначена для формирования и вывода на печать различных унифицированных форм, справок и документов, связанных с данным сотрудником.
+
+При нажатии на кнопку открывается выпадающее меню со списком доступных для печати форм. Пользователь может выбрать нужную форму, и система сформирует её в указанном формате (pdf или docx).
Доступные формы:
+Форма Т-2 — Личная карточка сотрудника (в форматах PDF, docx A4, docx A3).
+Форма 10 — Карточка гражданина, подлежащего воинскому учету (docx).
+Приложение № 2 — Сведения о гражданине, подлежащем воинскому учету (PDF).
+Справка о месте работы (docx).
+Согласие на обработку персональных данных.
+Договор о материальной ответственности (индивидуальный).
+Эта функция позволяет быстро получить необходимые документы без необходимости поиска отдельных отчетов или документов в системе. Все данные для печатных форм автоматически подтягиваются из карточки сотрудника и актуальных кадровых приказов.
+Кнопка «Создать документ» в карточке сотрудника предназначена для упрощения и ускорения работы кадровых специалистов. Она позволяет создавать новые кадровые документы (приказы, неявки) непосредственно из карточки сотрудника, без необходимости выходить в реестр документов.
+
Как это работает:
+Нажать кнопку «Создать документ» в панели инструментов карточки сотрудника;
+Откроется модальное окно с выпадающим списком «Выберите тип документа»;
+Выбрать нужный тип документа из списка (например, «Больничный»), нажать кнопку "Создать";
+После система автоматически создаст новый документ выбранного типа, предварительно заполнив его реквизиты данными из карточки сотрудника (ФИО, табельный номер, должность, подразделение и др.);
+Документ откроется в новой вкладке для редактирования.
+Преимущества:
+✅ Экономия времени: Не нужно искать нужный документ в меню или реестре — все необходимые типы доступны в одном месте.
+✅ Автоматизация: Система автоматически подтягивает данные сотрудника, что снижает риск ошибок при ручном вводе.
+✅ Удобство: Позволяет быстро оформлять любые кадровые действия, находясь в карточке сотрудника.
+Кнопка «Физ. лицо»
+Кнопка «Физ. лицо» в карточке сотрудника предназначена для быстрого перехода к карточке физического лица, связанной с данным сотрудником.
+
При нажатии на кнопку система открывает в новой вкладке карточку физического лица, содержащую всю персональную информацию о человеке: паспортные данные, адреса, контакты, образование, воинский учет, банковские реквизиты и другие сведения, не связанные напрямую с его трудовой деятельностью в текущей организации.
+Эта функция позволяет кадровому специалисту оперативно проверить или отредактировать личные данные сотрудника без необходимости выхода из карточки сотрудника и поиска нужного физического лица в отдельном реестре.
+Приказ о приеме на работу — это первичный документ кадрового учета. Приказ о приеме на работу оформляется на основании сведений, указанных в трудовом договоре работника. Его содержание должно быть идентичным подписанному соглашению о труде.
+Документом регистрируется прием на работу работников организаций, а также размеры оплаты труда работников – оклады.
+Одно и то же физическое лицо может быть оформлено работником нескольких организаций информационной базы, но основное место работы у него может быть лишь в одной из них; в других же организациях работник должен быть оформлен как внешний совместитель. Работник может быть принят на работу в ту же организацию второй раз, но уже как внутренний совместитель.
+В панели инструментов в документе «Физические лица», наряду со стандартными кнопками, имеется кнопка «Создать сотрудника». Она предназначена для создания нового сотрудника с использованием данных физического лица. После нажатия программа предлагает выбрать Статус создаваемого сотрудника:
+
поля Создать: Трудовой договор, Создать: Приказ о приеме - по умолчанию стоит чекбокс на автоматическое создание документов и +введена текущая дата для создания документов (при необходимости можно подкорректировать даты и выбрать нужные документы).
+"Приступить к работе с"- дата выхода сотрудника на работу, автоматически подтягивается текущее число. Далее эта дата подтягивается в документы: "Приказ о приеме", "Трудовой договор". При необходимости дату можно подкорреткировать на нужную в данном модальном окне или в созданных документах.
+Условия приема в данном поле выбирается необходимый вид через всплывающий лукап.
+
Табельный № - система автоматически определяет последний использованный табельный номер и новому сотруднику присваивается следующий по порядку номер. При необходимости табельный номер можно подкорреткировать вручную.
+После заполнения всех полей, при нажатии кнопки "Создать" открываются выбранные документы, для дальнейшего заполнения.
+
В табличной части вводятся:
+В нижней детальной таблице, подтягиваются надбавки по штатной еденице из Штатного расписания. Если сотруднику необходимо внести дополнительные надбавки, в данную таблицу они добавляются через
. Из выпадающего списка выбрать необходимые надбавки и доплаты, заполнить % или суммовые колонки по ним.

К документу можно распечатать Приказ, распоряжения о приеме работников (унифицированные формы Т-1 или Т-1а) и другие документы по кнопке «Печать».
+
Для того чтобы в печатную Формы: Т-1 (Приказ о приеме на работу, pdf), Т-1 (Приказ о приеме на работу, word) в поле (условия приема на работу, характер работы) подставлялась вся необходимая информация, необходимо сделать следующую настройку:
+


После заполнения всех нужных полей, документ необходимо сохранить и подписать. Вся заполненная информация, подтягивается в печатную форму Т-1
+
Созданный и сохраненный «Приказ о приеме на работу» находится в Реестре "Приказы о приеме на работу"
+
В реестре представлены реквизиты:
+В шапке реестра:
+В детальной части реестра:
+Трудовой договор – это соглашение между работодателем и сотрудником, в соответствии с которым работодатель обязуется предоставить сотруднику работу по обусловленной трудовой функции, обеспечить условия труда, предусмотренные трудовым законодательством, коллективным договором, соглашениями, локальными нормативными актами и данным соглашением, своевременно и в полном размере выплачивать работнику заработную плату, а сотрудник обязуется лично выполнять определенную этим соглашением трудовую функцию в интересах, под управлением и контролем работодателя, соблюдать правила внутреннего трудового распорядка, действующие у данного работодателя.
+Трудовой договор создается автоматически при создании сотрудника из карточки физического лица, по кнопке 

Для нумерации Трудовых договоров (включение/отключение присваивания номеров), необходимо зайти в реестр "Контрагенты", выбрать необходимую организацию, далее во вкладке "Доп.реквизиты" в поле "Нумерация трудовых договоров", поставить или убрать галку, сохранить документ.
+Если галка не стоит - нумерации в ТД не будет, если галку установить, то ТД будет автоматически присваиваться порядковый номер, при сохранении документа.
+
Для проставления префикса к ТД, необходимо зайти в реестр "Виды документов по учету труда и неявкам", выбрать документ "Трудовой договор", внутри документа прописать или удалить префикс, сохранить документ.
+
После настройки номер и префикс будут автоматически подставляться в печатную форму трудового договора.
+
Ключевым элементом заполнения трудового договора является выбор вида шаблона, который определяет структуру и содержание печатной формы. Выбор выполняется в поле «Вид труд. соглашения»*.- выбирается вид шаблона для формирования печатной формы.
+
После выбора шаблона в детальную таблицу подтянутся данные из выбранного шаблона
+
Далее необходимо нажать кнопку «Сформировать данные», чтобы система подставила актуальные данные сотрудника и организации в шаблон.
+
Далее приведено подробное описание настройки шаблонов печатных форм в следующих разделах:
+— «Виды шаблонов к договорам»;
+— «Разделы трудовых договоров».
+Виды шаблонов к договорам - это системный справочник, содержащий заготовленные шаблоны форм трудовых договоров для автоматического формирования различных печатных форм трудовых договором. Каждый шаблон определяет структуру и содержание трудового договора, который будет использоваться при оформлении сотрудников различных категорий.
+Для отображения в документе "Трудового договора" в поле "Вид труд. соглашения* необходимого вида шаблона трудового соглашения, необходимо выполнить следующие действия:
+Создать все виды Трудовых договоров, которые используются на предприятии, для этого необходимо в реестре "Виды шаблонов к договорам" по кнопке "Создать" документ "Вид шаблона". Заполнить обязательные поля, помеченные *:
+
Далее необходимо заполнить детальную часть документа, в которой прописываются пункты из трудового договора,чтобы при формировании на печать вышел ТД ,который используется на предприятии, например как на скрине.
+
На нем видно, что печатная форма ТД состоит из: +Шапки, в которой прописываются название организации, данные руководителя предприятия и сотрудника:
+
!!! info "Внимание" +Данные, которые будут изменятся, необходимо прописать в фигурных скобках {} и на русском языке скопировать нужный текст из справочника "поля для заполнения соглашений".
+Например: Организация, должность и ФИО руководителя предприятия, ФИО сотрудника, сумма и т.д.
+
+На скрине по ТД, который находится выше, в шапке ТД есть данные, которые могут измениться: полное и краткое наименование организации, должность и ФИО руководителя,основание назначения, ФИО сотрудника.
+
Для того чтобы данные подтягивались с учетом изменений, необходимо сделать следующее:
+

Далее на нужную строчку в столбе на "русском языке" нажимаем два раза, текст выделяется "синим цветом", нажимаем CTRL+C;
+

Справочник "Разделы трудовых договоров" является системным классификатором, который содержит стандартизированные разделы для структурирования трудовых договоров. Он используется как источник данных для выбора разделов при настройке шаблонов трудовых договоров.
+Разделов +На предприятиях, у которых в ТД не используются Разделы, добавляются друг за дружкой строчки согласно печатной формы ТД.
+Если на предприятии используются Разделы, то необходимо:
+

После внесения всех разделов и пунктов ТД, необходимо сохранить документ.
+Далее в созданном документе "Трудовой договор" необходимо в лукапе "Вид труд. соглашения*" выбрать нужный вид ТД
+
после этого необходимо нажать кнопку "Заполнить" чтобы в фигурных скобках подтянулась информация
+
документ обновится с необходимыми данными
+
Когда в документе "Трудовой договор" выбрали вид из лукапа "Вид труд. соглашения*", поле закрывается от редактирования. Для того чтобы заново открыть поле необходимо сделать следующие действия:
+
в детальной части документа;
и
в правом углу документа.
Поле откроется для редактирования.
+
Раздел "Дополнительные соглашения" предназначен для автоматизированного учета всех изменений условий трудовых договоров. Каждое соглашение является официальным документом, вносящим правки в оригинальный трудовой договор.
+Содержание реестра:
+В реестре "Дополнительные соглашения к трудовым договорам "представлена таблица, которая содержит следующие колонки:
+№ п/п: Порядковый номер записи.
+Дата: Дата заключения дополнительного соглашения.
+Вид: Краткое описание сути изменений.
+Трудовой договор: Реквизиты основного трудового договора, к которому применяется соглашение.
+Физическое лицо: ФИО с кем были составлены соглашения.
+Срок: период действия дополнительного соглашения.
+Документ-Источник: на основании какого приказа изменились условия трудового договора.
+Примечание: предназначено для внесения дополнительной информации, уточнений или служебных комментариев к дополнительному соглашению, которые не отражены в основных полях документа.
+Реестр
+Для входа в документ необходимо перейти в "Меню" - "Учет кадров. Документы" - выбрать пункт "Дополнительные соглашения к трудовым договорам". Для доступа к документу нужны определенные права.
+[
](### Пример поиска документа в меню)
Откроется реестр "Дополнительные соглашения к трудовым договорам".
+[
](### Пример отображения реестра "Дополнительные соглашения к трудовым договорам")
Документ
+!!! info "Внимание" +В реестре "Дополнительные соглашения к трудовым договорам" нет кнопки "Создать", потому что эти документы генерируются системой автоматически на основе приказов.
+Пример заполненного документа "Дополнительные соглашения к трудовым договорам" выглядит следующим образом:
+[
](### Пример заполненного "Дополнительные соглашения к трудовым договорам")
Документ содержит следующие ключевые элементы:
+Номер/Дата - проставляется автоматически при создании "Дополнительного соглашения". Важная особенность: Нумерация ведется не в общем порядке по всему реестру, а индивидуально для каждого сотрудника. Система автоматически определяет, какое по счету это изменение к трудовому договору конкретного сотрудника.
+Вид соглашения - проставляется автоматически из приказа, на основании которого создаётся документ.
+Трудовой договор - проставляется автоматически номер и дата конкретного сотрудника.
+Документ-источник - данные приказ , название, номер и дата.
+Срок - дата вступления в силу и срок действия.
+Вид документа (код) - содержит техническое наименование формы документа, используемое в системе. Этот код необходим для корректной обработки и маршрутизации документа внутри системы. Значение присваивается автоматически при создании документа.
+Физическое лицо - ФИО с кем было составлено соглашение.
+Код детальной строки приказа- содержит уникальный технический идентификатор, который связывает дополнительное соглашение с конкретной строкой исходного приказа в системе. Код присваивается автоматически при создании документа
+Примечание - предназначено для внесения дополнительной информации, уточнений или служебных комментариев к дополнительному соглашению, которые не отражены в основных полях документа.
+Раздел «Пункты соглашения» содержит конкретные условия и изменения, которые вносятся в трудовой договор. Все пункты формируются системой автоматически на основе предустановленных Шаблонов дополнительных соглашений к трудовым договорам, соответствующих виду дополнительного соглашения.
+Возможности редактирования
+Текст в разделе «Пункты соглашения» доступен для ручного редактирования, что позволяет адаптировать стандартный шаблон под индивидуальные условия.
+Способы редактирования:
+Правка текста в строке:
+Навести курсор на нужную строку;
+Нажать правой кнопкой мыши;
+Внести необходимые правки в текст;
+Для сохранения изменений нажать «Enter» или кликнуть вне поля ввода.
+Удаление строки:
+Выделить строку, которую необходимо удалить;
+Нажать кнопку 🗑️ в панели инструментов детально таблицы;
+Подтвердить удаление;
+Добавление новой строки:
+Нажать кнопку ➕ в панели инструментов;
+В появившейся новой строке ввести требуемый текст;
+Сохранить изменения.
+Порядок действий при редактировании дополнительного соглашения:
+Внесение правок → отредактировать, добавить или удалить пункты соглашения;
+Сохранение документа → нажать кнопку «Сохранить»;
+Формирование печатной формы → после сохранения нажать кнопку 🖨️.
+Особенности:
+Все ручные правки сохраняются только после нажатия кнопки «Сохранить».
+Перед формированием печатной формы обязательно убедиться, что документ сохранен.
+Печатная форма формируется на основе актуальной сохраненной версии документа.
+Отображение дополнительных соглашений в трудовом договоре сотрудника
+[
](### Пример отображения "Дополнительных соглашений в документе "Трудовой договор")
Все заключенные дополнительные соглашения автоматически отображаются в документе "Трудового договора" сотрудника, обеспечивая полную историю изменений условий труда.
+По каждому соглашению видно: Дата и Номер заключения, Вид и срок действия. По ссылке прописанной в столбце "Код" можно переходить в документретный документ "Дополнительного соглашения"
+Порядок просмотра:
+-Перейти во вторую детальную таблицу "Дополнительные соглашения";
+Просмотреть список всех действующих и исторических изменений;
+При необходимости перейти по ссылке в конктретный документ "Дополнительное соглашение к трудовому договору".
+Документ «Приказ о переводе на другую работу» предназначен для оформления изменений в трудовых условиях сотрудника: при переходе на новую должность, в другое подразделение или при изменении условий труда. Все изменения фиксируются в истории перемещений сотрудника и автоматически влияют на его текущие выплаты и отчётность.
+Реестр приказов о переводе
+В реестре отображаются все созданные документы.
+
Реквизиты:
+Номер приказа
+Дата приказа
+Приказ подписан — флаг, который при активации окрашивает строку в жёлтый цвет.
+Список работников по приказу
+Вид перевода
+Причина перевода
+Краткое содержание
+Примечание
+На панели инструментов доступны кнопки: "Период" для фильтрации документов по датам, "Создать", "Печать".
+Форма документа
+Шапка документа
+
Дата приказа — заполняется автоматически при (подставляется текущее число);
+Номер приказа — присваивается системой при сохранении;
+Приказ подписан — устанавливается вручную после проверки данных. При проставлении галки документ становится официально действующим;
+Причина перевода — выбирается из справочника «Причины переводов/перемещений». Текст причины подтягивается в печатную форму;
+Без проверки занятых ШЕ — флажок, позволяющий оформить перевод сотрудника на уже занятую штатную единицу. Используется для исправления ошибок или оформления фактически сложившихся ситуаций.
+Основание — текстовое поле для указания ссылки на нормативный акт, внутренний документ или иное обоснование перевода. Если в приказе указано несколько сотрудников, можно указать одно и то же основание для всех сразу:
+Ввести текст в поле «Основание» в шапке документа;
+В таблице с сотрудниками выделить нужные строки (можно выделить всех);
+Нажать кнопку «Заполнить» — система подставит указанное основание во все выделенные строки.
+Примечание — поле для дополнительных комментариев. Подтягивается в печатную форму Т-5 pdf, docx.
+Детальная таблица
+Заполняется информация по каждому сотруднику:
+Сотрудник — выбирается из списка;
+Доп.соглашение - ссылка на документ "дополнительного соглашения к трудовому договору";
+Прежнее назначение — данные о предыдущей должности, подразделении и дате назначения — подтягиваются автоматически;
+Новое назначение:
+Подразделение — выбирается из справочника;
+Должность — выбирается из штатного расписания. Система проверяет соответствие выбранной должности штатной единице. Если должность не соответствует штатной единице, поле очищается, и выдаётся предупреждение;
+Разряд — подтягивается из штатной единицы;
+Территория — указывается, если сотрудник переходит на участок, расположенный на другой территории,отображаются по галке в УПП;
+Период работы на новом месте — дата начала и окончания нового назначения;
+Вид перевода — выбирается из справочника;
+Ставка — коэффициент рабочей нагрузки;
+Основная оплата — вид и сумма;
+Надбавка — вид и сумма, отображаются по галке в УПП;
+Вид графика работы — выбирается из справочника;
+Основание (перевода) — наименование, номер и дата документа, послужившего основанием;
+Штатное расписание — подтягивается автоматически;
+Важно: При выборе сотрудника система автоматически подтягивает его последнее перемещение. При сохранении документа с проставленной галкой «Подписан» предыдущее перемещение закрывается (дата окончания устанавливается равной дате начала нового перевода). Это позволяет корректно вести историю и рассчитывать выплаты.
+Кнопка Создать доп.соглашение
+В системе предусмотрен функционал для оформления дополнительного соглашения к трудовому договору при внесении изменений в условия труда сотрудника. Кнопка находится в шапке документа.
+
При нажатии на кнопку доступны два варианта:
+«по выбранным сотрудникам» — для выделенных строк;
+«по всем сотрудникам» — для всех строк в документе.
+Далее система автоматически откроет новую вкладку с формой «Дополнительное соглашение к трудовому договору». Форма соглашения заполняется автоматически на основе данных из приказа и карточки сотрудника:
+
Ссылка на созданное соглашение отображается в столбце «Доп. соглашение» исходного приказа. +Чтобы ссылка появилась сразу после создания, требуется нажать кнопку «Обновить» в правом верхнем углу окна приказа.
+
Таким образом, приказ и дополнительное соглашение формируются как связанный комплект документов, отражающий юридически значимое изменение условий трудового договора.
+Для оформления постоянного перевода сотрудника, ранее переведенного на временную должность, предусмотрен специализированный механизм.
+Как это работает:
+Условие активации: +В документе «Приказ о переводе на другую работу», если в столбце «Вид перевода» выбрано значение «Временный» (или иной вариант, установленный в справочнике), в панели инструментов становится доступна кнопка «Создать постоянный перевод».
+
Создание нового приказа:
+При нажатии на кнопку «Создать постоянный перевод» система автоматически создает новый документ «Приказ о переводе на другую работу». Этот новый приказ заполняется данными из исходного документа (информация о сотруднике, новой должности, подразделении, разряде и т.д.).
+
В созданном документе автоматически применяются следующие изменения:
+Дата документа и дата начала периода работы устанавливаются равными текущей дате создания;
+Вид перевода меняется на «Постоянный» (или соответствующее значение, заданное в справочнике);
+В детальной таблице добавляется новый столбец «Предыдущий приказ», в который автоматически подставляется ссылка на исходный документ-источник (приказ о временном переводе, а в исходном документе «Приказ о временном переводе» автоматически формируется ссылка на новый документ «Приказ о постоянном переводе» в поле «Новый приказ».).
+
Кнопка «Операции
+В документе «Приказ о переводе на другую работу» кнопка «Операции» предоставляет быстрый доступ к справочникам, необходимым для оформления приказа.
+
При нажатии на кнопку открывается выпадающее меню:
+Эта функция ускоряет работу с документом, позволяя быстро перейти к вспомогательным справочникам без необходимости искать их в главном меню системы.
+Кнопка Реестр
+В документе «Приказ о переводе на другую работу» кнопка «Реестр» предназначена для быстрого перехода в основной реестр документов данного типа.
+
При нажатии на эту кнопку система открывает вкладку с реестром "Приказов о переводе", отфильтрованных по последнему выбранному периоду в реестре. Это позволяет пользователю:
+✅ Просмотреть историю переводов – увидеть все ранее оформленные переводы сотрудников в хронологическом порядке.
+✅ Найти и открыть ранее созданный приказ – быстро перейти к нужному документу, не выполняя новый поиск в общем реестре.
+✅ Выполнить поиск по номеру, дате или сотруднику – фильтровать список переводов для быстрого доступа к нужной информации.
+Документ «Приказ о переводе на другую работу» закрывается от редактирования, если на дату, указанную в детальном гриде приказа («Дата начала периода работы»), выполняется одно из следующих условий:
+
⚠️ Создан Табель учета рабочего времени, в котором сотрудник учтен с этой даты.
+Пример: Приказ № МП471-л/с от 19.11.2025 содержит строку для сотрудника Афанасьева И.Д., где «Дата начала» — 19.11.2025. Если в табеле № МП530 от 30 ноября 2025 г. этот сотрудник учтен с 19.11.2025 — редактирование приказа запрещено.
+⚠️ Существует последующий кадровый приказ о перемещении (перевод, изменение оплаты ,графика и т.д), который начинается не позже даты начала работы по текущему приказу, и этот приказ подписан.
+✏️ Как разблокировать документ для редактирования?
+Чтобы снова получить возможность редактировать приказ, необходимо удалить или изменить связанные данные, которые вызвали блокировку:
+✅ Вариант 1: Удалить запись сотрудника в Табеле учета рабочего времени
+Удалите строчку с данным сотрудником из табеля, где он учтен с даты, указанной в приказе.
+✅ Вариант 2: Снять подпись с последующего приказа
+Найдите последующий приказ, который перекрывает текущий, и снимите галку «Подписан». Это временно отменит его действие и позволит редактировать предыдущий приказ.
+Примечание
+Эта логика реализована для обеспечения целостности кадровых данных и соответствия с бухгалтерским учетом. Изменение приказа, который уже отражен в табеле или перекрыт следующим приказом, может привести к ошибкам в расчетах и отчетности.
+Приказ об окончании временных переводов - это документ, который оформляется в организации или компании для фиксации окончания временных переводов сотрудников. Трудовые отношения с переведенным сотрудником не прекратятся, а только утратит силу соглашение, согласно которому переведенный сотрудник временно исполнял обязанности основного сотрудника, и вновь начнут действовать условия ранее заключенного трудового договора о выполнении работы по должности, которую выполнял временный сотрудник до перевода.
+
В реестре приказов о переводе представлены реквизиты:
+На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра.
+Пример заполненного документа "Приказ об окончании временных переводов" выглядит следующим образом:
+
В шапке документа вводятся:
+Приказ может быть составлен на несколько сотрудников, если у них совпадают ключевые реквизиты. В табличной части вводятся:
+Перемещение на территории – разновидность перевода, связанная с изменением условий труда.
+
В реестре приказов о переводе представлены реквизиты:
+На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра.
+Пример заполненного документа "Приказ об окончании временных переводов" выглядит следующим образом:
+
В шапке документа вводятся:
+Приказ может быть составлен на несколько сотрудников, если у них совпадают ключевые реквизиты. В табличной части вводятся:
+На панели инструментов есть кнопки «Печать» - для распечатки приказа.
+
«Операции» - для быстрого доступа к справочникам и работы с ними. «Заполнить», «Дополнить» - для заполнения таблицы полным составом подразделения, дополнением ранее не введенных.
+
Откроется справочник "Причины переводов/перемещений".
+
Рассматриваемый документ необходим для обеспечения правомерности изменения режима рабочего времени сотрудников компании. Такое изменение режима в общем случае должно быть согласовано посредством издания и подписания внутрикорпоративных актов, предполагающих внесение соответствующих изменений в трудовой договор или правила внутреннего распорядка.
+Основанием для одностороннего изменения режима работы сотрудников, в соответствии со ст. 74 ТК РФ, могут быть изменения организационных либо технологических условий трудовой деятельности работников фирмы. При этом работодатель вправе издать приказ, содержащий разъяснения касательно объективных причин изменений в графике работы сотрудников.
+Если же работодатель не может воспользоваться основаниями, указанными в ст. 74 ТК РФ, то для корректировки графика работы ему обязательно нужно получить согласие сотрудников, которых она касается. Если данное согласие предоставлено не будет, то издавать приказ, изменяющий рабочий график, работодатель не имеет права.
+В том случае, если имеет место изменение графика работы по инициативе работника, то основанием для издания аналогичного приказа будет служить заявление самого инициатора, то есть работника.
+Прежде чем измененять графика работы у сотрудника, необходимо проверить существует штатная единица с графиком работы, которую хотим выбрать сотруднику. Если ее нет:
+Для входа в документ необходимо в "Меню" - "Учет кадров" - "Учет кадров. Документы" - выбрать пункт "Приказы об изменении графика работы". Для доступа к документу нужны права администратора.
+
Откроется реестр "Приказы об изменении графика работы".
+
В реестре приказов об изменении графика работы представлены реквизиты:
+На панели инструментов есть кнопка «Период»
, с ее помощью можно установить период просмотра и «Печать»
- для распечатки приказа.
+Пример заполненного документа "Приказ об изменении графика работы" выглядит следующим образом:

В шапке документа вводятся:
+Дата приказа;
+Номер приказа;
+Флаг – «Приказ подписан»;
+Причины перемещения;
+Краткое содержание документа;
+Примечание;
+Подписанты: Руководитель и Главный бухгалтер;
+Основание;
+Далее следует блок настройки работы с кнопками «Добавить/Удалить»:
+Сотрудник. Выбирается из выпадающего лукапа;
+Прежнее назначение -должность, территория, дата - подтягивается автоматически из "Приказа о приеме на работу";
+Период действия - дата начала, дата конца, фактическая дата конца назначения -заполняется вручную;
+Вид графика работы. Выбирается из выпадающего лукапа, (если в лукапе нет данных, то необходимо внести новую штатную единицу, см.выше);
+Код штатной единицы, подтягивается автоматически;
+Штатное расписание,подтягивается автоматически;
+Код назначения,подтягивается автоматически.
+После заполнения всех данных, необходимо поставить флаг «Приказ подписан»
. С приказа можно снять "подпись", документ станет доступным для редактирования, также документ может быть недоступным для редактирования (серого цвета). Недоступность говорит о том, что по сотрудникам есть более новые документы и данный приказ редактировать нельзя.
Приказ об изменении разряда (грейда) — это кадровый документ, который оформляет официальное изменение квалификационного уровня сотрудника в соответствии с Единым тарифно-квалификационным справочником (ЕТКС) или внутренними стандартами организации.
+Реестр
+Для входа в документ необходимо перейти в "Меню" - "Учет кадров. Документы" - выбрать пункт "Приказы об изменении разряда (грейдов)". Для доступа к документу нужны определенные права.
+[
](### Пример поиска документа в меню)
Откроется реестр "Приказы об изменении разряда (грейдов)".
+[
](### Пример отображения реестра "Приказы об изменении разряда (грейдов)")
Для создания нового документа необходимо нажать на кнопку
на верхней панели инструментов.
Документ
+Пример заполненного документа "Приказ об изменении разряда" выглядит следующим образом:
+[
](### Пример заполненного документа "Приказ об изменении разряда")
Шапка документа:
+***№ / дата **** - присваивается автоматически после сохранения документа, являются обязательными к заполнению.
+Подписан - поле с чекбоксом, которое управляет юридическим статусом приказа и его учетом в системе. Приказ считается официально подписанным и вступившим в силу - когда чекбокс проставлен.
+Причина изменения - поле с выпадающим списком из справочника
+Основание - поле для массового проставления основания у сотрудников. Для этого необходимо в данном поле внести текст и в детальной таблице выделить всех сотрудников и нажать кнопку "Заполнить".
+Примечание - поле для внесения дополнительной информации, комментариев или уточнений по приказу об изменении разряда, которые не отражены в основных полях документа.
+Без проверки занятых ШЕ - поле с чекбоксом, который отключает стандартную проверку системы на занятость штатных единиц (ШЕ) в действующем штатном расписании.
+Сценарии использования функционала "Без проверки занятых ШЕ":
+Система показывает только вакантные должности;
+Исключает ошибки двойного назначения;
+Рекомендуется для большинства случаев;
+Оформление перевода на занятую штатную единицу;
+Временное совмещение должностей;
+Исправление ошибочных данных в штатном расписании;
+Оформление "за минусом" - когда сотрудник фактически уже работает на позиции;
+Порядок работы с включенным чекбоксом
+Установить чекбокс в шапке документа "Без проверки занятых ШЕ";
+Система обновит список доступных позиций.
+В поле "Разряды" теперь отображаются все штатные единицы;
+Выбрать нужную позицию (даже если она занята).
+Система позволяет оформить приказ на уже занятую позицию;
+Автоматически создается запись о переводе/изменении;
+!!! info "Внимание" +⚠️ Риски использования:
+ - Возможность создания конфликтных ситуаций с занятостью;
+ - Нарушение структуры штатного расписания;
+ - Сложности в отслеживании актуальной занятости;
+
+✅ Рекомендации:
+Используйте данный режим только при необходимости;
+Перед использованием согласуйте с отделом кадров;
+После оформления проверьте актуальность штатного расписания;
+Используйте для исправления ошибок, а не для регулярной работы.
+После оформления шапки документа, в детальной части таблицы необходимо оформить сотрудника:
+Далее в поле "разряд" выбрать из выпадающего списка необходимый разряд.
+[
](### "Выбор разряда в поле документа "Приказ об изменении разряда"")
После выбора разряда, автоматически подтянется сумма и данные по штатному расписанию по той позиции штатной единицы, которую занял сотрудник в данном приказе.
+[
](### "Пример автоматического заполнения полей"")
После необходимо проверить актуальность нижней таблицы "Доплат и Надбавок"
+После заполнения всех данных необходимо:
+Нажать кнопку "Сохранить"
+Все внесенные данные сохраняются в системе;
+Приказу присваивается статус "Черновик";
+Возможность дальнейшего редактирования сохраняется
+Или "Сохранить и закрыть"
+Данные сохраняются;
+Окно приказа закрывается;
+Возврат в реестр приказов;
+Процесс подписания:
+Верниться в документ приказа в системе;
+Установить чекбокс "Подписан" ✅;
+Сохраните изменения;
+Оформление сотрудника на занятую ШЕ
+Процедура оформления
+При создании приказа установить чекбокс "Без проверки занятых ШЕ" в шапке документа.
+Данное действие отключает стандартную проверку системы на занятость штатных единиц.
+В детальной таблице нажать кнопку "Добавить".
+Выбрать сотрудника из выпадающего списка (процедура аналогична стандартной).
+[
](### "Пример выпадающего списка при включенном чекбоксе "Без проверки занятых ШЕ"" )
В столбце "Разряд" открыть выпадающий список.
+Система отобразит расширенный перечень позиций:
+✅ Свободные штатные единицы
+✅ Занятые штатные единицы (становятся доступны при активированном чекбоксе)
+[
](### "Пример информационного окна о том что сотрудник перемещен на занятую штатную единицу "Без проверки занятых ШЕ"" )
После выбора занятой штатной единицы с нужным разрядом.
+Система автоматически выводит сообщение:
+Важные примечания
+⚠️ Контрольные точки:
+Данная операция требует особого внимания - возможны конфликты в штатном расписании.
+Рекомендуется проверить актуальность данных после выполнения.
+Необходимо убедиться в обоснованности оформления на занятую позицию.
+✅ Рекомендации:
+Использовать данный функционал для исправления ошибок в штатном расписании.
+Применять для оформления фактически сложившихся ситуаций.
+Согласовывать подобные операции с отделом кадров.
+После завершения всех действий необходимо сохранить приказ и при необходимости подписать его для вступления в силу.
+Создание дополнительного соглашения к трудовому договору
+Процесс создания дополнительного соглашения к трудовому договору
+В приказе об изменении разряда выделить сотрудника в детальной таблице.
+Нажать кнопку "Создать доп. соглашение" в панели инструментов приказа.
+ +Система открывает новую вкладку: "Дополнительное соглашение к трудовому договору".
+Форма автоматически заполняется данными:
+Вид соглашения: "об изменении разряда" (берется из приказа);
+Шаблон текста: подставляется стандартный шаблон для изменения разряда;
+Фигурные скобки {}, которые прописаны в шаблоне: автоматически заменяются на актуальные данные сотрудника в дополнительном соглашении.
+После необходимо проверить автоматически сформированный текст.
+При необходимости внести правки:
+Отредактировать пункты соглашения;
+Добавить или удалить условия;
+Скорректировать формулировки.
+После внесенных правок сохранить изменения, кажать кнопку "Печать" в форме дополнительного соглашения.
+Система сгенерирует готовый документ для подписания.
+ +После проверки и печати закрыть вкладку дополнительного соглашения.
+Вернуться в исходный приказ об изменении разряда.
+В приказе обновить данные (кнопка "Обновить").
+Система автоматически создает связь:
+В столбце "Доп. соглашение" появляется ссылка на созданный документ, с возможностью перехода в него.
+Кнопка "Операции"
+Кнопка "Операции" предоставляет доступ к дополнительным функциям и сервисным возможностям работы с документом "Приказ об изменении разряда".
+Основные функции в меню "Операции":
+Быстрый доступ к справочникам;
+Сервисные операции с документом
+Дополнительные отчеты и проверки
+Интеграция со смежными модулями системы.
+Нажав на кнопку "Операции" доступны будут следующие варианты:
+Использование в приказе об изменении разряда
+Нажать кнопку "Операции" в панели инструментов;
+Выбрать пункт "Причины перемещений";
+Откроется окно справочника с полным перечнем причин;
+Сформировать документ на подписание - запускает процесс подготовки документа для системы кадрового электронного документооборота (СЭД).
+При нажатии на конпку, система автоматически подтягивает:
+Регистрационные данные документа (номер, дата);
+Информацию о создателе (ФИО, дата создания);
+Реквизиты организации и подразделения;
+Полный текст приказа в формате СЭД;
+Далее документ отправляется по маршруту.
+Под изменением оплаты труда следует понимать, как повышение, так и уменьшение заработка. Поэтому порядок оформления приказа имеет свои нюансы в зависимости от причины изменения оклада. Ст. 57 Трудового кодекса Российской Федерации предписывает в обязательном порядке вносить информацию о зарплате в трудовой договор, а в случае ее изменения соблюдать установленный порядок фиксации таких нововведений. Во всех случаях потребуется сформировать дополнительное соглашение к трудовому договору, в котором будут прописаны новые условия работы сотрудника, и издать приказ об изменении оклада. Если изменение оплаты труда не связано с переводом на другую должность, необходимо будет внести изменения в штатное расписание.
+Инициирование изменения оклада в сторону уменьшения по инициативе работодателя допускается только в строго ограниченном перечне случаев. Общий принцип их определения зафиксирован в ст. 74 ТК РФ. Еще одним вариантом снижения зарплаты сотрудника является перевод его на другую нижеоплачиваемую работу (ст. 72.1 ТК). В этих ситуациях работодатель обязан в срок, составляющий не менее двух месяцев, в письменной форме предупредить сотрудников, которых затронет изменение оклада, о готовящихся нововведениях в организации.
+
В реестре приказов об изменении оплаты труда представлены реквизиты:
+На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра и «Печать» - для распечатки приказа.
+
В шапке документа вводятся:
+После ввода вышеуказанных параметров и нажатия на кнопку «Заполнить» в таблицу будут вставлены работники подразделения с новыми окладами / тарифами. Таблицу можно редактировать вручную, если, например, нужно проставить разные оклады, вставить дополнительных сотрудников и т.д. Если с момента создания приказа в подразделении появились новые сотрудники, их можно добавить в таблицу с помощью одноименной кнопки. В подписанном приказе кнопки «Заполнить / Добавить» не доступны.
+В табличной части документа имеются реквизиты:
+Флаг «Приказ подписан» может быть доступным для редактирования и серого цвета (недоступным). Недоступность говорит о том, что по сотрудникам есть более новые документы и данный приказ редактировать нельзя.
+Приказы о поощрении - официальный документ, который подтверждает факт премирования или другого вознаграждения сотрудника. В качестве знака отличия может выступать письменная благодарность, грамота или ценный подарок.
+
В реестре приказов о прощении представлены реквизиты:
+При переходе в документ "Приказ о поощрении" в шапке документа вводятся:
+
Далее следует блок настройки работы с кнопками «Заполнить / Добавить»:
+Пример заполненного документа "Приказ о поощрении" выглядит следующим образом:
+
Если поощрение предусматривает выплату денежных средств, необходимо указать характер операции (разовый или постоянный).
+Если поощрение носит разовый характер, выбрать Вид операции - "Разовая", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать разовую операцию".
+На кнопке добавиться ссылка на созданный документ, "Разовая операция № и дата".
+
При нажатии на данную кнопку, открывается документ "Разовая операция" для дальнейшего заполнения ["Разовая операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#разовые_операции)
+Если поощрение носит постоянный характер, выбрать Вид операции - "Постоянная", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать постоянную операцию".
+На кнопке добавиться ссылка на созданный документ, "Постоянная операция № и дата".
+
При нажатии на данную кнопку, открывается документ "Постоянная операция" для дальнейшего заполнения ["Постоянная операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#постоянные_операции)
+Приказы о взыскании за нарушение - официальный документ, который подтверждает факт депремирования или других мер дисциплинарного наказания за неисполнение или ненадлежащее исполнение сотрудником трудовых обязанностей, возложенные на него трудовым договором, несоблюдение трудовой дисциплины (правил внутреннего трудового распорядка), нарушение требований по охране труда.
+
В реестре приказов о взыскании представлены реквизиты:
+При переходе в документ "Приказ о взыскании за нарушение" в шапке документа вводятся:
+
Далее следует блок настройки работы с кнопками «Заполнить / Добавить»:
+Пример заполненного документа "Приказ о поощрении" выглядит следующим образом:
+
Если Приказ о взыскании за нарушение предусматривает удержание денежных средств, необходимо указать характер операции (разовый или постоянный).
+Если взыскание носит разовый характер, выбрать Вид операции - "Разовая", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать разовую операцию".
+На кнопке добавиться ссылка на созданный документ, "Разовая операция № и дата".
+
При нажатии на данную кнопку, открывается документ "Разовая операция" для дальнейшего заполнения ["Разовая операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#разовые_операции)
+Если взыскание носит постоянный характер, выбрать Вид операции - "Постоянная", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать постоянную операцию".
+На кнопке добавиться ссылка на созданный документ, "Постоянная операция № и дата".
+
При нажатии на данную кнопку, открывается документ "Постоянная операция" для дальнейшего заполнения ["Постоянная операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#постоянные_операции)
+Приказы о прохождении мед. осмотра представляют собой официальные документы, в которых работодатель устанавливают обязательность или необходимость прохождения медицинского обследования для конкретных сотрудников или групп сотрудников.
+В Реестре документов следующие поля:
+
Пример заполненного документа "Приказ о прохождении мед. осмотра" выглядит следующим образом:
+
В случае изменения фамилии сотрудника, он должен уведомить об этом работодателя письменно и в качестве приложений указать в заявлении те документы, которыми подтверждается факт смены фамилии. Получив такое заявление, работодатель должен издать "Приказ об изменении ФИО". Этот распорядительный документ — основание для внесения соответствующих корректировок в учётные кадровые и бухгалтерские документы, а также во внутренние регистры и перечни, содержащие индивидуальные сведения работника.
+В Реестре документов следующие поля:
+
Пример заполненного документа "Приказ об изменении ФИО" выглядит следующим образом:
+
В шапке документа заполняем следующие поля:
+В основной табличной части, заполняются все поля по сотруднику, указываются его "старые" и "новые" данные.
+В нижней части, указывается документ, на основании которого происходит смена данных.
+При необходимости из документа "Приказ об изменении ФИО" можно распечатать нужные печатные формы. нажав на кнопку "Печать"
+
Сотрудник может выйти из отпуска по уходу за ребенком в любое время. Для этого он пишет заявление в свободной форме, а работодатель издает соответствующий приказ. Это касается и отпуска до 1,5 лет, и отпуска от 1,5 до 3 лет.
+В Реестре документов следующие поля:
+
Пример заполненного документа "Приказы о выходе из декретного отпуска" выглядит следующим образом:
+
Находясь в заполненном документе, на панели инструментов есть кнопки «Печать» можно распечатать доступные печатные формы.
+
Распоряжение о закреплении топливных карт нужно для контроля за оборотом ГСМ. Ставя подпись на нем, сотрудник обязуется расходовать бензин исключительно в служебных целях. В обратном случае его можно будет привлечь к ответственности.
+В Реестре документов следующие поля:
+
Пример заполненного документа "Приказ о закреплении топливных карт за водителями" выглядит следующим образом:
+
На панели инструментов доступны печатные формы, также есть возможность создать доп.соглашение к Трудовому договору
+
Увольнение — в трудовом праве прекращение трудовых отношений между работником и работодателем.
+
В реестре приказов об увольнении представлены реквизиты:
+На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра всех внесенных приказов по заданному периоду.
+
В шапке документа вводятся:
+На панели инструментов есть кнопки «Печать» - для распечатки приказа и «Операции» - для быстрого доступа к справочникам и работы с ними.
+В табличной части вводятся:
+
После нажатия на ссылку в столбце "Расчет компенсаций" в детальной части документа "Приказа об увольнении" в новой вкладке открывается документ "Расчет компенсации неиспользованного отпуска", для видимости документа необходимо настроить права. Далее с этим документом работает расчетный отдел.
+
Взаимоотношения сторон гражданско-правового договора базируются на нормах гражданского права и регламентируются Гражданским кодексом РФ. На практике различают следующие основные виды гражданско-правовых договоров, которые чаще называют «трудовыми соглашениями»: договор подряда, договор поручения, авторский договор, договор на выполнение научно-исследовательских, опытно-конструкторских и технологических работ, договор возмездного оказания услуг.
+Для создания сотрудника по договору ГПХ, необходимо:
+
Создать физическое лицо;
+Далее нажать на кнопку "Создать Сотрудника";
+В открывшемся модальном окне в поле "Статус" - выбрать вид "Сотрудник по договору ГПХ";
+Проверить все остальные поля и нажать на кнопку "Создать"
+Автоматически создаются два документа: Договор ГПХ и карточка Сотрудника
+
В форме документа "Договор ГПХ" заполняются реквизиты:
+Кроме стандартных кнопок в панели инструментов имеется:
+Образец заполненного "Договора ГПХ" выглядит следующим образом:
+
После сохранения заполненного договора, в карточку сотрудника автоматически подтянется информация из договора. Необходимо будет только заполнить в ней поле "Банк для перечислений".
+
Сотрудник по договору ГПХ не занимает штатную единицу, поэтому в реестре сотрудников будет отображаться со статусом "Внештатный".
+
Отчет, в котором формируются данные по контрагенту, содержит актуальную информацию о заработных платах и переменном вознаграждении в разрезе должностей, а также данные о льготах, кадровых политиках, практиках и HR-метриках.
+
В реестре Ежегодного обзора показаны реквизиты:
+