Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Непонятки с видом реквизита (NA) (число прочтений - 3962 )
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Непонятки с видом реквизита (NA)
24. Октября 2008 :: 10:57
Печать  
Есть справочник (МойСправочник), в нем реквизит Спр1 (тип Справочник). Делаю прямой запрос к этому справочнику и пытаюсь определить вид реквизита, для некоторых элементов он NA.

Как такое получилось?
Как сама 1с верно определяет вид этого реквизита?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #1 - 24. Октября 2008 :: 11:34
Печать  
Тип справочника задан, вид не задан. Вид определяется по виду хранящегося значения.
Может, будет полезна эта статья:
http://www.script-coding.info/v77tables.html
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #2 - 24. Октября 2008 :: 11:37
Печать  
Правильно понимаю, что 1С верно определяет вид справочника по 9 символьному ID?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #3 - 24. Октября 2008 :: 11:47
Печать  
В статье все, вроде, изложено.
1.1.1. Хранение ID объекта
ID может иметь 3 представления (уровня) в зависимости от длины (количества значащих символов):

9 символов – определен тип и вид объекта (например «Справочник.Клиенты»), в ID включается только порядковый номер в 36-ричной системе исчисления. Под порядковый номер отводятся первые 6 символов, последние 3 символа зарезервированы под код базы УРБД.
13 символов – определен только тип объекта, вид не задан (например «Справочник»). Первые 4 символа – идентификатор вида (как он задан в метаданных), последующие 9 символов – по аналогии с предыдущим пунктом.
23 символа – не определен тип и вид объекта. В таком случае в первых 2 символах хранится тип объекта (будет рассмотрен ниже), следующие 13 символов формируются аналогично предыдущему пункту.
В некоторых случаях, при указании неопределенного типа объекта (длина ID кода 23 символа) создается дополнительное поле с символом «T» вначале (например, если в справочнике задан реквизит SP235 как неопределенный, то в таблице справочника будет создано еще одно поле TSP235). Рассмотрим поподробнее значения этого поля. Это поле по умолчанию заполняется пустой строкой (3 пробела).

Для невыбранного типа (заполняется по умолчанию): TSP235 = '   ' (3 пробела), при этом связанное неопределенное поле SP235 заполняется значением 'U                      ' (символ U и 22 пробела), что скорее всего означает «Undefined», т.е. неопределенный.
Для типов «Число»: связанное поле SP235 заполняется строковым значением числа, но с символом «N» в начале строки (например 'N                     2' для целого числа 2). Возможные значения TSP235:
'F30' - число с плавающей запятой (float);
'320' - число, состоящее только из десятичных (0.99, т.е. Число(3,2)).
'A00' - целое число (int);
Для типов «Строка»: связанное поле SP235 заполняется строкой, но с символом 'S' слева (например 'SАбвгдежзклимно        '). Возможные значения TSP235 в этом случае: количество знаков, определенных для строкового значения, например, '14' - количество знаков в строке, в 36-ричном формате (_IDToStr). Следует отметить, хотя 1С и назначает длину строки больше 22 символов, но фактически в этом поле можно хранить только 22 символа (1 разряд приходиться на обозначение типа поля 'S').
Для типов «Дата»: связанное поле SP235 заполняется строкой, но с символом 'D' слева (например 'D20050303              '). TSP235 - '   ' (3 пробела), т.е. поле пустое.
Для типов 1С (Справочник, Документ, Перечисление, Счет, и т.д.): связанное поле SP235 заполняется строкой включающий полный идентификатор объекта (его тип, вид, внутренний ИД код). Следует отметить, что для типов «Перечисление» нельзя не назначать вид, так как неназначение вида приведет к несовпадению типов и незаполнению неопределенного поля. Возможные значения TSP235:
'0  ' - был назначен только тип объекта, вид не назначен (например «НазначитьТип(«Справочник»)»)
'1  ' - был назначен как тип объекта, так и его вид (например «НазначитьТип(«Справочник.Клиенты»)»)
Примечание

Поскольку для неопределенных реквизитов (полей) длина поля всегда равна 23 символам, то соответственно в такое поле можно записать значение максимум с 22 символьным значением (1 отводится под определение типа, в случае базовых типов, таких как число, строка, дата).
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #4 - 24. Октября 2008 :: 11:49
Печать  
Понял теперь в чем вопрос. 9 символов ЕСЛИ известни и тип и вид, иначе 13 или 23.
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #5 - 24. Октября 2008 :: 11:50
Печать  
Что то я не ничего про NA там не нашел...
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #6 - 24. Октября 2008 :: 11:53
Печать  
Antes писал(а) 24. Октября 2008 :: 11:49:
Понял теперь в чем вопрос. 9 символов ЕСЛИ известни и тип и вид, иначе 13 или 23.


Вопрос все таки немного в другом...когда 1с использует 9, а когда 13 - мне ясно...я просто для себя хочу уяснить, что Id справочника - уникальная вещь во всей конфигурации.

и это NA  - откуда она взялась...?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #7 - 24. Октября 2008 :: 12:04
Печать  
Есть реквизит типа "Справочник" - тип задан, вид нет. Выборка возвращает значение реквизита. Если значение задано, то вид определяется по виду этого значения, если не задано, то вид так и останется неопределенным. Или я не понял сути?
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #8 - 24. Октября 2008 :: 12:07
Печать  
Antes писал(а) 24. Октября 2008 :: 12:04:
Есть реквизит типа "Справочник" - тип задан, вид нет. Выборка возвращает значение реквизита. Если значение задано, то вид определяется по виду этого значения, если не задано, то вид так и останется неопределенным. Или я не понял сути?


Неа, не  так, во всех элементах этот реквизит заполнен, только для части реквизитов тип NA, а для других - вид справочника (4 символа)...
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #9 - 24. Октября 2008 :: 12:09
Печать  
Тогда текст запроса показать надо!
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #10 - 24. Октября 2008 :: 12:14
Печать  
ТекстЗапроса = "      
     |SELECT          
     |            $ТаблицаСоответствия.Спр1               as Спр1,
     |            $ТаблицаСоответствия.Спр2               as Спр2,
     |            LEFT($ТаблицаСоответствия.Спр1,4)       as Вид,
     |            $ТаблицаСоответствия.Правило         as Правило                                       
     |FROM
    |            $Справочник.ТаблицаСоответствия as ТаблицаСоответствия
     |";
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #11 - 24. Октября 2008 :: 12:32
Печать  
Т.е. без LEFT всё отображается верно?
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #12 - 24. Октября 2008 :: 12:47
Печать  
В смысле? NA и в id видно. Если поставить типизацию [Спр1$Справочник], то все определяется верно.
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #13 - 24. Октября 2008 :: 13:02
Печать  
NA скорее всего выдает метапарсер. А в чем вопро тогда, если верное решение найдено? Или хочется докопаться до истины?
  
Наверх
 
IP записан
 
Beginner
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 33
Зарегистрирован: 31. Октября 2007
Re: Непонятки с видом реквизита (NA)
Ответ #14 - 24. Октября 2008 :: 13:09
Печать  
Ок, откуда NA тогда понятно...а как так получилось с этим справочником?
  
Наверх
 
IP записан
 
Antes
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 57
Зарегистрирован: 17. Октября 2008
Re: Непонятки с видом реквизита (NA)
Ответ #15 - 24. Октября 2008 :: 13:19
Печать  
Я использую этот механизм (прямого доступа) для доступа к "чужим" базам, и столкнулся с такой проблемой, что метапарсер неверно определяет вид справочника в "чужой" базе. И если взять справочник из другой базы и попытаться определить вид реквизита и тип, то
ТипРеквизита = РС.МД.Метаданные.Метаданные.Справочник(ВидСправочника).Реквизит(Сч).Тип;
ВидРеквизита = РС.МД.Метаданные.Справочник(ВидСправочника).Реквизит(Сч).Вид;
возвращает верный тип, но неверный вид. При этом мд-файл другой базы присоединен. Все ИД элементов в "чужой" базе определяются верно, но то, что я описал...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать