Получить в Delphi справочник из "1С:Предприятие" по параметр

  • Автор темы Rema
  • Дата начала
R

Rema

Гость
#1
Появилась необходимость получить документ из платформы 1С, в которой конструкции
Док = Документы.ИмяДок и Док = Документы["ИмяДок"] считаются эквивалентными,
но в Delphi, при подключении к 1С через COMConnector, конструкция {doc := connect.Документы.ИмяДок;} работает,
а конструкция {name := 'ИмяДок'; doc := connect.Документы[name];} выдает сообщение: "Недопустимое число параметров"
Кто-нибудь знает как получить из 1С V8.1 документ, имя которого заранее неизвестно ?
 
N

neon2

Гость
#2
... но в Delphi, при подключении к 1С через COMConnector, конструкция {doc := connect.Документы.ИмяДок;} работает,
а конструкция {name := 'ИмяДок'; doc := connect.Документы[name];} выдает сообщение: "Недопустимое число параметров"
Посмотри здесь:
http://doc-prg.narod.ru/art_00012/art_00012.htm
об этом же, но по справочникам. Вариант решения предлагается.
И здесь:
http://doc-prg.narod.ru/art_00011/art_00011.htm

Кто-нибудь знает как получить из 1С V8.1 документ, имя которого заранее неизвестно ?
В принципе, документ - такой же объект метаданных, как и справочник, перечисление ...
Насчет метаданных - может здесь будет полезно :
http://doc-prg.narod.ru/art_00009/art_00009.htm
 
R

Rema

Гость
#3
Спасибо за подсказки. Метод по первой ссылке вполне подходящий, но требует вмешательства в конфигурацию 1С, а это не всегда возможно. Пришлось использовать следующую конструкцию:
name := 'ДокументМенеджер.ИмяДок'; doc := connect.NewObject(name);
 
R

Rema

Гость
#4
Вдогонку ещё вопрос: кто знает, как получить список пользователей до подключения к 1С, чтобы создать форму, аналогичную той, которая появляется при запуске 1С, и сформировать строку подключения интерактивно ?
 
S

sanekcool

Гость
#5
Пришлось использовать следующую конструкцию:
name := 'ДокументМенеджер.ИмяДок'; doc := connect.NewObject(name);
Приведите, пожалуйста, пример работы с такой конструкцией.
Как сделать перебор элементов документа/справочника?

Count := doc.Количество(); // Выдаёт ошибку "Method 'Количество' not supported by automation object"
if Count>0 then begin
i:=-1;
while i<(Count-1) do begin
i:=i+1;
elem:=doc.Получить(i); // Выдаёт ошибку "Method 'Получить' not supported by automation object"
end;
end;
 
R

Rema

Гость
#6
Например вот так:
obj := V1C.NewObject('DocumentManager.Name').Select();
while obj.Next() do ref := obj.GetObject();