Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Пт Ноя 15, 2013 15:32 Заголовок сообщения: индексация |
|
|
У нас произошла индексация окладов. В результате, почти все работники получили назначение от одного и того же числа. Теперь нужно на каждого получившего:
1. Создать и сохранить вордовские доп. соглашения, в соответвтвии с одним шаблоном.
2. Пустить на печать соглашения в определенном порядке, в двух экземплярах каждое, по каждому подразделению верхнего уровня.
Скажите, как создать кнопку, которая всё это сделает?
ps Вообще разработчикам следовало бы создать подобную кнопку, т к задача типовая. У моих кадровиков уходит примерно по два дня рабоы на каждые 300-500 человек из каждого подразделения. При этом люди просто бездумно клацают по клавишам - это задача для автоматизации! |
|
Вернуться к началу |
|
|
olya_gran
Зарегистрирован: 01.10.2008 Сообщения: 70
|
Добавлено: Пт Ноя 15, 2013 16:54 Заголовок сообщения: |
|
|
Мы вышли из положения - созданием операции по списку в списке работников, которая создает соглашение на назначение от определенного числа в программе в трудовых договорах работника, запускает формирование соглашения с использованием Word шаблона, сохраняет его в программе и на диске С в папке ШЗ. В модуле Администратор должен быть создан шаблон договора, который заполняется из операции по списку, и сохраняет его на диске С в папке ШЗ. Если интересно, могу выложить скрипт. |
|
Вернуться к началу |
|
|
rebel25 Большой шоколадный орден
Зарегистрирован: 06.10.2008 Сообщения: 579 Откуда: Москва
|
Добавлено: Пт Ноя 15, 2013 18:24 Заголовок сообщения: |
|
|
olya_gran писал(а): | Если интересно, могу выложить скрипт.. |
Да мне интересно как программоно воздавать соглашение. Если можно создать по одному работнику, то наверное можно будет запуститить эту программу по списку, сохранить все файлы в папку и как нибудь одним махом распечатать из папки. |
|
Вернуться к началу |
|
|
olya_gran
Зарегистрирован: 01.10.2008 Сообщения: 70
|
Добавлено: Пн Ноя 18, 2013 10:45 Заголовок сообщения: |
|
|
Выкладываю некоторые скрипты, которые надеюсь Вам помогут.
1. Операция по списку Индексация ЗП (2.формирование соглашения):
[code]
Local
{ FormBlank_id;
TemplateName;
P_id := @$Glob:Pid;
variant_ := 0;
};
Execute pr_no_access;
return ВНИМАНИЕ, НЕ ДОЛЖНО БЫТЬ ОТКРЫТЫХ ДОКУМЕНТОВ MS WORD
И ДОЛЖНА БЫТЬ СОЗДАНА ПАПКА С:\ШЗ (В НЕЕ ФОРМИРУЮТСЯ Соглашения);
let _path_0 = 'C:' + '\' + 'ШЗ';
STABLE @XName SELECT 100000,'-Ди',convert(datetime,'01.03.2012',104),'CONTRACT_04_40_00_10',convert(datetime,'01.02.2012',104),11;
alias _dlgresource={
(0,0,600,300,0);
e,(10,0,340,30, 0x28),'С какого номера начать договор (ПОДСТАВЬТЕ ПЕРЕД ЭТИМ НОМЕРОМ ЕДИНИЦУ!!!)',(10,30,340,20,0x100),1;
e,(10,55,340,20, 0x28),'Буква договора',(10,75,340,20,0x100),2;
e,(10,100,95,20, 0x28),'Дата договора',(10,120,80,20,0x100),3;
e,(10,150,550,20, 0x28),'Шаблон договора',(10,170,550,20,0x4),4,{Select formblank.BlankSysName ,formblank.BlankName +' ('+ formblank.Name_report+')' From formblank where formblank.whose_Blank=0 and formblank.t_form=0 and formblank.default_prn=1 order by formblank.BlankName;},0,2,1;
e,(10,200,150,20, 0x28),'Дата вступления в силу',(10,220,80,20,0x100),5;
e,(10,250,550,20, 0x28),'Подпись в договоре',(10,270,550,20,0x4),6,{Select user_podpis_dogovor.n_p_p ,rtrim(user_podpis_dogovor.dol_podp_d)+' '+ user_podpis_dogovor.fio_podp_d From user_podpis_dogovor where @XName:3 between user_podpis_dogovor.fromd and user_podpis_dogovor.tod and user_podpis_dogovor.vid in ('td','osn') order by 1;},0,2,1; -- 27.07.2012 and user_podpis_dogovor.tod and user_podpis_dogovor.vid = 'td'
};
DIALOG @XName,,'~Введите Номер, букву, дату, шаблон договора ' ;
if _Result <> 10 then error; -- отказ -> выход
Local
{
sa_nomer1_ := @XName:1;
sa_bukva1_ := @XName:2;
sa_data1_ := @XName:3;as date;
sa_data2_ := @XName:5;as date;
sa_podp_ := @XName:6;
BlankSysName_ := @XName:4;
Stxt_ := @XName:4;
};
SCAN @$Glob
execute {
--Проверяем - есть ли у данного работника нужное назначение...
let @a=0;
select max(pr_current.prid)
into :@a
from pr_current _hintbrowser
where pr_current.pid=@$Glob:pid
and pr_current.date_trans =sa_data2_;
--Проверяем - есть ли у данного работника соглашения на нужное назначение...
let @b=0;
select max(pr_contracts.auto_card)
into :@b
from pr_contracts _hintbrowser
where pr_contracts.auto_card=@$Glob:auto_card
and pr_contracts.f_date =sa_data2_
and pr_contracts.datedoc =sa_data1_
and pr_contracts.number not like '%Реж%';-- 09.08.2011 чтобы соглашения на допотпуск не мешали делать индексацию...
if @a==0
then {return Внимание! Соглашение не было добавлено у @$Glob:Full_Name (@$Glob:Name_Appoint - @$Glob:Struct_Name),т.к. назначения от @XName:5[dd.mm.yyyy] не существует;}
else {
if @b==0 then
{
SELECT FormBlank.id,
FormBlank.name_report
INTO :FormBlank_id,
:TemplateName
FROM FormBlank
WHERE FormBlank.BlankSysName = BlankSysName_['']
AND FormBlank.id_firm = @@id_firm;
if FormBlank_id == 0 then
SELECT FormBlank.id,
FormBlank.name_report
INTO :FormBlank_id,
:TemplateName
FROM FormBlank
WHERE FormBlank.BlankSysName = BlankSysName_['']
Order By FormBlank.id_firm asc;
--вставляем данные в pr_contracts (без текста договора), чтобы можно было выбрать
insert into pr_contracts(number,datedoc,id_blank,id_doc,auto_card,comment,prid,pid,name_table,username,f_date,detail_text,textdoc)
select
substring(convert(varchar,sa_nomer1_),2,5)+sa_bukva1_,
sa_data1_ ,
FormBlank_id,
0,
@$Glob:auto_card,
'Групповое формирование',
pr_current.prid,
@$Glob:pid,
'people',
@@suser_name_boss(),
sa_data2_,
'',
''
from pr_current _hintbrowser
where pr_current.pid=@$Glob:pid
and pr_current.date_trans =sa_data2_;
Local
{ pr_contracts_id;
};
select pr_contracts.id
into :pr_contracts_id
from pr_contracts
where pr_contracts.number = substring(convert(varchar,sa_nomer1_),2,5)+sa_bukva1_
and pr_contracts.pid = @$Glob:pid
and pr_contracts.id_blank = FormBlank_id
and pr_contracts.datedoc = sa_data1_
and pr_contracts.name_table = 'people'
and pr_contracts.f_date = sa_data2_;
if FormBlank_id == 0 then return [\3\7 Шаблон не найден!]
else execute pr_out_docum_word6(:FormBlank_id, :TemplateName);
--execute xutil(Sleep 2000);
Local {FileName_;};
if object_id('tempdb..#hrtb_file') is not null then drop table #hrtb_file;
alias FileName_ := '@@xUtil(DocDir)\@DOC:filename["]';
--определяем имя файла
alias DocName_ = @@xUtil(ExeDir)\CONTRACT_;
Local {spid_ := P_ID; max_id_doc_; sid_;};
SELECT IDENT_CURRENT('x_contracts') +1
Into max_id_doc_;--возвращает значение с точкой?
alias sid_ := max_id_doc_;
Let DocName_ := '"'+:DocName_+:spid_+'_'+:sid_+'.DOC'+'"';
--теперь надо сохранить файл с нужным именем
execute xOcx{
Word.Application as wordApp;
wordApp.visible = 1;
wordApp.ActiveDocument.Save();
wordApp.ActiveDocument.SaveAs(:DocName_);
};
--теперь его надо закрыть..
execute xOCX{
Word.Basic as Word;
Word.FileClose();
};
if object_id('tempdb..#x_contracts') is NOT NULL then drop table "#x_contracts";
$select TOP 0 * into "#x_contracts" from x_contracts;
execute xfile (load DocName_[""],"",9, "Customize","#x_contracts");
execute xutil(Sleep 2000);
Insert Into x_contracts (name, filename, extention, description, filesize, state, zipsize, date_edit, data)
Select top 1 name, filename, extention, description, filesize, state, zipsize, date_edit, data
From "#x_contracts";
if object_id('tempdb..#x_contracts') is NOT NULL then drop table "#x_contracts";
execute xFile(remove DocName_); --удаление файла
--обновляем в pr_contracts поле id_doc
Local {max_id_doc1_; sid1_;};
Select id
Into max_id_doc1_
From x_contracts
where name like ('%'+'CONTRACT_'+convert(varchar,spid_)+'_'+convert(varchar,sid_)+'%');
alias sid1_ := max_id_doc1_;
update pr_contracts
set pr_contracts.id_doc = sid1_
from pr_contracts
where pr_contracts.id=pr_contracts_id;
let sa_nomer1_:=sa_nomer1_+1; --return sa_nomer1_;
} --if @b==0 then
else {return Внимание! Соглашение не было добавлено у @$Glob:Full_Name (@$Glob:Name_Appoint - @$Glob:Struct_Name),т.к. соглашение для индексации уже есть от @XName:3[dd.mm.yyyy] уже существует;
}; --if @b==0 then else
};--else
};--SCAN @$Glob
ALIAS :_Result=-1;
[/code]
2. Особенности в шаблоне договора CONTRACT_04_40_00_10:
- использование вместо P_ID: @$Glob:pid
- вместо pr_current.date_trans: sa_data2_
- Скрипт переменной "сохранение_соглашения_04_40_00_10" - сохраняет готовое соглашение на диске C в папке ШЗ:
[code]
scan @fio_1
select Card.full_name,pr_current.prid
from card _hintbrowser
join people _hintbrowser on Card.auto_card=people.auto_card
join pr_current _hintbrowser on pr_current.pid=people.pid
and pr_current.date_trans =sa_data2_
join cells _hintbrowser on cells.cell_item = pr_current.cell_item
where people.pid=@$Glob:pid
execute {
scan @struct_1
select structs.struct_code,pr_current.prid,structs.name_internal
from structs _hintbrowser
join pr_current _hintbrowser on structs.struct_code = pr_current.code_struct_name
and pr_current.prid =@fio_1:2
order by structs.sort
execute
{
alias User_Struct_Name_1_ := ;
Scan @str_in
select REPLACE(REPLACE(Structs.Short_Name,',','-'),'"',''),
--Structs.Struct_Name,
Structs.Struct_Lev
from Tree,
Structs
where Tree.Struct_code = @struct_1:1
and Tree.Struct_Parent = Structs.Struct_Code
and Structs.Struct_Code <> '101' -- добавила!
order by Structs.Struct_Lev ASC
execute
{ if @str_in:2 == 0 then
{alias User_Struct_Name_1_ := @str_in:1['];}
else {let User_Struct_Name_1_ = 'User_Struct_Name_1_' + '-' + @str_in:1;
}
};
let _path_1 = 'C:' + '\' + 'ШЗ' ;
scan @Appoint_1
select REPLACE(REPLACE(REPLACE(REPLACE(Appointments.name_appoint,',','-'),'"',''),'(',''),')','')--Appointments.name_appoint
from cells _hintbrowser
join Appointments _hintbrowser on cells.code_appoint=Appointments.code_appoint
join pr_current _hintbrowser on cells.cell_item = pr_current.cell_item
and pr_current.prid =@fio_1:2
order by cells.number
execute
{
WD=wordApp.ActiveDocument;
let _path_3 = '_path_1' + '\'+substring(convert(varchar,sa_nomer1_),2,5)+sa_bukva1_+'_'+ 'User_Struct_Name_1_'+'_'+ @fio_1:1+'_'+ substring(@Appoint_1:1,0,60)+'.doc';
WD.SaveAs(_path_3);
};
};
};
[/code] |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|