<?
//==================== Загрузка отпусков из 1С ====================
// выполняем все действия от админа битрикса
global $USER;
$USER = new CUSer();
$USER->Authorize(1);
function LoadVacations1C($paramDate = ''){
$fileLog = fopen($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/123/log.txt", "a");
// fwrite($fileLog, "Агент LoadVacations1C запущен ".date("d.m.Y H:i:s", time()).PHP_EOL);
CModule::IncludeModule('bizproc');
CModule::IncludeModule('iblock');
CModule::IncludeModule('lists');
// Необходимо отключить кэширование для SOAP. Если этого не сделать, функции веб-сервисов будут работать некорректно
ini_set('soap.wsdl_cache_enabled', 0 );
ini_set('soap.wsdl_cache_ttl', 0);
$client = CLyalyaev::getSOAPClient1C();
//Заполняем массив передаваемых параметров
if ($paramDate == ''){
$paramDate = time();
}
// $paramDateString = ConvertTimeStamp($paramDate); //d.m.Y
$paramDateString = date('d.m.Y', $paramDate);
$paramDateString1C = date("Y-m-d", $paramDate);
$params["Date"] = $paramDateString1C;
// fwrite($fileLog, "Получаем отпуска, начинающиеся ".$paramDateString.PHP_EOL);
//Получаем отсутствия из 1С
try {
// $result = $client->GetPlannedVacations($params);
$result = $client->GetAbsences($params);
}
catch (Exception $e) {
// Если что-то пошло не так, выходим
123::echoStandartErrorMessage($e);
// fwrite($fileLog, "Ошибка при получении данных из 1С".PHP_EOL);
fclose($fileLog);
return "LoadVacations1C();";
}
//Обработка результата
$jsResult = $result->return;
try{
if (count($jsResult->ROW) == 0){
123::echoit(123::formatStringForSite('Нет отпусков на '.$paramDateString));
// fwrite($fileLog, "Нет отпусков на эту дату".PHP_EOL);
fclose($fileLog);
return "LoadVacations1C();";
}
}
catch (Exception $e) {
123::echoit(123::formatStringForSite('Нет отпусков на '.$paramDateString));
// fwrite($fileLog, "Нет отпусков на эту дату".PHP_EOL);
fclose($fileLog);
return "LoadVacations1C();";
}
// Удаление ранее автоматически загруженных отсутсвий на дату
123::deleteIBlockEl(CKLIBlock::getArFilterForIBlockDate("absence", $paramDateString));
// CRLBizproc::deleteDocument(CKLIBlock::getArFilterForIBlockDate("bitrix_auto_vacation", $paramDateString));
foreach ($jsResult->ROW as $el){
// Поиск сотрудника
// * * * Без убирания пробелов сравнения в запросе часто не срабатывают * * *
// $lastName = CLyalyaev::formatStringForSite(explode(' ', $el->FullName)[0]);
$code = 123::formatStringForSite($el->Code);
$arUserID = 123::getArUserIDByField('UF_EMPLOYEE_ID', $code);
// echo CLyalyaev::formatStringForSite($el->Condition).' '.$arAbsenceTypes[trim($el->Condition)].' - ';
$arUserID = CLyalyaev::getArUserIDByField('UF_EMPLOYEE_ID', $code);
foreach ($arUserID as $userID){
CKLIBlock::createIBlockEl("absence", "ABSENCE_TYPE", $userID, $el);
}
}
1234::echoit(CLyalyaev::formatStringForSite('Операция выполнена'));
// fwrite($fileLog, "Отпуска загружены".PHP_EOL);
// fwrite(PHP_EOL);
fclose($fileLog);
return "LoadVacations1C();";
}
?>