Имя: Пароль:
1C
 
Получение уникального ID
0 LapoTb
 
30.11.05
06:39
Как получить уникальный ID документа, не заглядывая в dbf'ники?
1 Guk
 
30.11.05
06:51
Функция ПолучитьИдОбъекта(Объект) //возвращает внутренний идентификатор объекта (для документов, справочников, перечислений)
   Ид=_IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ЗначениеВСтрокуВнутр(Объект),"{",""),"}",""),Симв(34),"")," ",""),",",РазделительСтрок),7));
   Возврат Ид;
КонецФункции
2 LapoTb
 
30.11.05
06:59
1. Это откуда такая функция _IdToStr? И че она делает?

2. Выдает кучу нулей и ничего более...
3 Guk
 
30.11.05
07:01
(2) Объект надо передавать...
4 Guk
 
30.11.05
07:05
IdToStr(<?>)
Синтаксис:
_IdToStr(<Ид>)
Назначение:
Возвращает строку - результат преобразования 10-тичного значения в 36-ричное.
Параметры:
<Ид> - выражение со значением типа число.
5 smaharbA
 
30.11.05
07:09
Функция Ид(Док)
   Сп=СоздатьОбъект("СписокЗначений");
   СтрИД=СтрЗаменить(ЗначениеВСтрокуВнутр(Док.ТекущийДокумент()),"{","");
   СтрИД=СтрЗаменить(ЗначениеВСтрокуВнутр(Док.ТекущийДокумент()),"}","");
   Сп.ИзСтрокиСРазделителями(СтрИД);
   ИДДок=_IdToStr(Сп.ПолучитьЗначение(Сп.РазмерСписка()));
   Возврат ИДДок;
КонецФункции
6 LapoTb
 
30.11.05
07:19
Я и передаю объект: документ. Только возвращает 0.
7 smaharbA
 
30.11.05
07:20
(6) Тебеже написали функцию и не занимайся самодеятельностью
8 LapoTb
 
30.11.05
07:28
(7) Ладно.

А как получить ID строки документа?
9 Гламурный Подонок
 
30.11.05
07:31
ID строки документа не существует.
10 Иде я
 
30.11.05
08:01
(9) Номер строки в уникальном документе уникален...
11 Гламурный Подонок
 
30.11.05
08:29
(10)Уникален. Но бесполезен. Ибо может измениться.
12 шайтан
 
30.11.05
08:50
(5) это скорее всего уникальный ID вида документа
13 smaharbA
 
30.11.05
08:52
(12) Нет, именно документа, так скопировал у себя, а потом гляжу что луччеб туда любой объект передавался
14 skunk
 
30.11.05
09:03
(13)неправильно работает...
15 smaharbA
 
30.11.05
09:05
(14) В чем выражено ?
16 шайтан
 
30.11.05
09:06
(15) "      4865        12   " из последней подстроки ещё бы пробелы убрать
17 smaharbA
 
30.11.05
09:06
А, ну да

Функция Ид(Объект)
   Сп=СоздатьОбъект("СписокЗначений");
   СтрИД=СтрЗаменить(ЗначениеВСтрокуВнутр(Объект),"{","");
   СтрИД=СтрЗаменить(СтрИД,"}","");//Вот тут была лажа
   Сп.ИзСтрокиСРазделителями(СтрИД);
   ИДДок=_IdToStr(Сп.ПолучитьЗначение(Сп.РазмерСписка()));
   Возврат ИДДок;
КонецФункции
18 skunk
 
30.11.05
09:08
(12)тебе правильно сказал

у тебя после всех strreplace() получается...
СтрИД = {"O","0","0","0","0","0","      1628      6741   "

1628 - это вид документа

_idtostr(1628) = 198

твоя функция возвращает 198
19 Guk
 
30.11.05
09:08
Проверил кстати (1) еще раз, почему то у меня работает.
ЗЫ: при чем для трех типов объектов...
20 skunk
 
30.11.05
09:10
(17)тоже нет....
21 шайтан
 
30.11.05
09:12
Сп=СоздатьОбъект("СписокЗначений");
   СтрИД=СтрЗаменить(ЗначениеВСтрокуВнутр(Док),"{","");
   СтрИД=СтрЗаменить(СтрИД,"}","");
   Сп.ИзСтрокиСРазделителями(СтрИД);
   Стр = Сп.ПолучитьЗначение(Сп.РазмерСписка());
   Пока Найти(Стр," ")>0 Цикл
       Стр = СтрЗаменить(Стр," ","");    
   КонецЦикла;
   ИДДок=_IdToStr(Стр);
22 smaharbA
 
30.11.05
09:13
Ну да, но у меня в конфе почемуто у всех объектов одно значение после
Вот к примеру
ЗначениеВСтрокуВнутр(глКонтДок.ТекущийДокумент()) = {"O","0","0","2996","0","0","     64648   "}
23 skunk
 
30.11.05
09:18
(21)зачем велосипед педалишь... в (1) работает
24 skunk
 
30.11.05
09:19
а я лично юзал right и left
25 шайтан
 
30.11.05
09:19
(23) (1) не влезло на экран, копировать лень :)
26 шайтан
 
30.11.05
09:21
(22) у себя не нашел таких коныигураций
27 шайтан
 
30.11.05
09:22
(1) обратная функция имеется?
28 skunk
 
30.11.05
09:23
(22)а что за конфигурация...
29 skunk
 
30.11.05
09:23
(27)в смысле обратная...?
30 Guk
 
30.11.05
09:23
(27) Имеется...
31 smaharbA
 
30.11.05
09:26
(28) Рарус-Мебель, но тут вроде от конфы недолжно зависить блин
С обратной сложнее, в смысле получить чтоб объект по времени получить, в 1С 1 секунда на 10000 поделена
32 Guk
 
30.11.05
09:28
+(30) Не моё.

Список = СоздатьОбъект("СписокЗначений");
Список.ДобавитьЗначение("O"); // тип
Список.ДобавитьЗначение("0"); // длина
Список.ДобавитьЗначение("0"); // точность
Список.ДобавитьЗначение("255"); // ИД вида объекта
Список.ДобавитьЗначение("0"); // флаг неотр. (?)
Список.ДобавитьЗначение("0"); // флаг разделения триад (?)
Список.ДобавитьЗначение("9548"); // ИД объекта
Зн = ЗначениеИзСтрокиВнутр("{"+Список.ВСтрокуСРазделителями()+"}")
<cообщил АЛьФ>
33 skunk
 
30.11.05
09:28
(31)может они там чего нить заправили... хотя... фих знает
34 шайтан
 
30.11.05
09:29
(31) может у неё корни с 7.5 растут, ну и поэтому такие дела...
обратная, в смысле получить объект по ID
35 smaharbA
 
30.11.05
09:30
(32) Это-то ясно, а вот как получить к примеру 500 док в 1 Секунде ?
36 dk
 
30.11.05
09:31
Вставлю свои пять копеек :)
-----
Код = СтрПолучитьСтроку(СтрЗаменить(ЗначениеВСтрокуВнутр(Объект), """", РазделительСтрок), 14);
КодБазы = СокрЛП(Прав(Код, 3));
КодОбъекта = СокрЛП(Лев(Код, 10));
КодОбъекта = _idtostr(КодОбъекта);

Код = КодОбъекта + КодБазы;

Возврат Код;
37 skunk
 
30.11.05
09:31
по читому иду нет... не зная что за тип объекта и его вид...
38 шайтан
 
30.11.05
09:31
(32) кстати, это проканает для конфигурации smaharbA
39 skunk
 
30.11.05
09:33
(36)можно еще проще...
40 Guk
 
30.11.05
09:33
(38) А что за конфигурация smaharbA?...
41 smaharbA
 
30.11.05
09:36
(34) _StrToID
Все понял по своей, у меня вынесен вид дока в четвертое значение как и в (32), а у всех видать через пробел в 7 значении :(
42 dk
 
30.11.05
09:40
2(41)
Кстати тоже с такой чепухой столкнулся, у меня меняется при переносе ссылки в таблицу значений
43 smaharbA
 
30.11.05
09:42
(42) Да, точно, както было, но мне тогда ид ненужен был, причем значениеИзСтрокиВнутр понимает и так и так
44 skunk
 
30.11.05
09:47
не исповедимы пути господни...
45 Кабан мимо пробеган
 
30.11.05
10:11
ЗначениеВСтрокуБД()
ЗначениеВДлиннуюСтрокуБД()
ЗначениеВСамуюДлиннуюСтрокуБД()
---------------------------------
ЗначениеИзСтрокиБД()
ЗначениеИзДлиннойСтрокиБД()
---------------------------------
методы объекта MetaDataWork из поставки 1С++. Подробнее в документации.
46 шайтан
 
30.11.05
10:20
(40) у него вид объекта не в последней подстроке
47 skunk
 
30.11.05
10:28
там всего одна строка )))
48 шайтан
 
30.11.05
10:33
строка с разделителями. о!
49 skunk
 
30.11.05
10:34
(48)тогда значение ;))
50 шайтан
 
30.11.05
21:56
Во какая фиговина, оказывается:

1. Док - объект, созданный функцией СоздатьОбъект()
ЗначениеВСтрокуВнутр(Док)
{"O","0","0","1582","0","0","         0   "}

2. Док - реквизит Формы
ЗначениеВСтрокуВнутр(Док) =
{"O","0","0","0","0","0","      1582       837   "}

3. Док - первое или второе
ЗначениеВСтрокуВнутр(Док.ТекущийДокумент())
= {"O","0","0","1582","0","0","       837   "}

Странно, что метод ТекущийДокумент() в этом случае имеет смысл применять к реквизиту формы
51 smaharbA
 
30.11.05
22:08
(51) Точна, вот почему и код (5) вышел (взгляни подробнее)
52 шайтан
 
30.11.05
22:12
(51) понял уже :)

//даже если написать так:
ЗначениеВСтрокуВнутр(Док.ТекущийДокумент().ТекущийДокумент())
= {"O","0","0","1582","0","0","       837   "}
// результат тот же

вывод, в функции для получения ID втыкаем ТекущийДокумент()/ТекущийЭлемент() и где надо и где не надо, хуже небудет
53 smaharbA
 
30.11.05
22:15
(52) Наверное есть подозрения что в (5) код не мой ;)
54 шайтан
 
30.11.05
22:17
(53) код рабочий. в "лажовой" строке
СтрИД=СтрЗаменить(ЗначениеВСтрокуВнутр(Док.ТекущийДокумент()),"}","");
особого смысла нет, можно закомментарить
55 GrayT
 
30.11.05
22:21
*50)Док как реквизит форы определенного вида или нет? Есть подозрения, что просто документ.
56 Guk
 
30.11.05
22:22
Мужики, а об чем спор?...
57 шайтан
 
30.11.05
22:23
(55) верно, просто документ. не обратил внимание на этот факи
58 шайтан
 
30.11.05
22:23
факт
59 GrayT
 
30.11.05
22:25
(57)Я на этот трабл сильно нарвался когда делал составной индекс в ТЗ. Если колонка точно не типизирована, то и ИД кривой. Как пример запрос из регистра. Или по документам двух видов.
60 шайтан
 
30.11.05
22:28
(59) да, хитро. лучше уж перестраховаться и получить текущий объект
61 шайтан
 
30.11.05
22:30
(59) а в каких-нибудь других случаях этот трабл дает о себе знать?
62 GrayT
 
30.11.05
22:32
(61)Мне хватило один раз поискать ошибку, чтоб начать подстраховываться :)
63 mszsuz
 
30.11.05
23:17
Обо всем этом см.здесь:
http://www.sinor.ru/~my1c/knowhow/get_id.html
64 smaharbA
 
30.11.05
23:21
(63) этт то ясно, тока там не явно про текущийэлемент/текущийдокумент
Ошибка? Это не ошибка, это системная функция.