Можно ли каким либо образом узнать реальный код в операции,
который хранится в таблицах Paradox?
Необходимо для связи с операциями ИБ сторонних систем.
К Евгению вопрос - правильно ли я понимаю, что IBALT позволяет внешнему приложению управлять Инфо-Бухгалтером через DDE? Тогда формирование проводок - просто частный случай?
На одном дилерском семинаре Денис показывал вызов и обработку справочника организаций в Excel, функции вызывались из Excel через DDE.
Excel вызывался из ИБ8, после закрытия данные сохранялись в базу ИБ.
Сам я не программист, делаю что попроще. Есть бланк редактора DBF в Excel.
Можно от десятки ожидать возможности выполнения функций десятки из внешних программ?
Собственно говоря, прокси сервер, который на прошлом семинаре был - вполне себе выполнение функций десятки через XML-RPC хоть из сайта, хоть из внешней программы. Будет вместе с 10.2.
А пример кода... ну вот, например, то, что на прошлом семинаре работало (обработчик AJAX запросов с web-страницы, получающий данные из ИБ10). На стороне ИБ это все транслируется в прикладное событие на сервере, где можно хоть получить данные из базы, хоть положить их туда - все что угодно.
if (!isset($_COOKIE['sid'])) {
fatalFail($errWrongSession, "no sid in cookies");
}
$sid = $_COOKIE['sid'];
$hdr = array(
'name' => new xmlrpcval('Оборотка', 'string'),
'family' => new xmlrpcval('Тест', 'string'),
'sender' => new xmlrpcval('hdr_sender', 'string'),
);
$idStr = "БУХГАЛТЕРИЯ/АНАЛИТИКА/СЧЕТА";
if (isset($_POST["scet"])) {
$scet = trim($_POST["scet"]);
if ($scet !== "") {
$idStr .= "/" . $_POST["scet"];
}
}
if (!isset($_POST["dateFrom"]) || !isset($_POST["dateTo"])) {
fatalFail(1, "dates not set");
}
$input = array(
"датаС" => new xmlrpcval($_POST["dateFrom"], "string"),
"датаПо" => new xmlrpcval($_POST["dateTo"], "string"),
"идСтр" => new xmlrpcval($idStr, "string")
);
$ed = array(
"вход" => new xmlrpcval($input, "struct")
);
$params = array(
new xmlrpcval('EVENT', 'string'),
new xmlrpcval($sid, 'string'),
new xmlrpcval('Сайт', 'string'),
new xmlrpcval($hdr, 'struct'),
new xmlrpcval($ed, 'struct')
);
$myclient = new xmlrpc_client($xmlrpc_url);
//$myclient->setdebug(1);
$myclient->request_charset_encoding = 'UTF-8';
//$myclient->setCookie('sid', $sid);
$myclient->setSSLVerifyHost(0);
$myclient->setSSLVerifyPeer(0);
$msg = new xmlrpcmsg('request', $params);
$resp = $myclient->send($msg);
if ($resp->faultCode()) { // some error
fatalFail($resp->faultCode(), $resp->faultString());
}
// OK
// writing response table
$decoded = php_xmlrpc_decode($resp->value())['payload'];
Заинтересовал вопрос про управление ИБ через DDE.
Есть какие-то примеры, или хотя бы направление к действию.
Одна из мыслей - это заменить стандартную форму ввода операции в ИБ на свою и работать через ИС.
В этом случае возникает 2 проблемы, как узнать запись которую будут редактировать (OPER_NUMB).
и как встать на нужную запись в журнале после вставки, т.е. если мы будем создавать операции напрямую через инфо-сервер, то операции будут вставляться куда-то в журнале, и курсор необходимо перемещать на новую запись.
Возможно ли сделать это средствами ИБ, DDE или еще какими-то?
Таблица HOZOP.DB управляется индексом, новая запись "встанет" последней среди записей даты операции. Если запись была добавлена через ИС, её OPER_NUMB вы будете знать, в индексированной таблице запись можно легко найти по индексным полям (метод НАЙТИ в ИБ) или двоичным поиском.
Точно )))
Так точнее )
http://users.kaluga.ru/logika/ib22.png
На одном дилерском семинаре Денис показывал вызов и обработку справочника организаций в Excel, функции вызывались из Excel через DDE.
Excel вызывался из ИБ8, после закрытия данные сохранялись в базу ИБ.
Сам я не программист, делаю что попроще. Есть бланк редактора DBF в Excel.
Собственно говоря, прокси сервер, который на прошлом семинаре был - вполне себе выполнение функций десятки через XML-RPC хоть из сайта, хоть из внешней программы. Будет вместе с 10.2.
А пример кода... ну вот, например, то, что на прошлом семинаре работало (обработчик AJAX запросов с web-страницы, получающий данные из ИБ10). На стороне ИБ это все транслируется в прикладное событие на сервере, где можно хоть получить данные из базы, хоть положить их туда - все что угодно.
<?php
error_reporting(E_ALL ^ E_DEPRECATED);
require_once 'lib/xmlrpc.inc';
require_once 'xmlrpc_cfg.php';
header("Content-Type: application/json");
function fatalFail($code, $message)
{
$result = array();
$result["fail"] = array(
"code"=>$code,
"message"=>$message
);
echo json_encode($result);
exit;
}
if (!isset($_COOKIE['sid'])) {
fatalFail($errWrongSession, "no sid in cookies");
}
$sid = $_COOKIE['sid'];
$hdr = array(
'name' => new xmlrpcval('Оборотка', 'string'),
'family' => new xmlrpcval('Тест', 'string'),
'sender' => new xmlrpcval('hdr_sender', 'string'),
);
$idStr = "БУХГАЛТЕРИЯ/АНАЛИТИКА/СЧЕТА";
if (isset($_POST["scet"])) {
$scet = trim($_POST["scet"]);
if ($scet !== "") {
$idStr .= "/" . $_POST["scet"];
}
}
if (!isset($_POST["dateFrom"]) || !isset($_POST["dateTo"])) {
fatalFail(1, "dates not set");
}
$input = array(
"датаС" => new xmlrpcval($_POST["dateFrom"], "string"),
"датаПо" => new xmlrpcval($_POST["dateTo"], "string"),
"идСтр" => new xmlrpcval($idStr, "string")
);
$ed = array(
"вход" => new xmlrpcval($input, "struct")
);
$params = array(
new xmlrpcval('EVENT', 'string'),
new xmlrpcval($sid, 'string'),
new xmlrpcval('Сайт', 'string'),
new xmlrpcval($hdr, 'struct'),
new xmlrpcval($ed, 'struct')
);
$myclient = new xmlrpc_client($xmlrpc_url);
//$myclient->setdebug(1);
$myclient->request_charset_encoding = 'UTF-8';
//$myclient->setCookie('sid', $sid);
$myclient->setSSLVerifyHost(0);
$myclient->setSSLVerifyPeer(0);
$msg = new xmlrpcmsg('request', $params);
$resp = $myclient->send($msg);
if ($resp->faultCode()) { // some error
fatalFail($resp->faultCode(), $resp->faultString());
}
// OK
// writing response table
$decoded = php_xmlrpc_decode($resp->value())['payload'];
//var_dump($decoded);
//var_dump($decoded['данные']);
//var_dump($decoded['столбцы']);
echo json_encode($decoded, JSON_BIGINT_AS_STRING | JSON_UNESCAPED_UNICODE);
?>
Заинтересовал вопрос про управление ИБ через DDE.
Есть какие-то примеры, или хотя бы направление к действию.
Одна из мыслей - это заменить стандартную форму ввода операции в ИБ на свою и работать через ИС.
В этом случае возникает 2 проблемы, как узнать запись которую будут редактировать (OPER_NUMB).
и как встать на нужную запись в журнале после вставки, т.е. если мы будем создавать операции напрямую через инфо-сервер, то операции будут вставляться куда-то в журнале, и курсор необходимо перемещать на новую запись.
Возможно ли сделать это средствами ИБ, DDE или еще какими-то?
Таблица HOZOP.DB управляется индексом, новая запись "встанет" последней среди записей даты операции. Если запись была добавлена через ИС, её OPER_NUMB вы будете знать, в индексированной таблице запись можно легко найти по индексным полям (метод НАЙТИ в ИБ) или двоичным поиском.