Имя: Пароль:
1C
1С v8
8.2, COM-соединение, C#, dynamic
0 seofernandez
 
28.04.12
15:54
C#
****************
V82.COMConnector v82conn = new V82.COMConnectorClass();
dynamic handle = v82conn.Connect(@"file=d:\1c\InfoBase\Evita; usr=Администратор;pwd=secret;");
dynamic q = handle.NewObject("Запрос");
q.Text = @"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Номенклатура
|ИЗ
|    Справочник.Номенклатура";

dynamic result = q.Execute(); // !!!
dynamic data = result.Select();

while (data.Next())
{
   dynamic НоменклатураОбъект = data.Номенклатура.ПолучитьОбъект();
   Shell.Log(НоменклатураОбъект.Наименование);
}
****************
System.NullReferenceException: Object reference not set to an instance of an object.
  at System.Dynamic.ExcepInfo.GetException()
  at System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepInfo& excepInfo, UInt32 argErr, String message)
  at CallSite.Target(Closure , CallSite , ComObject )
  at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
  at CallSite.Target(Closure , CallSite , Object )
  at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
  at shell.HomePage.Action_Click(Object sender, EventArgs e) in d:\projects\shell\HomePage.cs:line 41
  at System.Windows.Forms.Control.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnClick(EventArgs e)
  at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
  at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
  at System.Windows.Forms.Control.WndProc(Message& m)
  at System.Windows.Forms.ButtonBase.WndProc(Message& m)
  at System.Windows.Forms.Button.WndProc(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
  at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
  at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
  at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
  at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
  at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
  at System.Windows.Forms.Application.Run(Form mainForm)
  at shell.Shell.Main(String[] args) in d:\projects\shell\Shell.cs:line 40
****************

Вылетает с исключением на строке помеченной '!!!'.
Кто работал с COM? Где там косяк может быть?
1 qeos
 
28.04.12
15:56
Object reference not set to an instance of an object.
2 Рэйв
 
28.04.12
15:56
Пометь ее как "лыбдыр"
3 izekia
 
28.04.12
15:57
ой пля
4 Рэйв
 
28.04.12
15:59
(0)И вообще
Не считай нас нубами.

Скопируй полный текст ошибки
5 seofernandez
 
28.04.12
16:08
Рэйв, чё за 'лыбдыр'?
6 Рэйв
 
28.04.12
16:10
(5)Тебе то что?:-)
7 seofernandez
 
28.04.12
16:11
Мне нужно чтоб эта муть заработала!!!!
Ты знаешь, что делать?
8 Рэйв
 
28.04.12
16:12
так работай.
Чтобы муть заработала. Никто не мешает.
9 Ненавижу 1С
 
гуру
28.04.12
16:14
НА КАКОЙ СТРОКЕ ВАЛИТСЯ?
10 Ненавижу 1С
 
гуру
28.04.12
16:14
+(9) туплю
11 seofernandez
 
28.04.12
16:15
dynamic result = q.Execute(); // !!!
Догадок пока нет...
12 Ненавижу 1С
 
гуру
28.04.12
16:15
в C# не нужны |
q.Text = @"ВЫБРАТЬ
   Номенклатура.Ссылка КАК Номенклатура
ИЗ
   Справочник.Номенклатура";
13 Serginio1
 
28.04.12
16:16
А в C# такая конструкция проходит?
А разве в C# | отрабатывает как разделитель строк?
14 izekia
 
28.04.12
16:19
(12) слава ненеавижу
15 Рэйв
 
28.04.12
16:19
ладно,Мне жена принесла офигительного леща!Он пока что мне интересней, чем некоторые:-)
16 seofernandez
 
28.04.12
16:19
Без | то же исключение и в том же месте...
17 Рэйв
 
28.04.12
16:20
**ушел пить пиво
18 izekia
 
28.04.12
16:21
(16) строчки не знаешь как в шарпе писать?
19 seofernandez
 
28.04.12
16:22
А что со строчками не так?
20 Serginio1
 
28.04.12
16:31
dynamic q = handle.NewObject("Запрос");
           q.Text = @"ВЫБРАТЬ 1 как поле";

           dynamic result = q.Выполнить(); // !!!

           dynamic data = result.Выбрать();

           while (data.Next())
           {
             
           }

работает
21 Ахиллес
 
28.04.12
16:34
(20) А не пофигу?

Запрос (Query)
Выполнить (Execute) Опаньки! И так тоже можно!
Синтаксис:

Выполнить()
Возвращаемое значение:

Тип: РезультатЗапроса; Неопределено.
22 seofernandez
 
28.04.12
16:38
ВЫБРАТЬ 1 как поле - Работает!

ВЫБРАТЬ Номенклатура.Ссылка КАК Номенклатура ИЗ Справочник.Номенклатура - Нет!
23 seofernandez
 
28.04.12
16:41
Serginio1, спасибо)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.