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


http://inetshop.in.ua/index.php?p=showtopic&toid=308&area=1
18.06.2016 20:49

sonic1978


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

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

при установке в схеме импорта ячеек EF к примеру как остаток объединяются строки а не значения.

18.06.2016 21:16

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Объединение остатков по складам
Из-за "сбоя" на хостинге freehost.ua были утеряны данные с 06 по 15 мая 2016 года, возможно что тема которую вы ищите была создана в этот период.

По сути вопроса - если в схеме импорта в настройках поля "Остаток" указать колонки прайс-листа как EF то да, будет произведена конкатенация строк, а не суммирование числовых значений.

Без примера прайса или его скриншота трудно что-то посоветовать конкретное, как вариант, импортируйте остаток из нескольких колонок через какой-то разделитель, скажем символ "/". Затем, в схему импорта добавьте скрипт обработки, который будет разбивать эту строку на части и суммировать значения.

Например функция [dbo].[f_GetTableByList2] (@p_sValue varchar(8000), @p_sDelimeter varchar(100)) - возвращает таблицу со значениями элементов строки разбивая ее по указанному разделителю. Можно в T-SQL скрипте обработки создать курсор по всем строкам прочитанного прайс-листа, а затем получить элементы суммарной строки в которой значения разделены разделителем и суммировать их:
Код

DECLARE
@ID int,
@REST_STR varchar(8000),
@REST_ITEM varchar(100),
@REST_SUMM float;

DECLARE cPrice CURSOR LOCAL FOR
SELECT ID, CAST(REST as varchar(8000)) FROM #TMP_PRICE order by ID;

OPEN cPrice
FETCH NEXT FROM cPrice INTO @ID, @REST_STR;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
SET @REST_SUMM = 0;
DECLARE cRests CURSOR LOCAL FOR
SELECT id FROM [dbo].[f_GetTableByList2](@REST_STR, '/');

OPEN cRests
FETCH NEXT FROM cRests INTO @REST_ITEM;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF ISNUMERIC(@REST_ITEM) = 1 SET @REST_SUMM = @REST_SUMM + CAST(@REST_ITEM as float);
FETCH NEXT FROM cRests INTO @REST_ITEM;
END
CLOSE cRests;
DEALLOCATE cRests;

UPDATE #TMP_PRICE SET REST = STR(@REST_SUMM, 10, 2) WHERE ID = @ID;

FETCH NEXT FROM cPrice INTO @ID, @REST_STR;
END
CLOSE cPrice;
DEALLOCATE cPrice;



18.06.2016 23:07

sonic1978


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

Тема начата

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

18.06.2016 23:22

Admin


Администратор


Количество сообщений   135
Зарегистрирован:   23-08-2007, 09:03:21
Автозамена текста срабатывает в момент чтения каждой строки из прайс-листа, потому она работает до SQL-скриптов обработки.

19.06.2016 01:32

sonic1978


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

Тема начата

Количество сообщений   107
Зарегистрирован:   27-02-2016, 15:29:39
добавил перед сравнением UPDATE #TMP_PRICE SET REST = REPLACE(REST,'.',',');

теперь все ок

15.10.2016 20:39

Denndy


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

Количество сообщений   54
Зарегистрирован:   12-03-2016, 18:32:41
Очень полезная тема при работе с прайсами где несколько колонок по остаткам. Но столкнулся с небольшой проблемой, при суммировании из нескольких ячеек получается программно фильтр поставить на позиции с "0" количеством не получится т.к. колонок несколько, если я правильно понимаю работу программы. Отсюда вопрос, в этой теме вопрос подымался на предмет скрипта для удаления позиций с "0" остатком, насколько он применим в данном случае? Имеется ввиду вот этот скрипт, если вместо "1" поставить "0"
Цитата
DELETE FROM #TMP_PRICE WHERE CAST(REST as varchar(100)) = '1';

15.10.2016 23:35

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Будут удалены товары прайса, в которых в колонку "Остаток" импортирован текст равный "1" или "0" соответственно тексту запроса.




17.10.2016 12:33

Denndy


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

Количество сообщений   54
Зарегистрирован:   12-03-2016, 18:32:41
Результатам работы скрипта посвящена тема, на которую я дал ссылку, не стоило повторяться.
Вопрос был несколько о другом.