Вход | Регистрация

Форумы на Кубань.Ру


1С:Предприятие ::

Метки: 

Кто знает назначение первых 6 байт поля _1scrdoc.parentval ?

Ø
Я
   Анатолий
23.08.00 - 17:27
Есть кто крутой?
Кто знает назначение первых 6 байт (слева) поля _1scrdoc.parentval ?
Нужно позарез! Без них смысла нет!
 
 
   Анатолий
1 - 24.08.00 - 10:07
То есть никто ничего не знает?
   MishGan
2 - 24.08.00 - 16:40
Если еще интересно, отпиши мылом. Щас точно не помню, но недавно кажется с этим разбирался.
   Анатолий
3 - 25.08.00 - 10:34
MishGan! Отзовись! я уже 2 письма написал! ПОЗАРЕЗ НУЖНО!!!!!
   MishGan
4 - 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 документа в коде, зная таблицу?????
   Alex
6 - 25.08.00 - 16:02
То MishGan. Снимаю шляпу. Крут.
   Анатолий
7 - 25.08.00 - 16:52
В 10-й системе SID = 1118
В 36-ричной системе = 'V2'
SQL Server выдает по факту 0x4855. НО КАК ОН ЭТО ПОЛУЧИЛ? УЖЕ ВСЕ ВАРИАНТЫ convert перепробовал!!!!! Шо же енто такое !!!!!
   MishGan
8 - 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 есть, чтоб с такими файлами работать? Или ссылку какую знаешь?
   MishGan
10 - 28.08.00 - 16:16
Анатолий. В принципе программно все SID получить реально. По крайней мере попробовать можно. Для начала не помешало бы средство, показывающее списки функций произвольной DLL _с_параметрами_. Если знаешь как это сделать, отпиши мылом или сюда.
Что касается msg7, то посмотрю вечерком сегодня и завтра отпишу.
 
  Рекламное место пустует
   Анатолий
11 - 29.08.00 - 10:14
Не нашел! А где ты такое ПО видел?
   MishGan
12 - 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
ЧТО ДЕЛАТЬ!!!!!!!!???????????????????????????????//
   MishGan
14 - 29.08.00 - 18:58
Хрен зн.... интересно. Попробуй сделать select * from _1scrdoc и засунуть результат выполнения в txt и отмыль мне. Гляну...
   Анатолий
15 - 30.08.00 - 09:00
Сечас вышлю пример с комментариями!
   Анатолий
16 - 30.08.00 - 17:39
2MishGan: Ты куда пропал? Смотрел почту?
   MishGan
17 - 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. Ща будем выяснять этот вопрос!
   Sergo
19 - 01.09.00 - 12:20
В 7.7 ID в 36 шестеричной сисеме исчисления, а в 7.5 вообще больше 72!!!



Список тем форума

Форум Территория 1С

Рекламное место пустует  
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует