Имя: Пароль:
1C
1С v8
Интеграция C# и 1С 8.1
,
0 Night_Wolf
 
19.03.12
10:37
Суть задачи - надо написать сайт, где контрагенты смогут видеть задолженность на дату. Средства: выбрал C#. В итоге - хочу достучаться до данных запросом. Всё получается создать, кроме одного - не получается из C# установить параметры запроса (пока только дату остатков).

Собственно код:

var V81ComConnector = Type.GetTypeFromProgID("V81.ComConnector");          
           var V81 = Activator.CreateInstance(V81ComConnector);
           Object[] arguments = {@"Путь к базе"};
           var v8_base = V81ComConnector.InvokeMember("Connect",BindingFlags.Public|BindingFlags.InvokeMethod|BindingFlags.Static,null,V81,arguments);
         
           // Теперь тоже самое, но через запрос
           var textQuery = "ВЫБРАТЬ СчетФактура.Ссылка ИЗ Документ.СчетФактура КАК СчетФактура ГДЕ СчетФактура.Дата МЕЖДУ &НачДата И &КонДата УПОРЯДОЧИТЬ ПО СчетФактура.Дата";
           // Объект "Запрос"
           object v8_Query = V81.GetType().InvokeMember("NewObject", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v8_base, new object[] { "Запрос", textQuery });
           // Установим параметры
           object v8_ND = V81.GetType().InvokeMember("УстановитьПараметр", BindingFlags.SetProperty, null, v8_Query, new object[] { "НачДата", Convert.ToDateTime("2011/01/01") });
           object v8_KD = V81.GetType().InvokeMember("УстановитьПараметр", BindingFlags.SetProperty, null, v8_Query, new object[] { "КонДата", Convert.ToDateTime("2011/01/31") });

           // Выполняем
           object v8_QueryStep = V81.GetType().InvokeMember("Выполнить", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v8_Query, null);
           // Выборка
           object v8_QueryExec = V81.GetType().InvokeMember("Выбрать", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v8_QueryStep, null);


------------------------------------------
Вот собственно в двух строках выше - не удаётся установить параметры.
------------------------------------------          


int i = 0;
           // Открываем поток для чтения
           StreamWriter sw = new StreamWriter("D:\\Data from C#.txt");

Подскажите пожалуйста, как передать параметры в запрос.
1 Night_Wolf
 
19.03.12
10:38
Немного не там написал. Ошибка в строках, где дату пытаюсь установить.
2 х86
 
19.03.12
10:39
(0)ДАТАВРЕМЯ()
3 Night_Wolf
 
19.03.12
10:40
(2) - Что ДАТАВРЕМЯ()? Я мысли пока плохо читаю :)
4 Ненавижу 1С
 
гуру
19.03.12
10:40
совет:

1. вместо сложных GetType().InvokeMember(...) используй более простой в написании тип dynamic
2. разве тип DateTime не совместим с 1С?
5 Night_Wolf
 
19.03.12
10:41
(4) - можно про dynamic поподробнее? Я уже встречал такие советы (думаю что хороший), но нигде описания не могу найти как пра-льно надо писать на нём. Подскажи пожалста - где код посмотреть?
6 Night_Wolf
 
19.03.12
10:45
Текст ошибки: Это выражение вызывает побочный эффект и не может быть рассчитано (по английски только)
7 х86
 
19.03.12
10:46
ГДЕ
   СчетФактура.Дата МЕЖДУ ДАТАВРЕМЯ(2012, 1, 1) И ДАТАВРЕМЯ(2012, 4, 1)
8 Alexey_Morov
 
19.03.12
10:49
(4)

Как же так??? DateTime совместим с 1С! Я сам так делал! Дома посмотрю и напишу код.
9 Night_Wolf
 
19.03.12
10:49
(7) - Ясно. А как быть если пользователь на форме будет задавать дату? Или например - если нужно посмотреть остатки на дату с учетом контрагента - как сделать отбор по контрагенту?
10 Night_Wolf
 
19.03.12
10:54
(4) - a как подцепить этот dynamic? Дайте хоть немного информации начальной - ну или укажите направление куда копать пожалуйста.
11 Ненавижу 1С
 
гуру
19.03.12
10:59
в таком духе

dynamic V81 = Activator.CreateInstance(V81ComConnector);
string arguments = @"Путь к базе";
dynamic v8_base = V81ComConnector.Connect(arguments);
string textQuery = ....;
dynamic v8_Query = v8_base.NewObject("Запрос",textQuery);
v8_Query.УстановитьПараметр(...);
12 Night_Wolf
 
19.03.12
11:08
(11) - V81.ComConnector.Connect() - Пишет - "Нет метода такого".
13 Night_Wolf
 
19.03.12
11:10
(11) - всё, надо так: V81.Connect(arguments);
14 Night_Wolf
 
19.03.12
11:23
Спасибо всем!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.