powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / 1с + C# проблема создания объекта
9 сообщений из 9, страница 1 из 1
1с + C# проблема создания объекта
    #37223814
KorotkovMikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, возникла такая проблема при взаимодействии 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
1с + C# проблема создания объекта
    #37223817
KorotkovMikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия 1с Предприятие 7.7 сетевая
...
Рейтинг: 0 / 0
1с + C# проблема создания объекта
    #37223825
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
порадовал момент
Код: plaintext
if (result == 1) OK = true; else OK = false;
...
Рейтинг: 0 / 0
1с + C# проблема создания объекта
    #37223829
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Элементы справочника 7.7 вообще то создаются не через CreateObject, а через методы Новый() и НоваяГруппа()
хотя уже давно в 7.7 не работаю, может ошибся
...
Рейтинг: 0 / 0
1с + C# проблема создания объекта
    #37223835
KorotkovMikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
1с + C# проблема создания объекта
    #37223850
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так:
Код: plaintext
1.
2.
dynamic dynobj = obj;
dynamic book = dynobj.CreateObject(@"Справочник.Валюты");
book.Новый();
...
Рейтинг: 0 / 0
1с + C# проблема создания объекта
    #37223900
KorotkovMikl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nafа так:
Код: plaintext
1.
2.
dynamic dynobj = obj;
dynamic book = dynobj.CreateObject(@"Справочник.Валюты");
book.Новый();

Попробовал так, выдает ошибку Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
1с + C# проблема создания объекта
    #37366826
hotcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня похожая проблема. Код 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
1с + C# проблема создания объекта
    #37368647
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hotcoder,
Соединение = ....
Валюты= Соединение.СоздатьОбъект("Справочник.Валюты");
Валюты.новый();
Валюты.курс =5;
Валюты.записать();
типа так должно быть
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / 1с + C# проблема создания объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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