Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.54 MB
Время: 0.017 c
1-3948
tim5
2003-09-20 22:38
2003.10.02
Image и PopupMenu.


3-3729
Владимир
2003-09-12 20:51
2003.10.02
Первичный ключ


7-4141
GSergei
2003-07-18 16:03
2003.10.02
Процессы


3-3719
AlexWeb
2003-09-13 15:33
2003.10.02
Вопрос по UPPER...


1-3943
Mild
2003-09-18 13:53
2003.10.02
список классов