Имя: Пароль:
1C
1С v8
Не получается подключится к другой базе
0 never_be
 
20.06.13
18:35
Вот запрос:

        V8 = Новый COMОбъект("V8.Application");
            БД = V8.Connect("File=""D:\1C\reports"";Usr=""report"";");
            Запрос = БД.NewObject("Запрос");
         Запрос.Текст = "ВЫБРАТЬ
            |ОтчетыОфисовРасходыОбороты.СуммаРасход,
            |ОтчетыОфисовРасходыОбороты.СуммаОборот,
            |ОтчетыОфисовРасходыОбороты.Офис,
            |ОтчетыОфисовРасходыОбороты.ТипРасходов
                |ИЗ
            |РегистрНакопления.ОтчетыОфисовРасходы.Обороты(&ДатаНачала, &ДатаОкончания, Период, Офис = &Офис) КАК ОтчетыОфисовРасходыОбороты";
            Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачалаДР));
            Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончанияДР));
            Запрос.УстановитьПараметр("Офис",Справочники.Офисы.НайтиПокоду(КонтрагентДляПоискаКод));
РезультатЗапроса = Запрос.ВыполнитьюВыбрать();

Вылетает на первой же строке с ошибкой:

{Обработка.Отчеты.Форма.Форма.Форма(642)}: Ошибка при вызове конструктора (COMОбъект)
            V8 = Новый COMОбъект("V8.Application");
по причине:
Недопустимая строка с указанием класса
1 Beduin
 
20.06.13
18:37
(0) Тебе винда сказал, что не знает ничего про V8.Application
2 never_be
 
20.06.13
18:37
(1) Ну и, подключиться как ? В всех примерах такое же.
3 Beduin
 
20.06.13
18:41
(2) Приведи пример примера.
4 Cyberhawk
 
20.06.13
18:41
V82.Application
5 Ёпрст
 
20.06.13
18:42
V82.Application
V82.COMConnector
6 never_be
 
20.06.13
18:48
(5) (4) Конец рабочего дня, мозг отключен.
7 never_be
 
20.06.13
18:50
Пошли дальше :)

{Обработка.Отчеты.Форма.Форма.Форма(644)}: Значение не является значением объектного типа (NewObject)
            Запрос = БД.NewObject("Запрос");
8 Ёпрст
 
20.06.13
18:52
(7)
NewObject("Запрос"); такое можно писать только для

V77.Application
9 never_be
 
20.06.13
18:53
(7) V82.COMConnector
10 Cyberhawk
 
20.06.13
18:53
(7) Запрос = V8.NewObject...
11 Cyberhawk
 
20.06.13
18:54
+(10) рабочий кусок

           V8 = Новый COMОбъект("V82.Application");

           Попытка
               
               Открытие = V8.Connect("Srvr ="+Строка(Сервер)+";Ref="+ИмяБазы+";Usr="+Пользователь+";Pwd="+Пароль+";");

           Исключение
               #Если Клиент Тогда
               Предупреждение("База данных Источника не открыта!");
               #КонецЕсли
               Возврат МассивТаблицИзИсточника;
           КонецПопытки;
       КонецЕсли;

       Состояние("Получение данных из Источника...");
   
       ЗапросИсточник = V8.NewObject("Запрос");
           
       ЗапросИсточник.Текст = ПолучитьТекстЗапросаИсточник();
12 never_be
 
20.06.13
18:55
Осталось только разлить с этим:

Запрос.УстановитьПараметр("Офис",Справочники.Офисы.НайтиПокоду(КонтрагентДляПоискаКод));

Как правильно установить параметр из другой базы.
13 never_be
 
20.06.13
18:56
(12) Ругается


{Обработка.Отчеты.Форма.Форма.Форма(654)}: Поле объекта не обнаружено (Офисы)
            Запрос.УстановитьПараметр("Офис",Справочники.Офисы.НайтиПокоду(КонтрагентДляПоискаКод));

Справочники.Офисы в другой базе
14 Cyberhawk
 
20.06.13
18:58
(12) если есть ссылка - можно проще

       ЗапросИсточник.Параметры.Вставить("ОсновнойПоставщик", V8.ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Контрагент)));

А если хошь через Найти, тогда

Запрос.УстановитьПараметр("Офис", V82.Справочники.Офисы.НайтиПоКоду(КодДляПоиска))
15 never_be
 
20.06.13
19:03
(14) Получилось так:


            V8 = Новый COMОбъект("V82.COMConnector");
            БД = V8.Connect("File=""E:\1C_Bases\Office_acc"";Usr=""report"";");
            Запрос = БД.NewObject("Запрос");
            Запрос.Текст = "ВЫБРАТЬ
            |ОтчетыОфисовРасходыОбороты.СуммаРасход,
            |ОтчетыОфисовРасходыОбороты.СуммаОборот,
            |ОтчетыОфисовРасходыОбороты.Офис,
            |ОтчетыОфисовРасходыОбороты.ТипРасходов
            |ИЗ
            |РегистрНакопления.ОтчетыОфисовРасходы.Обороты(&ДатаНачала, &ДатаОкончания, Период, Офис = &Офис) КАК ОтчетыОфисовРасходыОбороты";
            Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачалаДР));
            Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончанияДР));
            Запрос.УстановитьПараметр("Офис", V8.Справочники.Офисы.НайтиПоКоду(КонтрагентДляПоискаКод));
            РезультатЗапроса = Запрос.Выполнить.Выбрать();

Ошибка:


{Обработка.Отчеты.Форма.Форма.Форма(654)}: Поле объекта не обнаружено (Справочники)
            Запрос.УстановитьПараметр("Офис", V8.Справочники.Офисы.НайтиПоКоду(КонтрагентДляПоискаКод));
16 Cyberhawk
 
20.06.13
19:04
(15) ты определись сначала, Аппликатион или КОМКоннектор ты используешь. В первом случае работаешь с V8, во втором - с БД
17 never_be
 
21.06.13
10:33
(16) теперь вот так


{Обработка.Отчеты.Форма.Форма.Форма(655)}: Ошибка при получении значения атрибута контекста (Выполнить)
            РезультатЗапроса = Запрос.Выполнить.Выбрать();
по причине:
Метод не найден
18 never_be
 
21.06.13
11:01
Переделал запрос вот так:

            V8 = Новый COMОбъект("V82.COMConnector");
            БД = V8.Connect("File=""E:\1C_Bases\Office_acc"";Usr=""report"";");
            Запрос = БД.NewObject("Запрос");
            Запрос.Текст = "ВЫБРАТЬ
            |ОтчетыОфисовРасходыОбороты.СуммаРасход,
            |ОтчетыОфисовРасходыОбороты.СуммаОборот,
            |ОтчетыОфисовРасходыОбороты.Офис,
            |ОтчетыОфисовРасходыОбороты.ТипРасходов
            |ИЗ
            |РегистрНакопления.ОтчетыОфисовРасходы.Обороты(&ДатаНачала, &ДатаОкончания, Период, Офис = &Офис) КАК ОтчетыОфисовРасходыОбороты";
            Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачалаДР));
            Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончанияДР));
            Запрос.УстановитьПараметр("Офис", БД.Справочники.Офисы.НайтиПоКоду(КонтрагентДляПоискаКод));
            РезультатЗапроса = Запрос.Выполнить.Выбрать();

На последней строке ошибка (17)
19 Cyberhawk
 
21.06.13
11:13
Запрос.Выполнить().Выбрать()
20 never_be
 
21.06.13
11:31
(19) Пля уже не первый раз втыкаюсь в эти скобки.
21 never_be
 
21.06.13
11:35
В РезультатеЗапроса какие-то ComОбъекты как из них достать данные ? Мне надо Наименование офиса, суммы и вид расходов.
22 never_be
 
21.06.13
11:48
Делаю вот так:

Пока РезультатЗапроса.Следующий() Цикл
               Расход = РезультатЗапроса.СуммаExpense;
               Оборот = РезультатЗапроса.СуммаTurnover;
               НаименованиеОфиса = РезультатЗапроса.Офис.Наименование;
               НаименованиеРасходов = РезультатЗапроса.ТипРасходов.Наименование;
            КонецЦикла;

все хорошо но наименование офиса всегда пусто и записей слишком много, может условие по отбору офиса не выполнилось в запросе ?
23 Cyberhawk
 
21.06.13
19:37
Ты раскрой СОМ-объекты в табло Конфигуратора и посмотри, что там
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.