Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Пожелания - справочник товаров поставщиков, самостоятельная настройка полей


http://inetshop.in.ua/index.php?p=showtopic&toid=323&fid=15&area=1
09.08.2016 09:57

sonic1978


Пользователь iNETsHOP

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
не хватает мне например в справочнике поставщиков - артикулов привязанных товаров из основного каталога. название - есть, (поле товар) а артикула нет((((

и в то же время куча ненужных полей, которыми я не пользуюсь.

если бы была возможность убирать поля какие не нужны и добавлять какие нужны соответственно это было бы мегагибко

09.08.2016 13:24

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Артикулы товаров есть в справочнике товаров. Там же можно настроить вывод артикулов у товаров поставщиков.

09.08.2016 14:01

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
Цитата
Там же можно настроить вывод артикулов у товаров поставщиков.


можно подробнее? не понимаю как это сделать

09.08.2016 14:24

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Откройте справочник товаров. Внизу есть вкладки с разной информацией по карточке товара, в том числе и привязанные товары поставщиков. В этой таблице товаров поставщиков вы можете добавить отображение любого поля из таблицы товаров прайсов (справочника товаров поставщиков), для этого в верхнем левом углу есть кнопка.


09.08.2016 22:17

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
посмотрел, да, не заметил этих опций, спасибо, но простым фильтром из справочника товаров всех нужных полей TBL_SUPPLIERS_GOODS мне не вытащить...
в идеале бы мне иметь в товарах поставщиков G_SID привязанных товаров

подумал что могу для этого использовать поле SG_ARTIKUL, которое я не использую... тогда мне нужно скопировть G_SID в SG_ARTIKUL для привязанных товаров..

написал простой скрипт, но чтото он пока не работает как надо, поправьте если не сложно

UPDATE TBL_SUPPLIERS_GOODS
SET SG_ARTIKUL = (SELECT G_SID FROM TBL_GOODS WHERE G_ID = SG_G_ID)

09.08.2016 23:00

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Скрипт правильный, только его можно немного ускорить, чтобы он не делал обновление не привязанных товаров прайсов к каталогу

Код

UPDATE TBL_SUPPLIERS_GOODS
SET SG_ARTIKUL = (SELECT G_SID FROM TBL_GOODS WHERE G_ID = SG_G_ID)
WHERE NOT SG_G_ID IS NULL


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

10.08.2016 10:32

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
спасибо! все получилось, товаров много, сначала подумал что "висит", на ночь оставил - скрипт нормально отработал.

11.08.2016 12:53

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
теперь трудность в том что SG_ARTIKUL затирается при каждом импорте товаров поставщиков, можно его исключить из импорта? чтобы ни сравнение ни перезапись по нему не проходили.
либо есть ли какое нибудь другое поле которое не будет затираться, для служебной информации по товарам поставщиков.

в схемах импорта оно кстати не задействовано

11.08.2016 14:42

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
При импорте прайс-листа обновляются все данные о товаре поставщика, если они отсутствуют в прайсе - затираются. Исключить какое-то поле в частном порядке - невозможно, механизм работы общий для всех и такой настройки нет.


Вы можете создать отдельный триггер на обновление поля TBL_SUPPLIERS_GOODS.SG_G_ID (т.е. на изменение кода товара каталога к которому привязывается товар поставщика) и в триггере обновлять поле SG_ARTIKUL.

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

11.08.2016 20:18

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
пытаюсь в схему импорта встроить скрипт, после сравнения товаров

UPDATE #TMP_PRICE
SET ARTIKUL = (SELECT SG_ARTIKUL FROM TBL_SUPPLIERS_GOODS WHERE SG_G_ID = ID AND NOT SG_ARTIKUL IS NULL)

что то не работает пока

поле код после сравнения товаров в #TMP_PRICE в каком поле лежит? id?

12.08.2016 00:53

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Временная таблица #TMP_PRICE содержит данные прочитанные из прайс-листа в сыром виде, т.е. все в виде текста. На этапе сравнения данные преобразуются к нужному типу и размеру (цены, курсы валют, наименование в 400 символов и т.п.) и записываются в глобальную временную таблицу ##TMP_PRICE_DATA

Код

CREATE TABLE ##TMP_PRICE_DATA
(
[ID] [int] IDENTITY (1, 1) NOT NULL PRIMARY KEY,
IMPORT_ID int NOT NULL,
Suspicious bit NOT NULL DEFAULT 0,
[SG_ID] [int] NULL,
[_WHAT_DO] [int] NULL,
[SG_B_ID] [int] NULL,
[_BRAND] [bit] NULL DEFAULT 0,
[SG_SID] [varchar] (200) NULL,
[_SID] [bit] NULL DEFAULT 0,
[SG_NAME] [varchar] (400) NULL,
[_NAME] [bit] NULL DEFAULT 0,
[SG_MODEL] [varchar] (400) NULL,
[_MODEL] [bit] NULL DEFAULT 0,
[SG_KIND] [varchar] (100) NULL,
[_KIND] [bit] NULL DEFAULT 0,
[SG_DESC] [text] NULL,
[_DESCRIPTION] [bit] NULL DEFAULT 0,
[SG_PRICE] [float] NULL,
[_PRICE] [bit] NULL DEFAULT 0,
[SG_NOTES] [text] NULL,
[_NOTES] [bit] NULL DEFAULT 0,
[SG_ARTIKUL] [varchar] (100) NULL,
[_ARTIKUL] [bit] NULL DEFAULT 0,
[SG_PRESENT] [bit] NULL,
[_PRESENT] [bit] NULL DEFAULT 0,
[SG_WARRANTY] [varchar] (100) NULL,
[_WARRANTY] [bit] NULL DEFAULT 0,
[SG_REST] [float] NULL,
[_REST] [bit] NULL DEFAULT 0,
[SG_CATEGORY] [varchar] (150) NULL,
[_CATEGORY] [bit] NULL DEFAULT 0,
[SG_URL] [varchar] (550) NULL,
[_URL] [bit] NULL DEFAULT 0,
[SG_IMAGE_URL] [varchar] (550) NULL,
[_IMAGE_URL] [bit] NULL DEFAULT 0,
[SG_DESC_FULL] [text] NULL,
[_DESC_FULL] [bit] NULL DEFAULT 0,
[SG_CURRENCY] [varchar] (100) NULL,
[_CURRENCY] [bit] NULL DEFAULT 0,
[SG_CURRENCY_RATE] [float] NULL,
[_CURRENCY_RATE] [bit] NULL DEFAULT 0,
[SG_PRICE2] [float] NULL,
[_PRICE2] [bit] NULL DEFAULT 0,
[SG_CURRENCY2] [varchar] (100) NULL,
[_CURRENCY2] [bit] NULL DEFAULT 0,
[SG_CURRENCY_RATE2] [float] NULL,
[_CURRENCY_RATE2] [bit] NULL DEFAULT 0,
[SG_SERIES] [varchar] (100) NULL,
[_SERIES] [bit] NULL DEFAULT 0,
[SG_PRODUCER_CODE] [varchar] (100) NULL,
[_PRODUCER_CODE] [bit] NULL DEFAULT 0,
[SG_PARTY] [varchar] (100) NULL,
[_PARTY] [bit] NULL DEFAULT 0,
[SG_COUNT_IN_PACKING] [float] NULL,
[_COUNT_IN_PACKING] [bit] NULL DEFAULT 0,
[SG_COLLECTION] [varchar] (100) NULL,
[_COLLECTION] [bit] NULL DEFAULT 0,
[SG_SEASON] [varchar] (100) NULL,
[_SEASON] [bit] NULL DEFAULT 0,
[SG_MIN_ORDER] [float] NULL,
[_MIN_ORDER] [bit] NULL DEFAULT 0,
[SG_DELIVERY] [varchar] (100) NULL,
[_DELIVERY] [bit] NULL DEFAULT 0,
[SG_PRODUCER_COUNTRY] [varchar] (100) NULL,
[_PRODUCER_COUNTRY] [bit] NULL DEFAULT 0,
[SG_COLOR] [varchar] (150) NULL,
[_COLOR] [bit] NULL DEFAULT 0,
[SG_SIZE] [varchar] (150) NULL,
[_SIZE] [bit] NULL DEFAULT 0
)


В которой соответственно SG_ID - код товара поставщика который найден в базе данных программы по уникальному коду (поле код поставщика SG_SID) или по наименованию (SG_NAME)

При работе с данной таблицей нужно так же учитывать поле IMPORT_ID в котором хранится к какому именно импорту принадлежат товары данного прайс-листа, т.к. в общем случае одновременно может быть несколько импортов прайсов. Значение текущего импорта передается в дополнительные SQL-скрипты схемы импорта через параметр :IMPORT_ID

Т.е. ваш запрос будет выглядеть приблизительно так:

Код

UPDATE ##TMP_PRICE_DATA
SET SG_ARTIKUL = ARTIKUL
FROM (SELECT G_SID as ARTIKUL, SG_ID as GOOD_ID FROM TBL_GOODS g, TBL_SUPPLIERS_GOODS sg WHERE sg.SG_G_ID = g.G_ID) t
WHERE SG_ID = GOOD_ID
AND IMPORT_ID = :IMPORT_ID;

UPDATE ##TMP_PRICE_DATA
SET _ARTIKUL = 1
WHERE ISNULL(SG_ARTIKUL, '') <> ''
AND IMPORT_ID = :IMPORT_ID;


Этот скрипт для схемы импорта нужно использовать после сравнения товаров или перед записью в справочник товаров поставщиков.



12.08.2016 09:32

sonic1978


Пользователь iNETsHOP

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
все работает отлично, огромнейшее спасибо!