Автоматизация процесса импорта/экспорта товаров и заказов 1с-Virtuemart через файлы

Зачем это надо?

Дело в том, что все началось с элементарных сбоев работы фтп клиента 1с и нежелание самого сайта целостно работать с 1с-кой. Помимо всего прочего там, где это внедрялось, нет ни прокси, ни специальных серверов для обеспечения безопасности сети, но политика была такова: никакого прямого взаимодействия баз 1с с интернетом. Поэтому, мне понадобились навыками программирования на C#, автоматизировав промежуточный процесс, убив тем самым двух зайцев. Плюс, ко всему, особое желание заказчика – присоединенные файлы в 1с к товарам, должны импортироваться на сайт и присоединятся к соответствующим позициям товаров.


С чего начать?

Во-первых, необходимо убедиться, что у нас есть все необходимые инструменты: 1с (выгрузка-загрузка через каталоги и файлы), скрипт для магазина Virtuemart (1C УТ 8.x <-> VirtueMart по протоколу CommerceML) и приложение для автоматизации процесса.

Все готово, теперь разберемся в самой схеме процессов, которые необходимо автоматизировать (Рис. 1).

Рис. 1

Итак, разобравшись в схеме можно установить:

  1. База 1с – отдельный ПК (ПК1) с доступов в каталог, где происходит непосредственно обмен данными пришедшие с сайта и базой 1с.
  2. Имеется второй ПК (ПК2), где крутится задание в соответствии с расписанием ПК1, которое запускает специальное приложение (СП).
  3. СП – приложение, которое сверяет наличие новых файлов в каталоге с файлами на сайте. Импортирует недостающее файлы, запускает процесс импорта товаров и предложение, а также забирает заказы с сайта и сохраняет в каталоге
<?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».

Дополнения в скрипте работают с производителями и дополнительными свойствами товаров.

Архив с комплектом лежит ниже

Attachments