Гость
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / TECDOC рвет мозги - помогите !!!! / 21 сообщений из 21, страница 1 из 1
06.05.2009, 13:41
    #35971814
coolged
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Доброго времени суток уважаемые коллеги!!!

В топике с /topic/561158&hl=subrange
уважемый Бунаков Михаил Петрович дал инфу для размышления про _CTM поля …...ясно что они есть суть применяемости или не применяемости того или иного объекта (модели авто, артикула и т. д.) для той или иной страны.

По факту имеем таблицу TOF_COUNTRIES с полем COU_CTM где хоронятся «метрики» стран в бинарном виде. Также было получено, через снифферы, инфа о том, что в Transbase sql есть build функция типа *_CTM subrange(210 cast integer) = 1 …...и кроме того, через чтение мета структуры любых из таблиц, где есть поля *_CTM, мы видим, что это bit поле. т. е. получается, что subrange в битовом поле выберет, скажим, 210 бит и отдаст нам его как int.

Но как и многие, я перегнал базу в Microsoft Sql Server и как известно, в mssql есть binary(n). (или varbinary(n) ) . Конечно держать *_CTM в varchar(n) или char(n) проще в обработке. Достаточно просто определить наличие или не наличие в той или иной позиции string-а 1 или 0. Но имеем куча проблем.
База раздувается до больших размеров и скорость обработки из-за поиска субстринга естественно падает.
Т. е. нужно держать *_CTM поля в виде byte массива. Но как это хозяйство обрабатывать? Ведь нету в mssql аналогов subrange для работы с byte массивом.
Как кто решал эту проблему у себя, при перегонке данных в mssql или mysql …..
...
Рейтинг: 0 / 0
07.05.2009, 18:38
    #35975445
elisay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
coolged,

игнорировал эти поля напрочь
...
Рейтинг: 0 / 0
08.05.2009, 20:14
    #35977520
coolged
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
elisay,

Позвольте с Вами не согласится, при переборе объектов таблиц с разными признаками привязок к метрикам стран получаются разные наборы. Этого факта достаточно, чтобы сделать вывод, что поля нужные и обойтись без них никак нельзя.
...
Рейтинг: 0 / 0
16.06.2009, 16:02
    #36043941
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
coolgedНо как и многие, я перегнал базу в Microsoft Sql Server и как известно, в mssql есть binary(n). (или varbinary(n) ) .

а с этими полями, не получается?
...
Рейтинг: 0 / 0
29.12.2009, 04:57
    #36391061
Perfect0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
MSSQL 2008 + Tecdoc 4 квартал 2009 г:
Много перерыл, адекватных решений не нашел, поэтому решал в лоб при помощи SUBSTRING.

Синтаксис
SUBSTRING ( expression, start, length ).

Аргументы
expression
Строка символов, двоичная строка, текст, изображение, столбец или выражение expression, включающее столбец. Не следует использовать выражения, включающие статистические функции.

start
Целое число, определяющее позицию начала подстроки. Аргумент start может иметь тип bigint.

length
Положительное целое число, которое указывает, сколько символов или байтов выражения expression будет возвращено. Если значение аргумента length отрицательно, то возвращается ошибка. Аргумент length может иметь тип bigint.

Непосредственно решение
Данные у меня хранятся в varbinary (mssql их отображает в шестнадцатеричном виде). Следовательно 1 байт - это 2 символа (FF = 255 = 1 байт). Чтобы выдрать нужный бит (в моём случае 185-ый), вычитаем 1 из 185, делим на 2, округляем вниз и прибавляем 2 (первые 2 байта 0x0b системные):
(185 - 1) / 2 + 2 = 94.
Т.о. start = 94. length = 1 (байт). Для проверки наличия бита используем бинарную операцию & ("И"). Результат SUBSTRING вернёт 1 байт (2 шестнадцатеричных символа). Т.к. нас интересует первый, то операцию & выполняем с числом 0x10 = 16 (для второго символа надо было бы использовать число 0x01 = 1). Результат можно проверить как > 0 или равный 16 и 1 соответственно. Получаем условие вида:
CODEWHERE SUBSTRING(*_CTM, 94, 1) & 16 > 0

PS: всё было бы гораздо проще, но бинарные операции в MSSQL не допускают использование двух varbinary, так что если надо проверять сразу несколько стран, то это будет геморойно, ведь bigint ограничен 8 байтами.
...
Рейтинг: 0 / 0
04.11.2010, 15:37
    #36938094
UstasZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
В MySQL аналогичное решение с SUBSTRING, только немного проще
...
Рейтинг: 0 / 0
07.07.2011, 17:38
    #37341834
musemetal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
UstasZ,


Я пытаюсь выяснить, как экстраполировать характеристики изделий,
(Например, высота или толщина = 40 = 11 = число отверстий 4 ... и т.д.), но я не считаю эти описания.
Может кто поможет мне?
там был бы признателен
...
Рейтинг: 0 / 0
31.01.2012, 09:58
    #37639448
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Привет всем!

У меня вопрос по Текдоку.

Нужно вытащит все артикулы из базы по заданному Бренду->ветке, например FRAM->Фильтры

FRAM-> 10105

Какие таблицы связывать ПОДСКАЖИТЕ!
...
Рейтинг: 0 / 0
31.01.2012, 10:12
    #37639472
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
У меня примерно такой вариант... в какую сторону копать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SET @STR_ID = 10360; // Фильтры->Воздушный фильтр
SET @BRAND='WIX FILTERS'; // Название бренда

EXPLAIN SELECT
     count(ART_ID)
FROM
    LINK_GA_STR
INNER JOIN LINK_LA_TYP ON  LAT_GA_ID = LGS_GA_ID
INNER JOIN LINK_ART ON LA_ID = LAT_LA_ID
INNER JOIN ARTICLES ON LA_ART_ID=ART_ID
INNER JOIN DESIGNATIONS ON ARTICLES.ART_COMPLETE_DES_ID=DESIGNATIONS.DES_ID
INNER JOIN DES_TEXTS ON DESIGNATIONS.DES_TEX_ID=DES_TEXTS.TEX_ID 
INNER JOIN ART_LOOKUP ON ARL_ART_ID=ART_ID
INNER JOIN BRANDS ON ARL_BRA_ID=BRA_ID
INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID
WHERE
    LGS_STR_ID = @STR_ID AND 
    (ART_LOOKUP.ARL_KIND IN (3, 4) AND 
     BRANDS.BRA_BRAND = @BRAND OR
     SUPPLIERS.SUP_BRAND = @BRAND)
GROUP BY ART_ID    
ORDER BY
    ART_ARTICLE_NR; 



Халявы не жду, сам сделаю, направьте по структуре, пожалуйста.
...
Рейтинг: 0 / 0
31.01.2012, 11:15
    #37639575
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
The Dream,

SUPPLIERS.SUP_BRAND
...
Рейтинг: 0 / 0
31.01.2012, 13:34
    #37639891
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Мих,

У меня в SUPPLIERS.SUP_BRAND
нет к примеру Continental (шины) и Kayaba (Амортизаторы)
...
Рейтинг: 0 / 0
31.01.2012, 16:07
    #37640260
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
The Dream,

А у вас полная БД?
...
Рейтинг: 0 / 0
31.01.2012, 21:19
    #37640767
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Мих,

Вообще мне ее вытащили отсюда
http://www.plati.ru/asp/pay.asp?idd=882286

Но и в самом приложении Текдока в таблице TOF_SUPPLIERS нет к примеру Continental (шины) и Kayaba (Амортизаторы).
Но есть в Brands.
...
Рейтинг: 0 / 0
01.02.2012, 11:47
    #37641495
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Привет еще раз.

У меня получилось нечто вроде этого:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SET @BRAND = 'KYB'; /* Kayaba */
SET @STR_ID = 10221; /* Амортизаторы */
SELECT
	 ART_ID,
	 LA_ART_ID,
         ART_ARTICLE_NR,
         SUP_BRAND
FROM
	LINK_GA_STR
JOIN LINK_LA_TYP ON LAT_GA_ID = LGS_GA_ID
JOIN LINK_ART ON LA_ID = LAT_LA_ID
JOIN ARTICLES ON ART_ID=LA_ART_ID  
JOIN SUPPLIERS ON ART_SUP_ID=SUP_ID
WHERE
	LGS_STR_ID = @STR_ID AND SUP_BRAND=@BRAND
GROUP BY 
	ART_ID	
ORDER BY
	LA_ART_ID
LIMIT
	1000
;



Нужно вытянуть все уникальные артикулы из ветки Амортизаторы для производителя KYB (Kayaba)

Есть какие нибудь советы по структуре как вытянуть все уникальные артикулы для какого либо производителя по той или иной ветке?
Н/р:
Амортизаторы:
- Kayaba (100 штук)
- Koni (122 штук)
Шины
- Continental (200 штук)

и.т.д.

В общем суть такова, что нужно предоставить заказчику Excel файл со списками артикулов, например файл "Kayaba.xls" внутри списки артикулов...
...
Рейтинг: 0 / 0
01.02.2012, 12:35
    #37641621
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
The Dream,

Continental (шины) и Kayaba (Амортизаторы)
Это уже скросированные бренды
...
Рейтинг: 0 / 0
01.02.2012, 16:06
    #37642159
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Мих,

А как мне тогда поступить? Я пока не очень понимаю разницу между Brands и Suppliers

Нужные мне фирмы есть в Brands, получается нужно стягивать с ART_LOOKUP где ART_BRA_ID = номеру Kayaba?
...
Рейтинг: 0 / 0
01.02.2012, 16:17
    #37642185
The Dream
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Коротко говоря, мне нужно найти актикулы всех амортизаторов от Kayaba
...
Рейтинг: 0 / 0
01.02.2012, 17:03
    #37642298
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
The DreamМих,
получается нужно стягивать с ART_LOOKUP где ART_BRA_ID = номеру Kayaba?
Да
...
Рейтинг: 0 / 0
07.12.2012, 19:39
    #38070424
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Привет всем
Все та же тема _ctm,
разработчик выделаяет
тому полю 1024 бит, т.е. по идее его можна загнать в 64 байт в BINARY, и тогда как работать?
или в целое?
...
Рейтинг: 0 / 0
09.12.2012, 15:34
    #38071543
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Итого поеб...сь 2-суток, есть решение по хранению _ctm полей TecDoc в MySQL в компактном виде

Принимая во внимание:
* максимальный размер битового поля в MySQL - 64 бит,
* под поле _ctm TecDoc выделил 1024 бит (реально информация длиной до количества стран + универсальные маски, 4 кв 2012 = 252 бит)
* как писалось раньше varchar(252) - дофига может жрать места (на минутку 252 байта + длина)

рассматривалось решение хранить _ctm в TINYBLOB типе, потому что размер этого поля зависит от реальной длины хранимой информации + 1 байт(длина). Т.е. надеемся что 252 влезут в 31 байт + байт на длину.
MySQL
Код: plaintext
TINYBLOB, TINYTEXT	L + 1 bytes, where L < 2^8


Итого экспортировать нужно тупо в бинарник.

Как же сделать
Код: sql
1.
*_CTM SUBRANGE(249 CAST INTEGER)=1



Ну вот так :)
Код: sql
1.
2.
3.
4.
5.
SET @pos = 249;               # позиция страны в десятичной системе
SELECT * 
  FROM TOF_ACCESSORY_LISTS
  WHERE 
    SUBSTR(CONV(HEX(SUBSTR(acl_ctm, FLOOR((@pos-1)/8)+1, 1)), 16, 2), (@pos-1)%8+1, 1) = '1';


А это, как я до этого допер
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT @v:=acl_ctm FROM TOF_ACCESSORY_LISTS LIMIT 1;
SET @pos = 249;               # позиция маски в десятичной системе

# @pos_8 - номер байта (начиная с 1), @pos_8_sub - номер бита (начиная с 1) позиции маски @pos
#SET @pos_8 = FLOOR(@pos/8); SET @pos_8_sub = @pos%8;       #КОСЯК, 1-й байт не будет вычитан
#SET @pos_8 = FLOOR(@pos/8)+1; SET @pos_8_sub = @pos%8;     #КОСЯК, 8-бит попал во 2 байт, а нужно в 1
#SET @pos_8 = FLOOR((@pos-1)/8)+1; SET @pos_8_sub = @pos%8; #КОСЯК, 8-бит вообще пропал 
SET @pos_8 = FLOOR((@pos-1)/8)+1; SET @pos_8_sub = (@pos-1)%8+1;  #гдето так

SELECT @pos, @pos_8, @pos_8_sub, @v_p_8 := SUBSTR(@v, @pos_8, 1); # что же получилось
SELECT HEX(@v_p_8), @v_p_8_sub := CONV(HEX(@v_p_8), 16, 2);       # прегоняем в 8-битовую маску
SELECT SUBSTR(@v_p_8_sub, @pos_8_sub, 1);                         # вычитываем наш бит
...
Рейтинг: 0 / 0
12.12.2012, 17:59
    #38076304
Мих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TECDOC рвет мозги - помогите !!!!
Экспорт полного TecDoc 4.2012 в MySQL с полями _CTM типа TINYBLOB и со всеми индексами как в TecDoc - занял размер 23 Gb
...
Рейтинг: 0 / 0
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / TECDOC рвет мозги - помогите !!!! / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]