Forum Replies Created

Viewing 15 replies - 16 through 30 (of 34 total)
  • Я пробовал работать на InnoDB, вернулся на MySQL. Транзакции не принципиальны. А вот подсчет количества товара по разным категориям работает очень плохо.

    Ну ты же видишь, что мощности сервера на 5к у тебя не хватает, а 4.5к грузит – ну так и грузи по 4.5к и голову не забивай себе. Добавляешь в ПланОбмена ОбменССайтом резвизит, например РазмерПорции. Меняешь модуль выгрузки товаров на выгрузку порциями по значению реквизита РазмерПорции. И все. Дальше у тебя в два прохода будет выгрузка твоих 5к товаров. Иногда надо вставлять Паузу между этими циклами. Тоже подбирается экспериментальным путем, секунд 5 обычно хватает.
    Я бы поставил порцию товара к выгрузке не 4.5к, а 4к. Чтобы гарантированно проходил весь обмен. Причин может быть масса. У меня была простая тема – грузил по 6к, а сейчас мудреная, покупная. Грузит по 200 товаров, больше не может. Сервер один и тот же. Вот чтоб голову на этом этапе не забивать себе модулем обмена – грузи порциями. А потом разберешься, когда время будет.

    rovak

    (@rovak)

    Самый простой путь это убрать из плана обмена ОбменССайтом, из состава, документ ЗаказКлиента. Я не проверял этот способ.
    Сам я пользуюсь периодически другим способом:
    ///***
    Узел = ПланыОбмена.ОбменССайтом.НайтиПоКоду(“000000001”);
    ПланыОбмена.УдалитьРегистрациюИзменений(Узел,Метаданные.Документы.ЗаказКлиента);
    ///***

    000000001 – это код узла в плане обмена, через который идет обмен с сайтом.
    Эти две строчки можно вставить в общем модуле ОбменССайтом
    после строк
    Функция ВыполнитьОбменЗаказами(Параметры, ТаблицаИнформации)

    Если Не Параметры.ОбменЗаказами Тогда
    Возврат Истина;
    КонецЕсли;
    То есть вы программно удаляете всю регистрацию в плане обмена по заказам перед обменом и ничего не ломаете в программе.

    Thread Starter rovak

    (@rovak)

    Да не тратьте вы свое время на плохой хостинг и не будет у вас проблем с медленными запросами. Переходите к моему хосту. Не пожалеете. 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),””);
    Значение = СокрЛП(СтрЗаменить(Значение, Символы.НПП, “”));
    Значение = СокрЛП(СтрЗаменить(Значение, ” “, “”));
    Возврат Значение;

    КонецФункции

Viewing 15 replies - 16 through 30 (of 34 total)