|
|
|
Кто знает назначение первых 6 байт поля _1scrdoc.parentval ? Ø |
☑ | ||
|---|---|---|---|---|
|
0
Анатолий
23.08.00
✎
17:27
|
Есть кто крутой?
Кто знает назначение первых 6 байт (слева) поля _1scrdoc.parentval ? Нужно позарез! Без них смысла нет! |
|||
|
1
Анатолий
24.08.00
✎
10:07
|
То есть никто ничего не знает?
|
|||
|
2
MishGan
24.08.00
✎
16:40
|
Если еще интересно, отпиши мылом. Щас точно не помню, но недавно кажется с этим разбирался.
|
|||
|
3
Анатолий
25.08.00
✎
10:34
|
MishGan! Отзовись! я уже 2 письма написал! ПОЗАРЕЗ НУЖНО!!!!!
|
|||
|
4
MishGan
25.08.00
✎
13:43
|
Значить, так... Начнем с начала...
В 1cv7 существует понятие подчиненного документа. И для того, чтобы документ являлся подчиненным нужно, чтобы он содержал реквизит типа "Документ", со ссылкой на родителя. Таблица 1scrdoc нужна как раз для установления этих связей. А реквизит parentval содержит ссылку на родителя. Далее, следует вспомнить, что любой объект или реквизит метаданных имеет, так называемый, систамный идентификатор метаданных (будем называть его SID). Этот SID записывается в 36-ричной системе счисления и посмотреть его можно только на старом релизе (77004), запустив с параметром /SYSTRACEMODE. Тогда в конфигураторе напротив объектов метаданных будут видны их системные идентификаторы. Теперь рассмотрим простейший случай для подчинных документов, если в конфигурации отсутсвуют реквизиты отбора в журналах. Тогда значение parentval будет таким: O1__[SID родительского документа]__[ID документа], где SID смотрим в конфигураторе при SYSTRACEMODE, а ID документа смотрим по сообветсвующей таблице. Вместо знаков подчеркивания стоят пробелы. Если сущесвуют значения отбора, то эта таблица пополняется дополнительными записями. Т.е. один документ модет в этой таблице быть отражен несколькими строчками, смотря сколько у этого документа заполненных граф отбора. Например, если графа отбора типа справочник, то значение parentval будет таким: B1__[SID справочника]__[ID элемента справочника]. И т.д. Вот два реальных примера: O1 D 7 [без отбора, род. документ имеет SID=D, ID документа =7] B1 R 1 [графа отбора имеет тип справочсник, SID этого справочника=R, ID элемента = 1] Отмечу, что я это все проверял на DBF, Кажется на SQL либо тоже самое, либо что-то очень похожее. В любом случае можно догадаться по аналогии. Успехов. |
|||
|
5
Анатолий
25.08.00
✎
15:27
|
СПИСИБО!!!!! Мы сильно продвинулись... Но у меня есть только 7.5.17 и 7.7.09!!!!! Как ВЫЧИСЛИТЬ SID документа в коде, зная таблицу?????
|
|||
|
6
Alex
25.08.00
✎
16:02
|
То MishGan. Снимаю шляпу. Крут.
|
|||
|
7
Анатолий
25.08.00
✎
16:52
|
В 10-й системе SID = 1118
В 36-ричной системе = 'V2' SQL Server выдает по факту 0x4855. НО КАК ОН ЭТО ПОЛУЧИЛ? УЖЕ ВСЕ ВАРИАНТЫ convert перепробовал!!!!! Шо же енто такое !!!!! |
|||
|
8
MishGan
26.08.00
✎
15:36
|
>> СПИСИБО!!!!! Мы сильно продвинулись... Но у меня есть только 7.5.17 и
>> 7.7.09!!!!! Как ВЫЧИСЛИТЬ SID документа в коде, зная таблицу????? Поставь гденибудь рядом (на другом компе, под другими виндами или т.п.) старый релиз и смотри в нем все SID. Как SID метаданных получить средствами 1С я не знаю. Можно создать справочник "Метаданные" и в него руками внести все SID. Что касается msg7 я не совсем понял в чем проблема. Расскажи подробнее.. Успехов. |
|||
|
9
Анатолий
27.08.00
✎
11:32
|
В msg7 я привел реальный пример: 1. SID на прямую связан с номером таблицы документа, и, вообще, на номере таблицы в 1С завязано все, что только можно!. 2. Есть документ в таблице DH1118, в конфигураторе 4-го релиза SID показан так: (1118/V2). Вычислить строку V2, имея число 1118 я могу. Строка 'V2' в 16-м виде = 0x5632. А в поле _1ScrDoc.parentval для данного документа (без отбора ) 5-6 байты = 0x4855.
Возможно 1C применил к числу 0x5632 операцию convert (в SQL) или аналогичную. Но какую, я пока не нашел! Может Ты в SQL круто рубишь, может знаешь, какой convert применили?... 3. Вариант с переписыванием фактических значений уже заколебал!!!!! Итак, все перечисления переписал. Нашел, как периодические реквизиты доставать, еще бы до костанты достать?! Но я уже вижу, надо MD-ник разобрать надо, а там во всех контейнерах все зашифровано, кроме ресурсов диалогов? Не знаешь, как из MD добыть к примеру ID констант (ПРОГРАММНО!)? Или, может, у тебя ActiveX есть, чтоб с такими файлами работать? Или ссылку какую знаешь? |
|||
|
10
MishGan
28.08.00
✎
16:16
|
Анатолий. В принципе программно все SID получить реально. По крайней мере попробовать можно. Для начала не помешало бы средство, показывающее списки функций произвольной DLL _с_параметрами_. Если знаешь как это сделать, отпиши мылом или сюда.
Что касается msg7, то посмотрю вечерком сегодня и завтра отпишу. |
|||
|
11
Анатолий
29.08.00
✎
10:14
|
Не нашел! А где ты такое ПО видел?
|
|||
|
12
MishGan
29.08.00
✎
11:50
|
Не видел, а слышал что-то. А может IDA можно?
По msg7 проверял вчера - вроде все д.б. нормально. Посмотри: 1. Первые два байта д.б. O1; 2. 5-6 байты должны указывать на SID родительского документа, а не подчиненного. Кстати, а что SID как-то связан с именем таблицы (dh1118-v2)? Честно говоря не заметил. Тогда можно все SID по идее получить программно из dds. 3. А как удалось получить шестнадцатеричное значение 0x4855? У меня select * from _1scrdoc возвращает строку в поле parentval, и там все в 36-ричной. |
|||
|
13
Анатолий
29.08.00
✎
16:08
|
3. Весьма познавательная для меня информация, но у меня SQL возвращает все 16-й форме! Он и возвращает 0x4855 в 5-м и 6-м байтах!!!!!
2. 1118/36 = 31 (2) - правая цифра 2 (символ с кодом 30h + 2 = 32h = 50) 10 - A - код 65 11 - B - код 66 ....... 31 - V - код 86 Получаем V2 - 36-ое символьное представление 10-го числа 1118, магичестким образом совпадающего с номером таблицы. Но это все фигня! Я SID вычислил из 4 параметра внутреннего представления объекта. НО ГРЕБАНЫЙ 1С(SQL) ЗАПИСЫВАЕТ ЕГО XЧЕРТ ЗНАЕТ В КАКОМ ВИДЕ!!!!! Это ж чем надо было думать!!!!!! чтоб 36 СС приплести!!!!!!!!!!!!! Мне 2-XXXXXXXXXXXXXXXXXX байтов не хватает для формирования parentval ЧТО ДЕЛАТЬ!!!!!!!!???????????????????????????????// |
|||
|
14
MishGan
29.08.00
✎
18:58
|
Хрен зн.... интересно. Попробуй сделать select * from _1scrdoc и засунуть результат выполнения в txt и отмыль мне. Гляну...
|
|||
|
15
Анатолий
30.08.00
✎
09:00
|
Сечас вышлю пример с комментариями!
|
|||
|
16
Анатолий
30.08.00
✎
17:39
|
2MishGan: Ты куда пропал? Смотрел почту?
|
|||
|
17
MishGan
31.08.00
✎
11:54
|
Смотрел... Похоже тухляк. Поробуй конвертнуть базу в DBF и проделать тоже самое на ней. Если вместо 0x4855 будет значение V2 значит действительно 1С применяет какой-то хитрый conver, либо мы не туда смотрим.. Если же на том месте будет HU значит .... тоже в общем че то не так.
|
|||
|
18
Анатолий
01.09.00
✎
12:14
|
Я понял, в чем фишка! У тебя 7.7, а там ID имеет тип char(9), а у мне надо для 7.5, а в ней ID типа binary(8), и ID пакуется (в 7.7 - 4 значащих байта, а в 7.5 - 3!!!!! для того же объекта!!!!!). Немудренно, что 1С отказался от этого бреда в 7.7. Вот только беда, мне надо, чтобы ф-я работала и в 7.5, и в 7.7. Ща будем выяснять этот вопрос!
|
|||
|
19
Sergo
01.09.00
✎
12:20
|
В 7.7 ID в 36 шестеричной сисеме исчисления, а в 7.5 вообще больше 72!!!
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |