Имя: Пароль:
IT
 
Провести документ из C++
0 The_Immortal
 
25.01.14
01:54
Всех приветствую!

Друзья, быть может, кто-нибудь работал с 1С из C++ Builder'а?

Необходимо провести документ, соединившись через COM.

Максимально упростил код:


Variant v8, con;
String path = "File=\"C:\\InfoBase1\"";

v8 = CreateOleObject("V82.COMConnector");
con = v8.OleFunction("Connect",WideString(path));

Variant doc = con.OlePropertyGet("Документы").OlePropertyGet("ПоступлениеДенег").OleFunction("СоздатьДокумент");
doc.OlePropertySet("Дата", Now());
doc.OleFunction("Записать");


Не могу понять каким образом впихнуть параметр "РежимЗаписиДокумента.Проведение" в OleFunction, чтобы выполнить "Записать(РежимЗаписиДокумента.Проведение)".

Подскажите, пожалуйста.


Спасибо!
1 kokamoonga
 
25.01.14
02:38
(0) А по аналогии с этим не работает?

con.OlePropertyGet("Документы").OlePropertyGet("ПоступлениеДенег").OleFunction("СоздатьДокумент");

Что-то вроде:

param = con.OlePropertyGet("РежимЗаписиДокумента").OlePropertyGet("Проведение")
doc.OleFunction("Записать", param);


Вроде бы логика подсказывает, что как-то так должно быть.
2 kokamoonga
 
25.01.14
02:43
И кстати, разве через точку это нельзя писать? Или есть какие-то соображения почему нужно использовать именно геттеры? Это не холивара ради, интересно.

Я имею в виду например:

con.Документы.ПоступлениеДенег.СоздатьДокумент()

вместо:

con.OlePropertyGet("Документы").OlePropertyGet("ПоступлениеДенег").OleFunction("СоздатьДокумент");


Вроде бы в документации описан именно такой вариант работы.
3 The_Immortal
 
25.01.14
03:01
(1) Так я пробовал, но увы, получаю на это "Неизвестное имя".

И действительно, такого объекта как "РежимЗаписиДокумента" в 1С нету. Это тип... Как привестись к этому типу - не могу понять :(

(2) На "con.Документы.ПоступлениеДенег.СоздатьДокумент()" получаю ошибку:
'Документы' is not a member of 'Variant' - что вполне логично.
4 kokamoonga
 
25.01.14
03:13
(3) Какой же это тип, если это системное перечисление? :)

По идее оно должно быть доступно для объекта con
5 The_Immortal
 
25.01.14
03:21
(4) Очень сильно ступил.
Ошибся в синтаксисе...

Большое Вам спасибо!
6 kokamoonga
 
25.01.14
03:24
(5) Не за что:) Просто угадал