Импортируется все кроме цен. В файле offers.xml цены присутствуют. В настройках типов цен название выставлено такое же как передает 1С (и внешний код тоже). Для инфоблока «Каталог товаров» (куда передается все при импорте) есть инфоблок торговых предложений. Цены по-прежнему не передаются. Версия Битрикс: 14.0.8 1С: Предприятие 8.2. Управление торговым предприятием для Казахстана, редакция 1.0
Подскажите, очень срочно нужно выяснить, у меня внутренний счет пользователей пополняется, сначала не мог понять как, затем по ходу тестирования выяснил что скорее всего при оплате банковскими картами, также меняю статус оплаты:
При чем счет пополняется на сумму предыдущей стоимости заказа, есть мысли где это можно отключить или в каких файлах может срабатывать этот бяка-скрипт?)) ============================================================= P.S. Смотрел файл init.php, никаких упоминаний класса CSaleUserAccount
В настройках модуля «Интернет-магазин» есть поле «Файл с пользовательской формой просмотра заказа»
Цитата
Система "1С-Битрикс: Управление сайтом" позволяет создать и использовать собственную (кастомизированную) форму для просмотра заказов. В поле указывается путь к файлу, содержащему пользовательскую форму. Кастомизированная форма просмотра заказов создаётся аналогично форме создания/редактирования элементов информационных блоков.
Хочу использовать эту опцию, но перед этим хотел бы выяснить: Для этого мне нужно скопировать файл /bitrix/modules/sale/admin/order_detail.php и указать путь к нему? Дело в том что я так и делаю и у меня не открывается страница просмотра заказа, может там не весь файл надо копировать, тогда с какого и до какого момента необходимо скопировать код? =================================== Далеко не ходите, вот Вам ссылка на /bitrix/modules/sale/admin/order_detail.php
Никогда не думал что задам такой вопрос, но идти больше не к кому. Я про _CIBElement::GetProperties Мне нужно извлечь только два свойства с кодом «CHANGED» и «CML_ATTRIBUTES». Первое свойство не активно, поэтому код такой:
Но мне возвращаются все свойства, чего мне конечно не нужно. Я бы не был так привередлив, но блин, время дорого, нужно максимально оптимизировать код. Если просто написать 'CODE' => 'CML_ATTRIBUTES', тогда все работает, но мне нужно еще и другие свойства, вобщем Вы поняли. Как все-таки правильно написать фильтр, чтобы вывести только два свойства (см. выше). Спасибо и с наступающим!
Поделюсь, как я решил проблему с импортом картинок. Пользуясь событием OnSuccessCatalogImport1C, которое вызывается по окончании импорта в компоненте catalog.import.1c, перед отдачей сообщения 1С об успешном окончании обмена.
AddEventHandler('catalog', 'OnSuccessCatalogImport1C', 'importPicturesFrom1C');
//Фильтр картинок (пользовательская функция, к которой мы будем передавать значения для проверки на предмет картинка ли это?)
function filterOfPictures($val = false){
if($val == false) return false;
else{
settype($val, 'string');
$length = strlen($val);
$jpg = stripos($val, '.jpg');
if(($jpg !== false) && (($length - $jpg) == 4)) return true;
$jpeg = stripos($val, '.jpeg');
if(($jpeg !== false) && (($length - $jpeg) == 5)) return true;
$png = stripos($val, '.png');
if(($png !== false) && (($length - $png) == 4)) return true;
$gif = stripos($val, '.gif');
if(($gif !== false) && (($length - $gif) == 4)) return true;
$bmp = stripos($val, '.bmp');
if(($bmp !== false) && (($length - $bmp) == 4)) return true;
}
return false;
}
function importPicturesFrom1C(){
global $APPLICATION;
CModule::IncludeModule('iblock');
//Иницилизация
$CIBlockXMLFile = new CIBlockXMLFile();
$CIBlockElement = new CIBlockElement();
$ID = false;
$currentID = false;
$morePhotos = array();
$properties = array();
$MORE_PHOTO = array();
$counter = 0;
$firstGood = 0;
//Выборка всех элементов из таблицы b_xml_tree
$arFields = $CIBlockXMLFile->GetList(array());
while($arField = $arFields->Fetch()){
++$counter;
//Получение идентификатора текущего элемента
if($arField['NAME'] == 'Ид'){
$EXTERNAL_ID = $arField['VALUE'];
//Так как элемент уже полностью импортировался и создался в инфоблоке мы его находим по внешнему ключу и узнаем ID-шник
$arItems = CIBlockElement::GetList(array('ID' => 'ASC'), array("IBLOCK_TYPE" => "1c_catalog", "IBLOCK_ID" => 37, 'EXTERNAL_ID' => $EXTERNAL_ID), false, false, array('ID'));
$arItem = $arItems->GetNext();
if(is_numeric($arItem['ID']))
$ID = $arItem['ID'];
else
$ID = false;
}
//Фильтрация картинок
if(($arField['NAME'] == 'Значение') and (filterOfPictures($arField['VALUE']))){
$morePhotos[] = CFile::MakeFileArray($_SERVER['DOCUMENT_ROOT'] . '/upload/1c_catalog/' . $arField['VALUE']);
$properties = array("PROPERTY_VALUES"=> $morePhotos);
}
if($currentID != $ID)
$firstGood++;
if($firstGood == 1)
$currentID = $ID; //1 и все
//Обновление элемента (добавление картинок)
if(is_numeric($ID) && ($currentID != $ID) and (!empty($properties)) and ($firstGood > 1)){
//$result = $CIBlockElement->Update($currentID, $properties);
CIBlockElement::SetPropertyValues($currentID, 37, $morePhotos, 'MORE_PHOTO');
$morePhotos = array();
$properties = array();
$currentID = $ID;
}
//file_put_contents('logimport.txt', "\n" . serialize($arField) . "\n", FILE_APPEND);
}
//Обновление последнего элемента (добавление картинок)
if(is_numeric($currentID) and (!empty($properties))){
//$result = $CIBlockElement->Update($currentID, $properties);
CIBlockElement::SetPropertyValues($currentID, 37, $morePhotos, 'MORE_PHOTO');
}
}
Так как все данные идут в общем потоке, я подстроился под ту последовательность, по которой выводятся картинки: ============================ ... внешний код первого элемента ... картинки первого элемента ... внешний код второго элемента ... картинки второго элемента ... =========================== Добавление картинок происходит при смене ID.
Цитата
Людмила Черныщук пишет: У нас тоже проблема с картинками, хоть и несколько другая: на сайте настроен автоматический обмен с 1С, весь каталог грузился отлично, вместе с картинками. В какой-то момент стали "пропадать" картинки в товарах.
Проверили выгрузку, оказалось, что выгрузка на стороне 1С происходит без ошибок, картинки выгружаются, мы видим процесс передачи архивных файлов (архивы весят много, видимо, все-таки содержат картинки), процесс выгрузки успешно завершается - ошибок нет, но на сайте в папке /upload/1c_catalog появляются только xml файлы, ни папки import_files, ни, соответственно, картинок, ни архивов, передачу которых мы видели в процессе выгрузки (только архив с xml-ками). Получается, что если даже у товара была раньше картинка, то при обновлении после выгрузки картинка пропадает.
Подскажите, пожалуйста, может кто сталкивался, куда копать и где искать проблему?
14-ю версию пока не устанавливали.
Видимо на каком-то шаге Ваш архив затирается и ко всем картинкам соответственно тоже обрываются пути. Попробуйте воспользоваться данным способом, потомучто, на шаге когда вызывается событие, нам еще доступна вся таблица b_xml_tree, в которой хранится весь XML. ============================= Заметил одну особенность Проблемы возникают только с теми свойствами, у которых (при их создании), значение отмечено как «Множественное». Я думаю что это из-за такой сложности, которая связана с тем, что если свойство простое — то это просто «Название = значение», а в случае с множественным значением — формируется двумерный массив! Пример: У меня свойство «Характеристики» отмечено как множественное. В результате при импорте у меня названия и значения поменялись местами.
Файл import.xml тот же, что и в первом посте ====================================== Я вот думаю (исходя из этой статьи), может получится получить эти картинки в событии catalog.OnSuccessCatalogImport1C и самому (средствами API) добавить? Но тогда вопрос... Вот зарегистрирую я обработчик на это событие, а какой параметр(аргумент) передать моей функции, чтобы получить эти картинки?
Николай Семенцов пишет: Добрый день судя по файлу фотографии у вас есть, попробуйте отключить оптимизацию отгрузки каталога в настройках интернет-магазин-> 1с интеграция, так же сделать полную отгрузку. А свойства у вас создано в системе ? Соответствует ли внешний код свойства отгружаемому?
Отключил опцию « оптимизацию отгрузки каталога в настройках интернет-магазин-> 1с интеграция»
Полная выгрузка
Настройка свойства инфоблока
Свойство импортированного товара с символьным кодом «MORE_PHOTO»
При обмене 1С с сайтом выгружаются все картинки (в папке import_files они также присутствуют), но в результате товары имеют только детальную картинку (из которой (исходя из настроек инфоблока) делается картинка анонса), а вот дополнительных картинок (те что в MORE_PHOTO) нет. Где можно изменить файл import.xml (где он формируется) чтобы добавить дополнительные теги с картинками или в каком файле (компоненте) происходит обработка xml. Потомучто все картинки в структуре import.xml они там есть. Вот мой import.xml
Станислав Шашалевич, Юлия Бедросова, У метода ExportElements объекта CIBlockCMLExport (т.е. CIBlockCMLExport::ExportElements) в виде шестого параметра можно передать "all" (строка "all" ). В результате в выдачу попадут активные и неактивные.
electroid пишет: Все действительно очень просто. Битрикс пишет дополнительные картинки в свойство MORE_PHOTO.
Простите за некомпетентность, но как записывать (производить изменения в шаблоне xml) import.xml. Дело в том что у меня тоже картинки хоть и выгружаются из 1С но в MORE_PHOTO не попадают. Спасибо
Дмитрий Ипатов, Да, такая настройка выставлена в настройках ифоблока куда все это дело выгружается. На закладке «Поля» и «Поля разделов». =============================================================
1С, которая Предприятие, выгрузила товары на сайт без символьного кода, но есть у всех товаров сгенерированный внешний код. Мне на время для 1С-ников нужно выгрузить товары из инфоблока (в которую они выгружали из 1С) на сайт. Не получается вывести на сайт все товары, точне правильно сформировать ссылки: • Настраиваю инфоблок URL страницы информационного блока: #SITE_DIR#/1c_catalog/#IBLOCK_CODE#/ URL страницы раздела: #SITE_DIR#/1c_catalog/#IBLOCK_CODE#/#EXTERNAL_ID#/ (здесь макрос #EXTERNAL_ID# означает внешний код раздела) URL страницы детального просмотра: #SITE_DIR#/1c_catalog/#IBLOCK_CODE#/#SECTION_ID#/#EXTERNAL_ID#/ (здесь макрос #EXTERNAL_ID# подставился как внешний код элемента) Макросы вставлял пользуясь кнопкой «. . .» • Настройка компонента catalog в «Управление адресами страниц»: Каталог ЧПУ (относительно корня сайта): /1c_catalog/#IBLOCK_CODE#/ Раздел: #EXTERNAL_ID#/ Детальная информация: #SECTION_ID#/#EXTERNAL_ID#/ ===================================================================================================================== Помогите
Правильней этот вопрос задать на форуме "Интеграция с 1С", что я и сделал (2 дня назад), но там никто не знает, поэтому дублирую здесь. Гляньте, пожалуйста, может кто-то сталкивался с этим: ============================================================================================================== При экспорте товаров с сайта в 1С, экспортируются только активные товары, а нужно чтобы и те и другие. Изменения файла component.php компонента catalog.export.1c ни к чему не привело, а изменения были следующими: • Как работает компонент — я до конца не понял, понятно только что происходит экспорт в несколько шагов. Сначала формируются свойства и разделы (CIBlockCMLExport::ExportProperties, CIBlockCMLExport::ExportSections). Во втором шаге элементы (CIBlockCMLExport::ExportElements), в третьем разделы и элементы. Там в переменную сессии $_SESSION["BX_CML2_EXPORT"]["total"] возвращается результат метода GetList объекта CIBlockElement, где в параметре фильтра указан ACTIVE => "Y". Изменял его как только можно, даже убирал все равно выдаются только активных товары; • Метод CIBlockCMLExport::ExportElements($PROPERTY_MAP, $SECTION_MAP, $start_time, $INTERVAL, $counter_limit = 0, $arElementFilter = false) шестым параметром передавал массив фильтра. При экспорте программа 1С сначала долго грузится или зависает, затем выдается ошибка что XML не был получен. ============================================================================================================== Подскажите, пожалуйста, в чем тут дело?
При экспорте товаров с сайта в 1С, экспортируются только активные товары, а нужно чтобы и те и другие. Изменения файла component.php компонента catalog.export.1c ни к чему не привело, а изменения были следующими: • Как работает компонент — я до конца не понял, понятно только что происходит экспорт в несколько шагов. Сначала формируются свойства и разделы (CIBlockCMLExport::ExportProperties, CIBlockCMLExport::ExportSections). Во втором шаге элементы (CIBlockCMLExport::ExportElements), в третьем разделы и элементы. Там в переменную сессии $_SESSION["BX_CML2_EXPORT"]["total"] возвращается результат метода GetList объекта CIBlockElement, где в параметре фильтра указан ACTIVE => "Y". Изменял его как только можно, даже убирал все равно выдаются только активных товары; • Метод CIBlockCMLExport::ExportElements($PROPERTY_MAP, $SECTION_MAP, $start_time, $INTERVAL, $counter_limit = 0, $arElementFilter = false) шестым параметром передавал массив фильтра. При экспорте программа 1С зависает затем выдается ошибка что XML не был получен. ============================================================================================================== Подскажите, пожалуйста, в чем тут дело? Может не с того инфоблока идет экспорт или где-то мои модификации над компонентом были неправильны... я незнаю, но уверен, что причина банальна
Сергей Нифантов пишет: а оказалось все в следующем, дело в том, что при переходе со страниц на страницу я в скриптах указывал www.site.ru а в настройках у меня было прописано без www просто site.ru
Подскажите, пожалуйста, добрый человек, в каких файлах и в каких настройках? ==== ____ ==== ____==== ____ ==== ____==== ____ ==== ____==== ____ ==== ____==== ____ ==== ____==== ____ ==== ____==== ____ ==== ____ Тоже указывал в настройках группы время жизни сессии на неделю и галочку "неопределять" и при входе на сайт галочку "Запомнить меня" все равно через минут 20 выкидывает
Алексей Волков пишет: найдете решение отпишитесь тут, пригодится всем
Обновлять Битрикс больше не будем. Прямым запросом обновляю статус заказа и все. т.е. CSaleOrder::StatusOrder не используется а значит никакой обработчик не вызывается. Вот такой отчаянный шаг я пытался избежать, видимо не получилось
Здравствуйте, у меня как раз вопрос около этой темы, поэтому не стану плодить сущность. Дело в том, что в последнее время наш оператор часто меняет статус заказа, то "В пути", то "Отправлен (Почта России)", то оказывается его вообще на складе нет (парадоксы случаются). А пользователи возмущаются, мол абсурдные письма приходят о смене статуса. Нужно придумать как это все дело разграничить, т.е. в одном случае менять статус с отправкой письма(уведомления), с другой, чтоб статус можно было менять без отправки письма. Вот товарищ, Алексей Волков, выше говорил про деактивацию шаблона письма в почтовом событии. Хотелось бы подробнее про это узнать. В файле init.php из предложенных событий, связанных с отправкой почтовых шаблонов нашел только это: ________________________________________________________________________________________ AddEventHandler("sale", "OnOrderNewSendEmail", "bxModifySaleMails" ;) ; function bxModifySaleMails($orderID, &$eventName, &$arFields) { $arOrder = CSaleOrder::GetByID($orderID);
if ($arProps["CODE"] == "INDEX" ){ $index = $arProps["VALUE"]; }
if ($arProps["CODE"] == "ADDRESS" ){ $address = $arProps["VALUE"]; } }
$full_address = $index." ".$country_name."-".$city_name." ".$address; //-- получаем название службы доставки $arDeliv = CSaleDelivery::GetByID($arOrder["DELIVERY_ID"] ); $delivery_name = ""; if ($arDeliv){ $delivery_name = $arDeliv["NAME"]; }
//-- получаем название платежной системы $arPaySystem = CSalePaySystem::GetByID($arOrder["PAY_SYSTEM_ID"]); $pay_system_name = ""; if ($arPaySystem){ $pay_system_name = $arPaySystem["NAME"]; }
//-- добавляем новые поля в массив результатов $arFields["ORDER_DESCRIPTION"] = $arOrder["USER_DESCRIPTION"]; $arFields["PHONE"] = $phone; $arFields["DELIVERY_NAME"] = $delivery_name; $arFields["PAY_SYSTEM_NAME"] = $pay_system_name; $arFields["FULL_ADDRESS"] = $full_address; } ________________________________________________________________________________________ Помогите придумать такое поведение обработчика, при котором если была нажата вторая кнопка (то бишь "Обновить статус без отправки письма" ;) , то все шаблоны писем деактивируются, т.е. произойдет смена статуса заказа без отправки почтового уведомления. Спасибо