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 @@ + + + +Учет кадров. Документы.md + + + + + + + + + + + + +

Учет кадров. Документы

+

В «Lexema-HRM» ведется учет движения персонала, включая учет кадров по основному месту работы и по совместительству. Модуль позволяет хранить и обновлять личную информацию сотрудника с момента его поступления на работу до момента его увольнения, а также хранить информацию о бывших сотрудниках предприятия. Также обеспечивается формирование унифицированных форм по труду.

+

Функциональный состав модуля:

+ +

Сотрудники

+

Работник или Сотрудник — субъект трудового права, физическое лицо, работающее по трудовому договору у работодателя и получающее за это заработную плату. Правовое положение работника определяется трудовым законодательством, трудовым и коллективным договорами, локальными нормативными актами организации. Работник имеет права и несет обязанности, установленные трудовым законодательством страны.

+

Рисунок 7 Реестр сотрудников

+

В реестре сотрудников представлены основные реквизиты, необходимые для управления кадровыми данными:

+ +

Данные в реестре можно фильтровать, сортировать, группировать и настравить по любому из столбцов.

+

Для быстрого поиска используйте поиск по различным столбцам, например на скрине офильтровано по неполному графику.

+

Фильтр в сотрудниках

+

Фильтр по статусу сотрудника

+

Для отображения сотрудников с определенным статусом используется фильтр, доступный через кнопку «Статус» на панели инструментов реестра.

+

Фильтр в реестре сотрудников

+

По умолчанию реестр фильтруется по "Принятым" сотрудникам. При нажатии на кнопку открывается выпадающее меню со списком доступных статусов:

+ +

Выбор одного из пунктов применяет фильтр к данным в реестре, оставляя в таблице только строки, соответствующие выбранному статусу.

+

Для сброса фильтра и отображения всех сотрудников необходимо выбрать пункт «Сбросить фильтр».

+

Карточка Сотрудника

+

Полная информация по каждому сотруднику хранится в его индивидуальной карточке. +Для перехода к ней необходимо щёлкнуть по строке сотрудника в реестре.

+

Карточка сотрудника отражает полную историю кадровых событий: приказы о приеме, переводах, изменениях условий труда, отпусках, больничных, командировках, увольнении, а также расчётный стаж для начисления пособий и другие сведения, связанные с трудовой деятельностью в организации. +Вся информация структурирована и размещена по тематическим вкладкам для удобства навигации и работы.

+

Сведения

+

Рисунок 8 Сотрудники. Вкладка «Сведения»

+

Во вкладке «Сведения» карточки сотрудника представлены основные реквизиты, характеризующие его трудовые отношения с организацией. Значения большинства полей заполняются автоматически на основании данных из кадровых приказов и справочников.

+ + + + + + <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Член профсоюзаФлаг, устанавливается вручную при необходимости
+
+ + +

Перемещения

+

Вкладка «Перемещения»: +Все изменения в трудовых функциях и оплате труда сотрудника фиксируются в этой вкладке.

+

Записи создаются автоматически при оформлении приказов о приеме, переводе, увольнении и других кадровых действиях двигающие перемещения сотрудника. +Данные в таблице являются историческими и не подлежат редактированию.

+

Рисунок 9 Сотрудники. Вкладка «Перемещения»

+

Прочие приказы

+

Вкладка «Прочие приказы» в карточке сотрудника предназначена для отображения и управления всеми кадровыми документами, которые не относятся к основным категориям (прием, перевод, увольнение и т.д), но влияют на его трудовые условия, статус или выплаты.

+

Эта вкладка служит централизованным реестром для следующих типов документов:

+ +

Прочие приказы

+

Основные реквизиты в таблице:

+

Документ — ссылка на сам приказ. При нажатии открывается полная форма документа.

+

Номер — уникальный номер приказа, присвоенный системой.

+

Дата — дата создания приказа.

+

Приказ подписан — флажок, указывающий, что приказ официально подписан и вступил в силу.

+

Период действия — дата начала и окончания действия приказа.

+

Вид приказа — тип приказа (например, «О закреплении наставника», «О поощрении»).

+

Операция — вид выплаты или начисления, связанного с приказом (например, «Доплата за совмещение», «Премия за выслугу лет»).

+

Процент/Сумма — величина начисления (в процентах или фиксированной сумме).

+

Отпуска

+

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

+

Эта вкладка состоит из двух подвкладок: «Приказы» и «Использование».

+

Подвкладка Приказы

+

Содержит список всех приказов на отпуск, оформленных для данного сотрудника. Информация формируется автоматически при создании соответствующих кадровых документов (приказ о предоставлении отпуска, приказ о предоставлении отпуска без сохранения заработной платы).

+

Приказы по отпускам

+

Основные реквизиты в таблице:

+

Документ — ссылка на сам приказ. При нажатии открывается полная форма документа.

+

Номер — уникальный номер приказа, присвоенный системой.

+

Дата — дата создания приказа.

+

Статус — статус документа (например,"Создан", "Утвержден", "Учтен", "Рассчитан","Выплачен" ).

+

Период работы — дата начала и окончания периода, за который предоставляется отпуск.

+

Период отпуска — дата начала и окончания самого отпуска.

+

Вид отпуска — тип отпуска (например, «Ежегодный основной оплачиваемый отпуск», «Отпуск без сохранения заработной платы»).

+

Дни — количество календарных дней отпуска.

+

Подвкладка Использование (или «Использование отпусков»)

+

Содержит сводную информацию по использованию отпусков сотрудником за весь период работы. Данные в этой таблице не редактируются, а формируются автоматически на основе загруженных данных, внесенных приказов в системе и ручного редактирования в документе "Использование отпусков".

+

Использование в сотрудниках

+

Основные реквизиты в таблице:

+

Код — код вида отпуска (например, ОО — доп.отпуск по вредности, ОТ — ежегодный основной отпуск).

+

Вид отпуска — наименование вида отпуска.

+

Период работы — дата начала и окончания периода, за который положены дни отпуска.

+

Дни, не вход. в отп. стаж — количество календарных дней, которые не включаются в отпускной стаж.

+

Календарные дни отпуска — детализация использования отпуска:

+

Положено — количество дней, положенных сотруднику по закону или локальным актам за конкретный период работы.

+

Использовано — количество дней, фактически использованных сотрудником.

+

Не исп.-но (остаток) — количество дней, оставшихся неиспользованными (показывает остатки на текущую дату).

+

Праздничные дни — количество праздничных дней, попавших в период отпуска.

+

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

+

Прочие неявки

+

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

+

Прочие неявки

+

Эта вкладка содержит список всех оформленных документов, фиксирующих периоды отсутствия сотрудника по различным основаниям. Информация в ней не редактируется, а формируется автоматически при создании соответствующих кадровых документов.

+

Основные реквизиты в таблице: +Код строки — уникальный идентификатор записи в реестре. +Документ — ссылка на сам документ (приказ, лист нетрудоспособности). При нажатии открывается полная форма документа. +Номер — номер документа, присвоенный системой при создании. +Дата — дата создания документа. +Статус — статус документа (например, "Создан", "Утвержден", "Учтен", "Рассчитан","Выплачен"). +Период действия — дата начала и окончания периода неявки. +Вид отсутствия — тип неявки (например, «Командировка», «Временная нетрудоспособность»). +Дни — количество календарных дней неявки.

+

Поощрения

+

Во вкладке «Поощрения» карточки сотрудника отражается история всех поощрений, применённых к данному сотруднику. Записи создаются автоматически при оформлении документов «Приказ о поощрении» и не подлежат редактированию.

+

Поощрения

+

Реквизиты таблицы:

+

Код строки — уникальный идентификатор записи.

+

Документ — ссылка на сам документ. При нажатии открывается полная форма документа.

+

Номер — номер приказа о поощрении.

+

Дата — дата создания приказа.

+

Приказ подписан — флаг, указывающий, что приказ был подписан.

+

Период действия — период, в течение которого действует поощрение (указывается в приказе).

+

Дата начала — дата начала периода действия поощрения.

+

Дата окончания — дата окончания периода действия поощрения.

+

Вид поощрения — тип поощрения (например, «Премия», «Благодарность», «Ценный подарок»), выбирается из справочника.

+

Мотив поощрения — текстовое описание причины поощрения, указанное в приказе.

+

Основание — название документ или служебную запись, послужившую основанием для поощрения.

+

Сумма — размер денежного поощрения, если таковое предусмотрено.

+

Ежемесячно — флаг, устанавливаемый при назначении ежемесячной премии.

+

Взыскания

+

Во вкладке «Взыскания» карточки сотрудника отражается история всех дисциплинарных взысканий, применённых к данному сотруднику. Записи создаются автоматически при оформлении документов «Приказ о взыскании за нарушение» и не подлежат редактированию.

+

взыскания

+

Реквизиты таблицы:

+

Код строки — уникальный идентификатор записи.

+

Документ — ссылка на сам документ. При нажатии открывается полная форма документа.

+

Номер — номер приказа о взыскании.

+

Дата — дата создания приказа.

+

Приказ подписан — флаг, указывающий, что приказ был подписан.

+

Период действия — период, в течение которого действует взыскание (указывается в приказе).

+

Дата начала — дата начала периода действия взыскания.

+

Дата окончания — дата окончания периода действия взыскания.

+

Вид взыскания — тип взыскания (например, «Замечание», «Выговор», «Увольнение»), выбирается из справочника.

+

Вид нарушения — описание типа нарушения, послужившего основанием для взыскания, выбирается из справочника.

+

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

+

Сумма — размер денежного удержания, если взыскание связано с материальной ответственностью.

+

Ежемесячно — флаг, устанавливаемый при назначении ежемесячного удержания.

+

Медосмотры

+

Во вкладке «Медосмотры» карточки сотрудника отражается история прохождения медицинских осмотров. Записи создаются автоматически при оформлении документов «Приказ о прохождении медосмотра» и не подлежат редактированию.

+

медосмотры

+

Реквизиты таблицы:

+

Документ — ссылка на сам документ. При нажатии открывается полная форма документа.

+

Номер — номер приказа о прохождении медосмотра.

+

Дата — дата создания приказа.

+

Приказ подписан — флаг, указывающий, что приказ был подписан.

+

Период действия - период, в течение которого длился медосмотр.

+

Дата начала — дата начала периода действия приказа (указывается в приказе).

+

Дата окончания — дата окончания периода действия приказа (указывается в приказе).

+

Сумма — размер оплаты, связанной с прохождением медосмотра (если таковая предусмотрена).

+

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

+

Аттестации

+

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

+

Аттестация

+

Реквизиты таблицы:

+

Дата аттестации — дата проведения аттестации, указанная в приказе.

+

Решение комиссии — текстовое поле с результатом аттестации (например, «Признать аттестованным», «Не аттестован», «Рекомендовать к повышению»).

+

Протокол - документ, фиксирующий ход и результаты заседания аттестационной комиссии.

+

Номер — номер протокола комиссии по аттестации.

+

Дата — дата составления протокола.

+

Основание — текстовое описание основания для проведения аттестации.

+

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

+

Квалификации

+

Во вкладке «Квалификации» отражается история повышения квалификации сотрудника. Записи вносятся вручную в карточке сотрудника и не связаны с отдельными документами-приказами.

+

квалификация

+

Реквизиты таблицы:

+

Период обучения:

+

Дата начала — дата начала периода обучения;

+

Дата окончания — дата окончания периода обучения.

+

Вид повышения квалификации — тип обучения (например, «Краткосрочные», «Долгосрочные», «Профессиональная переподготовка»), выбирается из справочника.

+

Учреждение послевузовского образования — наименование образовательного учреждения, в котором проходило обучение.

+

Документ:

+

Вид — тип документа, подтверждающего факт обучения (например, «Свидетельство», «Диплом», «Удостоверение»);

+

Серия — серия документа;

+

Номер — номер документа;

+

Дата — дата выдачи документа.

+

Основание — основание, послужившее причиной для направления на обучение.

+

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

+

Переподготовки

+

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

+

переподготовка

+

Реквизиты:

+

Период обучения: +Дата начала, Дата окончания — временные рамки программы переподготовки.

+

Учреждение послевузовского образования — наименование образовательной организации.

+

Документ:

+

Вид — тип документа, подтверждающего факт обучения;

+

Серия, Номер, Дата — реквизиты выданного диплома.

+

Основание — текстовое описание причины направления на переподготовку.

+

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

+

Стаж работы

+

Во вкладке «Стаж работы» карточки сотрудника отражается история трудового стажа, необходимая для расчета пособий (в первую очередь — больничных) и формирования отчетности. Данные в этой вкладке используются системой при расчете среднего заработка для больничного листа.

+

Вкладка состоит из двух основных разделов:

+
    +
  1. Стаж на дату
  2. +
+

В этом разделе отображаются итоговые значения стажа, рассчитанные на текущую дату.

+

Вид стажа — тип стажа (например, «Общий», «В районах Крайнего Севера»).

+

Дата — дата, на которую рассчитан стаж.

+

Годы, Месяцы, Дни — разбивка стажа по периодам.

+

Эти данные являются результатом автоматического расчета на основе информации, введенной во втором разделе — «Трудовая книжка».

+
    +
  1. Трудовая книжка
  2. +
+

Здесь хранится детальная информация о предыдущих местах работы сотрудника. Записи создаются вручную непосредственно в карточке сотрудника и не связаны с отдельными документами-приказами.

+

Реквизиты таблицы:

+

Период работы:

+

Дата начала — начало периода работы;

+

Дата окончания — окончание периода работы;

+

Стаж работы:

+

Годы, Месяцы, Дни — продолжительность периода работы.

+

Организация — наименование работодателя.

+

Должность — должность, занимаемая сотрудником.

+

Примечание — дополнительная информация (например, указывается в каком разряде работал «Электросварщик 2-го разряда» или если несколько должностей занимал).

+

Важно: Эти записи являются источником данных для расчета стажа. При формировании больничного листа система использует информацию из этого раздела для определения общего и специального стажа, а также для расчета среднего заработка за 2 предыдущих года.

+

Дополнительные функции:

+

Расчет стажа — кнопка «Расчет стажа» позволяет пересчитать итоговые значения стажа на дату, указанных в "трудовой книжке".

+

Наличие бумажной трудовой книжки — флажок, указывающий, что у сотрудника есть бумажная трудовая книжка (актуально при переходе на электронный документооборот).

+

Дата перехода на электронную книжку — дата, с которой стаж считается по данным системы (по умолчанию — 15.03.2021).

+

Примечание: Информация во вкладке «Стаж работы» используется исключительно для расчетов и отчетности. Она не заменяет официальную трудовую книжку и не является юридически значимым документом без соответствующей печати и подписи.

+

Спецодежда

+

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

+

Размеры подтягиваются из справочника «Размеры СПО», который содержит стандартные значения для различных видов спецодежды (например, «Головной убор», «Одежда», «Обувь», «Перчатки», «Рукавицы»).

+

alt text

+

Эти данные используются при выдаче спецодежды со склада

+

Подотчет

+

Во вкладке «Подотчет» карточки сотрудника отражается информация о выданном имуществе (спецодежде, инструменте, ТМЦ), которое сотрудник получил для выполнения служебных обязанностей.

+

Записи в этой вкладке создаются автоматически в карточке сотрудника.

+

Реквизиты таблицы:

+

Код — уникальный идентификатор записи.

+

Наименование — название выданного предмета или вида спецодежды (например, «Костюм рабочий», «Дрель», «Книга "Ремонт станков"»).

+

Ед.изм. — единица измерения (например, «шт»).

+

Кол-во — количество выданных единиц.

+

Дата выдачи — дата передачи имущества сотруднику.

+

Срок службы, мес — срок, на который выдается имущество (в месяцах).

+

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

+

Эта информация используется для контроля выдачи и возврата материальных ценностей, а также для формирования актов списания и отчетности по обеспечению персонала средствами индивидуальной защиты и инструментом.

+

Печатные формы**

+

Кнопка «Печать» в карточке сотрудника предназначена для формирования и вывода на печать различных унифицированных форм, справок и документов, связанных с данным сотрудником.

+

Рисунок 19 Печатные формы +При нажатии на кнопку открывается выпадающее меню со списком доступных для печати форм. Пользователь может выбрать нужную форму, и система сформирует её в указанном формате (pdf или docx).

+

Доступные формы:

+

Форма Т-2 — Личная карточка сотрудника (в форматах PDF, docx A4, docx A3).

+

Форма 10 — Карточка гражданина, подлежащего воинскому учету (docx).

+

Приложение № 2 — Сведения о гражданине, подлежащем воинскому учету (PDF).

+

Справка о месте работы (docx).

+

Согласие на обработку персональных данных.

+

Договор о материальной ответственности (индивидуальный).

+

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

+

Кнопка «Создать документ»

+

Кнопка «Создать документ» в карточке сотрудника предназначена для упрощения и ускорения работы кадровых специалистов. Она позволяет создавать новые кадровые документы (приказы, неявки) непосредственно из карточки сотрудника, без необходимости выходить в реестр документов.

+

Создать документ

+

Как это работает:

+
    +
  1. +

    Нажать кнопку «Создать документ» в панели инструментов карточки сотрудника;

    +
  2. +
  3. +

    Откроется модальное окно с выпадающим списком «Выберите тип документа»;

    +
  4. +
  5. +

    Выбрать нужный тип документа из списка (например, «Больничный»), нажать кнопку "Создать";

    +
  6. +
  7. +

    После система автоматически создаст новый документ выбранного типа, предварительно заполнив его реквизиты данными из карточки сотрудника (ФИО, табельный номер, должность, подразделение и др.);

    +
  8. +
  9. +

    Документ откроется в новой вкладке для редактирования.

    +
  10. +
+

Преимущества:

+

✅ Экономия времени: Не нужно искать нужный документ в меню или реестре — все необходимые типы доступны в одном месте.

+

✅ Автоматизация: Система автоматически подтягивает данные сотрудника, что снижает риск ошибок при ручном вводе.

+

✅ Удобство: Позволяет быстро оформлять любые кадровые действия, находясь в карточке сотрудника.

+

Кнопка «Физ. лицо»

+

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

+

физическое лицо

+

При нажатии на кнопку система открывает в новой вкладке карточку физического лица, содержащую всю персональную информацию о человеке: паспортные данные, адреса, контакты, образование, воинский учет, банковские реквизиты и другие сведения, не связанные напрямую с его трудовой деятельностью в текущей организации.

+

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

+

Приказы о приеме на работу

+

Приказ о приеме на работу — это первичный документ кадрового учета. Приказ о приеме на работу оформляется на основании сведений, указанных в трудовом договоре работника. Его содержание должно быть идентичным подписанному соглашению о труде.

+

Документом регистрируется прием на работу работников организаций, а также размеры оплаты труда работников – оклады.

+

Одно и то же физическое лицо может быть оформлено работником нескольких организаций информационной базы, но основное место работы у него может быть лишь в одной из них; в других же организациях работник должен быть оформлен как внешний совместитель. Работник может быть принят на работу в ту же организацию второй раз, но уже как внутренний совместитель.

+

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

+

Рисунок 2 Выбор статуса сотрудника при приеме на работу

+

поля Создать: Трудовой договор, Создать: Приказ о приеме - по умолчанию стоит чекбокс на автоматическое создание документов и +введена текущая дата для создания документов (при необходимости можно подкорректировать даты и выбрать нужные документы).

+

"Приступить к работе с"- дата выхода сотрудника на работу, автоматически подтягивается текущее число. Далее эта дата подтягивается в документы: "Приказ о приеме", "Трудовой договор". При необходимости дату можно подкорреткировать на нужную в данном модальном окне или в созданных документах.

+

Условия приема в данном поле выбирается необходимый вид через всплывающий лукап.

+

Рисунок 3 "Условия приема"

+

Табельный № - система автоматически определяет последний использованный табельный номер и новому сотруднику присваивается следующий по порядку номер. При необходимости табельный номер можно подкорреткировать вручную.

+

После заполнения всех полей, при нажатии кнопки "Создать" открываются выбранные документы, для дальнейшего заполнения.

+

Рисунок 4 Форма ввода приказа о приеме

+ +

В табличной части вводятся:

+ +

В нижней детальной таблице, подтягиваются надбавки по штатной еденице из Штатного расписания. Если сотруднику необходимо внести дополнительные надбавки, в данную таблицу они добавляются через плюсик добавить. Из выпадающего списка выбрать необходимые надбавки и доплаты, заполнить % или суммовые колонки по ним.

+

доплаты и надбавки

+

К документу можно распечатать Приказ, распоряжения о приеме работников (унифицированные формы Т-1 или Т-1а) и другие документы по кнопке «Печать».

+

Рисунок 5 "Печать"

+

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

+
    +
  1. Условие приема подтягивается в печатную форму из шапки документа "Приказ о приеме на работу";
  2. +
  3. Характер работы подтягивается в печатную форму из документа "Приказ о приеме на работу" в детальной части таблицы, столбец "Характер работы"
  4. +
  5. В документе "Приказ о приеме на работу" если в детальной части таблицы, заполнен столбец "Краткое содержание", то данный текст подтягивается следующим по очереди (в данное поле можно вносить информацию по временному исполнению обязанностей, за сотрудника, за кем согласно ТК РФ сохраняется место);
  6. +
+

Рисунок Приказ о приеме

+
    +
  1. Режим рабочего времени тянется из документа "Вид графиков" из поля "Примечание", по каждому графику нужно заполнить свой режим рабочего времени
  2. +
+

Рисунок Вид графиков

+
    +
  1. Данные об инвалидности тянутся из карточки "Физического лица" из вкладки "Особая категория", из столбца "Вид"
  2. +
+

Рисунок Инвалид

+

После заполнения всех нужных полей, документ необходимо сохранить и подписать. Вся заполненная информация, подтягивается в печатную форму Т-1

+

Печатная форма Т-1

+

Созданный и сохраненный «Приказ о приеме на работу» находится в Реестре "Приказы о приеме на работу"

+

Рисунок 6 Реестр приказов о приеме на работу

+

В реестре представлены реквизиты:

+

В шапке реестра:

+ +

В детальной части реестра:

+ +

Трудовые договоры

+

Трудовой договор – это соглашение между работодателем и сотрудником, в соответствии с которым работодатель обязуется предоставить сотруднику работу по обусловленной трудовой функции, обеспечить условия труда, предусмотренные трудовым законодательством, коллективным договором, соглашениями, локальными нормативными актами и данным соглашением, своевременно и в полном размере выплачивать работнику заработную плату, а сотрудник обязуется лично выполнять определенную этим соглашением трудовую функцию в интересах, под управлением и контролем работодателя, соблюдать правила внутреннего трудового распорядка, действующие у данного работодателя.

+

Трудовой договор создается автоматически при создании сотрудника из карточки физического лица, по кнопке Создать сотрудника

+

Рисунок 1 Реестр документа «Трудовые договоры»

+

Для нумерации Трудовых договоров (включение/отключение присваивания номеров), необходимо зайти в реестр "Контрагенты", выбрать необходимую организацию, далее во вкладке "Доп.реквизиты" в поле "Нумерация трудовых договоров", поставить или убрать галку, сохранить документ.

+

Если галка не стоит - нумерации в ТД не будет, если галку установить, то ТД будет автоматически присваиваться порядковый номер, при сохранении документа.

+

Рисунок 1.2 Нумерация ТД

+

Для проставления префикса к ТД, необходимо зайти в реестр "Виды документов по учету труда и неявкам", выбрать документ "Трудовой договор", внутри документа прописать или удалить префикс, сохранить документ.

+

Рисунок 1.3 Префикс

+

После настройки номер и префикс будут автоматически подставляться в печатную форму трудового договора.

+

Рисунок 1.4 ТД

+

Ключевым элементом заполнения трудового договора является выбор вида шаблона, который определяет структуру и содержание печатной формы. Выбор выполняется в поле «Вид труд. соглашения»*.- выбирается вид шаблона для формирования печатной формы.

+

Вид труд.согл

+

После выбора шаблона в детальную таблицу подтянутся данные из выбранного шаблона

+

alt text

+

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

+

alt text

+

Далее приведено подробное описание настройки шаблонов печатных форм в следующих разделах:

+

— «Виды шаблонов к договорам»;

+

— «Разделы трудовых договоров».

+

Виды шаблонов к договорам

+

Виды шаблонов к договорам - это системный справочник, содержащий заготовленные шаблоны форм трудовых договоров для автоматического формирования различных печатных форм трудовых договором. Каждый шаблон определяет структуру и содержание трудового договора, который будет использоваться при оформлении сотрудников различных категорий.

+

Для отображения в документе "Трудового договора" в поле "Вид труд. соглашения* необходимого вида шаблона трудового соглашения, необходимо выполнить следующие действия:

+
    +
  1. +

    Создать все виды Трудовых договоров, которые используются на предприятии, для этого необходимо в реестре "Виды шаблонов к договорам" по кнопке "Создать" документ "Вид шаблона". Заполнить обязательные поля, помеченные *:

    + +

    Виды шаблона

    +
  2. +
+

Далее необходимо заполнить детальную часть документа, в которой прописываются пункты из трудового договора,чтобы при формировании на печать вышел ТД ,который используется на предприятии, например как на скрине.

+

Трудовой договор

+

На нем видно, что печатная форма ТД состоит из: +Шапки, в которой прописываются название организации, данные руководителя предприятия и сотрудника:

+ +

Нулевой пункт

+

!!! info "Внимание" +Данные, которые будут изменятся, необходимо прописать в фигурных скобках {} и на русском языке скопировать нужный текст из справочника "поля для заполнения соглашений".

+
Например: Организация, должность и ФИО руководителя предприятия, ФИО сотрудника, сумма и т.д.  
+
+

На скрине по ТД, который находится выше, в шапке ТД есть данные, которые могут измениться: полное и краткое наименование организации, должность и ФИО руководителя,основание назначения, ФИО сотрудника.

+

Изменения данных

+

Для того чтобы данные подтягивались с учетом изменений, необходимо сделать следующее:

+
    +
  1. Удалить этот текст, на месте них проставить фигурные скобки {};
  2. +
+

фигурные ные скобки

+
    +
  1. Потом необходимо в шапке документа справой стороны нажать на кнопку "Поля для заполнения соглашений" и выбрать там наименование поля, по которому хотим чтобы подтягивалась информация. Для этого в фильтре набираем необходимые словосочетания или слова, организация, директор, сотрудник и из предложенных вариантов выбираем нужный.
  2. +
+

Поля организация

+

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

+

копирование

+
    +
  1. Возвращаемся в во вкладку документа "Вид шаблона" и вставляем скопированный текст в фигурную скобку
  2. +
+

Вид шаблоны заполненные скобки

+

Разделы трудовых договоров

+

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

+

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

+

Если на предприятии используются Разделы, то необходимо:

+
    +
  1. В справочнике "Разделы трудовых договоров" внести по кнопке "Создать" все имеющиеся разделы в печатной форме ТД
  2. +
+

Разделы

+
    +
  1. Далее в документе "Вид шаблона" добавляем через "+" следующую строчку. В печатной форме ТД, после шапки идет "Раздел" с подпунктами, поэтому к каждому № п/п необходимо указывать номер раздела, чтобы сортировка была внутри раздела по подпунктам.
  2. +
+

под пункты

+

После внесения всех разделов и пунктов ТД, необходимо сохранить документ.

+

Далее в созданном документе "Трудовой договор" необходимо в лукапе "Вид труд. соглашения*" выбрать нужный вид ТД

+

Трудовой договор

+

после этого необходимо нажать кнопку "Заполнить" чтобы в фигурных скобках подтянулась информация

+

ЗАполнить кнопка

+

документ обновится с необходимыми данными

+

Заполнить ТД

+

Когда в документе "Трудовой договор" выбрали вид из лукапа "Вид труд. соглашения*", поле закрывается от редактирования. Для того чтобы заново открыть поле необходимо сделать следующие действия:

+
    +
  1. Выбрать чекбоксом все строчки в детальной таблице;
  2. +
  3. Нажать на Удалить в детальной части документа;
  4. +
  5. Нажать в шапке документа сохранить и обновить в правом углу документа.
  6. +
+

Удаление пунктов

+

Поле откроется для редактирования.

+

Редактирование вида

+

Дополнительные соглашения к трудовым договорам

+

Раздел "Дополнительные соглашения" предназначен для автоматизированного учета всех изменений условий трудовых договоров. Каждое соглашение является официальным документом, вносящим правки в оригинальный трудовой договор.

+

Содержание реестра:

+

В реестре "Дополнительные соглашения к трудовым договорам "представлена таблица, которая содержит следующие колонки:

+ +

Реестр

+

Для входа в документ необходимо перейти в "Меню" - "Учет кадров. Документы" - выбрать пункт "Дополнительные соглашения к трудовым договорам". Для доступа к документу нужны определенные права.

+

[Рисунок 1 Меню](### Пример поиска документа в меню)

+

Откроется реестр "Дополнительные соглашения к трудовым договорам".

+

[Рисунок 2 Пример реестра "Дополнительные соглашения к трудовым договорам"](### Пример отображения реестра "Дополнительные соглашения к трудовым договорам")

+

Документ

+

!!! info "Внимание" +В реестре "Дополнительные соглашения к трудовым договорам" нет кнопки "Создать", потому что эти документы генерируются системой автоматически на основе приказов.

+

Пример заполненного документа "Дополнительные соглашения к трудовым договорам" выглядит следующим образом:

+

[Рисунок 4 Пример документа "Дополнительные соглашения к трудовым договорам"](### Пример заполненного "Дополнительные соглашения к трудовым договорам")

+

Документ содержит следующие ключевые элементы:

+

Номер/Дата - проставляется автоматически при создании "Дополнительного соглашения". Важная особенность: Нумерация ведется не в общем порядке по всему реестру, а индивидуально для каждого сотрудника. Система автоматически определяет, какое по счету это изменение к трудовому договору конкретного сотрудника.

+

Вид соглашения - проставляется автоматически из приказа, на основании которого создаётся документ.

+

Трудовой договор - проставляется автоматически номер и дата конкретного сотрудника.

+

Документ-источник - данные приказ , название, номер и дата.

+

Срок - дата вступления в силу и срок действия.

+

Вид документа (код) - содержит техническое наименование формы документа, используемое в системе. Этот код необходим для корректной обработки и маршрутизации документа внутри системы. Значение присваивается автоматически при создании документа.

+

Физическое лицо - ФИО с кем было составлено соглашение.

+

Код детальной строки приказа- содержит уникальный технический идентификатор, который связывает дополнительное соглашение с конкретной строкой исходного приказа в системе. Код присваивается автоматически при создании документа

+

Примечание - предназначено для внесения дополнительной информации, уточнений или служебных комментариев к дополнительному соглашению, которые не отражены в основных полях документа.

+

Раздел «Пункты соглашения» содержит конкретные условия и изменения, которые вносятся в трудовой договор. Все пункты формируются системой автоматически на основе предустановленных Шаблонов дополнительных соглашений к трудовым договорам, соответствующих виду дополнительного соглашения.

+

Возможности редактирования

+

Текст в разделе «Пункты соглашения» доступен для ручного редактирования, что позволяет адаптировать стандартный шаблон под индивидуальные условия.

+

Способы редактирования:

+

Правка текста в строке:

+ +

Удаление строки:

+ +

Добавление новой строки:

+ +

Порядок действий при редактировании дополнительного соглашения:

+
    +
  1. +

    Внесение правок → отредактировать, добавить или удалить пункты соглашения;

    +
  2. +
  3. +

    Сохранение документа → нажать кнопку «Сохранить»;

    +
  4. +
  5. +

    Формирование печатной формы → после сохранения нажать кнопку 🖨️.

    +
  6. +
+

Особенности:

+ +

Отображение дополнительных соглашений в трудовом договоре сотрудника

+

[alt text](### Пример отображения "Дополнительных соглашений в документе "Трудовой договор")

+

Все заключенные дополнительные соглашения автоматически отображаются в документе "Трудового договора" сотрудника, обеспечивая полную историю изменений условий труда.

+

По каждому соглашению видно: Дата и Номер заключения, Вид и срок действия. По ссылке прописанной в столбце "Код" можно переходить в документретный документ "Дополнительного соглашения"

+

Порядок просмотра:

+ +

-Перейти во вторую детальную таблицу "Дополнительные соглашения";

+ +

Приказы о переводе

+

Документ «Приказ о переводе на другую работу» предназначен для оформления изменений в трудовых условиях сотрудника: при переходе на новую должность, в другое подразделение или при изменении условий труда. Все изменения фиксируются в истории перемещений сотрудника и автоматически влияют на его текущие выплаты и отчётность.

+

Реестр приказов о переводе

+

В реестре отображаются все созданные документы.

+

Рисунок 20 Реестр приказов о переводе

+

Реквизиты:

+

Номер приказа

+

Дата приказа

+

Приказ подписан — флаг, который при активации окрашивает строку в жёлтый цвет.

+

Список работников по приказу

+

Вид перевода

+

Причина перевода

+

Краткое содержание

+

Примечание

+

На панели инструментов доступны кнопки: "Период" для фильтрации документов по датам, "Создать", "Печать".

+

Форма документа

+

Шапка документа

+

alt text

+

Дата приказа — заполняется автоматически при (подставляется текущее число);

+

Номер приказа — присваивается системой при сохранении;

+

Приказ подписан — устанавливается вручную после проверки данных. При проставлении галки документ становится официально действующим;

+

Причина перевода — выбирается из справочника «Причины переводов/перемещений». Текст причины подтягивается в печатную форму;

+

Без проверки занятых ШЕ — флажок, позволяющий оформить перевод сотрудника на уже занятую штатную единицу. Используется для исправления ошибок или оформления фактически сложившихся ситуаций.

+

Основание — текстовое поле для указания ссылки на нормативный акт, внутренний документ или иное обоснование перевода. Если в приказе указано несколько сотрудников, можно указать одно и то же основание для всех сразу:

+ +

Примечание — поле для дополнительных комментариев. Подтягивается в печатную форму Т-5 pdf, docx.

+

Детальная таблица

+

Заполняется информация по каждому сотруднику:

+

Сотрудник — выбирается из списка;

+

Доп.соглашение - ссылка на документ "дополнительного соглашения к трудовому договору";

+

Прежнее назначение — данные о предыдущей должности, подразделении и дате назначения — подтягиваются автоматически;

+

Новое назначение:

+

Подразделение — выбирается из справочника;

+

Должность — выбирается из штатного расписания. Система проверяет соответствие выбранной должности штатной единице. Если должность не соответствует штатной единице, поле очищается, и выдаётся предупреждение;

+

Разряд — подтягивается из штатной единицы;

+

Территория — указывается, если сотрудник переходит на участок, расположенный на другой территории,отображаются по галке в УПП;

+

Период работы на новом месте — дата начала и окончания нового назначения;

+

Вид перевода — выбирается из справочника;

+

Ставка — коэффициент рабочей нагрузки;

+

Основная оплата — вид и сумма;

+

Надбавка — вид и сумма, отображаются по галке в УПП;

+

Вид графика работы — выбирается из справочника;

+

Основание (перевода) — наименование, номер и дата документа, послужившего основанием;

+

Штатное расписание — подтягивается автоматически;

+

Важно: При выборе сотрудника система автоматически подтягивает его последнее перемещение. При сохранении документа с проставленной галкой «Подписан» предыдущее перемещение закрывается (дата окончания устанавливается равной дате начала нового перевода). Это позволяет корректно вести историю и рассчитывать выплаты.

+

Кнопка Создать доп.соглашение

+

В системе предусмотрен функционал для оформления дополнительного соглашения к трудовому договору при внесении изменений в условия труда сотрудника. Кнопка находится в шапке документа.

+

доп.соглашение

+

При нажатии на кнопку доступны два варианта:

+

«по выбранным сотрудникам» — для выделенных строк;

+

«по всем сотрудникам» — для всех строк в документе.

+

Далее система автоматически откроет новую вкладку с формой «Дополнительное соглашение к трудовому договору». Форма соглашения заполняется автоматически на основе данных из приказа и карточки сотрудника:

+

доп.соглашение в новой вкладке

+

Ссылка на созданное соглашение отображается в столбце «Доп. соглашение» исходного приказа. +Чтобы ссылка появилась сразу после создания, требуется нажать кнопку «Обновить» в правом верхнем углу окна приказа.

+

Ссылка в приказе

+

Таким образом, приказ и дополнительное соглашение формируются как связанный комплект документов, отражающий юридически значимое изменение условий трудового договора.

+

Оформление постоянного перевода из временного

+

Для оформления постоянного перевода сотрудника, ранее переведенного на временную должность, предусмотрен специализированный механизм.

+

Как это работает:

+

Условие активации: +В документе «Приказ о переводе на другую работу», если в столбце «Вид перевода» выбрано значение «Временный» (или иной вариант, установленный в справочнике), в панели инструментов становится доступна кнопка «Создать постоянный перевод».

+

временный

+

Создание нового приказа:

+

При нажатии на кнопку «Создать постоянный перевод» система автоматически создает новый документ «Приказ о переводе на другую работу». Этот новый приказ заполняется данными из исходного документа (информация о сотруднике, новой должности, подразделении, разряде и т.д.).

+

новый постоянный

+

В созданном документе автоматически применяются следующие изменения:

+ +

Ссылки

+

Кнопка «Операции

+

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

+

операции

+

При нажатии на кнопку открывается выпадающее меню:

+ +

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

+

Кнопка Реестр

+

В документе «Приказ о переводе на другую работу» кнопка «Реестр» предназначена для быстрого перехода в основной реестр документов данного типа.

+

реестр

+

При нажатии на эту кнопку система открывает вкладку с реестром "Приказов о переводе", отфильтрованных по последнему выбранному периоду в реестре. Это позволяет пользователю:

+

✅ Просмотреть историю переводов – увидеть все ранее оформленные переводы сотрудников в хронологическом порядке.

+

✅ Найти и открыть ранее созданный приказ – быстро перейти к нужному документу, не выполняя новый поиск в общем реестре.

+

✅ Выполнить поиск по номеру, дате или сотруднику – фильтровать список переводов для быстрого доступа к нужной информации.

+

🔒 Автоматическая блокировка (закрытие) приказа от редактирования

+

Документ «Приказ о переводе на другую работу» закрывается от редактирования, если на дату, указанную в детальном гриде приказа («Дата начала периода работы»), выполняется одно из следующих условий:

+

Блокировка

+

⚠️ Создан Табель учета рабочего времени, в котором сотрудник учтен с этой даты.

+

Пример: Приказ № МП471-л/с от 19.11.2025 содержит строку для сотрудника Афанасьева И.Д., где «Дата начала» — 19.11.2025. Если в табеле № МП530 от 30 ноября 2025 г. этот сотрудник учтен с 19.11.2025 — редактирование приказа запрещено.

+

⚠️ Существует последующий кадровый приказ о перемещении (перевод, изменение оплаты ,графика и т.д), который начинается не позже даты начала работы по текущему приказу, и этот приказ подписан.

+

✏️ Как разблокировать документ для редактирования?

+

Чтобы снова получить возможность редактировать приказ, необходимо удалить или изменить связанные данные, которые вызвали блокировку:

+

✅ Вариант 1: Удалить запись сотрудника в Табеле учета рабочего времени

+

Удалите строчку с данным сотрудником из табеля, где он учтен с даты, указанной в приказе.

+

✅ Вариант 2: Снять подпись с последующего приказа

+

Найдите последующий приказ, который перекрывает текущий, и снимите галку «Подписан». Это временно отменит его действие и позволит редактировать предыдущий приказ.

+

Примечание

+

Эта логика реализована для обеспечения целостности кадровых данных и соответствия с бухгалтерским учетом. Изменение приказа, который уже отражен в табеле или перекрыт следующим приказом, может привести к ошибкам в расчетах и отчетности.

+

Приказы об окончании временных переводов

+

Приказ об окончании временных переводов - это документ, который оформляется в организации или компании для фиксации окончания временных переводов сотрудников. Трудовые отношения с переведенным сотрудником не прекратятся, а только утратит силу соглашение, согласно которому переведенный сотрудник временно исполнял обязанности основного сотрудника, и вновь начнут действовать условия ранее заключенного трудового договора о выполнении работы по должности, которую выполнял временный сотрудник до перевода.

+

Рисунок 25 Реестр Приказ об окончании временных переводов

+

В реестре приказов о переводе представлены реквизиты:

+ +

На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра.

+

Пример заполненного документа "Приказ об окончании временных переводов" выглядит следующим образом:

+

Рисунок 26 Документ

+

В шапке документа вводятся:

+ +

Приказ может быть составлен на несколько сотрудников, если у них совпадают ключевые реквизиты. В табличной части вводятся:

+ +

Приказы о перемещении на территории

+

Перемещение на территории – разновидность перевода, связанная с изменением условий труда.

+

Рисунок 27 Реестр приказов о перемещении на территории

+

В реестре приказов о переводе представлены реквизиты:

+ +

На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра.

+

Пример заполненного документа "Приказ об окончании временных переводов" выглядит следующим образом:

+

Рисунок 28 Форма ввода приказа о перемещении на территории

+

В шапке документа вводятся:

+ +

Приказ может быть составлен на несколько сотрудников, если у них совпадают ключевые реквизиты. В табличной части вводятся:

+ +

На панели инструментов есть кнопки «Печать» - для распечатки приказа.

+

Рисунок 28 Печатные формы

+

«Операции» - для быстрого доступа к справочникам и работы с ними. «Заполнить», «Дополнить» - для заполнения таблицы полным составом подразделения, дополнением ранее не введенных.

+

Рисунок 29 Операции

+

Откроется справочник "Причины переводов/перемещений".

+

Рисунок 30 Справочники

+

Приказы об изменении графика работы

+

Рассматриваемый документ необходим для обеспечения правомерности изменения режима рабочего времени сотрудников компании. Такое изменение режима в общем случае должно быть согласовано посредством издания и подписания внутрикорпоративных актов, предполагающих внесение соответствующих изменений в трудовой договор или правила внутреннего распорядка.

+

Основанием для одностороннего изменения режима работы сотрудников, в соответствии со ст. 74 ТК РФ, могут быть изменения организационных либо технологических условий трудовой деятельности работников фирмы. При этом работодатель вправе издать приказ, содержащий разъяснения касательно объективных причин изменений в графике работы сотрудников.

+

Если же работодатель не может воспользоваться основаниями, указанными в ст. 74 ТК РФ, то для корректировки графика работы ему обязательно нужно получить согласие сотрудников, которых она касается. Если данное согласие предоставлено не будет, то издавать приказ, изменяющий рабочий график, работодатель не имеет права.

+

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

+

Прежде чем измененять графика работы у сотрудника, необходимо проверить существует штатная единица с графиком работы, которую хотим выбрать сотруднику. Если ее нет:

+
    +
  1. Создать новую Штатную единицу (параметры заполнения идентичны предыдущей штатной единицы по сотруднику, отличие только в графике работы);
  2. +
  3. Внести изменения в Штатное расписание.
  4. +
+

Для входа в документ необходимо в "Меню" - "Учет кадров" - "Учет кадров. Документы" - выбрать пункт "Приказы об изменении графика работы". Для доступа к документу нужны права администратора.

+

Рисунок 30.1 Меню

+

Откроется реестр "Приказы об изменении графика работы".

+

Рисунок 31 Реестр приказов об изменении графика работы

+

В реестре приказов об изменении графика работы представлены реквизиты:

+ +

На панели инструментов есть кнопка «Период» Период, с ее помощью можно установить период просмотра и «Печать» Печать - для распечатки приказа. +Пример заполненного документа "Приказ об изменении графика работы" выглядит следующим образом:

+

Рисунок 32 Форма ввода приказа об изменении графика работы

+

В шапке документа вводятся:

+ +

После заполнения всех данных, необходимо поставить флаг «Приказ подписан» Галка. С приказа можно снять "подпись", документ станет доступным для редактирования, также документ может быть недоступным для редактирования (серого цвета). Недоступность говорит о том, что по сотрудникам есть более новые документы и данный приказ редактировать нельзя.

+

Приказы об изменении разряда (грейдов)

+

Приказ об изменении разряда (грейда) — это кадровый документ, который оформляет официальное изменение квалификационного уровня сотрудника в соответствии с Единым тарифно-квалификационным справочником (ЕТКС) или внутренними стандартами организации.

+

Реестр

+

Для входа в документ необходимо перейти в "Меню" - "Учет кадров. Документы" - выбрать пункт "Приказы об изменении разряда (грейдов)". Для доступа к документу нужны определенные права.

+

[Рисунок 1 Меню](### Пример поиска документа в меню)

+

Откроется реестр "Приказы об изменении разряда (грейдов)".

+

[Рисунок 2 Пример реестра "Приказы об изменении разряда (грейдов)"](### Пример отображения реестра "Приказы об изменении разряда (грейдов)")

+

Для создания нового документа необходимо нажать на кнопку Создать на верхней панели инструментов.

+

Документ

+

Пример заполненного документа "Приказ об изменении разряда" выглядит следующим образом:

+

[Рисунок 4 Пример документа "Приказ об изменении разряда"](### Пример заполненного документа "Приказ об изменении разряда")

+

Шапка документа:

+

***№ / дата **** - присваивается автоматически после сохранения документа, являются обязательными к заполнению.

+

Подписан - поле с чекбоксом, которое управляет юридическим статусом приказа и его учетом в системе. Приказ считается официально подписанным и вступившим в силу - когда чекбокс проставлен.

+

Причина изменения - поле с выпадающим списком из справочника

+

Основание - поле для массового проставления основания у сотрудников. Для этого необходимо в данном поле внести текст и в детальной таблице выделить всех сотрудников и нажать кнопку "Заполнить".

+

Примечание - поле для внесения дополнительной информации, комментариев или уточнений по приказу об изменении разряда, которые не отражены в основных полях документа.

+

Без проверки занятых ШЕ - поле с чекбоксом, который отключает стандартную проверку системы на занятость штатных единиц (ШЕ) в действующем штатном расписании.

+

Сценарии использования функционала "Без проверки занятых ШЕ":

+
    +
  1. Стандартное оформление (чекбокс выключен):
  2. +
+ +
    +
  1. Специальные случаи (чекбокс включен):
  2. +
+ +

Порядок работы с включенным чекбоксом

+
    +
  1. Активация режима:
  2. +
+ +
    +
  1. Выбор позиции:
  2. +
+ +
    +
  1. Оформление "за минусом":
  2. +
+ +

!!! info "Внимание" +⚠️ Риски использования:

+
  - Возможность создания конфликтных ситуаций с занятостью;
+  - Нарушение структуры штатного расписания;
+  - Сложности в отслеживании актуальной занятости;
+
+

✅ Рекомендации:

+ +

После оформления шапки документа, в детальной части таблицы необходимо оформить сотрудника:

+

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

+

[alt text](### "Выбор разряда в поле документа "Приказ об изменении разряда"")

+

После выбора разряда, автоматически подтянется сумма и данные по штатному расписанию по той позиции штатной единицы, которую занял сотрудник в данном приказе.

+

[alt text](### "Пример автоматического заполнения полей"")

+

После необходимо проверить актуальность нижней таблицы "Доплат и Надбавок"

+

После заполнения всех данных необходимо:

+

Нажать кнопку "Сохранить"

+ +

Или "Сохранить и закрыть"

+ +

Процесс подписания:

+
    +
  1. Печать приказа:
  2. +
+ +
    +
  1. Физическое подписание:
  2. +
+ +
    +
  1. Активация в системе:
  2. +
+ +

Оформление сотрудника на занятую ШЕ

+

Процедура оформления

+
    +
  1. Активация специального режима.
  2. +
+

При создании приказа установить чекбокс "Без проверки занятых ШЕ" в шапке документа.

+

Данное действие отключает стандартную проверку системы на занятость штатных единиц.

+
    +
  1. Добавление сотрудника.
  2. +
+

В детальной таблице нажать кнопку "Добавить".

+

Выбрать сотрудника из выпадающего списка (процедура аналогична стандартной).

+
    +
  1. Выбор разряда и штатной единицы.
  2. +
+

[alt text](### "Пример выпадающего списка при включенном чекбоксе "Без проверки занятых ШЕ"" )

+

В столбце "Разряд" открыть выпадающий список.

+

Система отобразит расширенный перечень позиций:

+

✅ Свободные штатные единицы

+

✅ Занятые штатные единицы (становятся доступны при активированном чекбоксе)

+
    +
  1. Подтверждение операции.
  2. +
+

[alt text](### "Пример информационного окна о том что сотрудник перемещен на занятую штатную единицу "Без проверки занятых ШЕ"" )

+

После выбора занятой штатной единицы с нужным разрядом.

+

Система автоматически выводит сообщение:

+ +

Важные примечания

+

⚠️ Контрольные точки:

+

Данная операция требует особого внимания - возможны конфликты в штатном расписании.

+

Рекомендуется проверить актуальность данных после выполнения.

+

Необходимо убедиться в обоснованности оформления на занятую позицию.

+

✅ Рекомендации:

+ +

После завершения всех действий необходимо сохранить приказ и при необходимости подписать его для вступления в силу.

+

Создание дополнительного соглашения к трудовому договору

+

Процесс создания дополнительного соглашения к трудовому договору

+
    +
  1. Инициация создания соглашения.
  2. +
+

В приказе об изменении разряда выделить сотрудника в детальной таблице.

+

Нажать кнопку "Создать доп. соглашение" в панели инструментов приказа.

+

alt text

+
    +
  1. Автоматическое открытие и заполнение формы.
  2. +
+

alt text

+

Система открывает новую вкладку: "Дополнительное соглашение к трудовому договору".

+

Форма автоматически заполняется данными:

+ +
    +
  1. Проверка и корректировка соглашения.
  2. +
+

После необходимо проверить автоматически сформированный текст.

+

При необходимости внести правки:

+ +
    +
  1. Формирование печатной формы.
  2. +
+

После внесенных правок сохранить изменения, кажать кнопку "Печать" в форме дополнительного соглашения.

+

Система сгенерирует готовый документ для подписания.

+

alt text

+
    +
  1. Завершение работы с соглашением.
  2. +
+

После проверки и печати закрыть вкладку дополнительного соглашения.

+

Вернуться в исходный приказ об изменении разряда.

+
    +
  1. Связывание документов в системе.
  2. +
+

alt text

+

В приказе обновить данные (кнопка "Обновить").

+

Система автоматически создает связь:

+

В столбце "Доп. соглашение" появляется ссылка на созданный документ, с возможностью перехода в него.

+

Кнопка "Операции"

+

Кнопка "Операции" предоставляет доступ к дополнительным функциям и сервисным возможностям работы с документом "Приказ об изменении разряда".

+

Основные функции в меню "Операции":

+ +

Нажав на кнопку "Операции" доступны будут следующие варианты:

+ +

Использование в приказе об изменении разряда

+
    +
  1. Доступ к справочнику
  2. +
+ +
    +
  1. Для необходимости произвести корректировки и добавление новых причин, прямо из приказа об изменении разряда.
  2. +
+

Сформировать документ на подписание - запускает процесс подготовки документа для системы кадрового электронного документооборота (СЭД).

+

При нажатии на конпку, система автоматически подтягивает:

+ +

Далее документ отправляется по маршруту.

+

Приказы об изменении оплаты труда

+

Под изменением оплаты труда следует понимать, как повышение, так и уменьшение заработка. Поэтому порядок оформления приказа имеет свои нюансы в зависимости от причины изменения оклада. Ст. 57 Трудового кодекса Российской Федерации предписывает в обязательном порядке вносить информацию о зарплате в трудовой договор, а в случае ее изменения соблюдать установленный порядок фиксации таких нововведений. Во всех случаях потребуется сформировать дополнительное соглашение к трудовому договору, в котором будут прописаны новые условия работы сотрудника, и издать приказ об изменении оклада. Если изменение оплаты труда не связано с переводом на другую должность, необходимо будет внести изменения в штатное расписание.

+

Инициирование изменения оклада в сторону уменьшения по инициативе работодателя допускается только в строго ограниченном перечне случаев. Общий принцип их определения зафиксирован в ст. 74 ТК РФ. Еще одним вариантом снижения зарплаты сотрудника является перевод его на другую нижеоплачиваемую работу (ст. 72.1 ТК). В этих ситуациях работодатель обязан в срок, составляющий не менее двух месяцев, в письменной форме предупредить сотрудников, которых затронет изменение оклада, о готовящихся нововведениях в организации.

+

Рисунок 33 Реестр приказов об изменение оплаты труда

+

В реестре приказов об изменении оплаты труда представлены реквизиты:

+ +

На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра и «Печать» - для распечатки приказа.

+

Рисунок 34 Форма ввода приказа об изменении оплаты труда

+

В шапке документа вводятся:

+ +

После ввода вышеуказанных параметров и нажатия на кнопку «Заполнить» в таблицу будут вставлены работники подразделения с новыми окладами / тарифами. Таблицу можно редактировать вручную, если, например, нужно проставить разные оклады, вставить дополнительных сотрудников и т.д. Если с момента создания приказа в подразделении появились новые сотрудники, их можно добавить в таблицу с помощью одноименной кнопки. В подписанном приказе кнопки «Заполнить / Добавить» не доступны.

+

В табличной части документа имеются реквизиты:

+ +

Флаг «Приказ подписан» может быть доступным для редактирования и серого цвета (недоступным). Недоступность говорит о том, что по сотрудникам есть более новые документы и данный приказ редактировать нельзя.

+

Приказы о поощрении

+

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

+

Рисунок 35 Реестр Приказы о поощрении

+

В реестре приказов о прощении представлены реквизиты:

+ +

При переходе в документ "Приказ о поощрении" в шапке документа вводятся:

+

Рисунок 37 Шапка документа

+ +

Далее следует блок настройки работы с кнопками «Заполнить / Добавить»:

+ +

Пример заполненного документа "Приказ о поощрении" выглядит следующим образом:

+

Рисунок 39 Приказ о поощрении

+

Если поощрение предусматривает выплату денежных средств, необходимо указать характер операции (разовый или постоянный).

+

Если поощрение носит разовый характер, выбрать Вид операции - "Разовая", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать разовую операцию".

+

На кнопке добавиться ссылка на созданный документ, "Разовая операция № и дата".

+

Рисунок 40 Создание разовой операции

+

При нажатии на данную кнопку, открывается документ "Разовая операция" для дальнейшего заполнения ["Разовая операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#разовые_операции)

+

Если поощрение носит постоянный характер, выбрать Вид операции - "Постоянная", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать постоянную операцию".

+

На кнопке добавиться ссылка на созданный документ, "Постоянная операция № и дата".

+

Рисунок 41 Создание Постоянной операции

+

При нажатии на данную кнопку, открывается документ "Постоянная операция" для дальнейшего заполнения ["Постоянная операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#постоянные_операции)

+

Приказы о взыскании за нарушение

+

Приказы о взыскании за нарушение - официальный документ, который подтверждает факт депремирования или других мер дисциплинарного наказания за неисполнение или ненадлежащее исполнение сотрудником трудовых обязанностей, возложенные на него трудовым договором, несоблюдение трудовой дисциплины (правил внутреннего трудового распорядка), нарушение требований по охране труда.

+

Рисунок 42 Реестр взыскания

+

В реестре приказов о взыскании представлены реквизиты:

+ +

При переходе в документ "Приказ о взыскании за нарушение" в шапке документа вводятся:

+

Рисунок 43 Шапка документа

+ +

Далее следует блок настройки работы с кнопками «Заполнить / Добавить»:

+ +

Пример заполненного документа "Приказ о поощрении" выглядит следующим образом:

+

Рисунок 44 Документ

+

Если Приказ о взыскании за нарушение предусматривает удержание денежных средств, необходимо указать характер операции (разовый или постоянный).

+

Если взыскание носит разовый характер, выбрать Вид операции - "Разовая", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать разовую операцию".

+

На кнопке добавиться ссылка на созданный документ, "Разовая операция № и дата".

+

Рисунок 45 Создание разовой операции

+

При нажатии на данную кнопку, открывается документ "Разовая операция" для дальнейшего заполнения ["Разовая операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#разовые_операции)

+

Если взыскание носит постоянный характер, выбрать Вид операции - "Постоянная", заполнить все необходимые поля, ввести сумму, поставить галку на Приказ подписан, сохранить, далее нажать на кнопку "Создать постоянную операцию".

+

На кнопке добавиться ссылка на созданный документ, "Постоянная операция № и дата".

+

Рисунок 46 Создание Постоянной операции

+

При нажатии на данную кнопку, открывается документ "Постоянная операция" для дальнейшего заполнения ["Постоянная операция"](../../Расчет зарплаты/Расчет зарплаты. Документы/Расчет зарплаты. Документы.md#постоянные_операции)

+

Приказы о прохождении мед. осмотра

+

Приказы о прохождении мед. осмотра представляют собой официальные документы, в которых работодатель устанавливают обязательность или необходимость прохождения медицинского обследования для конкретных сотрудников или групп сотрудников.

+

В Реестре документов следующие поля:

+

Рисунок 47 Реестр мед. осмотра

+ +

Пример заполненного документа "Приказ о прохождении мед. осмотра" выглядит следующим образом:

+

Рисунок 48 Приказ о прохождении мед. осмотра

+

Приказы об изменении ФИО

+

В случае изменения фамилии сотрудника, он должен уведомить об этом работодателя письменно и в качестве приложений указать в заявлении те документы, которыми подтверждается факт смены фамилии. Получив такое заявление, работодатель должен издать "Приказ об изменении ФИО". Этот распорядительный документ — основание для внесения соответствующих корректировок в учётные кадровые и бухгалтерские документы, а также во внутренние регистры и перечни, содержащие индивидуальные сведения работника.

+

В Реестре документов следующие поля:

+

Рисунок 49 Реестр

+ +

Пример заполненного документа "Приказ об изменении ФИО" выглядит следующим образом:

+

Рисунок 50 Документ

+

В шапке документа заполняем следующие поля:

+ +

В основной табличной части, заполняются все поля по сотруднику, указываются его "старые" и "новые" данные.

+

В нижней части, указывается документ, на основании которого происходит смена данных.

+

При необходимости из документа "Приказ об изменении ФИО" можно распечатать нужные печатные формы. нажав на кнопку "Печать"

+

Рисунок 51 Печатные формы

+

Приказы о выходе из декретного отпуска

+

Сотрудник может выйти из отпуска по уходу за ребенком в любое время. Для этого он пишет заявление в свободной форме, а работодатель издает соответствующий приказ. Это касается и отпуска до 1,5 лет, и отпуска от 1,5 до 3 лет.

+

В Реестре документов следующие поля:

+

Рисунок 52 Реестр

+ +

Пример заполненного документа "Приказы о выходе из декретного отпуска" выглядит следующим образом:

+

Рисунок 53 Документация

+

Находясь в заполненном документе, на панели инструментов есть кнопки «Печать» можно распечатать доступные печатные формы.

+

Рисунок 54 Печатные формы

+

Приказы о закреплении топливных карт за водителями

+

Распоряжение о закреплении топливных карт нужно для контроля за оборотом ГСМ. Ставя подпись на нем, сотрудник обязуется расходовать бензин исключительно в служебных целях. В обратном случае его можно будет привлечь к ответственности.

+

В Реестре документов следующие поля:

+

Рисунок 55 Реестр

+ +

Пример заполненного документа "Приказ о закреплении топливных карт за водителями" выглядит следующим образом:

+

Рисунок 56 Документация

+

На панели инструментов доступны печатные формы, также есть возможность создать доп.соглашение к Трудовому договору

+

Рисунок 57 Печатные формы

+

Приказы об увольнении

+

Увольнение — в трудовом праве прекращение трудовых отношений между работником и работодателем.

+

Рисунок 58 Реестр приказов об увольнении

+

В реестре приказов об увольнении представлены реквизиты:

+ +

На панели инструментов есть кнопка «Период», с ее помощью можно установить период просмотра всех внесенных приказов по заданному периоду.

+

Рисунок 59 Форма ввода приказа об увольнении

+

В шапке документа вводятся:

+ +

На панели инструментов есть кнопки «Печать» - для распечатки приказа и «Операции» - для быстрого доступа к справочникам и работы с ними.

+

В табличной части вводятся:

+ +

Расчет компенсаций в увольнениях

+

После нажатия на ссылку в столбце "Расчет компенсаций" в детальной части документа "Приказа об увольнении" в новой вкладке открывается документ "Расчет компенсации неиспользованного отпуска", для видимости документа необходимо настроить права. Далее с этим документом работает расчетный отдел.

+

Новый джокумент Компенсации

+

Договоры ГПХ

+

Взаимоотношения сторон гражданско-правового договора базируются на нормах гражданского права и регламентируются Гражданским кодексом РФ. На практике различают следующие основные виды гражданско-правовых договоров, которые чаще называют «трудовыми соглашениями»: договор подряда, договор поручения, авторский договор, договор на выполнение научно-исследовательских, опытно-конструкторских и технологических работ, договор возмездного оказания услуг.

+

Для создания сотрудника по договору ГПХ, необходимо:

+

Создание ГПХ

+
    +
  1. +

    Создать физическое лицо;

    +
  2. +
  3. +

    Далее нажать на кнопку "Создать Сотрудника";

    +
  4. +
  5. +

    В открывшемся модальном окне в поле "Статус" - выбрать вид "Сотрудник по договору ГПХ";

    +
  6. +
  7. +

    Проверить все остальные поля и нажать на кнопку "Создать"

    +
  8. +
+

Автоматически создаются два документа: Договор ГПХ и карточка Сотрудника

+

Открытый договор ГПХ

+

В форме документа "Договор ГПХ" заполняются реквизиты:

+ +

Кроме стандартных кнопок в панели инструментов имеется:

+ +

Образец заполненного "Договора ГПХ" выглядит следующим образом:

+

Рисунок 61 Форма ввода договора ГПХ

+

После сохранения заполненного договора, в карточку сотрудника автоматически подтянется информация из договора. Необходимо будет только заполнить в ней поле "Банк для перечислений".

+

Рисунок 62 Карточка ГПХ

+

Сотрудник по договору ГПХ не занимает штатную единицу, поэтому в реестре сотрудников будет отображаться со статусом "Внештатный".

+

Внештатные

+

Ежегодный обзор заработных плат и компенсаций

+

Отчет, в котором формируются данные по контрагенту, содержит актуальную информацию о заработных платах и переменном вознаграждении в разрезе должностей, а также данные о льготах, кадровых политиках, практиках и HR-метриках.

+

Рисунок 61 Реестр

+

В реестре Ежегодного обзора показаны реквизиты:

+ +

Рисунок 62 Документ

+ + + diff --git a/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.jpeg b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.png b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.png new file mode 100644 index 0000000..6fad509 Binary files /dev/null and b/docs/Lexema-HRM/Учет кадров/Учет кадров. Документы/Учет кадров. Документы.png differ diff --git a/docs/Lexema-HRM/Учет труда.7z b/docs/Lexema-HRM/Учет труда.7z new file mode 100644 index 0000000..32e93e8 Binary files /dev/null and b/docs/Lexema-HRM/Учет труда.7z differ diff --git a/docs/Lexema-HRM/Учет труда/Учет труда. Документы.md b/docs/Lexema-HRM/Учет труда/Учет труда. Документы.md index e76af00..1781751 100644 --- a/docs/Lexema-HRM/Учет труда/Учет труда. Документы.md +++ b/docs/Lexema-HRM/Учет труда/Учет труда. Документы.md @@ -69,7 +69,6 @@ ![итоги по месяцам](image-93.png) - ## Использование ежегодных отпусков Документ "Использование ежегодных отпусков" показывает всю информацию по отпускам у сотрудников за период работы в организации. @@ -294,7 +293,7 @@ ## Отпуска без сохранения оплаты Документ «Приказ о предоставлении отпуска без сохранения оплаты» предназначен для оформления периодов отсутствия сотрудника на работе без выплаты заработной платы. -Для [входа в реестр документа](../Основные шаги в системе/Основные шаги в системе.md) необходимо в меню набрать «Отпуска без сохранения оплаты», в открывшемся реестре создать новый документ по кнопке «Создать». +Для необходимо в меню набрать «Отпуска без сохранения оплаты», в открывшемся реестре создать новый документ по кнопке «Создать». В созданном документе заполняются все необходимые поля шапки (Дата, Основание, Примечание, Краткое содержание). @@ -418,7 +417,6 @@ - Информация о межвахтовом отдыхе (если была указана); - 📋 Что копируется: - Данные сотрудников — ФИО, табельный номер, должность, подразделение, разряд; @@ -441,7 +439,6 @@ ![фильтр командировки](image-139.png) - Кнопка "Печать" - в реестре на кнопке печать находится "Приказ о направлении на вахту, docx". ![печать](image-142.png) @@ -710,7 +707,6 @@ Командировки без фактической даты прибытия — выделяются фиолетовым цветом (означает: сотрудник ещё не вернулся). - **Форма документа** Кнопки в панели инструментов: @@ -862,7 +858,6 @@ - Детальная таблица ![alt text](image-101.png) @@ -1362,7 +1357,6 @@ #### Оформление вахтового метода в командировке - Для того чтобы в системе появился функционал вахтового метода (чекбокс «Вахта» и выбор объектов), необходимо включить соответствующую настройку в Настройка учетной политики (УПП). 1. Предварительные настройки @@ -1427,7 +1421,7 @@ | **Расчет среднедневного заработка** | PDF / Word | Отчет с детализацией расчета среднего заработка, используемого для оплаты дней командировки. | | **Операции по начислениям** | PDF / Word | Расшифровка всех начислений и удержаний по документу для сверки с бухгалтерией. | -## Листы нетрудоспособности (больничные) +## Больничные (Листы нетрудоспособности) Документ Больничный предназначен для оформления и расчета пособий по временной нетрудоспособности сотрудников на основании электронных листков нетрудоспособности (ЭЛН или Проактивные выплаты) из Социального фонда России (СФР). @@ -1474,7 +1468,7 @@ | **Исправить отпуск** | Корректировка отпуска при наложении больничного | | **Операции** | Дополнительные действия: Сформировать документ на подписание | -**Способы создания документа** +**Способы оформления больничного** Основной способ: Загрузка из СФР (рекомендуемый) diff --git a/docs/Lexema-HRM/Учет труда/Учет труда. Справочники.md b/docs/Lexema-HRM/Учет труда/Учет труда. Справочники.md index 8e71e4c..7990c96 100644 --- a/docs/Lexema-HRM/Учет труда/Учет труда. Справочники.md +++ b/docs/Lexema-HRM/Учет труда/Учет труда. Справочники.md @@ -17,7 +17,7 @@ - Удаленная работа; - Фриланс. -Для [входа в документ](../Основные шаги в системе/Основные шаги в системе.md) необходимо в поисковике "Меню" набрать название документа "Виды графиков работы". +Для необходимо в поисковике "Меню" набрать название документа "Виды графиков работы". Откроется реестр "Виды графиков работы". Документ сквозной для всех организаций. diff --git a/docs/Lexema-HRM/Штатное расписание.7z b/docs/Lexema-HRM/Штатное расписание.7z new file mode 100644 index 0000000..720ba97 Binary files /dev/null and b/docs/Lexema-HRM/Штатное расписание.7z differ diff --git a/docs/Релизы/Релиз Кадры и Зарплата/index.md b/docs/Релизы/Релиз Кадры и Зарплата/index.md index 38e0657..fb93dbe 100644 --- a/docs/Релизы/Релиз Кадры и Зарплата/index.md +++ b/docs/Релизы/Релиз Кадры и Зарплата/index.md @@ -1,5 +1,47 @@ # Релиз Кадры и Зарплата +
+РЕЛИЗ HR-42 (07.07.2026) +

+ +

Учет кадров (ecosoft-lexema8-registration-personal 3.0.318)

+
    +
  1. Внедрена новая печатная форма в формате DOCX для приказа о доплате/надбавке.
  2. +
  3. Добавлена возможность формирование печатной формы Форма Т-10 (Карточка гражданина подлежащего воинскому учету) с полными данными по карточке или только неизменяемые данные.
  4. +
+ +

Учет труда (ecosoft-lexema8-accounting-work 3.0.258)

+
    +
  1. Добавлены колонки подразделения, должности и разряда в документ и реестр «Отсутствия на работе».
  2. +
  3. Скорректировано отображение часов и условных обозначений в печатной форме Т-12 (Word).
  4. +
+ +

Расчет Зарплаты (ecosoft-lexema8-pay-roll 3.1.237)

+
    +
  1. Внедрен новый документ «Уведомления об исчисленных налогах» с настройкой сроков перечисления.
  2. +
  3. Настроена выгрузка из документа «Уведомления об исчисленных налогах».
  4. +
  5. Добавлена выгрузка в Excel для подраздела 1 раздела 1 РСВ.
  6. +
  7. Добавлен столбец КТУ в шаблон загрузки разовых операций с автоматическим расчетом суммы.
  8. +
  9. Настроена загрузка актуального перемещения сотрудника при импорте шаблона разовых операций.
  10. +
  11. Настроено автосохранение при формировании печатной формы 2-НДФЛ.
  12. +
+ +
+
+РЕЛИЗ HR-41 (22.06.2026) +

+ +

Расчет зарплаты (ecosoft-lexema8-pay-roll 3.1.225)

+
    + +
  1. Настроен формат файла выгрузки ведомостей в банк ВТБ.
  2. +
  3. В Своде настроена разрядность сумм в детальном гриде и автоматический пересчет взаимосвязанных столбцов с формулами при изменении коэффициента трудового участия.
  4. +
  5. Перенесены поля выбора вида дохода и вида выплаты на основную вкладку документа обмена с банком.
  6. +
  7. Настроен автоматический пересчет значения разницы при изменении сумм в документе «Разовые операции» без необходимости ручного сохранения или обновления.
  8. +
+ +
+
РЕЛИЗ HR-40 (03.06.2026)