Как стать автором
Обновить

Автоматика на службе актуальности

Время на прочтение10 мин
Количество просмотров4.9K
Некоторое время назад прочитал топик Будни интернет-магазина: почему товара нет в наличии? о том, как же тяжело интернет-магазину держать весь товар и цены на него в актуальном состоянии. Особенно, если поставщикам хотелось положить огромный болт на актуальность их же прайсов. Проблема конечно же правильная, но далеко не новая и небезызвестная.

Лично меня смутило отсутствие каких-либо технических данных и советов. Все в топике свелось к тому, что нужно скачивать и обновляться регулярно – и тогда будет счастье. Но это и так понятно. Все мы знаем, что именно нам нужно. Но как этого добиться?

Собственно говоря, это и есть тема данного топика – какими инструментами добиться максимальной автоматизации при работе с прайсами и интернет-магазинами. Что в свою очередь позволит вам сэкономить кучу полезного времени для вашего же бизнеса.

Упустим рассуждения о том, как плохи поставщики. Они еще хуже. Актуальность – болезненная тема, но не наша.
Наша задача сделать так, чтобы данные попадали на сайт, как только они обновятся у поставщика и с минимальной задержкой. А это очень даже реально. Конечно, не мгновенно, но в минуты 3 всё укладывается. Хотя время очень сильно зависит от множества факторов. Но о них позже.

Еще один важный момент: я пишу о полностью автоматизированных автономных «системах», которые требуют вмешательства человека лишь для первичной настройки и потом контроля того, как идут дела. Эти решения работают сами, скачивают сами, обновляют сами – все без вмешательства менеджеров и ответственных лиц. И можно не переживать о том, что кто-то что-то забудет или заболеет, или уволится. Вы вообще можете не знать, что там происходит. Но оно будет происходить, поскольку однажды было настроено.
Итак, приступим.

Сердце


Есть неимоверно удобный планировщик заданий для Windows – nnCron. В нашем случае – он будет сердцем управляющим всем. Для сложных задач, конечно же придется подучить язык Fort, на котором пишутся скрипты крона. А для простых – достаточно минимальных навыков программирования. Есть еще моменты с настройкой и запуском задач крона на Win 2003/2008 – но это нюансы.

Не буду описывать всех прелестей этого планировщика, но если вы пока что справляетесь без него, то видимо он вам и точно не нужен.

Например, если известно, что поставщик обновляет прайс каждые 3 часа, то с легкостью сможете создать эти задания.
Но бывают моменты, что прайс обновляется непредсказуемо. Для таких случаев мы используем скачивание каждых 5 минут, после чего проверяем файл на изменение, и если они имеют место, то это значит, что прайс уже с новыми данными – следовательно, нужно обновлять и сайт. Кстати, этим тоже занимается крон.
Для сравнения файлов используем плагин crc32.

Бывает, что прайсы приходят на почту.

Обычно мы делаем так: при поступлении прайса на почту, он автоматом сохраняется в нужную папку. Крон видит, что файл обновился, определяет, были ли изменения, и если были – обновляет сайт.

Ну и ясное дело, что именно крон следит за разархивированием прайсов. Почему крон? Потому что иногда бывает, что прайсы приходят в виде price.zip, а внутри находится файл (или файлы), который будет иметь каждый раз новое название, которое генерирует робот поставщика. И в таком случае было бы сложно, запустить обработку этого прайса, поскольку имя будет изменяться от скачивания к скачиванию. А крон как раз помогает в манипуляция файлами и их названиями.

В общем, всем этим занимается крон. Хотите полной автоматики – используете nnCron.

Пробовал так же использовать Windows PowerShell. Удобная штука и делает все, что нужно, и FORT изучать не нужно. Но не впечатлили возможности настройки самого шедулера в Windows, который должен очень гибко стартовать скрипты. Поэтому решили все таки пользоваться nnCron.

Получение прайсов


Вам точно вспомнилось несколько любимых консольных утилит для скачивания. Но наш выбор – wget портированный на Windows. Можно сказать, что это дело вкуса, но в одной из недавних задач, только wget помог нам добраться до прайса. Хотя не исключаю возможности, что остальные с этим тоже справилист бы.

Процесс скачивания выглядел так: пользователю ему нужно попасть на страницу авторизации, ввести логин и пароль, потом его редиректит на скрипт проверки данных и, если все верно, то идет второй редирект на индексную страницу портала, откуда можно скачать прайс, если человек уже авторизирован. Там жмем на линк вида getprice.php (скачать прайс) – опять редирект на скрипт для скачивания, там запускается формирование актуального прайса и через секунд 20 php выдает готовый прайс, который можно сохранить.

Первым позывом было использовать логин и пароль + прямой линк. Не заработало. В общем, было потрачено немало времени, но помог только wget, хотя и с его помощью пришлось поломать голову немало. Если коротко: вгет логинился, использовал куки логина и качал все, что требуется.

Другой вариант получения – почта

Проблем тут обычно не возникает. Иногда случается, что почта у вас не локальная. Но это в принципе легко обходится скачиванием писем по POP3 или же форвардом на ящик, из которого вы заберете письма уже локальным клиентом. Ничего сложного нет. Главное, чтобы почтовый клиент умел при получении письма сохранять его вложение в нужную вам папку.

Итак, на данный момент мы должны иметь систему, которая в каждый момент времени обеспечит нас актуальными прайсам. И вам не нужно будет тратить 30 минут, на скачивание и проверку 10-20 файлов.

Но просто получить новые прайсы – не круто. А вот без человеческого вмешательства обновить их – это круто.

Парсинг


Парсинг — страшное слово, но невероятно полезное. Это так званый разбор и импорт прайса с определением того, что вам нужно, а что нет.

Обычно после получения нового прайса, менеджер сохраняет его в xml, csv либо просто в текстовый файл, и через интерфейс своего вебмагазина импортирует данные. И становится радостно. Но не всем.

Есть бедолаги, у которых в прайсе 5 тыс. строк, из которых 3 тыс. – лишние, но этих 3 тыс нужно взять со второго прайса, где 10 тыс позиций, и там все разбросано так, что черт ногу сломит. А еще нужно цены проверить и подправить. Приходится жертвовать либо временем либо ассортиментом.

А вы говорите, что поставщики медленно обновляют прайсы. Я видел фирмы, где от прихода прайса, до попадания его на сайт проходило 5 дней. Ибо это ручной, тупой и неблагодарный труд, от которого надо избавляться.

Один из вариантов решения подходит для мелких-мелких предпринимателей, которые из екселя хотят просто перебросить данные на сайт. Даже если нужно провести сотни операций над позициями в прайсе (чтобы половину отбросить, а на вторую сделать наценку +50%), то это легко реализуется на VBA в макросе, который будет автоматом стартовать с вашим прайсом и творить там все, что пожелаете. А вы тем временем сходите на деловую встречу – nnCron лучше за вас знает, что и когда сделать.

После обработки прайса – он выгрузится в ваш магазин. Но о процессе чуть позже.

Но вот если вы не мелкий-мелкий предприниматель, то вероятно у вас есть склад. А если есть склад, то должна быть 1С 7 или 8. Лучше 8. Нету 1с?? Вероятно вы безумны. В торговле – это незаменимо. И при автоматизации тоже.

Не буду останавливаться на версиях 1С, но хочу сделать одно уточнение – для задач, о которых дальше пойдет разговор, 1с8 в разы удобнее. Как минимум тем, что для внедрения большинства из таких решений вам не придется вносить изменения в саму конфигурацию. Автоматика будет работать и так. А вот в 1с7 – придется покрутить основную конфигурацию, что не всегда является допустимым.

В основном парсинг прайса делается с помощью 1С. Не буду вдаваться в подробности, как именно, ибо это не статья о том, как можно нагнуть любой прайс с помощью 1с, а просто опишу основные возможности.

nnCron – обеспечивает автостарт наших обработок. Как уже упоминалось, весь ваш офис в это время может гулять на корпоративе.

Обработка определяет, что это за прайс, набор правил для него и начинает импорт. Можно проигнорировать любой товар, любую группу и т.д. Параллельно проставить любую наценку и обновить все позиции в вашей базе. К тому же, при желании, обработка может создать новую номенклатуру, которой нету в базе, но в прайсе уже появилась. Этих номенклатур может быть и сотня – это существенно сократит вам время. Обработка может импортировать сколько угодно прайсов подряд и заботиться о совпадающих артикулах. В общем, она может все то, что и вы, но никогда не болеет, и в сотни раз быстрее.

Кстати, именно от сложности этого этапа – парсинга – в основном и зависит, сколько времени займет вся процедура обновление сайта. В особо сложных системах, процесс парсинга будет занимать минут 10. Хотя у человека на это ушло бы не меньше дня.

Но, в данной статье нас интересует не автоматика импорта и разбора прайса, а именно попадание информации на сайт. Поэтому о возможностях и способах – в другой раз. Разве что напомню, что для true парсинга программистам 1С желательно уметь пользоваться регулярными выражениями.

Когда товар попал в базу 1С, его нужно выгрузить на сайт. Собственно это нас и интересовало изначально. Хотя кому-то будет достаточно самого импорта прайсов в 1С – это на самом деле тоже очень актуальная тема для многих предпринимателей.

Uploading


Почему мы говорим о вариантах выгрузки на сайт? Ведь многие разработчики интернет-решений сами заботятся об инструментах, которые позволяют обновлять товар.
Просто бывает (даже очень часто), что люди пользуются разными бесплатными интернет-магазинами, которые иногда не имеют тех возможностей, что требуются владельцу.

Здесь нужно оговориться, что идет разговор об «универсальных» способах обновления. Их есть несколько.

Основное, что нужно осознать, какой бы сайт у вас ни был – данные на нем можно обновить. Просто иногда люди думают, что обязательно инет-магазин должен быть на Bitrix либо на какой-нить CMS, чтобы смочь без проблем обновлять товар. Нет, это не так. Не имеет значения, что у вас за сайт – все можно обновить.

Для начала нужно иметь, что выгружать. Предполагаю, что эта проблема у вас уже решена. Часто встречался с тем, что из 1с выгружают структуру на сайт 1 в 1. Но иногда же бывает ситуация, как с прайсами – нужно только половину чайников выгрузить или проигнорировать пылесосы, или товар запихнуть в «не родную» категорию и т.д.

Как по мне, то самый доисторический и тупой способ обновления – вручную. То есть даже если вы импортируете файл для обновления через админку сайта и там всего на всего жмете «обновить», то это все равно вручную. Ваши обновления будут зависеть от здоровья и памяти вашего менеджера. А вам этого точно не нужно.

Для автоматизации существуют такие варианты.

Xml, cml, csv и компания

Это вариант, когда 1с или ексель создаст нужный вам файл, а крон выгрузит его на фтп сайта. Выгрузку мы обычно проводим wput для Windows. Но это дело вкуса.

На хостинге работает cron (не тот, что у нас установлен), который каждые 3 минуты проверяет наличия файлов обновления. При их обновлении – запускает скрипт, который обновляет базу, и вытирает файл. И ждет опять.

С такими темпами за час вы точно раз 10 сможете обновить прайс, сколько бы изменений вам не присылали – тут уж как nnCron настроите. Будет актуально? Конечно.
И для этого нужно: wput, cron на хостинге.

Прямой коннект в базу

Этот вариант сильно зависим от количества данных для обновления и скорости соединение. Но в нем есть свои прелести. И также нужно отметить, что ваш хостер должен вам разрешить коннектиться напрямую. Обычно это делается через ODBC для MySQL.

Если же прямого коннекта не дают, то вероятно ssh соединения все таки будут разрешены. В нашем случаем мы так и работаем. Для ssh соединения используется putty, затем ODBC для настройки коннекта на базу.

В базу сайта таким образом можно коннектиться пямо из Excel и обновлять прайс. А можно и прямо из 1С.

Этот способ мы используем для того, чтобы менеджер напрямую из базы MySQL мог увидеть, какие есть новые заказы и импортировать их прямо в 1С, создав документы заказов, расходные и т.д. И наоборот, создав документ в 1С, можно его сразу перенести в базу сайта, напрямую.

Иногда таким образом можно реализовать «робота». То есть посетитель на сайте выполняет определенный действия, например, отправку счета. Но счет должен быть выслан именно из 1С, поскольку нужно «застолбить» номер и выписать от имени конкретного на тот момент менеджера. Будет выглядеть это так:

1. В mysql создается запись о действии
2. 1С автоматически с помощью nnCron проверяет прямым коннектом базу сайта на предмет «действий»
3. Видя действие, запускается обработка 1С, которая автоматом формирует счет нужному человеку и с нужными параметрами, а затем отправляет его.

К тому же таким способом можно связать ваших онлайн клиентов с реальными в базе 1С, задав соответствия кодов, чтобы уменьшить количество ручной работы при переносе заказов.

То есть «плюс» способа прямого коннекта: вы можете читать данные прямо с вашего сайта, а так же вносить их обратно.

Просто ssh

Если вы не хотите прямых коннектов, то можно использовать утилиту из набора putty для передачи файлов через ssh соединения: pscp. К тому же, эта утилита позволяет и получить файлы с вашего сервера.
Это еще один вариант ftp соединения, который сгодится и в случае отсутствия коннекта на базу по каким-либо причинам.

Потом же с помощью утилиты plink можно запустить удаленный скрипт на сайте, который сделает, что нужно.
Но это уже «извращенный» способ для особых случаев, когда больше ничего не помогает.

Обновим-ка прайсы


Ну раз базу мы обновили, то прайсы нужно тоже обновлять. Тут проблем – раз плюнуть. VBA из екселя формирует вам новый прайс, если вы не акула бизнеса. А если акула, то ваша 1С должна вам выдать прайс любой сложности по вашему выбору, образу и подобию.

После чего все архивируется и забрасывается с помощью wput/pscp на сайт. И как уже известно, всем руководит nnCron: архивирование, проверка, выгрузка.

Интернет-магазин и актуальность


Такие наработки дадут возможность держать базу сайта всегда в актуальном состоянии. К тому же если вы пользуетесь 1С, то есть возможность обновлять не только наличие в прайсе, но и физическое наличие хоть на 10 складах.
Таким образом на каждом товаре можно сделать статус «доступен для заказа», если он есть просто в прайсе. «Есть на складе» — если товар есть физически у вас на складе; также можно уточнять и количество, и какой именно склад. В общем можно все, что только придумается. Главное правильно все организовать.

Процесс


Примерно схема будет выглядеть так:

1. nnCron качает прайс, например, каждые 10 минут.
2. Идет проверка, новый ли это прайс или все еще старая версия.
3. Если новый — nnCron запускает обработку в 1С по импорту прайса в базу.
4. 1С парсит и импортирует прайс в свою базу.
5. После этого запускается обработка для создания файла инсертов для MySQL интернет-магазина: наличие, склад, новые товары, цены — в общем, все что нужно.
6. После создания файла, он автоматом аплоадится к вам на сервер.
7. При обновлении файла на сервере, ваши скрипт на хостинге с помощью cron обновляет базу новыми данными.
Как вариант, вместо 6 и 7 можно просто коннектиться в базу MySQL напрямую и обновлять прямо из 1С
8. 1С создает файл прайса .xls с нужными параметрами.
9. nnCron видя сигнал о том, что прайс обновлен, выгружает его на сервер.

Что нужно для счастья?


Для такого процесса вам пригодятся следующие инструменты:

1. nnCron – мощный планировщик. + желательно знание языка Форт. Можно и Windows Power Shell, но это в случае, если нету «хитрых» требований расписаниям.
2. wget – качаем файлы
3. wput – аплоадим файлы
4. puttyssh клент. + его сопутствующие утилити pscp, plink.
5. ODBC Connector for MySQL – для настройки коннекта к MySQL
6. 1C8/1С7 – для счастья в торговле и учете склада.
7. Blat – консольный почтовик. О нем речи не шло, но может пригодиться.
8. AutoIt — позволить автоматизировать сложные задачи, а потом скомпилировать это в exe. Особенно полезно, если вы используете автоматику на программах, которые не предусматривают такой возможности.

Весь этот набор гарантирует, что вся ваша автоматика будет работать безукоризненно. Ваши прайсы будут всегда обновляться вовремя, а наличие будет всегда актуальным. И от обновления прайса до обновления базы будет проходить не час-два, а несколько минут – сколько бы у вас ни было прайсов.

А весь рабочий процесс не будет полагаться на людей, которые, как известно, ненадежны. Не нужно переживать, что кто-то забыл, не успел, заболел, замотался – все будет работать. Все эти скрипты призваны убрать слабое звено – человека.

В свое время я задался вопросом автоматизации, поскольку человеческий фактор начал меня раздражать. Он — самая главная помеха в актуальности.

Надеюсь, что кого-то вся эта информация подтолкнет к правильным решениям и путям. Это всего лишь инструменты. Большая часть работы по-прежнему за вами.

Успехов в бизнесе!
Теги:
Хабы:
+4
Комментарии8

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн