|
Com Запрос к РС как получить значения? | ☑ | ||
---|---|---|---|---|
0
BaMBaM
05.12.13
✎
12:09
|
Здравствуйте. Прошу навести на мысль что мне делать дальше. Запросом обращаюсь к РС через COM. Смотрю через отладчик и вижу что получаю NUll вместо значений. Как начитал тут на форуме не получаю значения потому что у меня не примитивный тип. Хочу чтобы вы намекнули какие действия я должен выполнить дальше. Цель моей задачи подключится к РС Границы запрета в каждой базе (их у нас много) и вытянуть данные почти в идентичный регистр сведений. Интересует как мне вытянуть значения чтобы потом я мог записать их себе в РС. (Я новичек в программировании за меня решать не надо прошу лишь подтолкнуть процесс застрял. Не пойму что после строк выгрузить писать, то ли выборку то ли еще что)
ОбъектПодключения = "V82.COMConnector" ; Соединение = Новый COMОбъект(ОбъектПодключения); СтрокаПодключения = ПолучитьСтрокуСоединения(СтрокаТЧ.Серверная, СтрокаТЧ.СерверПредпр, СтрокаТЧ.ИмяИБвКластере, СтрокаТЧ.КаталогБазыДанных); Коннектор = Соединение.Connect(СтрокаПодключения); ТаблицаСпискаПустыхЗначений = Коннектор.NewObject("СписокЗначений"); //Запрос для регистра ГраницаЗапрета через ком Коннектор.NewObject("Запрос"); Запрос = Коннектор.NewObject("Запрос"); Запрос=новый Запрос; Запрос.Текст=" | ВЫБРАТЬ | ГраницыЗапретаИзмененияДанных.Организация, | ГраницыЗапретаИзмененияДанных.Пользователь, | ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений |ИЗ | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных |"; //Результат = Запрос.Выполнить().Выбрать(); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); |
|||
1
Wobland
05.12.13
✎
12:12
|
обойти результат уже попробовал?
|
|||
2
BaMBaM
05.12.13
✎
12:17
|
Нет. Просто дело в том что я и не понимаю что дальше писать. Спасибо сейчас буду курить как результат обходят.
|
|||
3
Михаил Козлов
05.12.13
✎
12:18
|
Обойти результат, по значениям полей выборки (Организация, Пользователь) искать соответствующие элементы справочников, добавлять с ними в набор записи. Граница - примитивный тип, поэтому можно просто присвоить.
|
|||
4
BaMBaM
05.12.13
✎
12:25
|
Спасибо Михаил теперь есть куда копать. Чтобы я без вас делал ребят)))
|
|||
5
Wobland
05.12.13
✎
12:34
|
(4) то же самое. но не сразу ;)
|
|||
6
BaMBaM
05.12.13
✎
12:54
|
Ребят пришел к такому коду. Получается мне потом надо искать в справочнике по наименованию и сравнивать со значением в регистре? Правильный ход мыслей?
РезультатЗапроса = Запрос.Выполнить(); Выборка = Коннектор.Справочники.Организации.Выбрать(); Пока Выборка.Следующий() Цикл Организация = Выборка.НаименованиеПолное; Если ПустаяСтрока(Организация) тогда Продолжить Иначе Организация = Выборка.Ссылка; КонецЕсли; КонецЦикла; |
|||
7
Wobland
05.12.13
✎
12:55
|
зачем тебе здесь перебирать организации из там?
|
|||
8
BaMBaM
05.12.13
✎
13:00
|
Хм мне не надо). Ладно спасибо буду разбираться. Ща отладчиком пошаманить вникнуть надо зеленый я еще)
|
|||
9
Wobland
05.12.13
✎
13:15
|
Выборка=ТвойЗапрос.Выбрать()
и пока следующий смотри на неё. будут ком-объекты и дата |
|||
10
BaMBaM
05.12.13
✎
13:55
|
Если свой запрос туда вписываю мне почему то выдает.
Выборка - Ошибка получения представления значения в отладчике. РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл КонецЦикла; |
|||
11
BaMBaM
05.12.13
✎
14:20
|
По моему проблема в том что я использую 8.3 в конфе. С 8.2 захожу в свою обработку и отладчик уже выдает выборку и ее свойства, а вот в значении "Ошибка чтения значения". У нас везде там 8.2 стоит может надо один и тот же релиз поставить чтобы все корректно было.
|
|||
12
olegves
05.12.13
✎
14:25
|
Запрос=новый Запрос;
это в (0) лишнее - запрос обходи, а чтобы выгрузить, надо создавать таблицу значений в подключенной базе |
|||
13
BaMBaM
05.12.13
✎
14:30
|
(12)
Не совсем понял, но куда копать понял - буду копать спасибо. |
|||
14
olegves
05.12.13
✎
14:34
|
1) Запрос = Коннектор.NewObject("Запрос");
2) Запрос=новый Запрос; 1 - правильное объявление запроса в подключенной базе 2 - затираешь его объявлением запроса в исходной базе и далее выполняется запрос в исходной базе, а не в подключенной теперь ясно? |
|||
15
BaMBaM
05.12.13
✎
14:35
|
(14) Очень доступно. Благодарю)
|
|||
16
George Wheels
05.12.13
✎
14:36
|
(14) Наверное это для удобства написания кода. Только потом не забыть заремить Запрос=новый Запрос;
|
|||
17
BaMBaM
05.12.13
✎
14:48
|
Действительно затирался. Теперь я вижу все данные есть с чем работать, когда закончу помещу конечный код. Мб кому еще поможет в будущем.
|
|||
18
wowik
05.12.13
✎
15:12
|
||||
19
BaMBaM
05.12.13
✎
17:41
|
А как лучше поступить с выборкой. Выгрузить в Табличную часть а потом записать это все в регистр? или есть проще варианты?
|
|||
20
salvator
05.12.13
✎
17:49
|
(19) Загрузить не получится. У тебя организация и пользователь сом-объекты.
Придется дополнительно еще искать к примеру по ИНН и наименованию. |
|||
21
BaMBaM
05.12.13
✎
17:56
|
(20) наверно я еще не до конца разобрался. Я думал что раз корректные значения выборкой получил значит все ок. Вот мой код выборки
ОбъектПодключения = "V82.COMConnector" ; Соединение = Новый COMОбъект(ОбъектПодключения); СтрокаПодключения = ПолучитьСтрокуСоединения(СтрокаТЧ.Серверная, СтрокаТЧ.СерверПредпр, СтрокаТЧ.ИмяИБвКластере, СтрокаТЧ.КаталогБазыДанных); Коннектор = Соединение.Connect(СтрокаПодключения); ТаблицаСпискаПустыхЗначений = Коннектор.NewObject("СписокЗначений"); //Запрос для регистра ГраницаЗапрета через ком Коннектор.NewObject("Запрос"); Запрос = Коннектор.NewObject("Запрос"); //Запрос=новый Запрос; Запрос.Текст=" | ВЫБРАТЬ | ГраницыЗапретаИзмененияДанных.Организация, | ГраницыЗапретаИзмененияДанных.Пользователь, | ГраницыЗапретаИзмененияДанных.ГраницаЗапретаИзменений |ИЗ | РегистрСведений.ГраницыЗапретаИзмененияДанных КАК ГраницыЗапретаИзмененияДанных |"; РезультатЗапроса = Запрос.Выполнить(); //ТЗ = РезультатЗапроса.Выгрузить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ГраницаВЗапросе = Выборка.ГраницаЗапретаИзменений; ОрганизацияВЗапросе = Выборка.Организация.Наименование; Если выборка.Пользователь = неопределено тогда ПользовательВЗапросе = выборка.Пользователь иначе ПользовательВЗапросе = выборка.Пользователь.Наименование; КонецЕсли; КонецЦикла; Я думал мне только осталось куда нибудь выгрузить эти данные и записать в РС. Наверно доп поиск для случая задвоений в справочниках? |
|||
22
Михаил Козлов
05.12.13
✎
18:02
|
(21) Вам сначала нужно по Организации и Пользователю в выборке (COM объекты) найти (Организацию можно по ИНН, пользователя - по наименованию) или создать соответствующие элементы в БД-приемнике.
Создать набор записей регистра, в который будете писать. Добавить записи с найденными Организацией и Пользователем в этот набор. В конце набор записать. |
|||
23
BaMBaM
05.12.13
✎
18:05
|
Понял буду работать над этим.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |