Список дней рождений сотрудников из базы MSSQL 1С "Зарплата и управление персоналом" на Вашем сайте

24.06.2010 by Koshak Комментировать »
Недавно столкнулся с нетривиальной задачей. Необходимо было вывесить на сайт дни рождения сотрудников организации.  Но сразу же возник вопрос – где же их взять, каждого опрашивать конечно же не хотелось. Немного подумав – пришел к выводу что конечно же можно списки дней рождений можно взять в отделе кадров, но как их поместить на сайт? Создавать таблицу? Перебивать всех сотрудников в таблицу?

В большей части конечно из-за лени :) (да и как потом оказалось и хорошо) подумал я о вытаскивании напрямую с базы 1С этого списка сотрудников а также дней рождений.
Так как у нас установлена SQL версия 1C “Зарплата и управление персоналом”, то все ниже написанное будет относиться именно к такой конфигурации, на других конфигурациях работоспособность скрипта не гарантируется.
Данный скрипт вытаскивает из таблиц MSSQL 1С ФИО и даты дней рождений, приводит дату в удобочитаемый формат, и выводит список 5 ближайших дат дней рождений сотрудников. Количество выводимых  дат можно регулировать.
Для начала прописываем параметры подключения к наше базе данных MSSQL
Указываем имя вашего сервера MSSQL где находится 1С «Зарплата и управление персоналом»
$myServer = "NameServer";

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

$myUser = "login";
$myPass = "Pa$sw0rd";
Указываем имя базы 1С «Зарплата и управление персоналом» в MSSQL
$myDB = "DatabaseName";

Не помешает небольшая проверка на доступность SQL сервера и базы данных на SQL сервере

$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");

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

В строке «bdate<=dateadd(d,5,getdate())» число «5″ означает количество отсортированных дат дней рождений

$query=" select name,birthdate from (
select  r88._Description as 'name',
convert(varchar(10),r105._Fld1300,104 ) as 'birthdate',
convert(smalldatetime,convert(varchar,month(r105._Fld1300))
+ '.' + convert(varchar,day(r105._Fld1300)) + '.'
+ convert(varchar, year(getdate()))  ) as 'bdate'
from _Reference88 r88
left join _Reference105 r105 on r88._Description=r105._Description
) employee
where bdate>=getdate() and bdate<=dateadd(d,5,getdate())
order by bdate asc";

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

Если вы создали регулярное выражение то закомментируйте предыдущий запрос и раскомментируйте строку ниже

//$query="execute [birthdates]";
P.S.: Хранимая процедура в таком случае в базе должно называться [birthdates]

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

$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<table cellspacing=0><tr>ФИО<th></th><th>Дата</th></tr>";
while($row = mssql_fetch_array($result))
{
echo "<tr><td>" . $row["name"] . "</td>
<td>" . $row["birthdate"] . "</td></tr>";
}
echo "</table>";
mssql_close($dbhandle);

Ну вот и все. Данный кусочек скрипта можно вставить например в какой-либо блок на вашем корпоративном портале, или только определенному кругу лиц, чтоб не забывали дни рождения :)

В итоге у вас должно получиться что то вроде этого:

<?php
$myServer = "NameServer";
$myUser = "login";
$myPass = "Pa$sw0rd";
$myDB = "DatabaseName";
$dbhandle = mssql_connect($myServer, $myUser, $myPass)
or die("Couldn't connect to SQL Server on $myServer");
$selected = mssql_select_db($myDB, $dbhandle)
or die("Couldn't open database $myDB");
$query=" select name,birthdate from (
select  r88._Description as 'name',
convert(varchar(10),r105._Fld1300,104 ) as 'birthdate',
convert(smalldatetime,convert(varchar,month(r105._Fld1300)) + '.'
+ convert(varchar,day(r105._Fld1300)) + '.'
+ convert(varchar, year(getdate()))  ) as 'bdate'
from _Reference88 r88
left join _Reference105 r105 on r88._Description=r105._Description
) employee
where bdate>=getdate() and bdate<=dateadd(d,5,getdate())
order by bdate asc";
//$query="execute [birthdates]";
$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<table cellspacing=0><tr>ФИО<th></th><th>Дата</th></tr>";
while($row = mssql_fetch_array($result))
{
echo "<tr><td>" . $row["name"] . "</td>
<td>" . $row["birthdate"] . "</td></tr>";
}
echo "</table>";
mssql_close($dbhandle);
?>

Скачать пример

Реклама

Оставить комментарий