Форум программистов, компьютерный форум, киберфорум
1С Битрикс
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
1

Кастомизация bitrix:sale.export.1c

30.05.2018, 15:09. Показов 7499. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, форум!

Ломаю голову вторую неделю:

Необходимо в xml-файл выгрузки, который забирает 1С, добавить тег с созданным свойством товара.

Думаю, что надо шаманить bitrix:sale.export.1c, но уже запутался.

Не понимаю куда смотреть. Хэльп!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2018, 15:09
Ответы с готовыми решениями:

Bitrix:sale.bestsellers
Доброго времени суток! На сайте существует раздел "Лидер продаж" (bitrix:sale.bestsellers). Данный...

Bitrix:sale.order.ajax IE11
Не работает переключение служб доставки и платёжных систем в компоненте bitrix:sale.order.ajax в...

Самые продаваемые товары bitrix:sale.bestsellers на входе пустой массив
Есть компонент самые продаваемые товары, на входе в result_modifier пустые $arResult прилетают и он...

Как в bitrix:sale.basket.basket.small.mail вывести детальную картинку?
Сам вопрос в теме. Или может не обязательно использовать в рассылке именно этот элемент? ...

12
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
30.05.2018, 16:14 2
http://bedrosova.blogspot.com/2013/02/1-1.html

Добавлено через 2 минуты
а вобще сначала обнови платформу, сегодня вышла новая версия управления сайтом 18.0
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
30.05.2018, 16:16  [ТС] 3
Цитата Сообщение от Dias606 Посмотреть сообщение
http://bedrosova.blogspot.com/2013/02/1-1.html
Добавлено через 2 минуты
а вобще сначала обнови платформу, сегодня вышла новая версия управления сайтом 18.0
Спасибо! Читал это много раз, но не понял как именно внести свойство в файл.
Я смотрел презентацию. Обновление разве решит мою проблему?
0
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
30.05.2018, 16:27 4
обновление решит проблему твоей кастомизации, не затрет изменения если в модуль полезешь, что конечно делать не рекомендуется

Добавлено через 1 минуту
по ссылке выше вроде более менее все понятно, надо сидеть и дебажить, конкретно в какой строке собирается файл тебе тут никто не подскажет
1
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
30.05.2018, 16:29  [ТС] 5
Цитата Сообщение от Dias606 Посмотреть сообщение
обновление решит проблему твоей кастомизации, не затрет изменения если в модуль полезешь, что конечно делать не рекомендуется
Добавлено через 1 минуту
по ссылке выше вроде более менее все понятно, надо сидеть и дебажить, конкретно в какой строке собирается файл тебе тут никто не подскажет
Верно ли я понял из презентации, что уже модифицированные штатные компоненты/модули не затрутся?
Странно, что никто не сталкивался с таким случаем.
0
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
30.05.2018, 16:32 6
Цитата Сообщение от suzune8o Посмотреть сообщение
Верно ли я понял из презентации, что уже модифицированные штатные компоненты/модули не затрутся?
эмм я не слышал такого в презентации.
я сталкивался с кастомизацией стандартного модуля 1с, но точно не помню где именно правил, но помню что все находится просто нужно поискать
0
451 / 417 / 115
Регистрация: 15.02.2012
Сообщений: 1,847
31.05.2018, 11:36 7
А почему бы не пойти по другому пути: создаете новое свойство заказа, назначаете его служебным, чтобы не выводить в публичку, и в это свойство при сохранении заказа сохраняете нужные вам данные. Далее идете в админку в настройке обмена с 1С указываете, что это свойство тоже передается в 1С. При таком подходе кастомизировать сам обмен не нужно. Да появляются дополнительные поля в заказе в админке, но по моему это проще кастомизации обмена.
1
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
31.05.2018, 15:28  [ТС] 8
Цитата Сообщение от tgarl Посмотреть сообщение
А почему бы не пойти по другому пути: создаете новое свойство заказа, назначаете его служебным, чтобы не выводить в публичку, и в это свойство при сохранении заказа сохраняете нужные вам данные. Далее идете в админку в настройке обмена с 1С указываете, что это свойство тоже передается в 1С. При таком подходе кастомизировать сам обмен не нужно. Да появляются дополнительные поля в заказе в админке, но по моему это проще кастомизации обмена.
Как передавать свойство товара в свойство заказа не разобрался: куда вписывать свое свойство (это переменная с множественным выбором).

Выходом стал третий путь:

В компоненте каталога я указал, что данное свойство будет передаваться в корзину;
Теперь эта информация передается в мой xml.

Но возникли следующие вопросы:

- Чтобы это свойство передалось, пользователю обязательно нужно его указать в модальном окне;
- Грамотно ли будет визуально скрыть окно и выбирать нужное свойство яваскриптом?
- При снятии чекбокса "множ" у свойства, в публичке при добавлении в корзину модальное окно "не выбраны свойства товара";

Как корректно решить вопрос?
0
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
31.05.2018, 15:42 9
Цитата Сообщение от suzune8o Посмотреть сообщение
Как передавать свойство товара в свойство заказа не разобрался: куда вписывать свое свойство (это переменная с множественным выбором).
Попробуй свое свойство в заказы добавить в админке
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
31.05.2018, 15:52  [ТС] 10
Цитата Сообщение от Dias606 Посмотреть сообщение
Попробуй свое свойство в заказы добавить в админке
К сожалению в xml не передается при такой настройке.
Смотрю конечный xml по примеру из сети:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
define("NO_AGENT_CHECK", true);
define("NO_KEEP_STATISTIC", true);
 
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
 
if ( !$GLOBALS['USER']->IsAdmin() )
{
   die("Доступно только для администратора.");
}
 
CModule::IncludeModule('sale');
 
$arErrors = array();
if ( isset($_REQUEST['ORDER_ID']) || isset($_REQUEST['ORDER_ID_TEXT']) )
{
   $nOrder = ( (int)$_REQUEST['ORDER_ID_TEXT'] > 0 ? (int)$_REQUEST['ORDER_ID_TEXT'] : (int)$_REQUEST['ORDER_ID'] );
   if ( $nOrder && CSaleOrder::GetByID($nOrder) )
   {
      ob_end_clean();
 
      header('Content-Type: text/html; charset=utf-8');
      header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
      header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
      header('Cache-Control: no-store, no-cache, must-revalidate');
      header('Cache-Control: post-check=0, pre-check=0', FALSE);
      header('Pragma: no-cache');
      header('Content-transfer-encoding: binary');
      header('Content-Disposition: attachment; filename=order-'.$nOrder.'.xml');
      header('Content-Type: application/x-unknown');
 
      ob_start();
      CSaleExport::ExportOrders2Xml(array('ID' => $nOrder));
      $sXml = ob_get_clean();
 
      echo strtr($sXml, array('encoding="windows-1251"' => 'encoding="utf-8"'));
      exit();
   }
   else
   {
      $arErrors[] = "Заказ №{$nOrder} не найден.";
   }
}
 
$arOrdersID = array();
$dbOrders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, array('nTopCount' => 200), array('ID', 'DATE_INSERT'));
while ($arOrder = $dbOrders->Fetch())
{
   $arOrdersID[] = $arOrder;
}
 
?>
<!DOCTYPE html>
<html>
<head>
   <title>Просмотр XML выгрузки для заказа</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <style>
      html, body { position: relative; height: 100%; }
      body { background: #f1f1f1; padding: 0; margin: 0 }
 
      .content-table { position: relative; width: 100%; height: 100%; }
      .content-cell { position: relative; text-align: center; vertical-align: middle; }
      .center-content { position: relative; box-shadow: 0 0 2px #555; padding: 20px;
         border-radius: 4px; background: #fff; display: inline-block; text-align: left; }
   </style>
</head>
<body>
   <table class="content-table">
      <tr>
         <td class="content-cell">
            <div class="center-content">
               <?//echo '<pre>'.var_export($_REQUEST, 1).'</pre>';?>
               <form action="" method="post" style="line-height: 24px;">
                  Форма генерирует XML файл заказа, такой же как при экспорте
                  <br />заказов с сайта в 1C, но в кодировке utf-8 для просмотре в браузере
                  <br /><br />
                  <?
 
                  if ( $arErrors )
                  {
                     // Ошибки
                     echo implode('<br />', $arErrors).'<br />';
                  }
 
                  ?>
                  Выберите из списка (200 последних ID):
                  <select name="ORDER_ID" style="cursor: pointer;">
                     <option value="">Выберите номер заказа</option>
                     <?
 
                     foreach ( $arOrdersID as $arOrder )
                     {
                        echo '<option value="'.$arOrder['ID'].'">'.$arOrder['ID'].' ('.$arOrder['DATE_INSERT'].')</option>';
                     }
 
                     ?>
                  </select>
                  <br />Или введите номер заказа вручную: <input type="text" name="ORDER_ID_TEXT" value="" />
                  <br /><button type="submit" name="SUBMIT" value="Y" style="cursor: pointer;">Сгенерировать XML</button>
                  <br /><br />* Полученный XML файл можно открыть в Google Chrome,
                  <br />файл будет открыт с XML форматированием.
               </form>
            </div>
         </td>
      </tr>
   </table>
</body>
</html>
Присутствуют проблемы с кодировкой.
Как посмотреть xml-файл, который передастся, правильно?
0
72 / 61 / 24
Регистрация: 20.09.2016
Сообщений: 559
31.05.2018, 16:14 11
Что за свойство такое которое обязательно должно быть, ты же можешь самому свойству по умолчанию поставить статус выбранно в настройках инфоблока, тогда пользователю выбирать не нужно его будет
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
04.06.2018, 16:48  [ТС] 12
Цитата Сообщение от Dias606 Посмотреть сообщение
Что за свойство такое которое обязательно должно быть, ты же можешь самому свойству по умолчанию поставить статус выбранно в настройках инфоблока, тогда пользователю выбирать не нужно его будет
Вот такое свойство:
Кастомизация bitrix:sale.export.1c


Кастомизация bitrix:sale.export.1c
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 7
05.06.2018, 09:52  [ТС] 13
Вообще, эту проблему можно решить, с одной стороны, путем добавления нового свойства (уже не множественного) в 1С, офк.

Добавил это на тесте - вроде получилось.

Но как теперь увидеть xml, который заберет 1С?

Делаю по инструкциям:

1. /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth

2. /bitrix/admin/1c_exchange.php?type=sale&mode=init&e[sessID]&version=3.1 (тут варианты версий меняются во всех гайдах, но не подходят. Без указания тоже)

3. bitrix/admin/1c_exchange.php?type=sale&mode=query&[sessID]

Результат: failure Обновите модуль обмена. Где его обновлять то? Инфу не нашел.

Добавлено через 10 минут
Проверял на самописном скрипте по одному из гайдов:

Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
define("NO_AGENT_CHECK", true);
define("NO_KEEP_STATISTIC", true);
 
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
 
if ( !$GLOBALS['USER']->IsAdmin() )
{
   die("Доступно только для администратора.");
}
 
CModule::IncludeModule('sale');
 
$arErrors = array();
if ( isset($_REQUEST['ORDER_ID']) || isset($_REQUEST['ORDER_ID_TEXT']) )
{
   $nOrder = ( (int)$_REQUEST['ORDER_ID_TEXT'] > 0 ? (int)$_REQUEST['ORDER_ID_TEXT'] : (int)$_REQUEST['ORDER_ID'] );
   if ( $nOrder && CSaleOrder::GetByID($nOrder) )
   {
      ob_end_clean();
 
      header('Content-Type: text/html; charset=UTF-8');
      header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
      header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
      header('Cache-Control: no-store, no-cache, must-revalidate');
      header('Cache-Control: post-check=0, pre-check=0', FALSE);
      header('Pragma: no-cache');
      header('Content-transfer-encoding: binary');
      header('Content-Disposition: attachment; filename=order-'.$nOrder.'.xml');
      header('Content-Type: application/x-unknown');
 
      ob_start();
      CSaleExport::ExportOrders2Xml(array('ID' => $nOrder));
      $sXml = ob_get_clean();
 
      echo strtr($sXml, array('encoding="windows-1251"' => 'encoding="UTF-8"'));
      exit();
   }
   else
   {
      $arErrors[] = "Заказ №{$nOrder} не найден.";
   }
}
 
$arOrdersID = array();
$dbOrders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, array('nTopCount' => 200), array('ID', 'DATE_INSERT'));
while ($arOrder = $dbOrders->Fetch())
{
   $arOrdersID[] = $arOrder;
}
 
?>
<!DOCTYPE html>
<html>
<head>
   <title>Просмотр XML выгрузки для заказа</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <style>
      html, body { position: relative; height: 100%; }
      body { background: #f1f1f1; padding: 0; margin: 0 }
 
      .content-table { position: relative; width: 100%; height: 100%; }
      .content-cell { position: relative; text-align: center; vertical-align: middle; }
      .center-content { position: relative; box-shadow: 0 0 2px #555; padding: 20px;
         border-radius: 4px; background: #fff; display: inline-block; text-align: left; }
   </style>
</head>
<body>
   <table class="content-table">
      <tr>
         <td class="content-cell">
            <div class="center-content">
               <?//echo '<pre>'.var_export($_REQUEST, 1).'</pre>';?>
               <form action="" method="post" style="line-height: 24px;">
                  Форма генерирует XML файл заказа, такой же как при экспорте
                  <br />заказов с сайта в 1C, но в кодировке utf-8 для просмотре в браузере
                  <br /><br />
                  <?
 
                  if ( $arErrors )
                  {
                     // Ошибки
                     echo implode('<br />', $arErrors).'<br />';
                  }
 
                  ?>
                  Выберите из списка (200 последних ID):
                  <select name="ORDER_ID" style="cursor: pointer;">
                     <option value="">Выберите номер заказа</option>
                     <?
 
                     foreach ( $arOrdersID as $arOrder )
                     {
                        echo '<option value="'.$arOrder['ID'].'">'.$arOrder['ID'].' ('.$arOrder['DATE_INSERT'].')</option>';
                     }
 
                     ?>
                  </select>
                  <br />Или введите номер заказа вручную: <input type="text" name="ORDER_ID_TEXT" value="" />
                  <br /><button type="submit" name="SUBMIT" value="Y" style="cursor: pointer;">Сгенерировать XML</button>
                  <br /><br />* Полученный XML файл можно открыть в Google Chrome,
                  <br />файл будет открыт с XML форматированием.
               </form>
            </div>
         </td>
      </tr>
   </table>
</body>
</html>


Актуально ли это? При открытии в браузере - неверная кодировка.

Добавлено через 16 часов 47 минут
Что ж, проверил на копии сайта (без ключа) такой алгоритм:

HTML5
1
2
3
/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
/bitrix/admin/1c_exchange.php?type=sale&mode=init&05ed3e85fb01daccee98fd1f62cbf396&version=3.1
/bitrix/admin/1c_exchange.php?type=sale&mode=query&05ed3e85fb01daccee98fd1f62cbf396&version=3.1
Запросы сработали, но результат - пустая страница с сообщением:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
Сообщение пофиг)
Почему файл пустой? Почему на рабочей версии ошибка failure Обновите модуль обмена?
0
05.06.2018, 09:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2018, 09:52
Помогаю со студенческими работами здесь

Композит для корзины (bitrix:sale.basket.basket)
Добрый всем, помогите плиз настроить композит, где тут динамичные зоны и где статичные?!...

Есть ли возможность определения фильтра в комплексном компоненте bitrix:forum || bitrix:forum.index ?
Столкнулся с необходимостью фильтрации тем форумов. Поиск (bitrix:forum.search) не подходит,...

Как разместить bitrix::news компонент в шаблоне компонента news::detail другого bitrix::news?
Доброго времени суток, не так давно окунулся в мир битрикс разработки и передо мной встал следующий...

sale.order.ajax отмена скидки
Добрый день. Вопрос такой. Как можно отменить все скидки при выборе определенной платежной система...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru