Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно читать "счета фактур"
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Тематическое общение
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;
            }


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

arg[0] = @"Журналы.Счета-фактуры выданные"; - неправильно.
надо "Документы.ИмяДокументаВКонфигураторе"


book.GetType().InvokeMember(@"ПорядокКодов", BindingFlags.Public | BindingFlags.InvokeMethod, null, book, null); - лишнее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.