v7: Подскажите про таблицу констант? #666256


#0 by Zhuravlik
Добрый день. Понадобилось выбрать данные из _1S.CONST, вот читаю про ее структуру, не могу понять: OBJID - ID объекта периодического реквизита (справочника) или периодической константы, для непериодических констант это поле равно ‘     0   ’. Тип - Строка. Т.е. поле "OBJID" - это элемент, которому принадлежит установленное значение периодического реквизита? ------- ID - ID (идентификатор) константы или периодического реквизита справочника. Тип представлен в виде десятичного числа (_StrToID). Тип - Число(int). Это вид объекта? Что значит "идентификатор периодического реквизита справочника", если это ссылка на значение пер. реквизита, то зачем это нужно, он ведь уже сохранен в VALUE (Значение константы или периодического реквизита. Для неопределенных типов по умолчанию заполняется «U». Тип- Строка.)?
#1 by Zhuravlik
ап.. так и не разберусь... что такое OBJID и что такое ID, подскажите кто-нибудь...
#2 by Zhuravlik
+ Вернее, что такое OBJID уже понял, ID - не пойму.
#3 by toypaul
это ИД периодического реквизита
#4 by toypaul
#5 by Zhuravlik
Спасибо огромное)
#6 by toypaul
ID нужен чтобы отличить записи по разным периодическим полям в справочнике.
#7 by Zhuravlik
Т.е. это его "Вид"? Я так подумал сначала (делал запрос выводил все поля, там строки длиной 4 символа), но отбор с фильтром по виду этого поля вернул пустую таблицу, а значения точно есть.
#8 by Zhuravlik
Подскажите пожалуйста, так и не разобрался что такое ID. В написано "идентификатор периодического реквизита (идентификатор метаданных)", но я не понимаю как по нему условие делать в запросе. Есть элемент справочника "Тест", у него периодический реквизит "пРеквизит". Я так понимаю что ID - это ссылка на "пРеквизит". Но как по нему поставить условие? Вот мне надо выбрать из таблицы констант значения для определенного реквизита. Я пишу: SELECT Константы.value as [Значение] FROM [_1S.CONST] as Константы WHERE Константы.OBJID = :Тест AND Условие "Константы.ID = 'пРеквизит'" - неправильное, просто у меня задача сделать фильтр по нему, а как его в значение фильтра передать - не пойму. Там строка 4 символа...
#9 by Mikeware
ты идентификатор от названия - отличаешь?
#10 by hyperfocusin
неужели кто-то ещё 7ку юзает
#11 by Mikeware
+ и там НЕ "строка 4 символа."
#12 by Mikeware
стабильная система, устойчивая.
#13 by viktor_vv
Это внутренний идентификатор реквизита в конфе, не значение которое там хранится. В 1С++ в metadatawork можно получить его значение ИДРеквизитаСправочника(<?>) Синтаксис: ИДРеквизитаСправочника(<НомИмяСпр>,<НомИмяРекв>) Назначение: возвращает внутренний номер реквизита справочника по его идентификатору или порядковому номеру. Возвращаемое значение: (Число)  внутренний ид реквизита справочника. Параметры: <НомИмяСпр> - (строка/число)  идентификатор справочника или порядковый номер определяется от 1 до Метаданные.Справочник; <НомИмяРекв> - (строка/число)  идентификатор реквизита или порядковый номер определяется от 1 до Метаданные.Справочник(х).Реквизит;
#14 by viktor_vv
А чем вызвано такое удивление ? Или ЧСВ охота поднять, какой ты прогрессивный, и юзаешь восьмерку :).
#15 by Zhuravlik
Отличаю, я заведомо неправильно это написал, чтобы понятно было что я хочу. В запросе с условием на элемент справочника мне возвращается в поле ИД именно строка в 4 символа. Типа такого: " 4JR" А в самом запросе как-то можно на него указать? Наподобие :ВидСправочника.Тест ?
#16 by Zhuravlik
Спасибо)
#17 by Zhuravlik
Это не то...
#18 by Zhuravlik
Попробовал, значения которое мне возвращает этот метод нет ни в одной ячейке id, в результате запроса с фильтром по элементу...
#19 by Zhuravlik
ркОдометр - число, более 4 символов. А в тз в поле ID именно 4-символьные строки, и там понятное дело такой фильтр не проходит. Искал примеры на 1С++, что-то не нашел ничего...
#20 by Mikeware
это как раз то. Ид вида метаданных. он же - номер таблицы хранения.
#21 by Zhuravlik
Я не понимаю( Почему тогда я в поле ИД вижу строку, а этот метод мне возвращает цифры?
#22 by viktor_vv
Че-то я не пойму, все нормально работает. В колонке    |    Константы.ID as ИДРек  показывает число, котрое по сообщить выходит.
#23 by Zhuravlik
, Вот чего нашел: мд.ИДОбъекта(метаданные.Справочник("Цены").Реквизит("Цена"))
#24 by Zhuravlik
Это мои значения поля ID: 4JR 4JS 4K3 4K4 4KN 4KL HJ2 Q18 OF9 T4P XD9 Q18 4JR 4JS 4K0 4K3 4K4 4KN 4KL HJ2
#25 by Zhuravlik
+ Это ведь совсем не цифры?
#26 by viktor_vv
А база у тебя скульная, хотя на это не должно влиять по идее.
#27 by Zhuravlik
dbf, запросы на sqlite
#28 by Zhuravlik
и так не выходит
#29 by viktor_vv
Да, в ДБФ походу это 16-ричное представление, или 36.
#30 by Zhuravlik
Пробовал делать условие на Str2Id(Константа.ID) - тоже не проходит. Сейчас значит буду рыть как преобразовать число в 16-ричное и подставлю в запрос.
#31 by Mikeware
с чего вдруг 16?
#32 by Zhuravlik
С того, что у меня условие на Str2Id(Константа.ID) не прошло. Значит это 16...
#33 by Mikeware
и "J" "R" - это,конечно, цифры 16-ричной системы....
#34 by Ёпрст
ну и каша у тебя в бошке.
#35 by Mikeware
посмотрел, лействительн, в ДБФ - это строк. неисповедимы пути нуралиева...
#36 by Mikeware
ну, не самая уж страшная... мноние намного хуже...
#37 by ЧеловекДуши
Нормальный цифры в 36-ричном виде :)
#38 by viktor_vv
Да так предположил, правда оно там и не 16 и не 36. Упс, точно :). Пытаюсь понять как же его там получить, но не совпадает.
#39 by Zhuravlik
Знаю. Расхлебываю потихоньку) А почему тогда мне Str2Id(Константа.ID) возвращает не то? Синтаксис: str2id(СтрИД) Параметры: СтрИД: Строка представляющая число в 36ричной записи Возвращает: Целое число. Описание: Преобразует строку - запись числа в 36ричном формате в целое число.
#41 by Mikeware
странно. скорми строку _StrToId
#42 by Zhuravlik
no such function: _StrToId
#43 by ADirks
ID: Прав("    "+МДВ.ЧислоВСтроку(МДВ.ИДОбъекта(Метаданные.Справочник("Сотрудники").Реквизит("Подразделение")), 36), 4)
#44 by Ёпрст
вот только автору, всё это не нужно в запросе, там и так всё есть
#45 by Ёпрст
:)
#46 by Ёпрст
просто это он еще не знает
#47 by ADirks
не, ну ему ж для начала понять надо, чё как. А так наглядней
#48 by viktor_vv
Точно.
#49 by Mikeware
_StrToId("4JR") = 5895 чянтд?
#50 by viktor_vv
Лучше таки без Trim .
#51 by Zhuravlik
Получилось!!
#52 by Zhuravlik
Не знаю, у меня ругалось на SELECT _StrToId(Константы.ID) ...
#53 by Zhuravlik
ой...
#54 by Ёпрст
да уж..
#55 by Zhuravlik
Спасибо всем за помощь)
#56 by viktor_vv
Сейчас тебе выдаст похвалу :).
#57 by Zhuravlik
Скорее розгами)
#58 by viktor_vv
От жеж оказывается че оно Михалыч :) ${ИсторияРеквизита|PropertyHistory}.<Справочник>. <ПериодическийРеквизит> = ХХХХ
#59 by Ёпрст
select * from 1sconst as Периодика where
#60 by Ёпрст
Этого нет в 1sqlite
#61 by Zhuravlik
Спасибо! Вся проблема в невнимательном прочтении доки... ИсторияРеквизита / PropertyHistory Подстановка идентификатора указанного периодического реквизита справочника: :ИсторияРеквизита|PropertyHistory.ИмяСправочника.ИмяРеквизита[~] При нулевом модификаторе подставляется строка длиной 4 символа - идентификатор периодического реквизита в 36ричной записи При модификаторе 1 подставляется
#62 by Ёпрст
блин, про ПоследнееЗначение померещилось
#63 by viktor_vv
Да, уже попробовал.
#64 by viktor_vv
Тьфу ты, а я с "$" пробовал, а надо с ":" :).
#65 by Zhuravlik
Мой конечный запрос:
#66 by Ёпрст
это без разницы..
#67 by Ёпрст
+66 для 1sqlite
#68 by viktor_vv
Так че-то не прокатило с "$"    ТекстЗапроса = "    |Select no such column: $ИсторияРеквизита.Поставщики.ДоГраницы тоже самое с ":" нормально отрабатывает.
#69 by Ёпрст
1sqlite какой версии хоть ?
#70 by Zhuravlik
Помогите еще?.. Теперь не могу протипизировать значение (VALUE). Тип реквизита в базе задан как "Справочник.Сотрудники". Возвращается из таблицы констант строка 23 символа. Я понимаю, что надо лефт-джойн, и доставать оттуда либо 13-сим, либо 9-сим, а какую таблицу подключать? Вроде это в SPххх хранится, а как к ней обратиться?
#71 by Zhuravlik
+ Сама строка - пробел + 2сим + Пробелы до конца
#72 by Zhuravlik
+ Типизация :Неопределенный ничего не дала, а получить оттуда substr(3, 12) - одни пробелы будут...
#73 by Mikeware
протипизируцй $Справочник связывать надо с таблицей SP, а дальге цифры полученные переводом из 36 вв 10 первызх 4 смимворов из 13? f
#74 by Zhuravlik
Я делал $Справочник, пустота, значение есть точно. Про SP - не найду как ее подключить?
#75 by Ёпрст
substr(Периодика.value,1,9) [Вася :Справочник.НужныйВид]
#76 by Zhuravlik
Получилось) Спасибо)
#77 by Zhuravlik
Помогите мне разобраться с "кашей в голове"? - Вот описание:    9 символов – определен тип и вид объекта (например «Справочник.Клиенты»), в ID включается только порядковый номер в 36-ричной системе исчисления. Под порядковый номер отводятся первые 6 символов, последние 3 символа зарезервированы под код базы УРБД.    13 символов – определен только тип объекта, вид не задан (например «Справочник»). Первые 4 символа – идентификатор вида (как он задан в метаданных), последующие 9 символов – по аналогии с предыдущим пунктом.    23 символа – не определен тип и вид объекта. В таком случае в первых 2 символах хранится тип объекта (будет рассмотрен ниже), следующие 13 символов формируются аналогично предыдущему пункту. - Почему сказано, что 9 - определен тип и вид, 13 - определен вид, 23 - не определен тип и вид? Т.е. почему размер поля больше, а инфы в нем хранится меньше?
#78 by Mikeware
с точностю до наеборот: в видизированном и типизированном занчении (чар9) нам достаточно зранить только ид в типизированном -  нам достаточно хранить вид и ид (чар4+чар9=чар13) в неопределенном мы вынужденв хранить и тип, и вид, и ид - получается, что онр чар23 - тип+вид+ид
#79 by viktor_vv
Может из-за версии, на которой пробовал 1.0.2.3 .
#80 by Zhuravlik
Т.е. 2 символа в начале - это закодированная строка типа "Справочник"? И почему, если в 23 символах хранятся и тип и вид и ид, то я в константах на выходе получал 2 символа + Пробелы?
#81 by Zhuravlik
+ substr(Периодика.value,1,9) - значит именно в константах первые 9 символов это ИД? Или хранится как ИД+Вид+Тип?
#82 by Ёпрст
:))))))))) в value просто хранится значение реквизита, для строки - строка, для числа - число, для справочника - id (9 символов) для документа - iddoc, для справочника неопределенного вида - 13 , для неопределенного типа 23.. всё собственно.
#83 by viktor_vv
Ну это именно для поля Value в константах. Если у тебя реквизит определнного вида, то так и пишется. 9 символов – определен тип и вид объекта (например «Справочник.Клиенты») + "для периодического реквизита справочника", то в value пишется только ID с сначала.
#84 by Ёпрст
Ты бы хоть описание от 1sconst прочитал бы что..ли
#85 by viktor_vv
Два символа, это конкретный ID конкретного элемента справочника, максимум может быть девять символов, это если с РИБ.
#86 by viktor_vv
Можешь еще дернуть какую-нибудь запись из 1Scrdoc и посмотреть в поле Paretntval, как представляется реквизит неопределнного вида. Там все немного по другому.
#87 by Mikeware
+ но если строка длиннее 23, то хранится только 23 символа из строки... или 22.
#88 by Zhuravlik
Я его читал и перечитывал неоднократно в самых разных статьях. Если бы хоть в одной из них было написано как у вас в я бы не задавал этих вопросов...
#89 by Ёпрст
не, тут ты путаешь с доком, в константах, для скуля - это строка 255, для дбф - 23 (не помню только, разбивается она на блоки как в блобе или нет ?)
#90 by Zhuravlik
А остальное в BLOB? Или в PARENTVAL?
#91 by Mikeware
было написано. В многих. в доке к 1с++ написано, в описании структуры на метапрог или скрипткодинг - тоже...
#92 by Mikeware
остального просто нет
#93 by Ёпрст
в блобе её не будет по-определению. Нет периодических строк неогр. длины
#94 by Zhuravlik
Ясно) Только что слету написал три разных запроса к таблицам констант с разными условиями, без вашей помощи я бы так быстро всего этого не уразумел. Спасибо огромное за науку))
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С