powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / TECDOC рвет мозги - помогите !!!!
21 сообщений из 21, страница 1 из 1
TECDOC рвет мозги - помогите !!!!
    #35971814
coolged
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток уважаемые коллеги!!!

В топике с /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
TECDOC рвет мозги - помогите !!!!
    #35975445
elisay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
coolged,

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

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

а с этими полями, не получается?
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #36391061
Perfect0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
TECDOC рвет мозги - помогите !!!!
    #36938094
UstasZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MySQL аналогичное решение с SUBSTRING, только немного проще
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #37341834
musemetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UstasZ,


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

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

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

FRAM-> 10105

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

Код: 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
TECDOC рвет мозги - помогите !!!!
    #37639575
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The Dream,

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

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

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

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

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

У меня получилось нечто вроде этого:
Код: 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
TECDOC рвет мозги - помогите !!!!
    #37641621
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The Dream,

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

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

Нужные мне фирмы есть в Brands, получается нужно стягивать с ART_LOOKUP где ART_BRA_ID = номеру Kayaba?
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #37642185
The Dream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коротко говоря, мне нужно найти актикулы всех амортизаторов от Kayaba
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #37642298
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The DreamМих,
получается нужно стягивать с ART_LOOKUP где ART_BRA_ID = номеру Kayaba?
Да
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #38070424
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем
Все та же тема _ctm,
разработчик выделаяет
тому полю 1024 бит, т.е. по идее его можна загнать в 64 байт в BINARY, и тогда как работать?
или в целое?
...
Рейтинг: 0 / 0
TECDOC рвет мозги - помогите !!!!
    #38071543
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итого поеб...сь 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
TECDOC рвет мозги - помогите !!!!
    #38076304
Фотография Мих
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экспорт полного TecDoc 4.2012 в MySQL с полями _CTM типа TINYBLOB и со всеми индексами как в TecDoc - занял размер 23 Gb
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / TECDOC рвет мозги - помогите !!!!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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