![]() |
|
v7: ПолучитьИД(Объект) | ☑ | ||
---|---|---|---|---|
0
burrya
06.05.13
✎
19:14
|
Есть ли в 1С универсальная функция которая может получить ИД существующего экземпляра объекта в не зависимости от типа данных, т.е. чтоб параметром мог быть спр, док, перечисление
|
|||
1
DenLaDen
06.05.13
✎
19:26
|
(0) ЗначениеВСтрокуВнутр() ?
|
|||
2
Aleksey
06.05.13
✎
21:46
|
у перечисления нет ИД
|
|||
3
trad
06.05.13
✎
23:01
|
(2) еще как есть
|
|||
4
burrya
07.05.13
✎
00:14
|
ЗначениеВСтрокуВнутр возвращает уникальное представление, но не ID
|
|||
5
burrya
07.05.13
✎
00:15
|
или я что-нибудь не так понимаю
|
|||
6
Cthulhu
07.05.13
✎
01:09
|
(4): не столько уникальное, сколько внутреннее.
каковое внутреннее представление содержит внутренний 24-символьный ИД объекта в 10-ричном виде (который, в свою очередь, состоит из Ид типа объекта, Ид вида объекта, Ид экземпляра объекта и Ид базы создания объекта). |
|||
7
Cthulhu
07.05.13
✎
01:09
|
(6)+: "содержит в том числе".
|
|||
8
МихаилМ
07.05.13
✎
01:37
|
+(6)
23 символьный . тип неопределенный. |
|||
9
КонецЦикла
07.05.13
✎
01:41
|
ЗначениеВСтрокуБД / ValueToDBString
Синтаксис: ЗначениеВСтрокуБД(ОбъектХранимыйВБД) Параметры: ОбъектХранимыйВБД - тип: Перечисление, Справочник, Документ, Календарь, ВидРасчета, Счет, ВидСубконто, ПланСчетов. Объект для преобразования. Возвращает: тип: Строка. Результат преобразования. Описание: преобразует ссылочный объект в строку (внутренний идентификатор данных) [ID(6)][Sign(3)] = 9 символов. Ну и для "длинных" есть |
|||
10
Злопчинский
07.05.13
✎
02:06
|
(9) а занчение из строкиБД - есть?
|
|||
11
Cthulhu
07.05.13
✎
02:53
|
(4): 24-х, вообще-то (тип=1+вид=2+объект=10+иб=3). И далеко не всегда тип "U" (точнее - почти никогда, и приведение объекта к виду, когда он не неопределенный для объекта - не проблема).
(9): при желании можно и более причудливые функции нарисовать штатными средствами. или это у тебя откуда?.. |
|||
12
Cthulhu
07.05.13
✎
02:54
|
(11): тьху, вид=10
|
|||
13
ЧеловекДуши
07.05.13
✎
07:23
|
(0) Да есть...
//Получение ИД через 1С++ Мета = СоздатьОбъект("MetaDataWork"); СамИД = ""+СокрЛП(СтрЗаменить(Мета.ЗначениеВДлиннуюСтрокуБД(Объект)," ","%")); // Пробел заменяем на некий символ, что бы не пропало :) |
|||
14
Mikeware
07.05.13
✎
07:25
|
(10) есть
|
|||
15
Ковычки
07.05.13
✎
07:32
|
(13) нафига ?
Функция глПолучитьВидИД(Объект="") Экспорт // Функция получает ИД вида объекта // Объект - объект метаданных Перем Сп,Тип; Тип=ТипЗначения(Объект); Если Тип=2 Тогда Тмп=ПолучитьПустоеЗначение(Объект); ИначеЕсли Тип=12 Тогда Тмп=ПолучитьПустоеЗначение("Документ."+Объект.Вид()); ИначеЕсли Тип=11 Тогда Тмп=ПолучитьПустоеЗначение("Справочник."+Объект.Вид()); ИначеЕсли Тип=10 Тогда Тмп=ПолучитьПустоеЗначение("Перечисление."+Объект.Вид()); ИначеЕсли Тип=15 Тогда Тмп=ПолучитьПустоеЗначение("Счет."+Объект.Вид()); ИначеЕсли Тип=1 Тогда Возврат Объект; КонецЕсли; Сп=СоздатьОбъект("СписокЗначений"); Сп.ИзСтрокиСРазделителями(ЗначениеВСтрокуВнутр(Тмп)); Возврат Число(Сп.ПолучитьЗначение(4)); КонецФункции // глПлучитьВидИД(Объект) |
|||
16
Mikeware
07.05.13
✎
07:37
|
(15) а нафига, если двух предпоследних строк хватает?
|
|||
17
Ковычки
07.05.13
✎
07:44
|
(16) не помню, но раз делал, значит надо было зачем то )
|
|||
18
ЧеловекДуши
07.05.13
✎
07:48
|
(15) Каждому своё :)
Мне 1С++ более импонирует |
|||
19
Mikeware
07.05.13
✎
07:54
|
(18) тем более, если оно фактически делает то же самое. :-)
|
|||
20
burrya
08.05.13
✎
19:18
|
(13) СамИД = ""+СокрЛП(СтрЗаменить(MetaDataWork.ЗначениеВДлиннуюСтрокуБД(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало
{D:\1C\тест.ERT(7)}: Поле агрегатного объекта не обнаружено (ЗначениеВДлиннуюСтрокуБД) |
|||
21
КонецЦикла
08.05.13
✎
21:01
|
(20) Зачем самую длинную когда есть и char(9), см. (9)
(10) Есть конечно (11) Дока к 1С++ |
|||
22
Torquader
09.05.13
✎
00:03
|
Какие 23 символа ?
Тип объекта - 1 символ Вид объекта - 4 символа (36-ричная система) Ид объекта - 6 символов (36-ричная система) Код распределённой базы - 3 символа Итого 14 символов - просто, почему-то, в 1С решили, что это будет 23, так как там ещё хранится привязка типа и т.п. |
|||
23
МихаилМ
09.05.13
✎
00:56
|
(22)
в бд поле непределенного типа размером 23 символа |
|||
24
Torquader
09.05.13
✎
01:39
|
Во-первых, не 23, а 26, так как создаётся служебное поле в три символа - оно используется при хранении чисел.
Во-вторых, не все 23 символа используются при сохранении объектов. |
|||
25
burrya
09.05.13
✎
16:17
|
(21)СамИД = ""+СокрЛП(СтрЗаменить(MetaDataWork.ValueToDBString(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало
{D:\ТЕСТ.ERT(7)}: Поле агрегатного объекта не обнаружено (ValueToDBString) Почему то не находит такие методы у этого объекта.. |
|||
26
Ковычки
09.05.13
✎
17:01
|
(25) чем штатные методы не подходят ?
|
|||
27
Ковычки
09.05.13
✎
17:04
|
Самый простой способ
|
|||
28
Ковычки
09.05.13
✎
17:05
|
Самый быстрый из штатных
|
|||
29
Cthulhu
09.05.13
✎
17:52
|
(28): это только ид экземпляра данных. а если надо ещё иды типа и виида?
|
|||
30
burrya
09.05.13
✎
18:56
|
Мне нужен не тот ID, мне нужен ИД из таблицы справочника на СКЛ сервере :) Мне нужен тот ИД, генерится функцией НовыйИД()
|
|||
31
Cthulhu
09.05.13
✎
20:27
|
(30): а теперь по-русски.
|
|||
32
КонецЦикла
09.05.13
✎
21:28
|
(24) Напился уже? :)
(30) ИДИзТаблицыSQLНаСервереДляОпредеденногоВидаСправочника = Meta.ЗначениеВСтрокуБД(ТекЭлемент) Если Справочник неопределенного вида - прибавляется 4 символа для вида, используется другой метод и т.п. |
|||
33
Torquader
09.05.13
✎
23:38
|
(30) Других ИД в 1с 7.7 просто нет.
|
|||
34
ЧеловекДуши
10.05.13
✎
09:39
|
(20) Обнови 1С++ :)
|
|||
35
burrya
13.05.13
✎
17:18
|
У меня версия 2.5.0.5
А может бы ть такое что эта компонента конфликтует с какой-либо другой компонентой? |
|||
36
Ёпрст
гуру
13.05.13
✎
17:24
|
(35) 3.2.4.0 давно на дворе
|
|||
37
burrya
13.05.13
✎
17:31
|
ого, я на http://www.1cpp.ru нашел только 2.5.0.7
Можете сылку дать? |
|||
38
Ёпрст
гуру
13.05.13
✎
17:35
|
||||
39
burrya
13.05.13
✎
17:54
|
Обновил, но код:
MetaDataWork = СоздатьОбъект("MetaDataWork"); Сообщить(MetaDataWork.ИДОбъекта(Справочник)); Сообщить(MetaDataWork.ИДСправочника(Справочник)); Сообщить(ЗначениеВСтрокуВнутр(Справочник)); СамИД = ""+СокрЛП(СтрЗаменить(глПолучитьОбъектИД(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало Сообщить(СамИД); СамИД = ""+СокрЛП(СтрЗаменить(MetaDataWork.ЗначениеВСтрокуБД(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало Сообщить(СамИД); выдает ошибку: СамИД = ""+СокрЛП(СтрЗаменить(MetaDataWork.ЗначениеВСтрокуБД(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало {D:\1CBASES\PT\EXTFORMS\ИНИЦИАЛИЗАЦИЯРЕКВИЗИТОВОБЪЕКТОВ.ERT(23)}: Поле агрегатного объекта не обнаружено (ЗначениеВСтрокуБД) |
|||
40
ЧеловекДуши
14.05.13
✎
08:21
|
(39) Заметь разницу ...
ЗначениеВДлиннуюСтрокуБД и твоё :) ЗначениеВСтрокуБД |
|||
41
burrya
14.05.13
✎
14:34
|
ЗначениеВДлиннуюСтрокуБД выдает тоже самое,
функуция ЗначениеВСтрокуБД тоже есть у этого объекта, но она тоже выдает такую же ошибку. Короче обе не работают, другие функции работают например MetaDataWork.ИДОбъекта(Справочник). В чем может быть проблема? |
|||
42
Ёпрст
гуру
14.05.13
✎
14:37
|
(41) дык на вкладке о программе, какая версия вк светится ?
|
|||
43
burrya
14.05.13
✎
14:40
|
(42) на вкладке о программе у меня только Формекс светится, 1С++ вкладки нет
|
|||
44
trad
14.05.13
✎
14:44
|
или 1с++ не загружен или очень старый или MetaDataWork от rainbow
|
|||
45
burrya
14.05.13
✎
14:45
|
В отладчике MetaDataWork = Rainbow service OLE module
|
|||
46
Ёпрст
гуру
14.05.13
✎
14:46
|
(44) ага, с тобой на бентли не накопишь :)
|
|||
47
Ёпрст
гуру
14.05.13
✎
14:46
|
(43) ну вот и ответ
|
|||
48
burrya
14.05.13
✎
14:47
|
(47)я один пока ничего не понимаю
|
|||
49
ЧеловекДуши
14.05.13
✎
14:47
|
(43) Значит Старая, версия :)
|
|||
50
ЧеловекДуши
14.05.13
✎
14:47
|
(48) Да :)
|
|||
51
Ёпрст
гуру
14.05.13
✎
14:49
|
(48) ну дык 1сpp не загружена у тебя, только и всего лишь (или старая версия загружена, со встроеным формексом, или еще отдельно радуга загружена)
|
|||
52
burrya
14.05.13
✎
14:52
|
Прошу прощения есть вкладка 1С ++, но ошибка все равно выходит
СамИД = ""+СокрЛП(СтрЗаменить(MetaDataWork.ЗначениеВДлиннуюСтрокуБД(Справочник)," ","%")); // Пробел заменяем на некий символ, что бы не пропало {D:\ТЕСТ.ERT(23)}: Поле агрегатного объекта не обнаружено (ЗначениеВДлиннуюСтрокуБД) В ОТЛАДЧИКЕ MetaDataWork = Rainbow service OLE module |
|||
53
Ёпрст
гуру
14.05.13
✎
14:53
|
(52) какой версии ?
|
|||
54
Ёпрст
гуру
14.05.13
✎
14:53
|
хотя и так видно, что древней
|
|||
55
Ковычки
14.05.13
✎
14:53
|
все равно не понял, чем штатные методы не подходят
|
|||
56
burrya
14.05.13
✎
14:53
|
Верссия 1С ++ 3.2.4.1
|
|||
57
Mikeware
14.05.13
✎
14:54
|
(52) ВЕРСИЯ какая???
|
|||
58
Mikeware
14.05.13
✎
14:55
|
(56) врешь, похоже.
значит, еще и радуга загружена? MetaDataWork переопредели... Или создай свой отдельный объект |
|||
59
Mikeware
14.05.13
✎
14:55
|
(55) гемора больше.
|
|||
60
trad
14.05.13
✎
14:56
|
1c++ загрузи после радуги (иначе одноименный радужный объект заменяет 1цэпэпэшный), а лучше радугу выкинуть вообще.
|
|||
61
varelchik
14.05.13
✎
14:59
|
(60) вово.
давно пора выбросить. 1С++ давно все что в радуге есть заменила. |
|||
62
burrya
14.05.13
✎
15:52
|
помогает только если выкинуть радугу совсем, но хочется её оставить, поменял местами, но ошибка все равно выходит
|
|||
63
Mikeware
14.05.13
✎
15:52
|
(62)"но хочется её оставить" - ТКВ
|
|||
64
burrya
14.05.13
✎
15:59
|
ТКВ - не понял
|
|||
65
Mikeware
14.05.13
✎
16:01
|
(64) Традиционный Китайский Вопрос - "анахуа?"
|
|||
66
burrya
14.05.13
✎
16:08
|
ну нахуа нахуа, хочется изменять код по-минимуму
|
|||
67
Mikeware
14.05.13
✎
16:17
|
Что несовместимого с текущей версией используется?
|
|||
68
burrya
14.05.13
✎
16:37
|
Знать бы что не совместимо, тогда б сказал:)
|
|||
69
burrya
22.05.13
✎
14:34
|
Вопрос решил, cpp нужно загружать как раз первым. Тогда все работает.
|
|||
70
ЧеловекДуши
22.05.13
✎
15:17
|
(69) Да не факт, я вообще 1С++ грузил, как то отдельной обработкой :)
|
|||
71
Cthulhu
22.05.13
✎
15:54
|
о, знатоки. тода спрошу.
1c++ в терминалках вин2008серв и вин2012серв - норм раб?.. |
|||
72
Ёпрст
гуру
22.05.13
✎
15:57
|
(71) без проблем
|
|||
73
Cthulhu
22.05.13
✎
16:22
|
(72): х64????
|
|||
74
ЧеловекДуши
22.05.13
✎
16:24
|
(73) Да, нормально, что ей сделается?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |