SQL запросы к таблицам 1С v7.7 #216795


#0 by alex-ls
Такой вопрос, надо вытащить данные из таблиц 1С sql-запросами. Но вот натолкнулся на непонятные вещи. " ID может иметь 3 представления (уровня) в зависимости от длины (количества значащих символов): 9 символов – определен тип и вид объекта (например «Справочник.Клиенты»), в ID включается только порядковый номер в 36-ричной системе исчисления. Под порядковый номер отводятся первые 6 символов, последние 3 символа зарезервированы под код базы УРБД. 13 символов – определен только тип объекта, вид не задан (например «Справочник»). Первые 4 символа – идентификатор вида (как он задан в метаданных), последующие 9 символов – по аналогии с предыдущим пунктом. 23 символа – не определен тип и вид объекта. В таком случае в первых 2 символах храниться тип объекта (будет рассмотрен ниже), следующие 13 символов формируются аналогично предыдущему пункту. "  SELECT *  FROM DH733 /*Начисление удержания сотрудника*/ в ней у меня есть поля sp723 и tsp723 получаю значения: A1 1G1   1G1 и 0 A1  Q9    Q9 и 0 Как узнать на что указывают данные значения? С 1С до этого не работал. Посоветуйте чего-нить...
#1 by ASV
goto
#2 by ASV
>>Как узнать на что указывают данные значения? читать структуру DH733 в файле dds, лежит в каталоге базы
#3 by Иде я
Смотри файл 1v777.dds
#4 by alex-ls
смотрел, а как же :) F=SP723     |(P)Расчет           |C   |23    |0
#5 by Подполковник
есть кстати просмоторщик ДДС файлов. очень удобная вещь при работе с прямыми запросами, всегда можно узнать какое поле за что отвечает
#6 by alex-ls
насчет . Это имеется в виду через алгоритимческий язык? Хотелось бы ограничиться только SQL или никак? Может дадите более точную ссылку, если я что не так понял?
#7 by Подполковник
юзай тойскуль
#8 by КонецЦикла
Используй 1С++ Там метапарсер без этих извратов типо DT6656546
#9 by alex-ls
<<есть кстати просмоторщик ДДС файлов. просмоторщик тоже поставил, как плагин к Far. Но что-то я все-таки видимо до конца не допонял :( Есть 2. идентификатор вида 3. порядковый номер в 36-ричной системе вот я запросом получаю значение поля и не вижу как я понимаю идентификатора вида :(
#10 by Джинн
"Только SQL" тебе на фиг не нужен. Забодаешься на нем запросы писать. 1С++ имеет метапарсер, который сам "соберет" запрос. И подключаешься с ним к базе ты через родное "одноэсовское" соединение с сервером.
#11 by alex-ls
да я не против забодаться :) Или хотя бы попробовать, просто в идеале задача стоит решить именно средствами SQL...
#12 by Джинн
Хочешь своего персонального геморроя? Поверь опыту старших товарищей. Этот геморрой в свое время уже поимевших :)
#13 by Иде я
Ты  смотри название поля в таблице в DDS - там идет описание его. Потом заходи в конфигуратор и там посмотри какой тип в 1С. Если в таблице этого поля в описании нет, значит оно периодическое и хранится в 1SConst
#14 by alex-ls
to Иде я: так делаю... НачисленияУдержанияСотрудника -> Расчет -> Тип значение = <<Неопределенный>> И что это значит? Не видел нигде описания, как вязать в таком случае... Может кто подкинет ссылочек по внутреннему убранству? Сам искал, но видимо плохо.
#15 by alex-ls
to Джинн: Вообщем ситуация следующая, надо сделать импорт небольшого количества данных из 1С зарплата в оралковую структуру. Если Вы опишите хотя бы в общем виде проблемы с SQL доступом я буду Вам очень признателен. Вполне допускаю, что проще будет руками перебить из одной системы в другую :)
#16 by КонецЦикла
Чо курил? "импорт небольшого количества данных из 1С " - пишется недолго обработочка которая все куда надо положит без извратов, на встроенном языке 1С
#16 by Подполковник
лучше юзай банальную выгрузку данных в БДФ файл, а из него в оркл забирай, у знакомых вроде так реализовано
#18 by alex-ls
>> лучше юзай банальную выгрузку данных в БДФ файл 1С именно на дбф :) В оракл данные таблицы импортированы, теперь надо перегнать сами данные в другую структуру... >> Чо курил? "импорт небольшого количества данных из 1С " - пишется недолго повторюсь, сам я разработчик не 1С. А ораклоид. Посему встроенного языка 1С не знаю. Все-таки хотелось бы какой-нить документик (ссылу на него), где было бы описано хотя бы в общих чертах по какому алгоритму 1С осуществляет ссылочную целочтность или такого просто нет в природе?
#19 by floverr
Вот что вытащил из ДДС #==TABLE no 7      : Справочник Банки # Name    |Descr                         |SQLTableNam|RecordLock T=SC72    |Справочник Банки              |SC72       |R         #-----Fields------- # Name                  |Descr               |Type|Length|Precision F=ROW_ID                |Row ID              |I   |0     |0         F=ID                    |ID object           |C   |9     |0         F=PARENTID              |ID parent obj       |C   |9     |0         F=CODE                  |object code         |C   |9     |0         F=DESCR                 |object description  |C   |100   |0         F=ISFOLDER              |Is Line - Folder    |Y   |0     |0         F=ISMARK                |Object is Marked for|L   |0     |0         F=VERSTAMP              |Version stamp       |I   |0     |0         F=SP66                  |(P)КоррСчет         |C   |20    |0         F=SP67                  |(P)Местонахождение  |C   |50    |0         F=SP69                  |(P)Телефоны         |C   |30    |0         F=SP68                  |(P)Адрес            |M   |0     |0         Все Таблицы внем описаны.
#20 by АЛьФ
2
#21 by Иде я
Если неопредеоенный, тогда сложно это все. Как вариант могу посоветовать распечатать из1с все типы значений которые там встречаются и по каждому типу копать
#22 by rsv
Лучше и проще всего это делать из среды 1С в ORA : Рез=Command.Execute;
#23 by alex-ls
to floverr Вопрос относится к 23-символьным идентификаторам. В Вашем примере их нет... to Альф: это нашел чуть ли не первым делом, но как-то это описание не вяжется с полученными мною данными: (в ней у меня есть поля sp723 и tsp723 получаю значения: A1 1G1   1G1 и 0 A1  Q9    Q9 и 00 и постом Иде я (Если в таблице этого поля в описании нет, значит оно периодическое и хранится в 1SConst)
#24 by rsv
Ну чего там у вас нет ни одного 1С ника. Котрый через 1С звал бы хранимки на сервере ????
#25 by АЛьФ
2 Мало найти. Надо было еще и прочитать. "Любое поле SPyyy неопределенного типа (U) сопровождается полем TSPyyy типа Char, с назначением которого я не разобрался (похоже что оно всегда empty, если поле SPyyy пусто)."
#26 by alex-ls
to Иде я: Т.е. если тип неопределенный, то используя только *.dbf нельзя никак определить, на что ссылается строка? А необходима еще и информация из 1cv7.md?
#27 by alex-ls
to rsv: на данный момент нет. to АЛьФ: читал, как без этого. Скажу прямо понял не все... Но для этого и обращаюсь за разъяснениями на форум по 1С :) связанное поле SP* заполняется строкой включающий полный идентификатор объекта (его тип, вид, внутренний ИД код). Следует отметить, что для типов «Перечисление» нельзя не назначать вид, так как не назначение вида приведет к несовпадению типов и не заполнению  неопределенного поля. Возможные значения TSP*: '0  ' - был назначен только тип объекта, вид не назначен (например «НазначитьТип(«Справочник»)») '1  ' - был назначен как тип объекта, так и его вид (например «НазначитьТип(«Справочник.Клиенты»)») У меня как раз 0 стоит, смотрите выше... Но дальше этого объяснения не идут :(
#28 by КонецЦикла
Можешь мне выслать выгрузку - сделаю за тарелку супа :)
#29 by Иде я
Как вариант могу предложить создать пустую базу, завести реквизит неопределенного типа и посмотреть где оно вылезет
#30 by АЛьФ
2 Слюшай, позови спеца по 1С. Он тебе быстро и недорого сделает выгрузку тех данных, которые нужны, в том формате, который тебя устроит.
#31 by rsv
Понимаете ли    alex-ls. В поле с типом неопределено может лежать все что угодно. Ссылки на любые таблицы и т.д. и прочее. Разбирать на что же это все ссылается геморойно. Если бы оно имело однозначо тип - Справочник.Сотруднки это одна песня. А в случае с неопределено- несколько иная.
#32 by rsv
Да и как таковой ссылочной целостности в 1С на уровне сервера БД нет. Все шустрит прикладной движок.
#33 by alex-ls
to rsv: Да я понимаю, что такое неопределенная ссылка. Просто думалось, что реализовано это более просто, например через промежуточную таблицу и описано в каком-то документе, который я не нашел. to КонецЦикла, АЛьФ: Насчет привлечения людей со стороны решения принимаю не я...
#34 by rsv
Всякие там констраинты и прочее - мимо.
#35 by Иде я
Щас попробовал с пустой базой В незаполненом поле SP14 сидело "  U  "  и в TSP14 пусто когда заполнил значением Справочник.Новый2 Сидит sP14 "B1   F     2" и TSP14 "1" Заполнил значение справочник.Новый3 sp14 "B1   H     1"
#36 by alex-ls
to Иде я: большое спасибо! F и H как я понял переводятся в 10-ый формат и прибавляются к B. B - это справочник получаем SP15 и SP17. 1 и 2 соответсвенно ID в соответсвующих таблицах... А как можно получить 0 в поле TSP14?
#37 by КонецЦикла
что куда прибавляется? не надо так издеваться написать обработку будет проще чем излазить все таблички (особенно когда речь зайдет о доках расчета зарплаты)
#38 by КонецЦикла
и цель какая выщемливать внутренние ИД объектов? они что аналогичные будут в оракле?
#39 by Иде я
Щас попробовал присвоить 0 получилось SP  ="B1   H     0"
#40 by Иде я
При этом тип так и остался справочник.Новый3 или какой я там последний делал.
#41 by Иде я
Назначил тип Число 14.2 и проставил 0 SP14="N                     0" TSP14 = "E20"
#42 by alex-ls
to КонецЦикла: внутренние идентификаторы соотвественно переносится не будут, да и структура будет другая данных... 4 символа – идентификатор вида (как он задан в метаданных) он преобразовывается в часть названия таблицы (числовую), первая часть (текстовая) отвечает за тип SP - соответственно справочник. Аббревиатуры названий типов данных (реквизит Type): N-числовой, Len и Dec – соответственно размер и точность поля S-строка, Len – длина строки. При Len=0 – строка неограниченной длины, хранящаяся в 1sblob D-дата B-справочник E-перечисление O-документ T-счет
#43 by Иде я
#44 by Иде я
Это я строку "123" присваивал.
#45 by Иде я
Щас присвоил строку "12300000000000000000000000000000000000000000000000000000000000000000000000000000000" И вот чего получилось SP="S1230000000"
#46 by КонецЦикла
Че то маловато символов влезло :) Так зачем весь сыр-бор?
#47 by alex-ls
to Иде я: то есть в tsp14 у Вас 0, а sp12 имеет вид: "B1   H     0" правильно? я же наткнулся на какую-то странность... Т.е. вместо ожидаемого идентификатора вида на его месте стоит идентификатор объекта, который потом дублируется еще вдобавок и на своем месте... SQL> select sp723_, tsp723_  2  from sps.imp__DH733  3  where rownum < 3 ----------------------- --- A1 1G1   1G1            0 A1 1G1   1G1            0 Т.е. А - у меня это "Вид расчета". А 1G1 дублируется в поле по непонятным для меня причинам...
#48 by КонецЦикла
Зажидил тарелку супа? :)
#49 by Иде я
#50 by alex-ls
to КонецЦикла: Задача ставится не как одноразовая, а как разобраться со структурой таблиц 1С. Из-за возможности импорта других данных из 1С... я не прошу конкретно сделать импорт моих данных, а объяснить (как вариант дать ссылку) организацию работы ссылок в 1С
#51 by alex-ls
to Иде я: c постоянными значениями в неопределенных полях я более/менее разобрался... Что пишется в SP*, если TSP* имеет значение 0, т.е. был назначен только тип объекта, вид не назначен (например «НазначитьТип(«Справочник»)»)
#52 by quest
так и не понял, что тебе конкретно непонятно? Периодические реквизиты? Длинные строки? Реквизит неопределенного типа?
#53 by Иде я
Назначил тип справочник SP="B1   H     1" TSP =0
#54 by alex-ls
конкрентно на примере не понятно на что ссылается строчка A1 1G1   1G1
#55 by quest
Если правильно помню - А это для для вида расчета, следовательно, неопределнное значение у тебя - тип расчета, далее, 1 - его индекс. 1G1 это либо параметры, либо сылки на элементы  (тут утверждать не буду, так как с зарплатой не работал)
#56 by alex-ls
... В случае типа=B/O/T/C/A (значения которых хранятся в таблицах), в поле SPyyy хранится ссылка на соответствующую таблицу. ... Если же на момент формирования структуры хранения Params.Source_Id=0 – например «справочник вообще» – поле SPyyy содержит, помимо 9-и байтового номера записи ещё и ID [int] соответствующего этой таблице объекта метаданных (в первых 4-х байтах). ... В случае, если Params.Type=U (значение неопределенного типа) – поле SPyyy имеет длину 23 байта и содержит в первых 2-х символах информацию о фактически хранящемся типе значения (например N для Numeric, B1 для типа B, E1 для типа E, и т.п.), в остальных символах – аналогично предыдущему (4+9). ... Вот в своем примере A1 1G1   1G1 A1 ясно что такое. Где здесь 4-х байтный идентификатор объекта метаданных?
#57 by alex-ls
Тогда такой вопрос участникам: сколько будет стоить выгрузка ентого добра в удобоваримый для SQL или к примеру XML вид. Что в данной задаче есть тарелка супа? Т.е. надо получить структуру только с явными ссылками и значениями
#58 by КонецЦикла
:) какого добра? в какой вид? что такое явные ссылки? текст, дбф - прокатит?
#59 by alex-ls
1С зарплата, нужно чтобы поля имели определенный тип, а не "черти что и сбоку бантик" :) Текстовый файл и dbf в принципе подойдет, при оговоренных выше условиях... Назовите ориентировочно, начальнику передам.
#60 by КонецЦикла
Напиши на мыло/аську (в карточке на имени) Отвечу, щас надо уже убегать
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С