Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Разработка плагинов, вопросы по API  ->  Экспорт заказов в 1С 7

Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

Добавлено: 27.11.15 10:24:17 #1

Партнер


Регистрация: 02.07.13
Сообщений: 28


Обратиться по имени

Добрый день уважаемые разработчики.
У меня такой вопрос:
мне необходимо сделать эскпорт заказов в 1С 7. На старом моем сайте это реализовывалось след образом:
Был написан скрипт на php который выводил информацию о заказах на спец url, а вот сам скрипт:

<?php

require_once('../config.php';

header('Content-Type: text/plain; charset=cp1251';

$start = $_GET['start'];
if (empty($start))
{
echo 'start argument not specified';
exit;
}


$orders = Doctrine_Query::create()->from('OrderRecord'->where('id >= ?', $start)->orderBy('id'->execute();

function pr($line = "" {
echo $line;
echo "\n";
}

foreach ($orders as $order)
{
pr("#{$order->id}";
pr($order->date);
pr($order->state);
pr(iconv('utf-8', 'cp1251', $order->name));

$address = iconv('utf-8', 'cp1251', $order->address);
$address = str_replace("\n", " ", $address);
$address = str_replace("\r", " ", $address);
pr($order->postindex . "; " . $address);

foreach ($order->Items as $item)
{
pr(iconv('utf-8', 'cp1251', $item->Product->name) . '; ' . $item->count . '; ' . ($item->price * $item->count));
}

if (/* $order->shippingmethod == 'post' && */ $order->shippingcost != null)
{
pr(iconv('utf-8', 'cp1251', 'Доставка' . '; 1; ' . $order->shippingcost);
}

pr();
}

?>
(может кому то пригодится?)
далее в файле .htaccess прописал RewriteRule ^1c.txt$ 1c.php т.е. тут формировалась сылка на как будто текстовый файл и дальше уже сама 1С подхватывала ссылку и у себя там обрабатывала.

Так воту меня вопрос, как можно реализовать данную схему на амиро? я посмотрел в базе и определил что мне нужны 3 таблицы из базы это cms_es_orders, cms_es_orders_items, cms_es_items. а дальше как действовать пока не соображу. подскажите куда дальше смотреть и идти?

Заранее благодарен




Добавлено: 27.11.15 10:58:07 #2

Партнер


Регистрация: 02.07.13
Сообщений: 28


Обратиться по имени

а вот сама ссылка на то что у меня на старом сайте:
http://microline.ru/orders/1c.txt?start=14700
точнее сказать результат работы скрипта. Мне необходимо сделать тоже самое на сайт е посторенном на амиро.






Добавлено: 27.11.15 12:33:31 #3



Регистрация: 22.10.12
Сообщений: 73


Обратиться по имени

Представленный код, в целом, можно переписать с учетом имеющегося API.

niiikkki:
require_once('../config.php';


Код оформляется так же в отдельной точке входа ( http://manual.amiro.ru/api/introduction/tochki-vhoda-amirocms ) -

$AMI_ENV_SETTINGS = array(
    'mode'              => 'full',
    'disable_cache'     => true
);

require_once 'ami_env.php';

niiikkki:
$orders = Doctrine_Query::create()->from('OrderRecord'->where('id >= ?', $start)->orderBy('id'->execute();


Можно переписать следующим образом -
$orders = AMI::getResourceModel('eshop_order/table')->getList()->addColumn('*')->addWhereDef('AND i.id >= ' . $start)->load();

Описание методов списка есть на странице http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTableList.html

niiikkki:
foreach ($orders as $order)
{
pr("#{$order->id}";
pr($order->date);
pr($order->state);
pr(iconv('utf-8', 'cp1251', $order->name));

$address = iconv('utf-8', 'cp1251', $order->address);
$address = str_replace("\n", " ", $address);
$address = str_replace("\r", " ", $address);
pr($order->postindex . "; " . $address);


Итерация по списку, в целом, аналогична, однако названия полей будут отличаться, полный список полей модели можно получить с помощью метода getAvailableFields ( http://manual.amiro.ru/docs/api6/ModuleComponent/Model/AMI_ModTable.html#methodgetAvailableFields ), AMI::getResourceModel('eshop_order/table'->getAvailableFields().

niiikkki:
foreach ($order->Items as $item)
{
pr(iconv('utf-8', 'cp1251', $item->Product->name) . '; ' . $item->count . '; ' . ($item->price * $item->count));
}

Содержимое заказа ($order->Items) необходимо будет предварительно получить следующим образом -
$items = AMI::getResourceModel('eshop_order_item/table')->getList()->addColumn('*')->addWhereDef('AND i.id_order = ' . $order->id)->load();

И далее так же итерировать по списку.

Данные об оригинальном товаре можно получить так -
$oItem = AMI::getResourceModel('eshop_item/table')->find($item->id_product);


niiikkki:
а вот сама ссылка на то что у меня на старом сайте:
http://microline.ru/orders/1c.txt?start=14700
точнее сказать результат работы скрипта. Мне необходимо сделать тоже самое на сайт е посторенном на амиро.


Доступ к странице закрыт http-авторизацией.



Добавлено: 27.11.15 12:36:21 #4

Партнер


Регистрация: 02.07.13
Сообщений: 28


Обратиться по имени

Спасибо за развернутый ответ. Буду решать задачу по вашим рекомендациям. Во результату отпишусь обязательно





Создать новую тему

Всего тем: 6629
Всего сообщений: 27746
Всего зарегистрированных пользователей: 48914
Последний зарегистрированный пользователь: user74945798