![]() |
|
Получение уникального 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) этт то ясно, тока там не явно про текущийэлемент/текущийдокумент
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |