Юрий Волошин пишет: даже транспорт может быть от 10-15 минут до бесконечности - пока этот файлик до буса долетит
Умучил этот транспорт кстати. И инет вроде как хороший, но на большом количестве частей встречаются неожиданные ошибки типа "получен пустой ответ сервера". Ну, я бы понял статус 504 или 500, такое иногда случается. Но пустой ответ ... Пока грешу на связь (иначе бы был какой-нибудь статус HTTP). Менял размеры одного файла - от 32 КБ до 1 МБ. В первом случае думал, что не успевает стандартный 200КБ файл проскочить, во втором - что слишком затягивается передача на большой (очень большом) количестве файлов. Итог один и тот же - пустой ответ все равно встречается. И тогда все с нуля ...
Это понятно, но есть ситуации, когда нужно полное обновления. К примеру - глобальное добавление товаров (рост процентов на 50-100), либо существенная перетасовка разделов. В общем, владелец сайта к полной выгрузке прикипел и пользует ее часто.
В мониторе производительности есть проверка СУБД и рекомендации по настройкам. Я на них смотрел как на несущественные потому что по названиям они больше относились к чтению данных. А практика говорит о другом. Менял key_buffer_size, query_cache_size, thread_cache_size, table_open_cache, innodb_flush_log_at_trx_commit, innodb_flush_method, transaction-isolation. В итоге показатели записи и изменения сравнялись с показателями чтения и превысили данные эталона. Время импорта уже загруженных файлов с 8-9 часов упало до 1,5 часов. Это все равно много (уже субъективно, хотелось бы за 5 минут), но это все-таки файл на 800 Мб при 8000 товаров.
Артемий Зайцев пишет: Там есть возможность обновлять только цены и остатки. Эту задачу часто просят клиенты. Им самое главное, чтобы цены и остатки были актуальны.
Знакомо и сделано быстро сбоку (в 1С уже была заготовка по выгрузке в CSV). Просил такое один пока. Другие проскочили на стандартной выгрузке в режиме обновлений. А тут затык по скорости, не имеющий объяснения. Думал у меня рыльце в пушку, проверил обработчики, отключил (условно) компоненты в header.php. А все равно скорость не та (20-60 товаров за один шаг в 30 с.)
Цитата
Артемий Зайцев пишет: А на больших инфоблоках с тысячами свойств режим "Быстрая запись свойств" в разы ускоряет обмен.
Страшно такие вещи на рабочем сайте тестировать. Для этого нужен еще один новый сайт (и время при действующем проекте заниматься этой альтернативой). Лично я эти эксперименты отложу. Здесь важно понимать как в принципе сделано. Но если вы откроетесь раньше, есть шанс, что я это сделаю сам (хотя, могу и не делать, а сэкономить время заказчика и купить решение). Если взять демо, то самое важное все равно не увидишь пока не купишь. Так что здесь можно только рискнуть. Риск исчезнет, когда точно знаешь что сделано. Но к этому моменту будет уже свое решение. Это заколдованный круг.
Ок. Не пользовался никогда ни sleep, ни usleep в PHP. Как-то стараешься ускорять, а тут замедление. Да и сомнения были, что реально отпускает процессор эта функция (переводит в ожидание процесс, а не продолжает гонять какой-нибудь цикл). Видимо, в этой идее есть смысл.
Цитата
Артемий Зайцев пишет: На дешевых хостингах c жесткими лимитами может помочь
У меня как раз не дешевый VDS. И нагрузка заметная на хостинг без обмена с 1С. Когда включаешь обмен, можно уже к сайту и не подходить. Увеличивается время генерации страницы, оно переходит допустимый предел и все слоты Apache забиваются. Так что пауза - это, пожалуй, решение.
Тест хостинга указанным скриптом провел с самого начала (еще до установки Битрикс). В отличие от автора, контрольные суммы не использую (подводят они меня часто).
А вот данные панели производительности (скриншот)
Не оптимально там из-за ttl для xcache (0 стоит для неограниченного хранения). По тесту видно, что работа с БД очень медленная, с файловой системой чуть медленее чем на эталоне. Но "попугаев" больше.
Таблицы инфоблоков в INNODB.
Есть шанс улучшить дело настройкой БД? Других вариантов я не вижу. Скорость загрузки медленная еще на создании временной таблицы.
Артемий Зайцев пишет: Модуль отказоустойчивый обмен с 1С вставляет между шагами паузы. 30 секунд обмен, 2 секунды пауза. Замедление на 1/15. Но надежность очень сильно повышается. Длина интервалов настраивается.
Юрий Волошин пишет: Интеграция это 3 операции: формирование из 1С + транспорт до сервера + обработка сервером и в зависимости от объема данных она долгая по многим причинам может быть и не всегда вина сайта.
А как выяснить на каком шаге время тратится?
У меня ситуация подобная описанной. Каталог содержит 10 000 товаров (это в 2 раза меньше чем у автора темы), есть картинки, свойств не более 20, тип цен один. Объем архива 1,1 Гб. Из них import.xml - 60МБ, offers.xml - 6МБ. На формирование в 1С уходит три часа. На загрузку в БД сайта 10-12 часов.
Вижу здесь рекламу модуля. Есть у меня беспокойства насчет его использования (как он себя поведет на кастомизированном обмене заказами, отработают ли нормально обработчики по окончании обмена товарами). С ним я пока не разбирался, да и желания нет.
Есть также скрипт 1C Diag (bx_1c_import.php). Ничего по хронометражу там нет. Есть пошаговая обработка. Пока не имел с ней дел, использую скрипт на деле тогда, когда сайт во время обмена с 1С упал и нужно сэкономить время на подготовку данных в 1С и выгрузку файла обмена на сайт.
Проверьте что выдает функция check_email на "плохих" и "хороших" адресах. Если выяснится, что есть адреса, где эта функция уверена, что адрес правильный, а у Вас с ним проблема - смотрите настройки хостинга.
Если идет работа с создаваемым заказом, то в этот момент свойства еще не сохранены в БД. Об этом упоминалось месяца за три до Вашего вопроса.
Похоже, и сейчас это актуально, т.е. за год не изменилось ничего. Сейчас смотрю bitrix:sale.order.ajax - в событие добавления значений свойства заказа влезать смысла нет - не анализируется ответ от CSaleOrderPropsValue::Add. Так что искать событие самой компоненты, где можно с этим вмешаться.
Нигде, комментарии, введенные пользователем в 1С не идут. А то, что Вы видите в выгрузке и затем в однострочном комментарии в 1С - это определенным образом сформированная строка, показывающая где на сайте найти этот заказ (в 1С своя нумерация и без этого на сайте ничего не найдешь).
Юлия, у меня в настройках на вкладке Заказы ничего похожего нет.
Там только:
Сайт, заказы которого выгружать в "1С:Предприятие"
Префикс номера заказа при выгрузке
Выгружать только оплаченные заказы
Выгружать только заказы c разрешенной доставкой
Выгружать заказы начиная со статуса
Статус, в который переводить заказ при получении отгрузки от "1С:Предприятие"
Заменять валюту при выгрузке в "1С:Предприятие" на
Группы, пользователям которых разрешена выгрузка
Использовать сжатие zip, если доступно
Зато на закладке "Профили обмена" есть возможность добавить в выгрузку свои параметры. Судя по Вашему ответу, они должны попасть в 1С на закладку Дополнительные сведения.
Смотрим Дополнительные параметры (передаются в реквизиты заказа в 1С). Там в поле Название параметра, видимо, я могу указать название параметра, которое будет использовать 1С для его отображения на этой закладке. Проблема в том, что я не могу выбрать источник для этого поля.
В типе я могу указать:
Другое значение
Параметр пользователя
Параметр заказа
Свойство заказа
Что такое другое значение я не совсем понимаю. Видимо, это вариант для ввода некоей константы, которая будет зависеть в итоге только от типа плательщика (и только потому, что профиль обмена привязан к типу).
Параметры пользователя здесь явно не подходят.
Параметры заказа - это то, что нужно, но там не видно комментария к заказу. Есть только:
Код заказа (ID)
Дата заказа
Дата заказа (без времени)
Сумма счета
Валюта
Стоимость заказа
Сайт
Стоимость доставки
Величина скидки
Код покупателя
Код платежной системы
Название платежной системы
Код службы доставки
Название службы доставки
Величина налогов
Идентификатор отправления (Доставка)
Номер платежного документа
Дата платежного документа
Оплачено с внутреннего счета
Номер документа отгрузки
Дата документа отгрузки
В итоге создавать искусственное свойство заказа? Искусственное потому, что есть такое стандартное поле в заказе, да выбрать его нельзя.
<Комментарий>№ 100 www.example.com [s1] Самый лучший магазин</Комментарий>
В 1С под это выделена одна строка (я не знаю реально ли это изменить). Решил, что кастомизацией выгрузки этого тега заниматься смысла нет. Тогда должны помочь реквизиты документа (и соответствующая доработка 1С).
Хорошо, лезу в настройки профиля обмена. Как всегда, документация на высоте.
В пользовательской документации написано в стиле "Название параметра - это название параметра, чтобы ввести название параметра введите название". Можете сами посмотреть, это отписка. Ничего этот тест не проясняет.
В учебном курсе тоже практически ничего (а по теме - вообще ничего). Уточнения ничего не уточняют.
В форуме, как ни странно об этом не спрашивали (или глаза не протер - не нашел).
Я готов настроить профиль, но что мне вбивать в название и значение параметра (это о разделе Дополнительные параметры (передаются в реквизиты заказа в 1С))?
Кстати, в параметрах заказа я не усмотрел ничего, чтобы соответствовало полю USER_DESCRIPTION.
Митрошин Владислав пишет: Дело в том, что при загрузке аяксом у вас нет ни $_SERVER, ни всяких там SITE_TEMPLATE_PATH
Быть такого не может, чтобы серверных переменных не было (ну, конечно, если правильно настроен сервер, болячки могут быть в nginx).
SITE_TEMPLATE_PATH определяется ядром Битрикс вполне успешно. Ядро никто не отменял и сброс буфера вывода на определение сайта не влияет.
Да, скрипты приходится подключать заново, при вызове AJAX. Дело, скорее всего в хитро закрученной BX.ajax.submitComponentForm (вызывается из известной в шаблоне этой компоненты функции submitForm(). Там создается iframe и в нем все уже подключенные библиотеки не видны.
Вот что получилось у меня (в моем случае не мультипликация, а стилизация с помощью jQuery Form Styler):
Код
if($_REQUEST["AJAX_CALL"] == "Y" || $_REQUEST["is_ajax_post"] == "Y")
{
// это работать не будет, шаблона не выдается!
//CJSCore::Init(array('jquery'));
$jqInfo = CJSCore::getExtInfo('jquery');
?>
<script type="text/javascript" src="<?=$jqInfo['js']?>"></script>
<script type="text/javascript" src="<?=SITE_TEMPLATE_PATH?>/js/jquery.formstyler.min.js"></script>
<script type="text/javascript" language="javascript">
$("input[type='checkbox'], input[type='radio'], select").styler();
<?
?>
</script>
<?
}
?>
Добавлено:
Приведенное выше решение будет работать не всегда. Надежнее все это сделать в обработчике события onAjaxSuccess
Денис Диденко пишет: Добрый день коллеги, хотелось бы снизить нагрузку при обработке OnSuccessCatalogImport1C, и возник вопрос, а как в этом событии узнать ID инфоблока куда проходила выгрузка?
Я выкрутился переносом скрипта обмена в прубличную часть (компоненты не кастомизировал). В этом случае становится известен ИД сайта. Если к сайту привязан ОДИН каталог, проблема решаема в один вызов API.
Нужно проверить настройки каталога. Должны быть настроено использование отдельного инфоблока для предложений. В инфоблоке должны быть правильно настроены принципиальные для этого свойства (те, что хранят связи между товарами и предложениями). Встречался с попорченными инфоблоками.
Не могу найти, а ориентироваться на существующую реализацию обмена в конкретном экземпляре 1С не могу (никогда не слышал о чистой конфигурации, часто люди доводят имеющуюся до "последней").
Знаю что давно можно указать какая группа номенклатуры пойдет в какой каталог на сайте.
Меня же интересует возможность настроить соответствие групп на сайте и групп в 1С. Да так, чтобы одна группа на сайте могла соответствовать двум и более группам в 1С. Толи у меня дежавю, толи и правда такая возможность есть, а я не могу найти о ней ничего.
В коде вижу, что Битрикс работает с дополнительными картинками, когда тегов в <Картинка> в выгрузке много. В этом случае он заполняет картинки анонса и деталей первой картинкой (это всегда) и ищет свойство с XML_ID равным CML2_PICTURES (в админке это внешний код, отображение внешних кодов включается в настройках модуля Инфоблоки).
В Вашем случае не нужно было в выгрузке оформлять картинки дополнительным свойством.
Правда, и в моем случае картинки все равно не загрузились, веду раскопки. Версия инфоблоков 14.0.4 (02.12.2013)
Добавлено: У меня все просто. Было два свойства с этим XML_ID. В форме редактирования элемента (она перенастроена) было одно, а картинки принимались в другое.
Выгрузка заказов из 1С в промежуточных статусах, Возможно ли изменение заказа на сайте при изменении статуса заказа в 1С и при изменении его содержания?
Екатерина Раздорова пишет: Тема еще актуальна. Возможно ли стандартным механизмом интеграции переводить заказ на сайте в промежуточный статус, пришедший из 1С? Или для этой цели необходимо кастомизировать компонент sale.export.1c ?
Нет, я это делал кастомизацией на 12-й. Стандартная компонента знает только две ситуации - заказ отменен, заказ оплачен. Только в последнем случае можно вмешаться в статус через параметры компоненты.
Выгрузка заказов из 1С в промежуточных статусах, Возможно ли изменение заказа на сайте при изменении статуса заказа в 1С и при изменении его содержания?
В настройках интеграции со стороны Битрикс вижу только что делать, когда сайт получает информацию по отгрузке товаров по заказу.
А что происходит когда статус заказа меняется в 1С?
Например, когда заказ отменен, оплачен, произведена отгрузка (с этим вроде как понятно, но на всякий случай). А что если по результатам разговора с покупателем менеджер изменил содержание заказа в 1С? Он изменится га сайте после обмена заказами?
Не менее важен вопрос об изменении заказа на сайте уже после первичной выгрузки. Или при наличии 1С такие вещи не нужно делать, а оставлять за сайтом только первичное создание заказа?