Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:51

Как правильно читать "Счета Фактур"

Автор swordholder, 04 мая 2011, 17:32

0 Пользователей и 1 гость просматривают эту тему.

swordholder

Есть у меня в 1С пункт "Счета-фактуры" в меню "Журналы"
Как прочитать все данные из "счетов фактур" на C# .NET используя OLE. Местоположение данных:"Журналы"->"Счета-фактуры выданные".

Версия 1C: 7.7
База: МСФО
Тип базы: dBase


            Type t = null;
            Object obj = null;    // Ссылка на COM сервер 1С
            Object objVal = null; // Ссылка на документ в базе
            Object objDoc = null; // Ссылка на объект документ
            Boolean OK = false;
            string userCatPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
            object v77 = null;
            object retVal = null;


            try
            {                             
                t = Type.GetTypeFromProgID(txtApplication.Text);
                obj = System.Activator.CreateInstance(t);
               
                Object[] arg = new Object[3];
                arg[0] = obj.GetType().InvokeMember(@"RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null,obj, null);
                arg[1] = @"/d" + txtDbPath.Text + @" /n /p";

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

                if (!OK)
                {
                    MessageBox.Show("Не удалось соедениться с программой 1C ","Ошибка !!!", MessageBoxButtons.OK,MessageBoxIcon.Error);
                    return;
                }

                arg = new Object[1];
                arg[0] = @"Журналы.Счета-фактуры выданные";
               
              //вот здесь выдает ошибку, unknown element не распознает "Журналы.Счета-фактуры выданные"
                object book = obj.GetType().InvokeMember(@"CreateObject",
                    BindingFlags.Public | BindingFlags.InvokeMethod, null, obj, arg);

                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);

                                   MessageBox.Show(counter.ToString() + @": " + name );

                                }
                            }
                        }
                        while (result == 1);
                    }
                }               

            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
            finally
            {

                Marshal.Release(Marshal.GetIDispatchForObject(obj));
                Marshal.ReleaseComObject(obj);
                obj = null;
            }


Когда этим же самым путем вытаскиваю список Валют ("Справочники"->"Валюты") без проблем вытаскиваются. А вот счета фактур не распознается.

swordholder

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


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск