Автоматизация процесса импорта/экспорта товаров и заказов 1с-Virtuemart через файлы
Зачем это надо?
Дело в том, что все началось с элементарных сбоев работы фтп клиента 1с и нежелание самого сайта целостно работать с 1с-кой. Помимо всего прочего там, где это внедрялось, нет ни прокси, ни специальных серверов для обеспечения безопасности сети, но политика была такова: никакого прямого взаимодействия баз 1с с интернетом. Поэтому, мне понадобились навыками программирования на C#, автоматизировав промежуточный процесс, убив тем самым двух зайцев. Плюс, ко всему, особое желание заказчика – присоединенные файлы в 1с к товарам, должны импортироваться на сайт и присоединятся к соответствующим позициям товаров.
С чего начать?
Во-первых, необходимо убедиться, что у нас есть все необходимые инструменты: 1с (выгрузка-загрузка через каталоги и файлы), скрипт для магазина Virtuemart (1C УТ 8.x <-> VirtueMart по протоколу CommerceML) и приложение для автоматизации процесса.
Все готово, теперь разберемся в самой схеме процессов, которые необходимо автоматизировать (Рис. 1).
Рис. 1
Итак, разобравшись в схеме можно установить:
- База 1с – отдельный ПК (ПК1) с доступов в каталог, где происходит непосредственно обмен данными пришедшие с сайта и базой 1с.
- Имеется второй ПК (ПК2), где крутится задание в соответствии с расписанием ПК1, которое запускает специальное приложение (СП).
- СП – приложение, которое сверяет наличие новых файлов в каталоге с файлами на сайте. Импортирует недостающее файлы, запускает процесс импорта товаров и предложение, а также забирает заказы с сайта и сохраняет в каталоге
<?xml version="1.0" encoding="utf-8" ?> <Options> <TransferFolder> <LocalSettings> <IsLocalShare>0</IsLocalShare> <LocalAddressExport><Абсолютный/Относительный путь до папки>\webdata</LocalAddressExport> <LocalAddressImport><Абсолютный/Относительный путь до папки>\\webdata_import</LocalAddressImport> <LocalLogin></LocalLogin> <LocalPassword></LocalPassword> </LocalSettings> <FTPSettings> <FtpAddress><domain.ru></FtpAddress> <FtpLogin><ftp accaunt></FtpLogin> <FtpPassword><ftp password></FtpPassword> <FtpRootFolder>/public_html/images/stories/virtuemart/product</FtpRootFolder> <FtpPort>21</FtpPort> </FTPSettings> <SiteSettings> <SiteName><domain.ru></SiteName> <SiteLogin><Логин с админ правами></SiteLogin> <SitePassword><Пароль></SitePassword> <SiteEncoding><Кодировка страниц></SiteEncoding> <SiteContentType></SiteContentType> <SiteAuthorization><Не обязательно</SiteAuthorization> <SiteTypeQuery><Для работы с Virtuemart - GET></SiteTypeQuery> <SitePages> <Page_1> <TypeWebPage>Read</TypeWebPage> <Page>http://<domain.ru>/vmshop_1c.php?mode=query</Page> <WritingFile>order.xml</WritingFile> </Page_1> <Page_2> <TypeWebPage>None</TypeWebPage> <Page>http://<domain.ru>/vmshop_1c.php?mode=import+filename=import.xml</Page> <WritingFile></WritingFile> </Page_2> <Page_3> <TypeWebPage>None</TypeWebPage> <Page>http://<domain.ru>/vmshop_1c.php?mode=import+filename=offers.xml</Page> <WritingFile></WritingFile> </Page_3> </SitePages> </SiteSettings> </TransferFolder> </Options>
Разобраться в конфиге не так уже и сложно, практически всё ясно, кроме одного: в строке “vmshop_1c.php?mode=import+filename=offers.xml” стоит знак “+”, вместо “&”. Это связано с особенностью разметки файла “<?xml version=»1.0″ encoding=»utf-8″ ?>”
Заполнив основные поля (таблица 1) для работы программы, можно приступать к тестированию.
Таблица 1.
<IsLocalShare> | Если это папка сетевая, ставив «1», иначе «0» |
<LocalAddressExport> | Адрес папки, откуда копируем на сайт |
<LocalAddressImport> | Адрес папки, куда копируем с сайта |
<FtpAddress> | Адрес ФТП — сервера |
<FtpLogin> | ФТП пользователь |
<FtpPassword> | Пароль пользователя ФТП |
<FtpPort> | ФПТ порт |
<FtpRootFolder> | Адрес папки фтп куда копируем файлы |
<SiteLogin> | Пользователь сайта |
<SitePassword> | Пароль пользователя |
<SiteTypeQuery> | Тип запроса к страницам выполнения скрипта сайта (GET/POST) |
<SitePages> | Страницы для выполнения действий скриптом |
<TypeWebPage> | Тип страницы: считать информацию или простой просмотр (Read/None) |
<Page> | Адрес страницы |
<WritingFile> | Название файла для записи информации со страницы |
Для реализации всего задуманного нам понадобится:
- Скрипт (модифицированный);
- Специальное приложение;
- Правильное составление расписаний задач.
- Модфификация общего модуля в 1С — ОбменССайтом (не выкладывается)
Модификация скрипта состоит из того, что: 1) понимает курс валюты соглашения; 2) понимает, что есть доп. файлы; 3) понимает упаковки и веса.
Возмжноно, кто-то воспользуется данной программой не только, для того, чтобы наладить взаимодействие сайта и 1с через каталоги файлов. Например, по рассписанию забирать с сайта определённые файлы или наоборт пополнить.
Если остались вопросы, пиши в комментариях.{jcomments on}
/****** Обновления комплекта ***************/
09.12.2012 — отладил ошибки работы в приложении и оптимизировал работу с ФТП. В скрипт добавил распознование дополнительных свойств товара и работу с дополнительными плагинами фильтрации товаров по свойствам. Чтобы изменить ID плагина фильтрации, необходимо поменять в файле «properties.php» строка 114 «$ins->custom_jplugin_id» на свой ID.
Для корректной работы обновлённого скрипта необходимо в БД проверить наличие таблицы «customs_to_1c».
Дополнения в скрипте работают с производителями и дополнительными свойствами товаров.
Архив с комплектом лежит ниже