Имя: Пароль:
1C
1С v8
COM соединение - Как получить объект?
0 bonni8444
 
05.09.12
12:54
Добрый день!
Подскажите пожалуйста как при СOM соединении получить объект? Поиском пользовалась - не нашла...

Соединитель = Новый COMОбъект("V82.COMConnector");
Соединение = Соединитель.Connect("Srvr=***;Ref=;Usr=;Pwd=");
Запрос = Соединение.NewObject("Запрос");
КодПодразделения = "000000003";
НачПериода = НачалоМесяца(ПериодНачислений);
КонПериода = КонецМесяца(ПериодНачислений);
ТекстЗапроса = "ВЫБРАТЬ
|    МП_РасчетЗП.Ссылка КАК СсылкаРасчетЗП,
|    ПодразделенияОрганизаций.Наименование КАК НаименованиеПодразделения
|ИЗ
|    Документ.МП_РасчетЗП КАК МП_РасчетЗП
|        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|        ПО МП_РасчетЗП.Подразделение = ПодразделенияОрганизаций.Ссылка
|ГДЕ
|    МП_РасчетЗП.Дата МЕЖДУ &НачПериода И &КонПериода
|    И ПодразделенияОрганизаций.Код = &Код";
           Запрос.Текст = ТекстЗапроса;
           Запрос.УстановитьПараметр("НачПериода", НачПериода);
           Запрос.УстановитьПараметр("КонПериода", КонПериода);
           Запрос.УстановитьПараметр("Код", КодПодразделения);
           Результат = Запрос.Выполнить().Выгрузить();
           Для Каждого Стр Из Результат Цикл
               СсылкаТакиРасчетЗП = Стр.СсылкаРасчетЗП.ПолучитьОбъект();<<<<<<<<<<<<< Неполучается
               Подразделение1 = Стр.НаименованиеПодразделения;
           КонецЦикла;
1 Ткачев
 
05.09.12
12:56
У меня 143% получается.
2 Ткачев
 
05.09.12
12:56
Только у меня Результат.Следующий()
3 AlexTim03
 
05.09.12
12:58
А какая цель получения?
Все равно вместо ДокументОбъект, будет COM-объект.
Напрямую передаются только простые типы (число, строка, булево)
4 bonni8444
 
05.09.12
13:00
у меня через Результат.Следующий() не работает. не поняла что за проценты... у себя я наименование подразделения получаю т.к. это строка. а ссылку на документ "РасчетЗП" не знаю как получить, т.к. получаю сом объект.
5 bonni8444
 
05.09.12
13:01
я думала как-то можно получить... разве нет способа? цель... для расчетов нужно
6 Reset
 
05.09.12
13:02
(4) СсылкаТакиРасчетЗП = Стр.СсылкаРасчетЗП.ПолучитьОбъект();
Из COM-Объекта Стр.СсылкаРасчетЗП (который в СОМ соединении является ссылкой) получается COM-Объект СсылкаТакиРасчетЗП (который в COM соединении является объектом)
А что должно получиться?
7 Kashemir
 
05.09.12
13:02
(4) Так получила чего хотела - объект на стороне ком соединения - на стороне комсоединения и используй - что не так ?
8 MrStomak
 
05.09.12
13:03
Ну для чего дальше нужно? Ты же работаешь с объектом другой базы, не своей. Если у тебя в базе тоже есть такой документ, то ГУИД у него будет не факт что тот же самый (если они не по рибу передавались и не через правила). Нужно вытаскивать номер, дату и искать в базе такой объект.
9 Reset
 
05.09.12
13:03
+(6) У этого объекта доступно изменение реквизитов, его методы.
10 Рэйв
 
05.09.12
13:08
.ПолучитьОбъект()  даже от ссылки другой базы - даст тебе объект
11 Рэйв
 
05.09.12
13:08
+(10)объект другой базы естественно
12 bonni8444
 
05.09.12
13:13
ну в общем я поняла что не получится получить объект... мне он нужен был чтобы вывести данные в отчет(перебрать табличную его часть, подсчитать начисления и т.д.) нужно сделать отчет который берет данные из разных баз...
13 Рэйв
 
05.09.12
13:14
(12) Открыть форму- не получится. А программно заполнять/изменять - запросто
14 Kashemir
 
05.09.12
13:14
(12) Кто мешает то - перебирай конечно. Только на стороне соединения.
15 bonni8444
 
05.09.12
13:17
а как перебирать на стороне соединения? нигде не видела таких примеров...
16 Karavanych
 
05.09.12
13:17
(12) вам ничто не мешает это сделать.
просто получить через Ком соединение вы можете только реквизиты примитивных типов.
Например Ссылка.Номенклатура - это ком.объект.
а Ссылка.Номенклатура.Наименование  - вы уже увидите название номенклатуры, так же можете получить код. Ссылка.Номенлатура.Код.

P.S. Результат.Следующий() не работает потому что вы применили на результате запроса метод - Выгрузить, и получили таблицу значений, а Следующий() - метод выборки результата запроса. т.е. Запрос.Выполнить().Выбрать()
17 Fish
 
гуру
05.09.12
13:18
Хм, и никто не спросил фотку. Даже странно как-то.
18 Kashemir
 
05.09.12
13:19
(16) Для получения типов отличных от примитивных, можно использовать хмл сериализацию
19 Karavanych
 
05.09.12
13:19
(17) по вопросам мы уже научились внешний вид определять...
девушка определенно красива, стройна с длинными светлыми волосами.
20 Kashemir
 
05.09.12
13:20
+(18) По крайней мере в 1С большинство сериализуется.
21 bonni8444
 
05.09.12
13:20
я имела ввиду что следующий вместе с выбрать пробовала, почему-то не сработало.
22 Kashemir
 
05.09.12
13:21
Следующий() в контексте комсоединения надо вызывать
23 bonni8444
 
05.09.12
13:22
вы ошиблись, с темными! блин ну если я с этим первый раз столкнулась, информации в инете мало, откуда же мне знать как делать(((
24 shamannk
 
05.09.12
13:23
ОбъектПодключения = "V81.COMConnector";
COMПодключение = Новый COMОбъект(ОбъектПодключения);
База = COMПодключение.Connect(трокаСоединения);
база.Документы.ТвойДок.НайтиПоНомеру
25 Kashemir
 
05.09.12
13:24
(23) Представь себе что ты обращаешся не из одной базы 1С к другой, а допустим из какого-то С++ приложения, у которого нет ничего общего с методами 1С. Может так будет понятнее с контекстом
26 Karavanych
 
05.09.12
13:24
(22) у нее запрос и так ком - объект, его результат и выборка тоже ком объекты, с этим все в порядке, я подозреваю что она туда Пыталась запихать ОбходРезультатаЗапроса текущей базы как параметр :)

РезШапка = ЗапШапка.выполнить().выбрать(КомСоединение.ОбходРезультатаЗапроса.ПоГруппировкам);
27 Karavanych
 
05.09.12
13:25
(25) батенька, ну зачем вы девушку так троллите то ?
ей и так тяжело.
28 Kashemir
 
05.09.12
13:27
(27) Да не, я вроде как наоборот - пытаюсь помочь посмотреть на проблему с другой стороны :)
29 bonni8444
 
05.09.12
13:28
у меня в документе табличная часть Зарплата, там список сотрудников с начислениями, вот я не пойму как мне обойти ее(как вы говорите на стороне соединения). чтобы взять оттуда данные и подсчитать общие начисления.
30 palpetrovich
 
05.09.12
13:29
не надо ничего получать, уже все получила, проверь, к примеру, так:
Для Каждого Стр Из Результат Цикл
               Сообщить("Номер "+Стр.СсылкаРасчетЗП.Номер+ " от "+Стр.СсылкаРасчетЗП.Дата);
           КонецЦикла;
31 bonni8444
 
05.09.12
13:31
дату и номер я получила. и получила табличную часть Зарплата - ком объект. а как его обойти по сотрудникам?
32 Рэйв
 
05.09.12
13:32
(31)Примерно:

Соединитель = Новый COMОбъект("V82.COMConnector");
Соединение = Соединитель.Connect("Srvr=***;Ref=;Usr=;Pwd=");
Запрос = Соединение.NewObject("Запрос");
КодПодразделения = "000000003";
НачПериода = НачалоМесяца(ПериодНачислений);
КонПериода = КонецМесяца(ПериодНачислений);
ТекстЗапроса = "ВЫБРАТЬ
|    МП_РасчетЗП.Ссылка КАК СсылкаРасчетЗП,
|    ПодразделенияОрганизаций.Наименование КАК НаименованиеПодразделения
|ИЗ
|    Документ.МП_РасчетЗП КАК МП_РасчетЗП
|        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|        ПО МП_РасчетЗП.Подразделение = ПодразделенияОрганизаций.Ссылка
|ГДЕ
|    МП_РасчетЗП.Дата МЕЖДУ &НачПериода И &КонПериода
|    И ПодразделенияОрганизаций.Код = &Код";
           Запрос.Текст = ТекстЗапроса;
           Запрос.УстановитьПараметр("НачПериода", НачПериода);
           Запрос.УстановитьПараметр("КонПериода", КонПериода);
           Запрос.УстановитьПараметр("Код", КодПодразделения);
           Результат = Запрос.Выполнить().Выгрузить();
           Для Каждого Стр Из Результат Цикл
               Для Каждого СтрокаТЧ Из Стр.СсылкаРасчетЗП Цикл
                   Сообщить(СтрокаТЧ.Сотрудник.Наименование+", начисление:"+СтрокаТЧ.Начисление+"(или как там оно у тебя обозвано)");
                   
               Конеццикла;    
           КонецЦикла;
33 Рэйв
 
05.09.12
13:33
Для Каждого СтрокаТЧ Из Стр.СсылкаРасчетЗП Цикл
читать как
Для Каждого СтрокаТЧ Из Стр.СсылкаРасчетЗП.ИмяТабЧасти Цикл
34 Karavanych
 
05.09.12
13:33
(29) путь 1: Кривой
       Для Каждого Стр Из Результат Цикл
       СуммаВсего=0;
               Для каждого стрЗарплата из Стр.СсылкаРасчетЗП.Зарплата цикл
           СуммаВсего=СуммаВсего+стрЗарплата.Сумма; //еще раз примитивные типы т.е. числа, строки, можно получить
       КонецЦикла;    
       КонецЦикла;
35 palpetrovich
 
05.09.12
13:33
(33) :)
...может лучше в запросе ТЧ получить?
36 Karavanych
 
05.09.12
13:34
Правильный же путь такой
Обращаться в запросе к табличной части.
(35)+.
37 bonni8444
 
05.09.12
13:34
Спасибо!!! Сейчас попробую:)))
38 Рэйв
 
05.09.12
13:34
(35)Ну...может это сложно для девушки:-)
39 Рэйв
 
05.09.12
13:35
А так почти весь код знаком:-)
40 Karavanych
 
05.09.12
13:36
Путь 2 нормальный:
ВЫБРАТЬ
|    МП_РасчетЗПТЧЗарплата КАК СсылкаРасчетЗП,
//нужные суммы получаем прямо здесь
|    МП_РасчетЗПТЧЗарплата.НужнаяСумма как НужнаяСумма
|    ПодразделенияОрганизаций.Наименование КАК НаименованиеПодразделения
|ИЗ
|    Документ.МП_РасчетЗП.Зарплата КАК МП_РасчетЗПТЧЗарплата
|        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|        ПО МП_РасчетЗП.Подразделение = ПодразделенияОрганизаций.Ссылка
|ГДЕ
|    МП_РасчетЗП.Дата МЕЖДУ &НачПериода И &КонПериода
|    И ПодразделенияОрганизаций.Код = &Код
41 Птах
 
05.09.12
13:38
Че-то вроде и не ньюфаги, а фотку не стребовали... Стыдно!
42 bonni8444
 
05.09.12
13:41
уже не сложно:)