Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Вниз

Как мне взять данные из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.011 c
9-3700
Agent[007]
2003-03-26 17:58
2003.10.02
Какое событие?


3-3724
Alexei Klimov
2003-09-13 09:50
2003.10.02
Фильтр


14-4117
zzet
2003-09-13 11:00
2003.10.02
казино


8-3995
Rel_
2003-06-05 17:04
2003.10.02
Вращение вокруг точки


9-3701
Nuke
2003-03-22 22:05
2003.10.02
ПОМОГИТЕ ПЛИЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗЗ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский