Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / 1с + C# проблема создания объекта / 9 сообщений из 9, страница 1 из 1
20.04.2011, 08:13
    #37223814
KorotkovMikl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
Здравствуйте, возникла такая проблема при взаимодействии 1с из программы
Есть код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
object obj;
            try
            {
                string appProgID = "V77.Application";
                // Запускаем 1C
                obj = Activator.CreateInstance(Type.GetTypeFromProgID(appProgID));

                Object[] arg = new Object[3];
                arg[0] = obj.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, obj, null);
                arg[1] = @"/d"+textBox1.Text+" /n /p";
                arg[2] = ""; // @"NO_SPLASH_SHOW";

                bool OK = (Boolean)obj.GetType().InvokeMember(@"Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, obj, arg);

                if (!OK)
                    MessageBox.Show(@"Ошибка подключения 1С:Предприятие");
                else
                {
                    arg = new Object[1];
                    arg[0] = @"Справочник.Валюты";

                    object book = obj.GetType().InvokeMember(@"CreateObject", BindingFlags.Public | BindingFlags.InvokeMethod, 
                        null, obj, arg);//Здесь вываливается Exception Неудачная попытка создания объекта (Справочник.Валюты): 0   

                    if (book == null)
                        Console.WriteLine(@"Ошибка создания справочника ""Валюты""");
                    else
                    {
                        book.GetType().InvokeMember(@"ПорядокКодов", BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null);

                        Double result = (Double)book.GetType().InvokeMember(@"ВыбратьЭлементы",
                            BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null);

                        if (result == 1) OK = true; else OK = false;

                        if (OK)
                        {
                            result = 0;
                            Int32 counter = 0;

                            do
                            {
                                result = (Double)book.GetType().InvokeMember(@"ПолучитьЭлемент",
                                BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null);

                                if (result == 1)
                                {
                                    object element = book.GetType().InvokeMember(@"ТекущийЭлемент",
                                    BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null);

                                    if (element != null)
                                    {
                                        counter++;

                                        String name = (String)element.GetType().InvokeMember(@"Наименование",
                                            BindingFlags.Public | BindingFlags.GetProperty, null, element, null);

                                        Console.WriteLine(counter.ToString() + @": " + name);

                                        book.GetType().InvokeMember(@"Курс",
                                            BindingFlags.SetProperty, null, book, new object[] { 1 });

                                        book.GetType().InvokeMember(@"Записать",
                                            BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null);

                                        
                                    }
                                }
                            }
                            while (result == 1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                obj = null; // закрываем 1С:Предприятие 

                GC.Collect();
                GC.WaitForPendingFinalizers();
            }

При создании объекта Справочник.Валюты вываливается Exception Неудачная попытка создания объекта (Справочник.Валюты): 0
в чем может быть проблема. Заранее всем спасибо.
...
Рейтинг: 0 / 0
20.04.2011, 08:17
    #37223817
KorotkovMikl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
Версия 1с Предприятие 7.7 сетевая
...
Рейтинг: 0 / 0
20.04.2011, 08:34
    #37223825
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
порадовал момент
Код: plaintext
if (result == 1) OK = true; else OK = false;
...
Рейтинг: 0 / 0
20.04.2011, 08:37
    #37223829
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
Элементы справочника 7.7 вообще то создаются не через CreateObject, а через методы Новый() и НоваяГруппа()
хотя уже давно в 7.7 не работаю, может ошибся
...
Рейтинг: 0 / 0
20.04.2011, 08:48
    #37223835
KorotkovMikl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
Nafпорадовал момент
Код: plaintext
if (result == 1) OK = true; else OK = false;

Код был скопирован с какого то сайта в качестве примера)))
Попробовал так
Код: plaintext
1.
2.
arg = new Object[1];
arg[0] = @"Справочник.Валюты";
object book = obj.GetType().InvokeMember(@"Новый", BindingFlags.Public | BindingFlags.InvokeMethod, null, obj, arg);
выдает ошибку Неизвестное имя. (Исключение из HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
...
Рейтинг: 0 / 0
20.04.2011, 09:07
    #37223850
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
а так:
Код: plaintext
1.
2.
dynamic dynobj = obj;
dynamic book = dynobj.CreateObject(@"Справочник.Валюты");
book.Новый();
...
Рейтинг: 0 / 0
20.04.2011, 09:44
    #37223900
KorotkovMikl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
Nafа так:
Код: plaintext
1.
2.
dynamic dynobj = obj;
dynamic book = dynobj.CreateObject(@"Справочник.Валюты");
book.Новый();

Попробовал так, выдает ошибку Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
26.07.2011, 09:33
    #37366826
hotcoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
У меня похожая проблема. Код C#. Версия 1С 7.7.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var v77 = Type.GetTypeFromProgID("V77.Application", true);
inst = Activator.CreateInstance(v77);
 
var type = inst.GetType();
 
var args = new Object[3];
args[0] = type.InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, inst, null);
args[1] = @"/d D:1С_Data /n /p";
args[2] = "NO_SPLASH_SHOW";
 
bool ok = (Boolean) inst.GetType().InvokeMember("Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, inst, args);
if (ok)
{
	args = new object[] {null};
	var r = type.InvokeMember("Kol", BindingFlags.InvokeMethod, null, inst, args); // Ошибка: Неизвестное имя. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
}

Если запустить 1С в монопольном режиме, то на InvokeMember("Kol") генерирует исключение "Неизвестное имя".
Если 1С запустить в обычном режиме, что InvokeMember("Initialize") вообще возвращает "false".
Если 1С не запущена, то мой код работает, а InvokeMember("Kol") возвращает "2.0" - как и написано в глобальном модуле конфигурации 1С-ки.

Даже и не представляю как делать... Мне нужно в реальном времени записывать данные в справочник 1С
...
Рейтинг: 0 / 0
27.07.2011, 12:11
    #37368647
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1с + C# проблема создания объекта
hotcoder,
Соединение = ....
Валюты= Соединение.СоздатьОбъект("Справочник.Валюты");
Валюты.новый();
Валюты.курс =5;
Валюты.записать();
типа так должно быть
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / 1с + C# проблема создания объекта / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]