|
Получить результат выборки в VBA | ☑ | ||
---|---|---|---|---|
0
The_Immortal
17.06.14
✎
18:13
|
Всех приветствую!
Необходимо вернуть результат запроса в переменную типа Object через COM (VBA): Set Запрос = v8.NewObject("Запрос") Запрос.Текст = "ВЫБРАТЬ ... " Set Выборка = Запрос.Выполнить() На последней строчке вылетает "Application-defined or object-defined error 1001". Что делаю не так? Спасибо! |
|||
1
shuhard
17.06.14
✎
18:15
|
(0)[Что делаю не так? ]
не то выбираешь в запросе |
|||
2
Crush
17.06.14
✎
18:31
|
Причем здесь VBA?
(На сколько мне известно эта аббревиатура расшифровывается как Visual Basic Application) |
|||
3
The_Immortal
17.06.14
✎
18:32
|
(1) Подскажите нубу, пожалуйста, что тут может быть не так:
ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник, РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаАктуальности, ) КАК РаботникиОрганизацийСрезПоследних ГДЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) Что в запросе страшного? |
|||
4
Wobland
17.06.14
✎
18:36
|
а параметр где?
|
|||
5
Crush
17.06.14
✎
18:39
|
Туплю. Это ты из бейсика к 1С подключаешься.
Как переменную v8 определяешь? Получается с её помощью хоть что то из базы дернуть? |
|||
6
Crush
17.06.14
✎
18:42
|
И, кстати, посмотри какие данные можно передавать через COM-соединение. Сомневаюсь, что результат запроса, выборка или ТЗ пролезут. Но сам не пробовал.
|
|||
7
The_Immortal
17.06.14
✎
18:43
|
(4) Эм... А он тут нужен? :) Признаюсь честно, запрос этот подогнали, но он вроде как должен работать.
(5) - Как переменную v8 определяешь? Да обычно: Dim v8con As New V82.COMConnector Public Sub v8connect() Set v8 = v8con.Connect("File=""C:\test1c""; Usr =""..."";Pwd=""...""") - Получается с её помощью хоть что то из базы дернуть? Ну да, банальный список наименований контрагентов через запрос получил... |
|||
8
Crush
17.06.14
✎
18:44
|
(7) Покажи запрос, коим "банальный список наименований контрагентов" получил
|
|||
9
The_Immortal
17.06.14
✎
18:46
|
(8) Set Запрос = v8.NewObject("Запрос")
Запрос.Текст = "ВЫБРАТЬ Наименование ИЗ Справочник.Контрагенты" Set Выборка = Запрос.Выполнить().Выбрать() Y = 1 Do While Выборка.Следующий() Cells(Y, 1).Value = Выборка.Наименование Y = Y + 1 Loop |
|||
10
Crush
17.06.14
✎
18:47
|
(9) Ага. Наименование - это строка. А сотрудник - это ссылка.
|
|||
11
Wobland
17.06.14
✎
18:48
|
(7) а он у тебя есть в тексте
|
|||
12
Crush
17.06.14
✎
18:48
|
Попробуй так
ВЫБРАТЬ Сотрудник.Наименование КАК Сотрудник, ЗанимаемыхСтавок ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаАктуальности, ) ГДЕ ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение |
|||
13
Crush
17.06.14
✎
18:49
|
+(12) скобку после Перечисление.ПричиныИзмененияСостояния.Увольнение забыл
|
|||
14
The_Immortal
17.06.14
✎
18:53
|
(13) Скобку заметил, но ошибка та же...
|
|||
15
Crush
17.06.14
✎
19:02
|
Примени метод тыка
Сначала: ВЫБРАТЬ Сотрудник.Наименование КАК Сотрудник ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних Далее прибавляй к запросу всё остальное. И попробуй этот запрос в самой базе выполнить. Может там измерение не сотрудник, а работник или регистр по другому называется |
|||
16
The_Immortal
17.06.14
✎
19:14
|
(15) Измерение точно "Сотрудник" - проверял.
Этот запрос выполняется, но Выбрать() в VBA не срабатывает. Это нормально? |
|||
17
The_Immortal
17.06.14
✎
19:20
|
(15) В общем, косяк из-за "(&ДатаАктуальности, )" похоже.
Если это убрать, то изначальный запрос выполняется, но Выбрать() все равно не срабатывает. Вероятно, так и должно быть... |
|||
18
Crush
17.06.14
✎
19:24
|
(17) если у тебя это работает
Запрос.Текст = "ВЫБРАТЬ Наименование ИЗ Справочник.Контрагенты" Set Выборка = Запрос.Выполнить().Выбрать() Y = 1 Do While Выборка.Следующий() Cells(Y, 1).Value = Выборка.Наименование Y = Y + 1 Loop То всё срабатывает Как параметр устанавливаешь? |
|||
19
The_Immortal
17.06.14
✎
19:27
|
(18) Пока никак :-) Пойду читать...
Кстати, а как безобидно выполнить запрос в самой базе? Просто никогда этого не делал. Обязательно ли создавать свою форму, вешать на нее кнопку, на которую вешать запрос, а потом еще эту форму как-то вызывать...? Проще никак нельзя? |
|||
20
Wobland
17.06.14
✎
19:28
|
9 минут до часа не дотянул ;)
|
|||
21
Wobland
17.06.14
✎
19:28
|
и открой для себя консоль запросов
|
|||
22
The_Immortal
17.06.14
✎
19:40
|
(20) Дурак я, согласен =\
(21) Отличная вещь, спасибо! (18) В общем, параметр выкинул, осталось вот так: Set Запрос = v8.NewObject("Запрос") Запрос.Текст = "ВЫБРАТЬ Сотрудник.Наименование КАК Сотрудник ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних ГДЕ ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)" Set Выборка = Запрос.Выполнить().Выбрать() На последней строчке ругается. Если убрать "Выбрать()", то все нормально... Но мне же надо выбрать результат запроса =/ |
|||
23
Wobland
17.06.14
✎
19:41
|
(22) а дай строку подключения
|
|||
24
The_Immortal
17.06.14
✎
19:42
|
В консоли запросов последний запрос нормально срабатывает и выводит инфу.
|
|||
25
The_Immortal
17.06.14
✎
19:43
|
(23)
Dim v8con As New V82.COMConnector Public Sub v8connect() Set v8 = v8con.Connect("File=""C:\test1c""; Usr =""..."";Pwd=""...""") |
|||
26
Wobland
17.06.14
✎
20:06
|
работает всё
|
|||
27
The_Immortal
17.06.14
✎
20:17
|
(26) А можно Ваш полный рабочий вариант увидеть?
|
|||
28
Wobland
17.06.14
✎
20:17
|
а вот с передачей даты я не справился. не хочет оно признвавать чужие даты
http://i.imgur.com/FvQyEWu.png |
|||
29
Wobland
17.06.14
✎
20:18
|
+(28) то, что не влезло:
Запрос.Текст = "ВЫБРАТЬ Сотрудник.Наименование КАК Сотрудник ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних ГДЕ ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)" |
|||
30
The_Immortal
17.06.14
✎
20:20
|
(29) Ну сейчас сделаю один-в-один, за исключением того момента, что у меня 8.2
|
|||
31
The_Immortal
17.06.14
✎
20:24
|
(29) Нашел косяк в цикле Do While, хотя дебаггер явно показывал на более раннюю строчку.
Благодарю! Осталось теперь разобраться с передачей параметров, а именно даты... |
|||
32
Wobland
17.06.14
✎
20:34
|
адов бейсик..
Запрос.Текст = "выбрать &ЧасЧ как Сотрудник" p = Запрос.УстановитьПараметр("ЧасЧ", #5/5/2014#) |
|||
33
The_Immortal
17.06.14
✎
20:50
|
(32) Бесконечно благодарен!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |