Имя: Пароль:
1C
1C 7.7
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
Самый быстрый из штатных



//-------------------------------------------------------------------------
Функция глПолучитьОбъектИД(Объект) Экспорт
// Функция получает ИД объекта
// Объект - объект метаданных
   Перем Сп,Стр;
   Сп=СоздатьОбъект("СписокЗначений");
   Сп.ДобавитьЗначение("",Объект);
   Сп.ПолучитьЗначение(1,Стр);
   Возврат Число(Стр);
КонецФункции    // глПолучитьИДОбъекта
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) Да, нормально, что ей сделается?