Автоматизация процесса импорта/экспорта товаров и заказов 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».
Дополнения в скрипте работают с производителями и дополнительными свойствами товаров.
Архив с комплектом лежит ниже