Помогите, друзья, братья!
Прикрепленный код написан в файле, который подключается в init.php. А потом данная функция указывается в агенте.
1. Код работает и создает файл вне агента. То есть он тестировался и проверялся.
2. Агент запускает файл. Это понятно из того, что я расставил по файлe функции отправки на почту ([URL=mailto:myMail@mail.ru]myMail@mail.ru[/URL]). И отрабатывает отправка письма с текстом "Из генератора2". Но после происходит ошибка. и последующие письма уже не приходят и в агенте время последнего запуска не фиксируется. Хотя периодично письма отсылаются, то бишь часть кода до обращения к Битриксовской функции работает.
Насколько я понимаю тут код не отрабатывает по той причине, что не понимает функции вот в этом куске: DateFormatToPHP(CSite::GetDateFormat("SHORT")
Но как подключить тут модуль 'sale' не понимаю.
Если поставить в начале выполнения функции:
CModule::IncludeModule('sale');
То вообще ни одно письмо не приходит, то есть код подключения модуля не отрабатывает. Помогите подключить тут модуль 'sale' или скажите что в виртуальной машине можно просто указать где-то путь к файлу и не нужно возиться с агентами. Мне просто нужно запускать файл раз в день, а целая трагедия. Вот код из подключаемого к иниту файла. Целиком[CODE]<?php
function GenerateXML(){
//ПОДСТАНОВКА ДАННЫХ В XML-ГЕНЕРАТОР ----------------------------------------------------------
$partnerId = '2306'; //идентификатор Партнера
$programId = '3068679'; //идентификатор Партнера
function translit($s)
{
$s = (string)$s;
$s = strip_tags($s);
$s = str_replace(array("\n", "\r"), " ", $s);
$s = preg_replace("/\s+/", ' ', $s);
$s = trim($s);
$s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s);
$s = strtr($s, array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'y', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'ъ' => '', 'ь' => '', ' ' => '_'));
$s = preg_replace("/[^0-9a-z-_ ]/i", "", $s);
$s = str_replace(" ", "-", $s);
return $s;
}
$dom = new domDocument("1.0", "windows-1251"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
//добавление корня - <batch>
$batch = $dom->appendChild($dom->createElement('batch'));
//добавление элемента <enterpriseGroup> в <batch>
$enterpriseGroup = $batch->appendChild($dom->createElement('enterpriseGroup'));
$enterpriseId = $partnerId; // enterpriseId
$enterpriseGroup->setAttribute("enterpriseId", $enterpriseId); // Устанавливаем атрибут "$enterpriseId" у узла "$enterpriseGroup"
// добавление элемента <accountGroup> в <enterpriseGroup>
$accountGroup = $enterpriseGroup->appendChild($dom->createElement('accountGroup'));
$accountId = $programId;
$accountGroup->setAttribute("accountId", $accountId);
//Выбирает заказы за текущий день, у которых менялся статус
mail('myMail@mail.ru', 'Из генератора2', 'Из генератора2');
$arFilter = Array(
">=DATE_STATUS" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0, 0, 0, date("ndY", strtotime("-1 days"))))
);
$count = 1;
mail('myMail@mail.ru', 'Из генератора3', 'Из генератора3');
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter);
mail('myMail@mail.ru', 'Из генератора4', 'Из генератора4');
while ($ar_sales = $db_sales->Fetch()) {
$orderId = $ar_sales['ID'];
$rsVals = CSaleOrderPropsValue::GetList(array("SORT" => "ASC"), array("ORDER_ID" => $orderId, "ORDER_PROPS_ID" => 50));
if ($arVals = $rsVals->Fetch()) {
if (!empty($arVals['VALUE']) && $ar_sales['STATUS_ID'] == 'F') {
//вставляем заказы у которых была указана карта
$receipt = $accountGroup->appendChild($dom->createElement('receipt'));
$number = $orderId;
$dateStat = $ar_sales['DATE_STATUS'];
//подстраиваем дату под формат ГГ-ММ-ДД
$DMY = stristr($dateStat, ' ', true);
$pieces = explode(".", $DMY);
$date = $pieces[2] . '-' . $pieces[1] . '-' . $pieces[0];
$card = $arVals['VALUE'];
if ($ar_sales['STATUS_ID'] == 'N') {
$action = "create";
}
if ($ar_sales['STATUS_ID'] == 'F') {
$action = "approve";
}
if ($ar_sales['STATUS_ID'] == 'O') {
$action = "reject";
}
if ($ar_sales['STATUS_ID'] == 'N') {
$status = "waiting";
}
if ($ar_sales['STATUS_ID'] == 'F') {
$status = "approved";
}
if ($ar_sales['STATUS_ID'] == 'O') {
$status = "rejected";
}
$receipt->setAttribute("number", $number);
$receipt->setAttribute("date", $date);
$receipt->setAttribute("card", $card);
$receipt->setAttribute("action", $action);
$receipt->setAttribute("status", $status);
$entry = $receipt->appendChild($dom->createElement('entry'));
$orderDateAr = $ar_sales['DATE_INSERT'];
//подстраиваем дату под формат ГГ-ММ-ДД
$DMYOrder = stristr($orderDateAr, ' ', true);
$piecesOrder = explode(".", $DMYOrder);
$orderDate = $piecesOrder[2] . '-' . $piecesOrder[1] . '-' . $piecesOrder[0];
$entry->setAttribute("name", "orderDate");
$entry->setAttribute("value", $orderDate);
$entry2 = $receipt->appendChild($dom->createElement('entry'));
$sum = $ar_sales['PRICE'] - $ar_sales['PRICE_DELIVERY'];;
$entry2->setAttribute("name", "sum");
$entry2->setAttribute("value", $sum);
$collection = $receipt->appendChild($dom->createElement('collection'));
$collection->setAttribute("name", "goods");
//Запрашивает состав заказа
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array(
"NAME" => "ASC",
"ID" => "ASC"
),
array(
"ORDER_ID" => $orderId
),
false,
false,
array("ID", "PRODUCT_ID", "QUANTITY", "PRICE", "NAME"));
while ($arItems = $dbBasketItems->Fetch()) {
//вставляет детализацию заказа
$item = $collection->appendChild($dom->createElement('item'));
$entry4 = $item->appendChild($dom->createElement('entry'));
$entry4->setAttribute("name", "sum");
$sumItem = $arItems['PRICE'] * $arItems['QUANTITY'];
$entry4->setAttribute("value", $sumItem);
$entry6 = $item->appendChild($dom->createElement('entry'));
$entry6->setAttribute("name", "remarks");
$remarks = translit($arItems['NAME']);
$entry6->setAttribute("value", $remarks);
}
}
}
$count++;
}
mail('myMail@mail.ru', 'Из генератора5', 'Из генератора5');
//генерация xml
$dom->formatOutput = true; // установка атрибута formatOutput
// domDocument в значение true
// save XML as string or file
$file_name = $partnerId . '_' . date("Ymd", strtotime("-1 days")) . '.xml';
$test1 = $dom->saveXML();
$dom->save('/sale/mnogo/'.$file_name); // сохранение файла
mail('myMail@mail.ru', 'Из генератора6', 'Из генератора6');
return "GenerateXML();";
}
[/CODE]
Прикрепленный код написан в файле, который подключается в init.php. А потом данная функция указывается в агенте.
1. Код работает и создает файл вне агента. То есть он тестировался и проверялся.
2. Агент запускает файл. Это понятно из того, что я расставил по файлe функции отправки на почту ([URL=mailto:myMail@mail.ru]myMail@mail.ru[/URL]). И отрабатывает отправка письма с текстом "Из генератора2". Но после происходит ошибка. и последующие письма уже не приходят и в агенте время последнего запуска не фиксируется. Хотя периодично письма отсылаются, то бишь часть кода до обращения к Битриксовской функции работает.
Насколько я понимаю тут код не отрабатывает по той причине, что не понимает функции вот в этом куске: DateFormatToPHP(CSite::GetDateFormat("SHORT")
Но как подключить тут модуль 'sale' не понимаю.
Если поставить в начале выполнения функции:
CModule::IncludeModule('sale');
То вообще ни одно письмо не приходит, то есть код подключения модуля не отрабатывает. Помогите подключить тут модуль 'sale' или скажите что в виртуальной машине можно просто указать где-то путь к файлу и не нужно возиться с агентами. Мне просто нужно запускать файл раз в день, а целая трагедия. Вот код из подключаемого к иниту файла. Целиком[CODE]<?php
function GenerateXML(){
//ПОДСТАНОВКА ДАННЫХ В XML-ГЕНЕРАТОР ----------------------------------------------------------
$partnerId = '2306'; //идентификатор Партнера
$programId = '3068679'; //идентификатор Партнера
function translit($s)
{
$s = (string)$s;
$s = strip_tags($s);
$s = str_replace(array("\n", "\r"), " ", $s);
$s = preg_replace("/\s+/", ' ', $s);
$s = trim($s);
$s = function_exists('mb_strtolower') ? mb_strtolower($s) : strtolower($s);
$s = strtr($s, array('а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'e', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch', 'ы' => 'y', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', 'ъ' => '', 'ь' => '', ' ' => '_'));
$s = preg_replace("/[^0-9a-z-_ ]/i", "", $s);
$s = str_replace(" ", "-", $s);
return $s;
}
$dom = new domDocument("1.0", "windows-1251"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
//добавление корня - <batch>
$batch = $dom->appendChild($dom->createElement('batch'));
//добавление элемента <enterpriseGroup> в <batch>
$enterpriseGroup = $batch->appendChild($dom->createElement('enterpriseGroup'));
$enterpriseId = $partnerId; // enterpriseId
$enterpriseGroup->setAttribute("enterpriseId", $enterpriseId); // Устанавливаем атрибут "$enterpriseId" у узла "$enterpriseGroup"
// добавление элемента <accountGroup> в <enterpriseGroup>
$accountGroup = $enterpriseGroup->appendChild($dom->createElement('accountGroup'));
$accountId = $programId;
$accountGroup->setAttribute("accountId", $accountId);
//Выбирает заказы за текущий день, у которых менялся статус
mail('myMail@mail.ru', 'Из генератора2', 'Из генератора2');
$arFilter = Array(
">=DATE_STATUS" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0, 0, 0, date("ndY", strtotime("-1 days"))))
);
$count = 1;
mail('myMail@mail.ru', 'Из генератора3', 'Из генератора3');
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), $arFilter);
mail('myMail@mail.ru', 'Из генератора4', 'Из генератора4');
while ($ar_sales = $db_sales->Fetch()) {
$orderId = $ar_sales['ID'];
$rsVals = CSaleOrderPropsValue::GetList(array("SORT" => "ASC"), array("ORDER_ID" => $orderId, "ORDER_PROPS_ID" => 50));
if ($arVals = $rsVals->Fetch()) {
if (!empty($arVals['VALUE']) && $ar_sales['STATUS_ID'] == 'F') {
//вставляем заказы у которых была указана карта
$receipt = $accountGroup->appendChild($dom->createElement('receipt'));
$number = $orderId;
$dateStat = $ar_sales['DATE_STATUS'];
//подстраиваем дату под формат ГГ-ММ-ДД
$DMY = stristr($dateStat, ' ', true);
$pieces = explode(".", $DMY);
$date = $pieces[2] . '-' . $pieces[1] . '-' . $pieces[0];
$card = $arVals['VALUE'];
if ($ar_sales['STATUS_ID'] == 'N') {
$action = "create";
}
if ($ar_sales['STATUS_ID'] == 'F') {
$action = "approve";
}
if ($ar_sales['STATUS_ID'] == 'O') {
$action = "reject";
}
if ($ar_sales['STATUS_ID'] == 'N') {
$status = "waiting";
}
if ($ar_sales['STATUS_ID'] == 'F') {
$status = "approved";
}
if ($ar_sales['STATUS_ID'] == 'O') {
$status = "rejected";
}
$receipt->setAttribute("number", $number);
$receipt->setAttribute("date", $date);
$receipt->setAttribute("card", $card);
$receipt->setAttribute("action", $action);
$receipt->setAttribute("status", $status);
$entry = $receipt->appendChild($dom->createElement('entry'));
$orderDateAr = $ar_sales['DATE_INSERT'];
//подстраиваем дату под формат ГГ-ММ-ДД
$DMYOrder = stristr($orderDateAr, ' ', true);
$piecesOrder = explode(".", $DMYOrder);
$orderDate = $piecesOrder[2] . '-' . $piecesOrder[1] . '-' . $piecesOrder[0];
$entry->setAttribute("name", "orderDate");
$entry->setAttribute("value", $orderDate);
$entry2 = $receipt->appendChild($dom->createElement('entry'));
$sum = $ar_sales['PRICE'] - $ar_sales['PRICE_DELIVERY'];;
$entry2->setAttribute("name", "sum");
$entry2->setAttribute("value", $sum);
$collection = $receipt->appendChild($dom->createElement('collection'));
$collection->setAttribute("name", "goods");
//Запрашивает состав заказа
$arBasketItems = array();
$dbBasketItems = CSaleBasket::GetList(
array(
"NAME" => "ASC",
"ID" => "ASC"
),
array(
"ORDER_ID" => $orderId
),
false,
false,
array("ID", "PRODUCT_ID", "QUANTITY", "PRICE", "NAME"));
while ($arItems = $dbBasketItems->Fetch()) {
//вставляет детализацию заказа
$item = $collection->appendChild($dom->createElement('item'));
$entry4 = $item->appendChild($dom->createElement('entry'));
$entry4->setAttribute("name", "sum");
$sumItem = $arItems['PRICE'] * $arItems['QUANTITY'];
$entry4->setAttribute("value", $sumItem);
$entry6 = $item->appendChild($dom->createElement('entry'));
$entry6->setAttribute("name", "remarks");
$remarks = translit($arItems['NAME']);
$entry6->setAttribute("value", $remarks);
}
}
}
$count++;
}
mail('myMail@mail.ru', 'Из генератора5', 'Из генератора5');
//генерация xml
$dom->formatOutput = true; // установка атрибута formatOutput
// domDocument в значение true
// save XML as string or file
$file_name = $partnerId . '_' . date("Ymd", strtotime("-1 days")) . '.xml';
$test1 = $dom->saveXML();
$dom->save('/sale/mnogo/'.$file_name); // сохранение файла
mail('myMail@mail.ru', 'Из генератора6', 'Из генератора6');
return "GenerateXML();";
}
[/CODE]