Вверх ↑
Ответов: 542
Рейтинг: 12
#1: 2009-02-02 11:35:43 ЛС | профиль | цитата
Alexbootch писал(а):
можно воспользоваться, например, компонентами OLEdb и выгрузить что нужно из 1С

Очень интересно, а у меня попытка использования OLEdb для этой цели ни чем хорошим не закончилась
------------ Дoбавленo:

Справочник писал(а):
Структура таблиц 1С хранится в файле 1СV7.DDS
Находишь таблицу справочника SCXXX, а дальше в зависимости от ситуации...

1C это ж не просто база данных в обычном пониманиия, что бы обращатся кней как к базе нужно разбиратся со структурой базы отдаживать привильные SQL запросы с учетом структуры. Да и самы данные разнесены па разным файлам. лично у меня база 1С занимает 2Гига. в 144-х dbf файлах.
Поэтому лучще пользоватся OLE интерфейсом который предлагает сам 1С. Там и методы соотвествующие есть.

Вчера из Delphi у меня получилось все или почти все. Вот проблема корректно перенсти все в HiAsm
Например было бы удобно иметь компнент которому я перадаю имя справочника а он мне дает доступ к данным этого справочника и т.д.
или же вызиваю встроенный отчет по имены а он возвращает результат вычислении. Так что дотсуп просто как базе бесполезен.
Вот попытка подключения через OLEdb

#sha
Add(OLEdb,11788416,399,133)
{
Point(onError)
link(onConnect,11978735:doMessage,[(457,139)(457,111)])
link(Driver,13030624:Text,[])
link(onError,2469999:doMessage,[(443,146)(443,160)])
}
Add(Edit,13030624,399,77)
{
Left=20
Top=10
Width=735
Text="Provider=SQLOLEDB.1;User ID=Админ;Password=123;Initial Catalog=D:\Archiv\DB_Konf_090108_0810\;Data Source=t;Application Name=1C"
}
Add(Button,4202735,294,133)
{
Left=290
Top=115
link(onClick,11788416:doOpen,[])
}
Add(Message,11978735,483,105)
{
Caption="Ok"
}
Add(Message,2469999,483,154)
{
Caption="Error"
}

Почему то что в Delphi так просто написать, так трудно перенести в HiAsm

#pas
procedure TForm1.Button1Click(Sender: TObject);
Var
ResOpen : integer;
begin
Ole1C := Unassigned;
Ole1C := CreateOleObject(Edit1.Text);
ResOpen:=Ole1C.Initialize(Ole1C.RMTrade, Edit2.Text, '');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items.Clear;
OleFizLica := Unassigned;
if not VarIsEmpty(Ole1C) then begin
OleFizLica:=Ole1C.CreateObject('Справочник.Номенклатура');
if not VarIsEmpty(OleFizLica) then begin
if OleFizLica.ВыбратьЭлементы>0 then begin
while OleFizLica.ПолучитьЭлемент>0 do
begin
ListBox1.Items.Add(OleFizLica.Код+' '+OleFizLica.Наименование);
end;
end;
end;
end;
OleFizLica := Unassigned;
end;
------------ Дoбавленo:

После того как удалось создать компонент подключения к 1С, Сылка на объект подключения хранится в типе
[i] private
Ole1C : OleVariant;[/i]
в области private первого компонента а каким образом еге передать в следующий компонент что бы через него обращатся к данным 1С
В другом компоненте нужно выполнять команду такого типа OleFizLica:=Ole1C.CreateObject('Справочник.Номенклатура');
карма: 0

0