![]() |
![]() |
![]() |
|
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
|
уже не сложно:)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |