Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Преобразование внутренного ID объекта в объект 1с - как? (число прочтений - 3489 )
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Преобразование внутренного ID объекта в объект 1с - как?
23. Июля 2009 :: 13:43
Печать  
(Сразу говорю, я новичок в 1с++)
Почему-то всю информацию нашла только по обратной проблеме.
Внутренний ИД элемента справочника/документа получить просто.
У меня обратная проблема - по внутреннему ИД получить сам элемент справочника или документ.
Берем простейший запрос:
|SELECT *
|FROM   
|$Регистр.ВзаиморасчетыПокупателей As TabReg 

В полученной табличке поле SP170 означает измерение Клиент.
Нужно получить сам элемент справочника.
1) Если тип справочника известен, можно просто сделать внутреннее соединение с нужным справочником и выдрать код и наименование (либо через метапарсер) и по ним уже искать элемент. А может можно проще?
2) Тип справочника неизвестен. Вот тут сложнее. Допустим, у меня есть значение поля '  1A     3' (я подозреваю что первое это вид, второе - собственно элемент. Вопрос - как из этого всего выдрать вид и элемент?
3) Тип неопределенный. Ну собственно тот же вопрос.
  
Наверх
ICQ  
IP записан
 
Berck
Junior Member
**
Отсутствует



Сообщений: 66
Местоположение: Москва
Зарегистрирован: 17. Июля 2007
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #1 - 23. Июля 2009 :: 14:09
Печать  
Вот тут и далее есть некоторые ответы.
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/2#2
http://www.1cpp.ru/forum/YaBB.pl?num=1148038411/4#4
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #2 - 23. Июля 2009 :: 14:13
Печать  
1) Select $Рег.Клиент as [Клиент $Справочник.Клиенты]
    From $Регистр.ТвойРегистр as Рег (nolock)
2) Select $Рег.Клиент as [Клиент $Справочник]
    From $Регистр.ТвойРегистр as Рег (nolock)
3) Select $Рег.Клиент as [Клиент $Неопределенный]
    From $Регистр.ТвойРегистр as Рег (nolock)
  
Наверх
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #3 - 24. Июля 2009 :: 05:56
Печать  
(1) все прочитала, непонятно
- что такое хранимая процедура и где ее создавать
- "Получение наименования справочника неопр. вида
Конечно в общем случае нельзя. Например есть колонка МПЗ в которой может быть справочник Номенклатура или Материалы" - мне надо именно в общем случае, т.к. я не знаю вид.
(2) - мне нужно вид справочника получить
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #4 - 24. Июля 2009 :: 08:28
Печать  
Stella0608 писал(а) 24. Июля 2009 :: 05:56:
(1) все прочитала, непонятно
- что такое хранимая процедура и где ее создавать
- "Получение наименования справочника неопр. вида
Конечно в общем случае нельзя. Например есть колонка МПЗ в которой может быть справочник Номенклатура или Материалы" - мне надо именно в общем случае, т.к. я не знаю вид.
(2) - мне нужно вид справочника получить

Какой тип поля у твоего реквизита? Если  просто "Справочник", то вид справочника хранится в этом поле и тогда для получения конкретного элемента надо делать запрос вида: "Select $Рег.Клиент as [Клиент $Справочник]   From $Регистр.ТвойРегистр as Рег (nolock)" (при этом в выборке будут как Номенклатура, так и Материалы)
  
Наверх
ICQ  
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #5 - 24. Июля 2009 :: 09:14
Печать  
Так я получу наименование справочника. А мне нужен вид, чтобы найти этот элемент в 1ске.
Допустим у меня есть справочник Фирмы и справочник Клиенты.
И в обоих есть элемент Клиент1.
Как мне через SQL понять, к какому справочнику относится этот элемент?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #6 - 24. Июля 2009 :: 09:49
Печать  
Так ты получишь не наименование, а именно элемент базы.
Если у тебя этот реквизит имеет тип "Справочник"(неопределенный), то первые 4 символа в поле БД - это и есть вид справочника
  
Наверх
 
IP записан
 
Stella0608
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 38
Зарегистрирован: 11. Марта 2009
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #7 - 24. Июля 2009 :: 10:12
Печать  
Мне нужно понять как эти 4 символа преобразовать в вид.


Пока выкрутилась так (для документов, для справочников аналогично)
Функция ПолучитьВидДокумента(IDSQL)
     
     ТекНомДок = Из_Любой_В_10(IDSQL,36);    
     Док = СоздатьОбъект("Документ."+Метаданные.Документ(1).Идентификатор);
     ТекСтр = ЗначениеВСтрокуВнутр(Док);
    СЗ=СоздатьОбъект("СписокЗначений");   
     Подстрока = Сред(ТекСтр,2,СтрДлина(ТекСтр)-2);
    СЗ.ИзСтрокиСРазделителями(Подстрока);       
     СЗ.УстановитьЗначение(4,Строка(ТекНомДок),,);
     НовДок = ЗначениеИзСтрокиВнутр("{"+СЗ.ВСтрокуСРазделителями()+"}"); 
     Возврат(НовДок.Вид());
     
КонецФункции

А существует ли более простой способ?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #8 - 24. Июля 2009 :: 10:21
Печать  
select iddocdef [Вид $ВидДокумента]
...
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Преобразование внутренного ID объекта в объект 1с - как?
Ответ #9 - 25. Июля 2009 :: 13:32
Печать  
Stella0608 писал(а) 24. Июля 2009 :: 10:12:
Мне нужно понять как эти 4 символа преобразовать в вид.

А зачем ты это хочешь сделать?
Что тебе мешает сделать запрос вида SELECT $Рег.Клиент as [Клиент $Справочник] FROM ...
Дале
РС.ВыполнитьИнструкцию(ТекстЗапроса, ТЗ, 1);
И потом
ТЗ.ВыбратьСтроки()
Пока ТЗ.ПолучитьСтроку()=1 Цикл
   Сообщить("Клиент:"+ТЗ.Клиент+" вид справочника:"+ТЗ.Клиент.Вид());
КонецЦикла
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать