|
Список значений через Com | ☑ | ||
---|---|---|---|---|
0
ComradeKite
09.07.19
✎
11:48
|
Привет многоуважаемый ALL!
Может кто силен в Com и может подсказать, почему не передается у меня список значений в параметры отчета. Пытаюсь запустить отчет в другой базе, подключаюсь по COM соединению, устанавливаю параметры отчету, список подразделений. Формирую макет, вывожу процессором вывода. В наборе данных простецкий запрос ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ГДЕ ПодразделенияОрганизаций.Ссылка В (&СписокПодразделений) ======================================================================== В коде на стороне другой базе вызываю так ЗУП = ПодключениеComС("C:\Users\Documents\InfoBase2", "Administrator", "", ""); СхемаКомпоновкиДанных = ЗУП.Отчеты.Отчет1.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); КомпоновщикНастроекНастройки = ЗУП.NewObject("КомпоновщикНастроекКомпоновкиДанных"); ИсточникДоступныхНастроекКомпоновкиДанных = ЗУП.NewObject("ИсточникДоступныхНастроекКомпоновкиДанных",СхемаКомпоновкиДанных); КомпоновщикНастроекНастройки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных); КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Настройки = КомпоновщикНастроекНастройки.ПолучитьНастройки(); Запрос = ЗУП.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ | ПЕРВЫЕ 1 ПодразделенияОрганизаций.Ссылка КАК Подразделение |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций"; ПодразделенияДайсонComObject = Запрос.Выполнить().Выгрузить(); СписокПодразделений =ЗУП.NewObject("СписокЗначений"); НовПер = Неопределено; Для Каждого ЭлементЗапроса Из ПодразделенияДайсонComObject Цикл СписокПодразделений.Добавить(ЭлементЗапроса.Подразделение); КонецЦикла; Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СписокПодразделений", СписокПодразделений); КомпоновщикМакета = ЗУП.NewObject("КомпоновщикМакетаКомпоновкиДанных"); МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекНастройки.Настройки,,,ЗУП.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0)); ПроцессорКомпоновкиДанных = ЗУП.NewObject("ПроцессорКомпоновкиДанных"); ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = ЗУП.NewObject("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений"); ДанныеТЗ = ЗУП.NewObject("ТаблицаЗначений"); ПроцессорВывода.УстановитьОбъект(ДанныеТЗ); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); В результате ДанныеТЗ нет данных. Если я в схеме скд в источнике оберу условие по подразделению, то данные выводятся. Не получается у меня передать список значений. У меня в списке значений реально Com объекты, которые другая сторона должна распознать как свои и преобразовать автоматически в ссылки подразделений, а не распознает однако. Как все таки заставить сработать условие? |
|||
1
sitex
naïve
09.07.19
✎
11:56
|
(0) подсказка смотри в сторону ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр;
|
|||
2
gopile
09.07.19
✎
12:05
|
(0) на вид все ровно. точно есть такие подразделения?
|
|||
3
ptiz
09.07.19
✎
12:08
|
(0) "ВЫБРАТЬ
| ПЕРВЫЕ 1" - может нет данных по этому подразделению? |
|||
4
ComradeKite
09.07.19
✎
12:10
|
2, 3 Сто пудов есть, я же отладчиком смотрел))
В том то и дело что ровно, но не срабатывает. |
|||
5
ComradeKite
09.07.19
✎
12:13
|
(1) Да мне на приемнике не нужны не ссылки не элементы. Чем мне это поможет?
Мне надо чтобы список значений был взят на стороне источника и там же на стороне источника в параметры скд был вставлен. |
|||
6
lodger
09.07.19
✎
12:14
|
ну от балды можно потестить вместо
ЗУП.NewObject("СписокЗначений"); ЗУП.NewObject("Массив"); |
|||
7
ptiz
09.07.19
✎
12:16
|
(4) Убери ПЕРВЫЕ и проверь.
|
|||
8
sitex
naïve
09.07.19
✎
12:16
|
(5) На стороне источника сформировать отправить в ЗначениеВСтрокуВнутр и потом на стороне приемника ЗначениеИзСтрокиВнутр.
|
|||
9
Вафель
09.07.19
✎
12:17
|
можно же массив как параметр использовать
|
|||
10
ComradeKite
09.07.19
✎
12:17
|
(6)Делал. не работает, даже делал так, не список значений а просто элемент передавал, соответственно в наборе ставил равно а не "В".
Не хочет(или я не могу) передавать объект. |
|||
11
Вафель
09.07.19
✎
12:17
|
массив нормально должен через ком передаваться
|
|||
12
ComradeKite
09.07.19
✎
12:18
|
(9) можно, вот что букварь говорит
Объектные типы Все остальные типы данных, определенные в 1С:Предприятии, в том числе и коллекции значений, являются объектами и преобразуются к типу VT_DISPATCH структуры VARIANT. С другой стороны, при получении 1С:Предприятием значения VARIANT типа VT_DISPATCH, оно будет преобразовано в значение типа COMОбъект, набор свойств и методов которого будет совпадать с набором свойств и методов объекта, указатель на который содержался в VARIANT типа VT_DISPATCH. Работа с таким объектом может выполняться только через предоставляемые им свойства и методы, кроме оператора Для Каждого .... Однако, в том случае, если 1С:Предприятие узнает в нем "свой" объект, VT_DISPATCH будет обратно преобразован в исходный объект 1С:Предприятия и его можно будет использовать так, как любой другой объект 1С:Предприятия этого же типа (оператор Для Каждого ..., обращения по индексу, встроенные функции Строка(), Тип() и т.д.). 1С:Предприятие или COM-соединение, подсоединенное к некоторой информационной базе, распознает объект как "свой" только в том случае, если он был создан этим же подсоединением к информационной базе. Например, если из COM-соединения получить элемент справочника и передать этот элемент справочника в качестве параметра какого-нибудь метода объекта, полученного из этого же COM-соединения, то при выполнении этого метода объект будет распознан как "свой". Объект, полученный из другого соединения с информационной базой, не будет распознан как "свой". Такое поведение объектов 1С:Предприятия объясняется тем, что большинство объектов 1С:Предприятия используют свой экземпляр контекста информационной базы, из которой они получены, и в другом экземпляре контекста информационной базы они "своими" не являются. Каждое приложение 1С:Предприятия и каждый экземпляр COM-соединения поддерживает свой экземпляр контекста информационной базы. Поэтому объекты 1С:Предприятия не распознаются как "свои" не в том приложении 1С:Предприятия или экземпляре COM-соединения, в котором они были созданы. |
|||
13
ComradeKite
09.07.19
✎
12:19
|
Я так и делаю, передаю ему "свой" объект подразделение. Не взлетает. Простой тип отработает сто пудов, я дату передавал, а объект не хочет.
|
|||
14
Вафель
09.07.19
✎
12:20
|
так ссылку так не передашь
|
|||
15
sitex
naïve
09.07.19
✎
12:21
|
(14) ну в виде строки если только
|
|||
16
ComradeKite
09.07.19
✎
12:23
|
(14)Ну у меня не ссылка а COM объект.
Типа по логике, я беру создаю СписокПодразделений =ЗУП.NewObject("СписокЗначений"); И в него запихиваю результат запроса, который содержит Comобъекты. По документации все эти com объекты должны при выполнении стать ссылками |
|||
17
lodger
09.07.19
✎
12:24
|
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СписокПодразделений", Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение "));
|
|||
18
ComradeKite
09.07.19
✎
12:24
|
(15) Я понимаю о чем ты говоришь, я могу например Code у Com объекта получить и найти в справочнике по коду. Но это если мне надо в приемнике работать с этим. Мне не надо
|
|||
19
sitex
naïve
09.07.19
✎
12:32
|
(18) вообще я не о том говорил, ну да ладно.
|
|||
20
ComradeKite
09.07.19
✎
12:38
|
(17) Попробовал, не работает. Твой код правилен, но значения не применяются к схеме.
(18) Может ты об этом говорил? СписокПодразделений.Добавить(ЗУП.Справочники.ПодразделениеОрганизации.НайтиПоКоду(ЭлементЗапроса.Code)) Ну я так тоже делал. |
|||
21
ComradeKite
09.07.19
✎
12:39
|
Сорри не тот номер указал))
(19) Может ты об этом говорил? СписокПодразделений.Добавить(ЗУП.Справочники.ПодразделениеОрганизации.НайтиПоКоду(ЭлементЗапроса.Code)) Ну я так тоже делал. |
|||
22
Вафель
09.07.19
✎
12:40
|
(21) а точно находит?
|
|||
23
Вафель
09.07.19
✎
12:41
|
но лучше конечно сделать экспортную процедуру и пусть она самм с СКД возится.
можно в расширении |
|||
24
lodger
09.07.19
✎
12:42
|
(20) бурда какая-то
поставь точку остановки на Настройки.ПараметрыДанных.УстановитьЗначениеПараметра и приведи чему равно Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение").получить(0); Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение").получить(0).ссылка; Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение").получить(0).код; Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение").получить(0).наименование; |
|||
25
ComradeKite
09.07.19
✎
12:46
|
(22) Находит точно, я же из этого справочника их и беру. Ну и если просто запустить ЗУП.Справочники.ПодразделениеОрганизации.НайтиПоКоду(ЭлементЗапроса.Code)
результатом будет COM объект с данными, в отладчике все нормально, данные есть. (23) та на самом деле отчет термоядерный, кучу данных обрабатывает. Я хотел чтобы не переделывать его. ну и не городить внешние процедуры, просто запустить его, получить ТЗ, перегнать ТЗ на приемник, добавить дополнительными данными и сформировать отчет. Почитал документацию, вроде реально такое провернуть, но вот с параметрами что то не то. |
|||
26
ComradeKite
09.07.19
✎
12:55
|
(24) Так сделал данные есть,
в первом и втором случае это ссылка в 3 и 4 случае код и наименование выводится [url=https://radikal.ru][img]https://d.radikal.ru/d15/1907/b6/4cd748c0f766.jpg[/img][/url] |
|||
27
ComradeKite
09.07.19
✎
12:55
|
||||
28
ComradeKite
09.07.19
✎
12:56
|
||||
29
ComradeKite
09.07.19
✎
13:57
|
Может у кого есть пример работающий?
Запрос кстати тоже не работает, вот по этому примеру https://wiseadvice-it.ru/o-kompanii/blog/articles/com-soedinenie-v-1s-8-3/ Не передается массив подразделений. |
|||
30
hhhh
09.07.19
✎
15:48
|
(29) может имена переменных совпадают? посмотри нет ли у тебя переменных с такими же именами? например, СписокПодразделений - реквизит формы, или еще что-нибудь.
|
|||
31
hhhh
09.07.19
✎
15:49
|
(30) + или ДанныеТЗ
|
|||
32
ptiz
09.07.19
✎
15:53
|
(29) С параметром-массивом точно никаких проблем - у меня работает.
|
|||
33
ptiz
09.07.19
✎
15:54
|
(30) +1
проверить нет ли реквизита с именем "СписокПодразделений" |
|||
34
ComradeKite
09.07.19
✎
16:15
|
Переменные поменял, не помогло.
А может быть что у меня винда 10 64 и я через com+ оборачивал 32 разрядную com dll ку и может что то не так намутил? Попробую посмотреть как типовая подключается, там оборачивать не надо же. |
|||
35
Daluvan
09.07.19
✎
16:26
|
(34) Объясните мне пжлста. сомобъекты целиком не преобразуются в ссылку другого объекта. они же считываются простыми типами, как код объекта, наименование итд.
|
|||
36
ComradeKite
09.07.19
✎
16:52
|
(35) Это так если ты хочешь данные из источника найти в приемнике, тогда через код, ссылку ты не перекинешь из источника в приемник. Можно получить "Код" из источника и поискать по коду элемент в приемнике или создать новую ссылку. Но мне ссылка не нужна, мне надо применить некий список значений к отчету в источнике значениями из источника же.
Вообщем как выяснил у меня вообще не передаются, даже простые типы. Вот отчет в источнике ВЫБРАТЬ ПодразделенияОрганизаций.Ссылка, &СпПодразделений КАК Код ИЗ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций ================================ вот вызываю код в приемнике. Передаю в параметр "12345" и не работает. ЗУП = ПодключениеКБазе1С("C:\Users\Artem\Documents\InfoBase2", "Administrator", "", ""); СхемаКомпоновкиДанных = ЗУП.Отчеты.Отчет1.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); КомпоновщикНастроекНастройки = ЗУП.NewObject("КомпоновщикНастроекКомпоновкиДанных"); ИсточникДоступныхНастроекКомпоновкиДанных = ЗУП.NewObject("ИсточникДоступныхНастроекКомпоновкиДанных",СхемаКомпоновкиДанных); КомпоновщикНастроекНастройки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных); КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Настройки = КомпоновщикНастроекНастройки.ПолучитьНастройки(); Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СпПодразделений", "12345"); КомпоновщикМакета = ЗУП.NewObject("КомпоновщикМакетаКомпоновкиДанных"); МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекНастройки.Настройки,,,ЗУП.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0)); ПроцессорКомпоновкиДанных = ЗУП.NewObject("ПроцессорКомпоновкиДанных"); ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных); ПроцессорВывода = ЗУП.NewObject("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений"); ДанныеТЗ333 = ЗУП.NewObject("ТаблицаЗначений"); ПроцессорВывода.УстановитьОбъект(ДанныеТЗ333); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); |
|||
37
ComradeKite
09.07.19
✎
16:56
|
Данные есть, но в поле код "" вместо "12345"
https://a.radikal.ru/a00/1907/36/8d83b4e6629c.jpg |
|||
38
Daluvan
09.07.19
✎
17:04
|
(37) А разве по ком можно в обе стороны передать? а можно код передачи
|
|||
39
Карст
09.07.19
✎
17:23
|
передавай строку с разделителями ))))) а там разбирай и заполняй
|
|||
40
ComradeKite
09.07.19
✎
18:09
|
В 36 пробую передать простой тип 12345. Не срабатывает. То есть строка тоже не передается)))
|
|||
41
ComradeKite
09.07.19
✎
22:00
|
Ошибка была вот в этой строке
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекНастройки.Настройки,,,ЗУП.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0)); Настройки вот такие "КомпоновщикНастроекНастройки.Настройки" а надо "Настройки" Всем спасибо за участие, все работает! |
|||
42
FIXXXL
10.07.19
✎
08:33
|
МАССИВДайсонComObject = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку();
пробовал? |
|||
43
FIXXXL
10.07.19
✎
08:33
|
(42) +
МАССИВДайсонComObject = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Подразделение"); |
|||
44
gopile
10.07.19
✎
09:12
|
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра( - а если так установить параметр, то будет работать не переделывая как в (41)?
|
|||
45
ComradeKite
10.07.19
✎
13:46
|
(44) Конечно будет, (42,43) будет работать и так.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |