Добро пожаловать, Гость. Для того, чтобы отвечать на сообщения и создавать новые темы, Вам необходимо зарегистрироваться, если Вы уже зарегистрированы, то войдите используя Ваши E-Mail и Пароль.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Вопросы по автоматизации работы через OLE Automation
Данная тема предназначена для обсуждения вопросов автоматизации работы программы iNETsHOP для автоматического импорта прайс-листов поставщиков, автоматического обмена данными с сайтами и другими источниками данных, а так же другой работе с базой данных (выполнение SQL-запросов, изменения данных и т.п.)
1. Есть ли полный список команд для настройки и вызова процедуры импорта ?
2. Происходит ли полное формирование всей цепочки ценообразования при автоматическом импорте ?
3. Есть ли возможность запустить все это через JOB MSSQL ? Не везде найдется возможность запускать VBA скрипт по времени, а JOB всегда под рукой.
Количество сообщений
135
Зарегистрирован:
23-08-2007, 09:03:21
Автоматизация
1. Полный перечень интерфейсов, свойств и методов будет представлен в соответствующей разделе сайта посвященному автоматизации. В прикрепленных файлах библиотек типов отображены некоторые свойства и методы доступные для использования клиентами автоматизации.
2. Метод PriceLoader.Start работает аналогично интерфейсу программы и проводит полный цикл импорта прайс-листа в программу от закачки по ссылке с интернета, выполнении дополнительных сценариев vbs, команд консоли cmd, sql-запросов и проверок на дубликаты, подозрительные товары, автоматического определения категорий и т.п.
Ценообразование товаров рассчитывается только средствами самой СУБД (триггеры, процедуры, функции) и не зависит от оболочки. Т.е. зависит только от данных в самой базе данных.
3. В операционной системе Windows есть встроенный планировщик, который может выполнять сценарии vbs из командной строки, например через CScript.exe.
Сервер автоматизации iNETsHOP.App работает как любой объект OLE Automation, потому может быть вызвать и из планировщика MSSQL Server в обычном SQL-скрипте. Данный пример отобразит версию установленного клиента программы:
IPriceLoader.LoadLastOrigin 'Загрузить последние использованные настройки пути файла для Поставщик + Схема импорта
'IPriceLoader.sPriceFileName = "c:\TEMP\1.xls" 'Указать имя файла прайс-листа
'IPriceLoader.sPriceURL = "http://price-list.in.ua/testprice.xls" 'указать ссылку URL с которой прайс будет закачан перед импортом
IPriceLoader.Start 1 'Импортировать прайс c ожиданием конца импорта
Количество сообщений
107
Зарегистрирован:
27-02-2016, 15:29:39
есть возможность реализовать через автоматизацию удаление дубликатов товаров с меньшей ценой? на дублях вылетает с ошибкой обнаружены дублирующиеся товары
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Да, такая возможность есть. Автоматический импорт прайсов работает аналогично импорту через интерфейс, потому эту задачу можно решить через дополнительные SQL-скрипты которые будут удалять лишние товары.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Скрипт удаления дубликатов товаров из прайса
Такой дополнительный SQL-запрос для схемы импорта может выглядеть вот так:
Код
DECLARE @l_sNAME varchar(8000), @l_sSID varchar(8000), @l_iID int;
DECLARE cDublicates CURSOR LOCAL FORWARD_ONLY LOCAL FOR
select distinct td.G_NAME, td.G_SID
from
(
select t2.cnt, t2.G_NAME, t2.G_SID
from
(
select count(*) as cnt, t.G_NAME, t.G_SID
from
(
select IsNull(UPPER(LTRIM(RTRIM(CAST(prc.NAME as varchar(8000))))), '') as G_NAME, IsNull(UPPER(LTRIM(RTRIM(CAST(prc.SID as varchar(8000))))), '') as G_SID
from #TMP_PRICE prc
) t
where t.G_SID = ''
group by t.G_NAME, t.G_SID
) t2
where t2.cnt > 1
) td FOR READ ONLY;
OPEN cDublicates;
FETCH NEXT FROM cDublicates INTO @l_sNAME, @l_sSID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
select @l_iID =
(
select TOP 1 ID from
(
select ID, name, SID, case when IsNumeric(price.PRICE) = 1 then CAST(REPLACE(price.PRICE, ',', '.') as money) else 0 end as PRICE
from
(
select ID,
IsNull(UPPER(LTRIM(RTRIM(CAST(NAME as varchar(8000))))), '') as name,
IsNull(UPPER(LTRIM(RTRIM(CAST(SID as varchar(8000))))), '') as SID,
IsNull(UPPER(LTRIM(RTRIM(CAST(PRICE as varchar(8000))))), '0') as PRICE
from #TMP_PRICE
) price
where price.NAME = @l_sNAME
and price.SID = @l_sSID
) t
order by PRICE DESC
);
DELETE FROM #TMP_PRICE
WHERE (ID <> @l_iID)
and IsNull(UPPER(LTRIM(RTRIM(CAST(NAME as varchar(8000))))), '') = @l_sNAME
and IsNull(UPPER(LTRIM(RTRIM(CAST(SID as varchar(8000))))), '') = '';
FETCH NEXT FROM cDublicates INTO @l_sNAME, @l_sSID;
END
CLOSE cDublicates;
DEALLOCATE cDublicates;
DECLARE cDublicates CURSOR LOCAL FORWARD_ONLY LOCAL FOR
select distinct td.G_NAME, td.G_SID
from
(
select t2.cnt, IsNull(UPPER(LTRIM(RTRIM(CAST(t3.NAME as varchar(8000))))), '') as G_NAME, t2.G_SID
from
(
select count(*) as cnt, t.G_SID
from
(
select IsNull(UPPER(LTRIM(RTRIM(CAST(prc.SID as varchar(8000))))), '') as G_SID
from #TMP_PRICE prc
) t
group by t.G_SID
) t2, #TMP_PRICE t3
where t2.cnt > 1
and t2.G_SID <> ''
and t2.G_SID = IsNull(UPPER(LTRIM(RTRIM(CAST(t3.SID as varchar(8000))))), '')
) td FOR READ ONLY;
OPEN cDublicates;
FETCH NEXT FROM cDublicates INTO @l_sNAME, @l_sSID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
select @l_iID =
(
select TOP 1 ID from
(
select ID, name, SID, case when IsNumeric(price.PRICE) = 1 then CAST(REPLACE(price.PRICE, ',', '.') as money) else 0 end as PRICE
from
(
select ID,
IsNull(UPPER(LTRIM(RTRIM(CAST(NAME as varchar(8000))))), '') as name,
IsNull(UPPER(LTRIM(RTRIM(CAST(SID as varchar(8000))))), '') as SID,
IsNull(UPPER(LTRIM(RTRIM(CAST(PRICE as varchar(8000))))), '0') as PRICE
from #TMP_PRICE
) price
where price.NAME = @l_sNAME
and price.SID = @l_sSID
) t
order by PRICE DESC
);
DELETE FROM #TMP_PRICE
WHERE (ID <> @l_iID)
-- and IsNull(UPPER(LTRIM(RTRIM(CAST(NAME as varchar(8000))))), '') = @l_sNAME
and IsNull(UPPER(LTRIM(RTRIM(CAST(SID as varchar(8000))))), '') = @l_sSID;
FETCH NEXT FROM cDublicates INTO @l_sNAME, @l_sSID;
END
CLOSE cDublicates;
DEALLOCATE cDublicates;
Его нужно вставить в схему импорта в поле "SQL-скрипт после чтения данных"
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Ошибка выполнения сценария vbs
Скорее всего ошибка в скрипте (сценарии). Проверьте параметры которые вы передаете серверу автоматизации для импорта прайс-листа. Без текста вашего сценария ответить более конкретно не имеется возможности.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
В скрипте vbs можно использовать все возможности, если они доступны через интерфейс COM приложения Excel.Application, но данная тема не относится к автоматизации импорта прайс-листов.