Запуск внешний обработки 1Сv7/1Cv8 из C#

by AigizK 12. августа 2008 18:54

Для того чтоб запустить внешнюю обработку на семерке надо:

object v77 = null;
            object retVal = null;

            try
            {
                string BaseCatalog,
                        User = "",
                        Pass = "";
                object[] arg = new object[3];
                Type lateBoundType = Type.GetTypeFromProgID("v77.Application", true);
                v77 = Activator.CreateInstance(lateBoundType);

                arg[0] = lateBoundType.InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v77, null);
                arg[1] = @"/D" + "D:\\Work\\База 1С" + " /N" + User + " /P" + Pass;
                arg[2] = "NO_SPLASH_SHOW";

                lateBoundType.InvokeMember("Initialize", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v77, arg);

                object[] arg1 = new object[] { "ОткрытьФорму(\"Обработка\", ,\"C:\\Parts\\СоздатьЗаказ.ert\")" };
                // запускаем обработку если Р=1 то выполнено успешно,если 0 то невыполнено
                retVal = lateBoundType.InvokeMember("EvalExpr", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v77, arg1);

            }
            catch (Exception er)
            { }
            finally
            {
                // убиваем 1С
                System.Runtime.InteropServices.Marshal.ReleaseComObject(v77);
                GC.GetTotalMemory(true);
            }

Для восьмерки надо:

1.Создать метод в обработке с атрибутом эксопрт

функция МояПроцедура() экспорт
    возврат 5;
конецфункции

2.В программе:

 var v81comType = Type.GetTypeFromProgID("V8.Application");
            var v81 = Activator.CreateInstance(v81comType);

            Object[] arguments = { @"File=""D:\Work\База 1С"";Usr=""Администратор"";" };
            object trade = v81comType.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v81, arguments);

            object v8_componenta = v81comType.InvokeMember("NewObject", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v81, new object[] { "ВнешниеОбработкиМенеджер" });

            object[] arg = { "c:\\111.epf" };
            object myCompanent = v81comType.InvokeMember("Создать", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v8_componenta, arg);

            object myForm = v81comType.InvokeMember("МояПроцедура", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, myCompanent, null);
           
            System.Runtime.InteropServices.Marshal.ReleaseComObject(v81);
            GC.GetTotalMemory(true);

Текущий рейтинг: 5.0 (5 голосов)

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

Комментарии

Комментарии закрыты

О нас

Это блог компании Инлайн. Мы занимаемся разработкой сайтов, корпоративных порталов и корпоративных информационных систем на основе новейших технологии Microsoft  - ASP.NET, SharePoint и Silverlight. А в этом блоге мы размещаем самые последние новости в области разработке для web.

Облако тегов