Текущий архив: 2003.10.02;
Скачать: CL | DM;
Вниз
Как мне взять данные из 1С Найти похожие ветки
← →
Term (2003-09-10 11:35) [0]Проблема такая, просят написать программу которая бы просматривала бы данные в базах 1С. Открывать буду только read-only. У кого есть документация о полях и связях между таблицами. Или еще что посоветуете.
← →
Alexandr (2003-09-10 11:36) [1]COM юзай.
← →
Term (2003-09-10 11:41) [2]ну тут же нужно знать методы объекта, а я с 1С не знаком, я думал может просто непосредственно из баз всё данные получать, так как всё это будет по сети
← →
Alexandr (2003-09-10 11:43) [3]непосредственно из файлов БД - и думать забудь.
Ищи лучше описание методов COM.
Однозначно.
← →
Term (2003-09-10 11:45) [4]а где их искать то для 1С
← →
Term (2003-09-10 11:53) [5]ну народ ктонить чонить может дать за что можно зацепиться
← →
Alexandr (2003-09-10 11:56) [6]как где?
в документации, вестимо...
← →
Term (2003-09-10 12:02) [7]всё нашёл, большой сэнкс...
← →
kaif (2003-09-10 12:04) [8]Существует документация к 1С:Предприятие 7.7 "Описание встроенного языка". Две такие красно-желтые книги (том1,2). Идут в коробке лицензионной версии. Это все, что нужно. В Дельфи 6.0 и выше можно писать COM-методы на русском. Так что устанавливаешь связь с 1С. Как это сделать, описано в третьей книжке ("Конфигуратор") в маленькой главе про 1С, как COM-сервер.
← →
Term (2003-09-11 11:30) [9]обратился к 1С как к серверу OLE Automation:
var
proba:variant;
begin
proba:=CreateOleObject("V77M.Application");
proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","");
end;
а вот как мне получить, и залить в свою базу список всех сотрудников предприятия...
← →
Term (2003-09-11 11:44) [10]ну ктонить.... плиз
← →
sniknik (2003-09-11 11:49) [11]http://www.delphikingdom.ru/article/1c.htm
← →
LordOfSilence (2003-09-11 11:53) [12]Что-то типа следующего:
OLEWorkers = proba.CreateObject( "Справочник.Сотрудники" );
OLEWorkers.ВыбратьЭлементы();
while OLEWorkers.ПолучитьЭлемент() = 1 do begin
if OLEWorkers.ЭтоГруппа() = 1
then MyGroupList.Add("Это была группа");
else MyWorkerList.Add("А вот это бездельник-дармоед: " + OLEWorkers.Наименование);
end;
← →
Term (2003-09-11 11:55) [13]спасибо буду разбиратьсЯ
← →
Term (2003-09-11 12:12) [14]попробывал для начала это:
var
proba,proba1:OLEVariant;
begin
proba:=CreateOleObject("V1CEnterprise.Application");
proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","");
proba1:=proba.CreateObject("Справочник.Номенклатура");
вроде аналогично тому что сказанно в ссылке, однако вываливается исключение "Неудачная попытка создания объекта (Справочник.Номенклатура)0"
как быть....
← →
LordOfSilence (2003-09-11 12:19) [15]Ты пыташься вломиться монопольно. Проверь, может в базе еще
какой-то юзер торчит?
← →
LordOfSilence (2003-09-11 12:23) [16]Мне немного трудно тебе советовать, так как я через Олю
работал только из 1С в 1С. Через Delphi не пробовал.
Попробуй также чуть по-другому.
Сделай строковую переменную, в нее предварительно загоняй
значение "Справочник.Номенклатура", а потом вызывай
CreateObject. Кстати, попробуй также WideString.
← →
Term (2003-09-11 12:23) [17]нет, я специально ради этого установил 1С чтобы экспериментировать, там точно никого нет я установил локальную версию
← →
MMF (2003-09-11 12:27) [18]>Term (11.09.03 12:12) [14]
Сделай проверку инициализации:
if proba.Initialize(proba.RMTrade,"/DC:\V7\DB /M","")=0 then
Exception.Create("Не удалось подключиться!");
← →
LordOfSilence (2003-09-11 12:29) [19]А в твоей базе-1С есть справочник Номенклатура?
← →
Term (2003-09-11 12:51) [20]есть, я демо базу открываю
← →
LordOfSilence (2003-09-11 13:36) [21]http://www.mista.ru/articles1c/ole.htm
← →
Term (2003-09-11 13:37) [22]
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;
теперь, когда пытаюсь копировать данные справочника в базу вываливается ошибка "не выбран элемент". Подскажите...
← →
Term (2003-09-11 13:43) [23]переделал вот так:
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;
говорит неверное имя атрибута, подскажите правильное...
← →
ZEE (2003-09-11 13:55) [24]минусы связи через OLE с 1С
- данные вытягивать долго
- не всегда работают 1С-овские процедуры в Дельфях (сам пробовал в 1С код пашет вери гуд, а при подстановке в Дельфю - тоже пашет, но частично)
все-таки можно вытягивать данные из базы которую пользует 1С, но тут большой минус: 1С-овцы эту базу так нашифровали, что разобраться там - большой трабл
хотя сам пробовал и напрямую данные тащить - получилось (1С:7.7, MsSQLserver)
и тут же ко второму методу плюс: скорость гораздо больше чем в оле (ну вобщем все минусы оле переходят тут в плюсы)
← →
LordOfSilence (2003-09-11 13:59) [25]Ну давай попробуем...
Я в "Ванессе" пишу на русском :-), поэтому практически не знаю
английские наименования методов.
1. GetItem() - это я так понимаю аналог ПолучитьЭлемент()
так вот, по правилам 1С, сначала выборка должна открываться,
а потом уже пробег по ней в цикле. Я же тебе написал
ВыбратьЭлементы(), а потом ПолучитьЭлемент() в цикле.
2. Ты, видимо, неправильно трактуешь назначение метода FindItem.
Действительно должна быть открыта сначала выборка, или
справочник должен быть спозиционирован на какой-то свой
элемент. В момент вызова FindItem он только создан (как тип).
Но где находится "курсор", пока еще неизвестно.
Поэтому когда ты вызываешь getattrib, ему неоткуда появиться.
Я понимаю все сложности, так как Delphi-мышление и 1Совское
весьма не совпадают по многим вопросам. То есть ты ожидаешь,
что создал объект (по делфийски) и все, пошел молотить:
First(), Last() и т.д. В 1С немного не так. :-)
← →
LordOfSilence (2003-09-11 14:05) [26]По-поводу прямого доступа:
ZEE © (11.09.03 13:55) [24] прав.
В MSSQL намного удобнее смотреть связи, делать запросы
с объединениями и т.д. Я лично сам так и работаю, когда есть
необходимость. Для справки: в каталоге с базой лежит файл
*.DD или *.DDS. Там описана струтура данных. Открой файл
в текстовом редакторе, задай поиск по строке. Например,
"Сотрудники". Будет найдено описание этого справчника.
Таблица будет называться scXX, где ХХ - это цифры. Откроешь
файл с таким именем и увидишь справочник сотрудников.
← →
Term (2003-09-11 14:28) [27]спасибо ща буду пробывать
← →
Term (2003-09-11 16:21) [28]
> необходимость. Для справки: в каталоге с базой лежит файл
> *.DD или *.DDS. Там описана струтура данных. Открой файл
> в текстовом редакторе, задай поиск по строке. Например,
> "Сотрудники". Будет найдено описание этого справчника.
> Таблица будет называться scXX, где ХХ - это цифры. Откроешь
> файл с таким именем и увидишь справочник сотрудников.
это то что надо, спасибо, а то над этим OLEшей колдую уже весь день.
← →
LordOfSilence (2003-09-11 16:30) [29]Ты все же не торопись делать выводы. Через Олю "правильней". :-)
Сама фирма 1С вроде не приветствует прямую работу со своими
базами. По-крайней мере надо очень четко понимать что ты делаешь.
Хотя, если ты только читаешь данные, то пуркуа бы и не па? :-)
Будет заметно быстрей, во всяком случае.
← →
MMF (2003-09-11 17:46) [30]>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 17:59) [31]2 MMF © (11.09.03 17:46) [30]
Погодь, не пугай человека раньше времени. :-)
← →
Е-Моё имя (2003-09-12 09:40) [32]я напрямую из MSSQL вытягиваю данные, проблем пока не было ;)
Страницы: 1 вся ветка
Текущий архив: 2003.10.02;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.009 c