Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как мне взять данные из 1С


Страницы:   1 2

Term ©   (2003-09-10 11:35:00) 

Проблема такая, просят написать программу которая бы просматривала бы данные в базах 1С. Открывать буду только read-only. У кого есть документация о полях и связях между таблицами. Или еще что посоветуете.


Е-Моё имя   (2003-09-12 09:40:00) [1]

я напрямую из MSSQL вытягиваю данные, проблем пока не было ;)


LordOfSilence   (2003-09-11 17:59:00) [2]

2 MMF © (11.09.03 17:46) [30]

Погодь, не пугай человека раньше времени. :-)


MMF   (2003-09-11 17:46:00) [3]

>Term (11.09.03 16:21) [28]
Тебя ждут неприятные открытия по периодическим реквизитам и перечислениям. DD/DDS - только частичная проекция структуры базы данных из MD. А все в целом можно понять из Main MataDataStream - потока в компаунд-файле конфигурации 1cv7.md
Тебе может помочь http://1c.hippo.ru/cgi-bin/predownl.cgi?id=2046в плане просмотра DD/DDS/MD.


LordOfSilence   (2003-09-11 16:30:00) [4]

Ты все же не торопись делать выводы. Через Олю "правильней". :-)
Сама фирма 1С вроде не приветствует прямую работу со своими
базами. По-крайней мере надо очень четко понимать что ты делаешь.
Хотя, если ты только читаешь данные, то пуркуа бы и не па? :-)
Будет заметно быстрей, во всяком случае.


Term   (2003-09-11 16:21:00) [5]


> необходимость. Для справки: в каталоге с базой лежит файл
> *.DD или *.DDS. Там описана струтура данных. Открой файл
> в текстовом редакторе, задай поиск по строке. Например,
> "Сотрудники". Будет найдено описание этого справчника.
> Таблица будет называться scXX, где ХХ - это цифры. Откроешь
> файл с таким именем и увидишь справочник сотрудников.

это то что надо, спасибо, а то над этим OLEшей колдую уже весь день.


Term   (2003-09-11 14:28:00) [6]

спасибо ща буду пробывать


LordOfSilence   (2003-09-11 14:05:00) [7]

По-поводу прямого доступа:
ZEE © (11.09.03 13:55) [24] прав.
В MSSQL намного удобнее смотреть связи, делать запросы
с объединениями и т.д. Я лично сам так и работаю, когда есть
необходимость. Для справки: в каталоге с базой лежит файл
*.DD или *.DDS. Там описана струтура данных. Открой файл
в текстовом редакторе, задай поиск по строке. Например,
"Сотрудники". Будет найдено описание этого справчника.
Таблица будет называться scXX, где ХХ - это цифры. Откроешь
файл с таким именем и увидишь справочник сотрудников.


LordOfSilence   (2003-09-11 13:59:00) [8]

Ну давай попробуем...
Я в "Ванессе" пишу на русском :-), поэтому практически не знаю
английские наименования методов.
1. GetItem() - это я так понимаю аналог ПолучитьЭлемент()
так вот, по правилам 1С, сначала выборка должна открываться,
а потом уже пробег по ней в цикле. Я же тебе написал
ВыбратьЭлементы(), а потом ПолучитьЭлемент() в цикле.
2. Ты, видимо, неправильно трактуешь назначение метода FindItem.
Действительно должна быть открыта сначала выборка, или
справочник должен быть спозиционирован на какой-то свой
элемент. В момент вызова FindItem он только создан (как тип).
Но где находится "курсор", пока еще неизвестно.
Поэтому когда ты вызываешь getattrib, ему неоткуда появиться.

Я понимаю все сложности, так как Delphi-мышление и 1Совское
весьма не совпадают по многим вопросам. То есть ты ожидаешь,
что создал объект (по делфийски) и все, пошел молотить:
First(), Last() и т.д. В 1С немного не так. :-)


ZEE   (2003-09-11 13:55:00) [9]

минусы связи через OLE с 1С
- данные вытягивать долго
- не всегда работают 1С-овские процедуры в Дельфях (сам пробовал в 1С код пашет вери гуд, а при подстановке в Дельфю - тоже пашет, но частично)

все-таки можно вытягивать данные из базы которую пользует 1С, но тут большой минус: 1С-овцы эту базу так нашифровали, что разобраться там - большой трабл
хотя сам пробовал и напрямую данные тащить - получилось (1С:7.7, MsSQLserver)
и тут же ко второму методу плюс: скорость гораздо больше чем в оле (ну вобщем все минусы оле переходят тут в плюсы)


Term   (2003-09-11 13:43:00) [10]

переделал вот так:
var
proba,Sprav_sotr:OLEVariant;
begin
proba:=CreateOleObject("V77.Application");
proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","");
if proba.Initialize(proba.RMTrade,"","")=0 then
Exception.Create("Не удалось подключиться!");
Sprav_sotr:=proba.CreateObject("Справочник.Сотрудники");
Sprav_sotr.FindItem(Sprav_sotr.getattrib("ФИО"));

while Sprav_sotr.GetItem>0 do
begin
Form1.Table1.Append;
Form1.Table1.FieldByName("Fio").AsString:=Sprav_sotr.getAttrib("ФИО");
Form1.Table1.Post;
end;

proba:=UnAssigned;


говорит неверное имя атрибута, подскажите правильное...


Term   (2003-09-11 13:37:00) [11]

var
proba,Sprav_sotr:OLEVariant;
begin
proba:=CreateOleObject("V77.Application");
proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","");
if proba.Initialize(proba.RMTrade,"","")=0 then
Exception.Create("Не удалось подключиться!");
Sprav_sotr:=proba.CreateObject("Справочник.Сотрудники");

while Sprav_sotr.GetItem>0 do
begin
Sprav_sotr.FindItem(Sprav_sotr.getattrib("ФИО"));
Form1.Table1.Append;
Form1.Table1.FieldByName("Fio").AsString:=Sprav_sotr.getAttrib("ФИО");
Form1.Table1.Post;
end;

proba:=UnAssigned;


теперь, когда пытаюсь копировать данные справочника в базу вываливается ошибка "не выбран элемент". Подскажите...


LordOfSilence   (2003-09-11 13:36:00) [12]

http://www.mista.ru/articles1c/ole.htm


Term   (2003-09-11 12:51:00) [13]

есть, я демо базу открываю


LordOfSilence   (2003-09-11 12:29:00) [14]

А в твоей базе-1С есть справочник Номенклатура?


MMF   (2003-09-11 12:27:00) [15]

>Term (11.09.03 12:12) [14]
Сделай проверку инициализации:
if proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","")=0 then
Exception.Create("Не удалось подключиться!");


Term   (2003-09-11 12:23:00) [16]

нет, я специально ради этого установил 1С чтобы экспериментировать, там точно никого нет я установил локальную версию


LordOfSilence   (2003-09-11 12:23:00) [17]

Мне немного трудно тебе советовать, так как я через Олю
работал только из 1С в 1С. Через Delphi не пробовал.
Попробуй также чуть по-другому.
Сделай строковую переменную, в нее предварительно загоняй
значение "Справочник.Номенклатура", а потом вызывай
CreateObject. Кстати, попробуй также WideString.


LordOfSilence   (2003-09-11 12:19:00) [18]

Ты пыташься вломиться монопольно. Проверь, может в базе еще
какой-то юзер торчит?


Term   (2003-09-11 12:12:00) [19]

попробывал для начала это:

var
proba,proba1:OLEVariant;
begin
proba:=CreateOleObject("V1CEnterprise.Application");
proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","");
proba1:=proba.CreateObject("Справочник.Номенклатура");

вроде аналогично тому что сказанно в ссылке, однако вываливается исключение "Неудачная попытка создания объекта (Справочник.Номенклатура)0"
как быть....


Term   (2003-09-11 11:55:00) [20]

спасибо буду разбиратьсЯ


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо