rovak
Forum Replies Created
-
Forum: Plugins
In reply to: [WooCommerce and 1C:Enterprise/1С:Предприятие Data Exchange] InnoDB или MySQLЯ пробовал работать на InnoDB, вернулся на MySQL. Транзакции не принципиальны. А вот подсчет количества товара по разным категориям работает очень плохо.
Ну ты же видишь, что мощности сервера на 5к у тебя не хватает, а 4.5к грузит – ну так и грузи по 4.5к и голову не забивай себе. Добавляешь в ПланОбмена ОбменССайтом резвизит, например РазмерПорции. Меняешь модуль выгрузки товаров на выгрузку порциями по значению реквизита РазмерПорции. И все. Дальше у тебя в два прохода будет выгрузка твоих 5к товаров. Иногда надо вставлять Паузу между этими циклами. Тоже подбирается экспериментальным путем, секунд 5 обычно хватает.
Я бы поставил порцию товара к выгрузке не 4.5к, а 4к. Чтобы гарантированно проходил весь обмен. Причин может быть масса. У меня была простая тема – грузил по 6к, а сейчас мудреная, покупная. Грузит по 200 товаров, больше не может. Сервер один и тот же. Вот чтоб голову на этом этапе не забивать себе модулем обмена – грузи порциями. А потом разберешься, когда время будет.Самый простой путь это убрать из плана обмена ОбменССайтом, из состава, документ ЗаказКлиента. Я не проверял этот способ.
Сам я пользуюсь периодически другим способом:
///***
Узел = ПланыОбмена.ОбменССайтом.НайтиПоКоду(“000000001”);
ПланыОбмена.УдалитьРегистрациюИзменений(Узел,Метаданные.Документы.ЗаказКлиента);
///***000000001 – это код узла в плане обмена, через который идет обмен с сайтом.
Эти две строчки можно вставить в общем модуле ОбменССайтом
после строк
Функция ВыполнитьОбменЗаказами(Параметры, ТаблицаИнформации)Если Не Параметры.ОбменЗаказами Тогда
Возврат Истина;
КонецЕсли;
То есть вы программно удаляете всю регистрацию в плане обмена по заказам перед обменом и ничего не ломаете в программе.Да не тратьте вы свое время на плохой хостинг и не будет у вас проблем с медленными запросами. Переходите к моему хосту. Не пожалеете. https://firstvds.ru/?from=516007
Аренда виртуального сервера VDS Старт. Всего 249 р в месяц. 15 тысяч товаров спокойно тянет этот тариф. Файл подкачки увеличиваться не должен. Может на пару Мбт, не больше. Если он у вас увеличился, значит настройки конфигурации не правильные. Одно подключение у вас требует слишком много памяти. 5-20 одновременных подключений и все, памяти больше нет. Мои настройки my.cnf – почти все параметры в 2-4 раза меньше, чем в вашем примере. Я увеличивал их, но шло неконтролируемое увеличение памяти в swap, как у вас, приходил робот яндекса и все умирало через пару часов.Если несколько заказов грузится, а один не грузится – значит что-то с ним не то. Тут все просто, становитесь отладчиком на ТекстОтвета и смотрите что вам передает сайт. Он вам покажет весь заказ в xml. Все видно и читаемо. Вариантов немного. Или на сайте документ сбойный. Ну может там есть ссылка на товар, а самого товара уже давно нет. Или 1С не может отработать вашу ситуацию и падает по ошибке. Может быть проблемы с характеристиками и единицами измерений. Отладчик в помощь.
Логика у плагина простая. В 1С собирается информация, архивируется и кладется на сайт. Дальше из 1С запускают скрипт плагина, который распаковывает эти файлы и дальше обрабатывает. В 1С ответ сервера надо смотреть отладчиком в Общем модуле ОбменССайтом в процедуре ПолучитьДанныеССервера. Находите строчку ТекстОтвета.Прочитать(ИмяФайлаОтвета);
Останавливаетесь на следующей строчке отладчиком и смотрите что вам сайт вернул в ТекстОтвета. Там вам пишется либо, что все ок, либо ошибка. В этом месте вы увидите реально что вам сайт пишет.
Скрипты на сайте я смотрю через отладчик NetBeans. Наверно есть что-то удобнее, но этот способ у меня работает и мне его хватает.У меня Комплексная конфигурация. Я плагин использую только для создания карточки товара на сайте. Переношу через него номенклатуру и фотографии. Остатки, статус “В наличии” или “Нет на складе” и цену я добавляю в магазин прямым обращением из 1С в базу магазина. Я синхронизирую магазин и 1С по ГУИДам номенклатуры из 1С. У меня вариативный товар и простой. Были какие-то проблемы с адресами и телефонами. Подправил немного в модуле плагина и много изменил в 1С. Отсылкой сообщений с сайта не пользуюсь. Первое сообщение идет с сайта, все остальные из 1С. В 1С вся переписка хранится в базе. В любой момент ясно что было с заказом. По факту я очень сильно изменил под себя алгоритм плагина и модули 1С. Сейчас хочу настроить принудительное кеширование измененных страниц. Это когда у определенных страниц меняется цена, описание или еще что-то. Принудительно сбрасывать кэш этих страниц на сайте и тут же его заново генерировать. Автоматическим сбросом кэша я не пользуюсь. Бывает находишь ошибки в обмене, а кэш в этот момент спасает. Я не представляю себе, как можно работать без базы 1С с сайтом. Наверно можно там, где у вас 100 товаров. Ну так там можно и ручками все сделать, сразу в админке. Но у меня сейчас около 57 тыс товаров. И всем этим надо управлять. И сильно в этом помогает нам 1С. Как тут выше заметили я не знаю спец команды апача, php. С трудом понимаю как все это работает. Но в данном вопросе к плагину все это не имеет никакого отношения. Плагин замечательный. Надо просто немного посидеть с ним и разобраться. Не считая мелких ошибок, которые возникают в частных случаях, плагин заваливается на сайтах с плохим хостингом. Это когда вам провайдер подрезает крылья. Типа вы долго используете общие ресурсы. Лечится простым дроблением большого пакета данных на мелкие с паузой секунд в 5 между ними. И еще плагин заваливается на бок, если идут битые фотки. Эти фотки даже на компе не открываются. Ну эти ошибки надо смотреть в журнале регистрации. Или запустить обработку в 1С на поиск таких битых фотографий. Других причин я особо не заметил. У плагина практически нет документации, поэтому единственный путь его запустить это самому разобраться в его работе.
https://myitstuff.ru/40-remove-utf8-bom-from-a-php-script
Я чистил вот этим скриптом.А ты поэлементно проверь в отладчике что именно тебе возвращает сайт, когда пишет “success”. Сразу найдешь первый невидимый символ. Searching for BOM in files
Между нами разница в том, что я знаю 1С.
Я не фантазирую и не думаю. Я отладчиком смотрю что с обменом не так. Заходите в конфигуратор 1С. Общий модуль ОбменССайтом, функция ПолучитьДанныеССервера. Находите строчку ОтветСервера = ТекстОтвета.ПолучитьТекст(). Становитесь отладчиком на этой строчке и смотрите реально что вам ответил сайт. Эти сообщения отличаются от того, что вам выводятся на экран. Тут может быть адрес конкретной строки конкретного модуля с ошибкой, может быть текст, что вы не ввели кэпчу и поэтому обмен не идет, может быть id post товара, на котором обмен упал. Да много чего может быть. Эти сообщения не выводятся на экран пользователю. Там ответ всегда один и тот же. “Ошибка на стороне сервера.”
Иногда ошибки обмена возникают из-за битых фоток. Надо просто открыть их и посмотреть открываются ли они в 1С. Смотреть надо в логах 1С на каком товаре споткнулась выгрузка и проверять 1С. Плагин их не переваривает и падает по ошибке.
А вообще, меняйте хост и все у вас будет работать.
Я с hostinger.ru перешел на https://firstvds.ru/?from=516007
небо и земля.
Но через плагин я загружаю только товар и картинки, а цены и остатки напрямую лезу в базу менять. Так быстрее намного.
Работа плагина сильно зависит от качества хостинга. По любому надо дробить в 1С выгрузку на пакеты. Тогда все будет работать. Только в случае hostinger одним пакетом можно передать за один раз не более 5 товаров. Потом он падает по ошибке, а в случае с https://firstvds.ru/?from=516007 можно передать одним пакетом 5000 товаров. В этом разница. Но дробить всю выгрузку на отдельные пакеты надо в самом 1С при работе с любым хостингом. Потом опытным путем определяете сколько товара можно передать за один раз. Поднимаете так количество товара до тех пор, пока сервер не выдаст ошибку. Ну и потом немного опускаетесь в количестве. Так дальше и работаете. Это значит максимальная ваша возможность передать количество товара за один раз. Если у вас плохой хостинг, то между пакетами надо делать паузу секунд 5. Тогда медленно, но вы все загрузите себе на сайт. Все это надо делать в 1С. Можно в плане обмена 1С регистрировать маленькими партиями товар к обмену. Тогда ничего не надо переделывать, просто работы много ручной.Вариации выгружаются когда выгружается цена. При выгрузке товара вариации не выгружаются и товар выглядит как простой. Если вы выгружаете товар с характеристиками и цена установлена для характеристик, то эта характеристика и будет вариацией. На экране будет видно название характеристики и ее цена.
Загружай prices и rests в 1С. Цены – как цены поставщиков. Потом из них сделай свои цены. А остатки приходуй на свой склад, как свои остатки. Ну а дальше стандартно выгружай все на сайт из 1С встроенным обменом. Я бы с ценам ничего не делал, использовал бы стандартные механизмы 1С. А для остатков сделал бы отдельный регистр – остатки поставщиков и затем его данные добавил бы в запросы по наличию остатков товаров в 1С.
Да, конечно.
Вот пример кода. Он не оптимизирован. Надо в один запрос, который посылается на сайт, добавить тысячу строк и одним запросом менять сразу всю сортировку на сайте.
Тогда будет еще быстрее работать. Но и этот за минуты меняет данные. Таким же образом можно все менять в магазине. И цены и описание.&НаСервере
Процедура СортировкаНаСервере()
АутентификацияСтандартная = Истина;
ИмяПользователя = “Имя”;
Пароль = “Пароль”;СтрокаПодключения = “DRIVER={MySQL ODBC 5.2 ANSI Driver};
|SERVER=Мой_сайт.ru;
|Language=русский;
|STMT=SET CHARACTER SET cp1251;
|DATABASE=BASE;
|uid=”+ИмяПользователя+”;
|pwd=”+Пароль+”;
|”;Connection = Новый COMОбъект(“ADODB.Connection”);
Connection.Open(СтрокаПодключения);
Connection.DefaultDatabase = “BASE”;
Recordset = Новый COMОбъект(“ADODB.Recordset”);Для Каждого Стр из Объект.НоменклатураСписок Цикл
ID = УбратьПробелы(Стр.ID);
menu_order = УбратьПробелы(Стр.Номенклатура.ПорядокНаСайте);ТекстЗапроса = “INSERT INTO
db_posts
(ID, menu_order) VALUES(‘”+ ID +”‘,'”+ menu_order +”‘)
|ON DUPLICATE KEY UPDATE ID= VALUES(ID), menu_order= VALUES(menu_order)”;Table = Connection.Execute(ТекстЗапроса);
КонецЦикла;
Connection.Close();
КонецПроцедуры&НаКлиенте
Процедура Сортировка(Команда)
СортировкаНаСервере();
КонецПроцедурыФункция УбратьПробелы(ВходящееЗначение)
Если ВходящееЗначение = “” Тогда
Возврат ВходящееЗначение;
КонецЕсли;
Значение = ВходящееЗначение;
Значение = СтрЗаменить(Значение,Символ(34),””);
Значение = СтрЗаменить(Значение,Символ(123),””);
Значение = СтрЗаменить(Значение,Символ(125),””);
Значение = СокрЛП(СтрЗаменить(Значение, Символы.НПП, “”));
Значение = СокрЛП(СтрЗаменить(Значение, ” “, “”));
Возврат Значение;КонецФункции