execut/odata-1c

ODATA protocol client adopted to use with 1C

Maintainers

👁 execut

Package info

github.com/execut/odata-1c

pkg:composer/execut/odata-1c

Statistics

Installs: 1 243

Dependents: 1

Suggesters: 0

Stars: 0

0.1.1 2020-09-16 08:08 UTC

Requires

Requires (Dev)

None

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 5ecfffaead51df662fd97342bf8cba43ad681d9b

  • Alexander Bogdanov <ab.woop@dev.kily.ru>

This package is auto-updated.

Last update: 2026-06-16 19:52:18 UTC


README

OData клиент для 1C

Установка

Рекомендуемый способ установки через Composer:

$ composer require kilylabs/odata-1c

Использование

Пример кода

<?php

use Kily\Tools1C\OData\Client;

require __DIR__.'/vendor/autoload.php';

$client = new Client('http://HOSTNAME/BASE/odata/standard.odata/',[
 'auth' => [
 'YOUR LOGIN', 
 'YOUR PASSWORD'
 ],
 'timeout' => 300,
]);

$product_data = [
 'Артикул'=>'CERTANLY_NONEXISTENT',
 'Description'=>'test test test nonexistent',
];

// Creation
$data = $client->{'Catalog_Номенклатура'}->create($product_data);
echo "CREATED!\n";

// Getting using filter....
$data = $client->{'Catalog_Номенклатура'}->get(null,"Артикул eq 'CERTANLY_NONEXISTENT'");
echo "GOT!\n";
var_dump($data);

// ... or using Ref_Key
$id = $data['value'][0]['Ref_Key'];
$data = $client->{'Catalog_Номенклатура'}->get($id);
echo "GOT BY ID!\n";
var_dump($data);

// Updating
$data = $client->{'Catalog_Номенклатура'}->update($id,[
 'Description'=>'Test description',
]);
echo "UPDATED!\n";

// deletion
$data = $client->{'Catalog_Номенклатура'}->delete($id);
echo "DELETED!\n";

// out metadata
$data = $client->getMetadata();
var_dump($data);

Обработка исключений

Компонент в случае ошибочных ответов от сервера вызывает исключения Kily\Tools1C\OData\RequestException. Это исключение имеет свойство $request в качестве значения которого содержится экземпляр класса Kily\Tools1C\OData\Request со всей необходимой информацией для обработки ошибки. Например, при поиске записи возникла непредвиденная ошибка и нужно залоггировать её:

try {
 $data = $client->{'Catalog_Номенклатура'}->get($id);
 if(!$client->isOk()) {
 var_dump('Something went wrong: ',$client->getErrorCode(),$client->getErrorMessage(),$data);
 die();
 }
} catch (Exception $e) {
 log('Error while requested ' . $e->request->url . ': ' . $e->getMessage());
}

Профилирование

Для возможности перехватывать запросы к серверу oData для профилирования или похожих целей, необходимо реализовать абстрактный класс Profiler:

use Kily\Tools1C\OData\Profiler;
class CustomProfiler extends Profiler {
 public function begin() {
 echo 'Start request ' . $this->url . ' (' . $this->method . ')';
 if (!empty($this->data)) {
 echo ' with data: ' . var_export($this->data, true) . "\n<br>";
 }
 }

 public function end() {
 echo 'Ending request ' . $this->url . ' (' . $this->method . ')' . "\n<br>"; 
 }
}

и передать его в конструктор клиента oData или задать через сеттер:

$profiler = new Profiler;
$client = new Client($url, $options, $profiler);
$client->setProfiler($profiler);

TODO

  • сделать метод getLastId();
  • поддержка XML?