Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

индексация

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ШКК (Штатно-Кадровый контур)
Предыдущая тема :: Следующая тема  
Автор Сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Пт Ноя 15, 2013 15:32    Заголовок сообщения: индексация Ответить с цитатой

У нас произошла индексация окладов. В результате, почти все работники получили назначение от одного и того же числа. Теперь нужно на каждого получившего:

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

Скажите, как создать кнопку, которая всё это сделает?

ps Вообще разработчикам следовало бы создать подобную кнопку, т к задача типовая. У моих кадровиков уходит примерно по два дня рабоы на каждые 300-500 человек из каждого подразделения. При этом люди просто бездумно клацают по клавишам - это задача для автоматизации!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
olya_gran



Зарегистрирован: 01.10.2008
Сообщения: 70

СообщениеДобавлено: Пт Ноя 15, 2013 16:54    Заголовок сообщения: Ответить с цитатой

Мы вышли из положения - созданием операции по списку в списке работников, которая создает соглашение на назначение от определенного числа в программе в трудовых договорах работника, запускает формирование соглашения с использованием Word шаблона, сохраняет его в программе и на диске С в папке ШЗ. В модуле Администратор должен быть создан шаблон договора, который заполняется из операции по списку, и сохраняет его на диске С в папке ШЗ. Если интересно, могу выложить скрипт.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Пт Ноя 15, 2013 18:24    Заголовок сообщения: Ответить с цитатой

olya_gran писал(а):
Если интересно, могу выложить скрипт..


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



Зарегистрирован: 01.10.2008
Сообщения: 70

СообщениеДобавлено: Пн Ноя 18, 2013 10:45    Заголовок сообщения: Ответить с цитатой

Выкладываю некоторые скрипты, которые надеюсь Вам помогут. Smile
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]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ШКК (Штатно-Кадровый контур) Часовой пояс: GMT + 4
Страница 1 из 1

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


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU