Имя: Пароль:
1C
 
Прямой запрос из 1с 8.3 к 1с 7.7 sql
0 Franchiser
 
гуру
10.11.15
17:51
Есть большое количество баз 7.7, из 8-ки 1-м прямым запросом получаю консолидированные данные из этих баз. Для получения имен таблиц и реквизитов использую сейчас распарсивание файлов DDS.
К сожалению не все реквизиты есть в dds: например, константы, перечисления, пер. реквизиты справочников.

Есть ли какой-то способ распарсить из 1с 8 MD файлы 1с 7.7? или может есть какая-то компонента, типа 1с++, работающая из 1с 8?
1 olegves
 
10.11.15
17:57
(0) сделай справочник МД в 8-ке и читай его перед запросом
2 olegves
 
10.11.15
17:58
+(1) в 7.7 конечно и заполнять его при начале работы (1й юзверь)
3 Franchiser
 
гуру
10.11.15
17:59
Появляются новые базы, нет возможности контролировать процесс
4 Franchiser
 
гуру
10.11.15
18:00
Нет прав на вход в 1с 7.7, короче вариант такой не подходит
5 Serginio1
 
10.11.15
18:04
Есть 1с++ и MetaDataWork
6 Serginio1
 
10.11.15
18:08
Да и 1С++ тоже вроде работает, только через Открыть и MoveNext итд
7 Franchiser
 
гуру
10.11.15
18:12
1С++ не работает из 1с8, а мне нужно из 8-ки
8 marty0701
 
10.11.15
18:13
(3)В чем сложность, кто заведует списком баз? Бухгалтер тетя Глаша?
9 Serginio1
 
10.11.15
18:14
(7) Точно не работает?
В любом случае можно через COM получить все, что угодно
10 Franchiser
 
гуру
10.11.15
18:15
сложность распарсить md-файлы
11 Franchiser
 
гуру
10.11.15
18:15
через com работает во много раз дольше, в результате было переписано на прямой запрос
12 Franchiser
 
гуру
10.11.15
18:17
(8) зачем список баз, если по com получать данные не собираюсь?
13 Serginio1
 
10.11.15
18:18
(11) Через КОМ ты можешь получить соответствие полей поля.
Или можешь через командную строку запустить приложение и получить данные полей
14 marty0701
 
10.11.15
18:19
"Появляются новые базы, нет возможности контролировать процесс"
Перефразирую. Кто контролирует процесс появления новых баз, бухгалер дядя Петя?
15 Franchiser
 
гуру
10.11.15
19:04
(14) какое это имеет значение, я понятия не имею кто.
Подключение по ком не рассматривается, интересует парсер md из 1с 8 на перспективу
16 Franchiser
 
гуру
10.11.15
19:06
(14) цель написать отчети больше никогда его не исправлять при каких-либо изменениях в структуре баз
17 Franchiser
 
гуру
10.11.15
19:11
Тема только для илюстрации, просьба не пытаться решить данную проблему. Хочу спланировать пналогичного рода доработки на будущее.
18 mehfk
 
10.11.15
19:26
gcomp'ом распакуй и посмотри на файл
ОбъектыМетаданных.txt
19 Franchiser
 
гуру
10.11.15
20:45
(18) спасибо, забыл про gcomp, давно не использовал
Может есть еще какие-то варианты без разбора мд?
Как это реализовано в 1с++, тоже выполняется сначала разбор файла?
20 rs_trade
 
10.11.15
20:57
(13) я вот тоже не понял почему через ком нельзя получить структуру конфы? пробежался по метаданным, заполнил справочник в 1с8. данные получаешь прямыми запросами.
21 Franchiser
 
гуру
10.11.15
20:59
(20) потому что 500 баз 1с 7.7, открытие каждой базы занимает много времени, а если какая то из них запущена монопольно, то все открытие по ком теряет смысл
22 rs_trade
 
10.11.15
21:05
(21) Прям 500? Есть еще вариант выгружать в тхт из 7.7 при запуске конфы. Но это надо править 500 баз.
23 Franchiser
 
гуру
10.11.15
21:08
(22) ну да при запуске 7.7 тоже вариант)
Чтобы создать справочник в 1с8 нужно согласовывать и доказывать такую необходимость. В условии того что сейчас и так все работает, то этой необходимости нет.
24 Franchiser
 
гуру
10.11.15
21:09
(22) не 500, но много.
25 rs_trade
 
10.11.15
21:09
(23) Либо не выгружать в тхт, а хранить структуру в справочнике, в базе 7.7. Потом так же читать прямым запросом.
26 Franchiser
 
гуру
10.11.15
21:13
Может кто знает, все-таки как 1с++ получает информацию метапарсером об именах таблиц и реквизитов? после разбора md или как то напрямую?
27 rs_trade
 
10.11.15
21:14
(26) напрямую куда? кроме как в мд, конфа больше нигде не хранится.
28 FN
 
10.11.15
22:02
делаешь чистую конфу на 7.7 с одной функцией в глобальнике ВернутьСтруктуруИБ(путькфайлу1Cv7md). внутри функции подключаешься к файлу с помощью metadatawork и вытягиваешь соответствие полей.

я вот эту базу по com и вызывай.
29 Franchiser
 
гуру
10.11.15
22:52
(28) ну можно так, только это через одно место.
(27) ну я имею ввиду я нигде невидел чтобы где то лежали файлы в папочке вытащенные gcomp при использовании компоненты 1с++,
1с++ как то использует алгоритмы gcomp?
30 Franchiser
 
гуру
10.11.15
22:54
По идее код 1с++  открытый, мб можно добиться похожего результата путем вызова тз 1с8 vbs + gcomp?
31 Serginio1
 
10.11.15
23:31
(21) Ты можешь создать пустую базу. Она будет быстро загружаться. А из неё уже можешь подключиться к любому MD шнику и его распарсить.
http://www.1cpp.ru/docum/html/ODBC.html#metadata
http://www.1cpp.ru/docum/html/ODBC.html#attachmd

Или спроси на форуме. Видно внутри 1С++ используются загруженные DLL.
32 orefkov
 
10.11.15
23:34
(30)
Нет. Метапарсер в 1С++ сам никак напрямую не работает с файлом метаданных, а вызывает функции из движка семёрки - грубо говоря, считывает то, что сама семёрка распарсила при запуске. Поэтому работать она может только внутри 77.
33 Franchiser
 
гуру
10.11.15
23:37
(32) Ок, смутило что в источниках 1с++ лежат файлы gcomp.exe и gcomp.dll
34 Franchiser
 
гуру
10.11.15
23:37
"в источниках" - > "в исходниках"
35 orefkov
 
10.11.15
23:54
(33)
Насколько я помню, они там для создания тестовой базы. Артур Аюханов там организовывал автотесты.
36 ЧеловекДуши
 
11.11.15
06:45
(16) Ну да, ну да... 1С 7.7, никогда менять, сделать универсальный :)

...Чудак, в 1С 7.7 нет КОМА, есть ОЛЕ...
...Сделай проще, напиши обработку для 1С 7.7, где будешь делать все, что только пожелаешь, у 1С 7.7 нет предела для обработки, даже если у пользователя нет вообще прав. Но есть право запустить обработку :)
37 Odavid
 
11.11.15
09:27
(36) это в 8-ке OLE ввели, в 7.7 как раз COM (типа "старый") остался.
38 Serginio1
 
11.11.15
10:29
(36) Com это все, что использует интерфейс IUnknown в том числе и Idispatch. OLE это  технология связывания и внедрения объектов в другие документы и объекты.
https://ru.wikipedia.org/wiki/Object_Linking_and_Embedding

OLE 1.1 позднее развился в архитектуру COM (component object model) для работы с компонентами программного обеспечения. Позднее архитектура COM была преобразована и стала называться DCOM.

И в 7 и в 8 используются объекты поддерживающие Idispatch то бишь COM. По правильному их нужно называть Объектами автоматизации, но COM проще
39 Odavid
 
28.11.15
09:23
(38) Не совсем так. Вы, верно, спутали ActiveX и COM.
Да, COM вырос из OLE1.1. Но это было так давно, еще до 7.7, и, тем более, до 8.х.
Тут речь про 1С и поддерживаемые в ней технологии. OLE1/1 развился в OLE2.0, который потом превратился в ActiveX-компоненты.
Вот эти OLE2.0-ActiveX и использует 1С 8.х. И не использует 7.7.
А почему OLE, а не ActiveX? Микрософт запантентовала ActiveX, поэтому, чтобы ничего не нарушать - никто другой не называет подобную технологию "ActiveX" у себя. Хотя реализация аналогов, и очень близких, есть в других продуктах.
А OLE - оно не проприетарное. Вот поэтому тут 1С и "подобрало" эту технологию.
40 Serginio1
 
28.11.15
11:28
(39) ActiveX это обычно визуальные компоненты. Они тоже являются COM компонентами.
COM это иерархия интерфесов родителем которого является IUnknown
http://www.firststeps.ru/mfc/activex/r.php?18

СоздатьОбъект и Новый ComObject используют COM объекты реализующих IDispatch
http://www.e-reading.club/chapter.php/127274/101/Kidruk_-_KOMPAS-3D_V10_na_100__.html