Столкнулся с точно такой же проблемой и получилось ее решить. Сразу отвечу, что решение подойдет только если модуль обмена у вас выше версии 6.5, а Битрикс ниже версии 17 (но не ниже 16-той) - именно поэтому выложенные выше файлы от тех.поддержки многим тут не подошли.
Собственно, все делалось по наводке Ольги Ревякиной:
Цитата
В модуль битрикс 7.0.1.4 начинает читать с тега контейнер, то есть в файле вот так должно быть: <КоммерческаяИнформация> <Контейнер> <Документ>
Дадим ему этот тег: - заходим на наш сайт в папку /bitrix/modules/sale/lang/ru/general/ и открываем файл export.php - добавляем в него в любом месте строчку $MESS["SALE_EXPORT_CONTAINER"] = "Контейнер"; - http://prntscr.com/ko4fnc - далее идем в папку /bitrix/modules/sale/general/ и открываем файл с таким же названием - export.php - ищем в документе функцию OutputXmlDocument, можно найти по такой строке - function OutputXmlDocument($typeDocument,$xmlResult, $document=array()) - нам в нее необходимо добавить открывающий тег контейнера - <<?=CSaleExport::getTagName("SALE_EXPORT_CONTAINER")?>> - http://prntscr.com/ko4ho5 - и закрывающий - </<?=CSaleExport::getTagName("SALE_EXPORT_CONTAINER")?>> - http://prntscr.com/ko4i06 - радуемся заказам в 1С (если, конечно у Вас других глюков не обнаружится, это же Битрикс)
Потому что создателям Битрикса важно только выпускать новый функционал, и плевать они все хотели, что половина существующего работает через жопу или вообще не работает. Вот бы распечатать все баги их говноCMS на листах и швырнуть в Рыжикова и Ко на очередной презентации.
Я в свое время просто подправил файл ядра, чтобы передавало в кодировке utf-8, а не cp1251 (сайт\bitrix\components\bitrix\sale.export.1c) Естественно после обновления придется опять править файл.
Меня больше поражает то, что проблема известная, а разрабы никак не удостоят своим вниманием эту проблему. В принципе правильно - нафиг старые косяки залатывать - лучше бабло зарабатывать выпуском новых дырявых модулей.
У меня проблема с округлением в корзине для товаров со скидкой. Предположим в корзине есть товар с ценой 1,50 и скидкой 5% (1,50 - 5% = 1,425) Что делает Битрикс - он просто обрезает (не округляет) до двух знаков после запятой, т.е. 1,425 = 1,42 (а не 1,43 как это будет математически правильно), но не в этом дело. Если бы все крутилось только на сайте, то проблем бы не было, но у меня связка с 1С, а в 1С скидки на товар уже расчитываются на сумму строки. Например я хочу заказать 100 шт товара из примера выше, получаем: - расчеты в Битриксе : 1,50 - 5% = 1,42 * 100 = 142 - расчеты в 1С : 1,50 * 100 = 150 - 5% = 142,5 Погрешность небольшая (всего 50 копеек украинских, для России это 2 рубля), но если заказать 1000, 10000 и т.д. то погрешность уже большая.
Проблему можно решить увеличив разрядность расчетов в Битриксе, ну например до 5 знаков. - тогда расчеты в Битриксе : 1,50 - 5% = 1,42500 * 100 = 142,50 (с 1С все будет совпадать)
Увеличить разрядность для вывода в шаблоны труда не составило. Для этого правим ядро Битрикса в двух файлах (то что править ядро это плохо - знаю, но мне обновление не грозит, поэтому готов пойти на это) файл 1: bitrix\modules\sale\include.php строка Define("SALE_VALUE_PRECISION", 2); меняем "2" на "5" файл 2: bitrix\modules\sale\catalog.php строка Define("CATALOG_VALUE_PRECISION", 5); меняем "2" на "5" Ну и в настройках валюты выставить "Количество десятичных знаков" с вашего значения на "5"
Теперь в корзине все выглядит как надо (для товара из примера цена = 1,42500), но почему-то в базе для этого товара все-равно хранится значение "1,42", т.е. с двумя знаками после запятой, поэтому в поле "сумма" в корзине будет показываться неправильное значение. Вопрос: где еще выставить в Битриксе разрядность чтобы в базе цены участвовали тоже с пятью знаками после запятой?
В общем как подсказал Андрей Красичков дело было в заголовках, которые неправильно формировались из-за того что в настройках сайта неправильно стояло доменное имя. Я его просто удалил, и с сессиями больше проблем нет.
Хотя в "Настройки - Инструменты - Проверка сайта" мне Битрикс пишет что надо в поле "доменное имя" вставить мое текущее доменное имя включая порт (примерно так - 192.168.0.6:6448), а как-раз если прописать вместе с портом -начинаются проблемы с сессиями. Короче очередная недоработка.
Андрей Красичков, я не знаю как глянуть заголовки, но если не сложно можете посмотреть сами. Данные кинул в личку.
Пробовал и на разных браузерах, и восстанавливать проект на разных компьютерах (на сентосе в веб окружении и на windows в веб окружении) - одинаково, после перезагрузки компьютера на сайте ничего нельзя изменить, ни авторизоваться, если не запустить скрипт.
У меня проблема в следующем - скорее всего у меня не сохраняются сессии (это лишь мое предположение), т.е. захожу я в админку - при каждом переходе на какую-либо страницу меня просит авторизоваться - не могу ничего изменить, ничего сохранить.
Произошло это после того как я восстановил сайт на одном сервере (создал резервное копирование, а потом через restore.php его восстановил).
В общем, как и подсказывал Андрей Загальский - проблема в коде 10-й версии Битрикса. Сделал тестовый сайт на 12-й версии и там таких проблем не было. Из-за того что нет желания/возможности обновится до последней версии продукта было принято решение взять функцию обновления элемента в файле bitrix/modules/iblock/classes/general/cml2.php из 12-й версии.
Ну и собственно так проблема была решена. Теперь вообще незаметно что происходит выгрузка (ну сайт может немного подтормаживает и все)
Проблема была решена? Та же фигня. После того как выбрал местоположение, то службы доставки вообще могут не открыться. (но у меня в хроме все нормально, по отзывам клиентов такое происходило в Яндекс браузере и ИЕ)
Уважаемые программисты и мегамозги Вот есть код который подписывает пользователя на рассылку всех рубрик при регистрации, скажите, как из следующего кода сделать чтобы сразу всех пользователей подписать на все рубрики?
С удовольствием бы обновился, но столько всего уже сделано и прежде всего это накопительные скидки из-за которых и не обновляюсь: в 10 версии их еще не было, пришлось самому прикручивать и сейчас накопленные скидки (и суммы соответственно) имеют около 3000 клиентов, и каждому ручками прописывать проблематично. А помимо этого реализованы упаковки, полностью переделана корзина. Пусть лучше старая версия стоит.
Андрей Загальский, Спасибо большое. Понятно что ядро править нехорошо, но пока я дождусь программиста который сделает нормально, пусть хотя бы так поработает, сейчас попробую.
Комментирование той строки не решает проблему, товаров все-равно "Нет в наличии"
Андрей Загальский, по симптомам все скорее всего так и происходит. Спасибо за дельный комментарий.
Но у меня одно товарное предложение на один товар - везде и всегда. Причем выгружается не в отдельный инфоблок, а прямиком в карточку товара, поэтому я думаю для меня не критично просто отменить деактивацию товарных предложений. Не подскажете как этот код найти?
Виталий Черепанов, проблема не наблюдалась потому что: 1. Когда у нас было 1000 позиций товаров, то и клиентов тогда было в 5 раз меньше. 2. При выгрузке 1000 позиций разница между стиранием цен с остатками и следующей их записью была подозреваю около минуты.
Вывод: при меньшем числе клиентов вероятность того что кто-то попадал в эту минуту, когда на сайте ничего нет в наличии была мала. Сейчас же клиентов гораздо больше и промежуток составляет 5 минут. Поэтому проблема БЫЛА, только стала глобальней.
И повторюсь - проблема не только у меня!
Кстате никто не знает, есть ли какой-нибудь скрипт показывающий на каком этапе сейчас обмен, чтобы можно было проследить на каком коде оно начинает затирать цены и остатки?
Поэтому это однозначно недоработка битрикса, а то что во все трубы не трубят, потому что для некоторых это критично, для некоторых нет. И мне помнится по умолчанию при установке "Управления сайтом" там вообще нет отображения к-ва товара (а также записей есть в наличии или нет) в публичной зоне, и отправить в корзину можно товары которых нет в наличии, при такой работе логики на сайте естественно пользователи не знают о существовании такой проблемы.
Станислав Шашалевич пишет: Я описал, что вам надо сделать. У меня такого замечено не было. Обратитесь к разработчику или же Битриксу для диагностирования проблемы.
Во-первых какое у вас количество товаров? У меня при 1000 единиц товаров тоже такое не наблюдалось, а когда база выросла проявилось. Во-вторых вы пишите:
Цитата
При выгрузке идут два файла import.xml - товары, offers.xml - предложения(если они есть).
с этим согласен
Цитата
Цены идут в этих же файлах, то есть все вместе.
Это что за бред? Т.е. по вашему цены идут в обоих файлах? Отвечу сразу нет. Цены и остатки идут только в файле offers.xml
Цитата
Цены добавляются(обноыляются) по мере обхода дерева элементов xml файла.
Это и ежу понятно, НО сначала загружается файл import.xml и стирает установленные цены и остатки во всех товарах, и когда после этого "Цены добавляются(обноыляются) по мере обхода дерева элементов offers.xml файла" - это занимает 5 минут, и если в этот пятиминутный промежуток заходит клиент на сайт, то товаров на которые не успела установиться цена и остаток "нет в наличии". И что хуже всего это "нет в наличии" кешируется у клиента на компе и так и остается даже если выгрузка закончена уже, помогает только Ctrl+F5, но не все клиенты знают это, поэтому после каждой выгрузки приходится у себя на сервере полностью сбрасывать кеш.
При выгрузке идут два файла import.xml - товары, offers.xml - предложения(если они есть). Цены идут в этих же файлах, то есть все вместе. Цены добавляются(обноыляются) по мере обхода дерева элементов xml файла.
Чтобы диагностировать вашу проблему - нужно смотреть. Более сказать не могу. Если выгрузка стандартная, то по идее проблем не должно быть.
Сначала загружается файл import.xml в котором присутствует только информация о товаре и цен в нем нет. Т.е. пока загружается этот файл - он, я так понимаю, стирает "цену" и "количество" на складе в карточке товара, а потом загружается файл с предложениями (ценами) и заполняет поле "цены".
Так вот в промежутке между загрузкой первого и второго файлов у меня проходит 5 минут и в это время товаров нет в наличии и у них нет цен.