Паспортные данные из SQL 1С «Зарплата и управление персоналом»

29.06.2010 by Koshak Комментировать »
Что то я как то увлекся вытаскиванием данных из SQL без доступа через 1С, и решил сделать еще пару табличек (вдруг кому пригодится ;-)  ). В данном примере мы создадим таблицу и выведем данные на Web страницу PHP, такие как: ФИО; дата рождения; ИНН; номер страхового полиса; Серия, номер, дату выдачи и кем выдан паспорта; а также место рождения. Данные будут браться напрямую из базы данных MSSQL 1С «Зарплата и управление персоналом». Ну так начнем.Для начала нам конечно же надо подсоединиться к базе данных

Указываем имя вашего сервера 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");

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

Также в запросе делаем обработку для нормального представления даты.

$query = "SELECT
r105._Description,
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' ,
r105._Fld1301,
r105._Fld1304,
r105._Fld1306 ,
ir5355._Fld5358 as 'ser' ,
ir5355._Fld5359 as 'number' ,
ir5355._Fld5362 as 'kod' ,
cast(ir5355._Fld5361 as text) as 'kemv',
convert(varchar(10),ir5355._Fld5360,104) as 'date',
convert(smalldatetime,convert(varchar,month(ir5355._Fld5360)) + '.'
 + convert(varchar,day(ir5355._Fld5360)) + '.'
+ convert(varchar, year(getdate()))  ) as 'bdate'
FROM _Reference105 r105
left join _InfoReg5355 ir5355 on r105._IDRRef=ir5355._Fld5356RRef
ORDER BY _Description ASC";

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

Если вы создали хранимую процедуру, то заккоментируйте предыдущий запрос и раскомментируйте строку:

//$query="execute [passport]";

Хранимая процедура в таком случае в базе должна называться [passport]

Далее рисуем таблицу и выводим в нее все наши данные.

$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" .
($numRows == 1 ? "" : "s") . " Returned </h1>";
echo "<table border=1><tr><td>ФИО</td><td>Дата рождения</td>
<td>ИНН</td><td>Страховой полис</td><td>Серия</td>
<td>Номер</td><td>Код подр</td>
<td>Когда выдан</td><td>Кем выдан</td><td>Место рождения</td>
</tr>";
while($row = mssql_fetch_array($result))
{
echo "<tr><td>" . $row["_Description"] . "</td>
<td>" . $row["birthdate"] . "</td>
<td>" . $row["_Fld1301"] . "</td><td>" . $row["_Fld1304"] . "</td>
<td>" . $row["ser"] . "</td><td>" . $row["number"] . "</td>
<td>" . $row["kod"] . "</td>
<td>" . $row["date"] . "</td><td>" . $row["kemv"] . "</td>
<td>" . $row["_Fld1306"] . "</td></tr>";
}
mssql_close($dbhandle);
echo "</table>";

Ну вот и все — таблица готова. В итоге у Вас должно получиться вот такой код:

<?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
	r105._Description,
	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' ,
	r105._Fld1301,
	r105._Fld1304,
	r105._Fld1306 ,
	ir5355._Fld5358 as 'ser' ,
	ir5355._Fld5359 as 'number' ,
	ir5355._Fld5362 as 'kod' ,
	cast(ir5355._Fld5361 as text) as 'kemv',
	convert(varchar(10),ir5355._Fld5360,104) as 'date',
	convert(smalldatetime,convert(varchar,month(ir5355._Fld5360)) + '.'
	+ convert(varchar,day(ir5355._Fld5360)) + '.'
	+ convert(varchar, year(getdate()))  ) as 'bdate' 

FROM _Reference105 r105
left join _InfoReg5355 ir5355 on r105._IDRRef=ir5355._Fld5356RRef
ORDER BY _Description ASC";

//$query="execute [passport]";

$result = mssql_query($query);
$numRows = mssql_num_rows($result);
echo "<h1>" . $numRows . " Row" .
($numRows == 1 ? "" : "s") . " Returned </h1>"; 

echo "<table border=1><tr><td>ФИО</td><td>Дата рождения</td>
<td>ИНН</td><td>Страховой полис</td><td>Серия</td><td>Номер</td>
<td>Код подр</td><td>Когда выдан</td><td>Кем выдан</td>
<td>Место рождения</td></tr>";

while($row = mssql_fetch_array($result))
{
  echo "<tr><td>" . $row["_Description"] . "</td>
  <td>" . $row["birthdate"] . "</td><td>" . $row["_Fld1301"] . "</td>
  <td>" . $row["_Fld1304"] . "</td><td>" . $row["ser"] . "</td>
  <td>" . $row["number"] . "</td><td>" . $row["kod"] . "</td>
  <td>" . $row["date"] . "</td><td>" . $row["kemv"] . "</td>
  <td>" . $row["_Fld1306"] . "</td></tr>";
}
mssql_close($dbhandle);
echo "</table>";
?>

Скачать пример PHP кода

Продвижение сайта

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

Реклама

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