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


http://inetshop.in.ua/index.php?p=showtopic&toid=308&area=1&print_post=1772
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;