![]() |
|
v7: проблема с OLE | ☑ | ||
---|---|---|---|---|
0
vsy
28.02.12
✎
07:56
|
Задача простая нужно по оле получить цену товара. По оле подключаюсь нормально, но используя функцию ничего не получаю.
вот кусок кода: База = СоздатьОбъект("v77s.Application"); СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(Пользователь)+""" /P"""+СокрЛП(Пароль)+""""; РезультатПодключения=База.Initialize(База.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW","")); Если РезультатПодключения = 0 Тогда Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!"); КонецЕсли; спрном=База.CreateObject("Справочник.Номенклатура"); ........... спрном.ВыбратьЭлементы(); Пока спрном.ПолучитьЭлемент()=1 Цикл если спрном.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; ..... ВремЦена= База.EvalExpr("глВернутьЦену(спрном.наименование,"+База.Константа.РозничнаяКатегорияЦен+").Цена.Получить(РабочаяДата())"); Вот здесь подвох База.Константа.РозничнаяКатегорияЦен не возвращает константу. Что то не догоняю, кто по оле спец подскажите пожалуйста, где ошибка. |
|||
1
andrewks
28.02.12
✎
08:04
|
конкатенация со строкой
|
|||
2
andrewks
28.02.12
✎
08:06
|
спрном.наименование - тоже строка
|
|||
3
vsy
28.02.12
✎
08:14
|
А как надо спрном.текущийэлемент()
|
|||
4
DJ Anthon
28.02.12
✎
08:18
|
в принципе по-другому надо.
База.Константа.РозничнаяКатегорияЦен без кавычек пробовал? |
|||
5
vsy
28.02.12
✎
08:18
|
База.Константа.РозничнаяКатегорияЦен должна вернуть строку тогда и склеится нормально
|
|||
6
DJ Anthon
28.02.12
✎
08:19
|
почему ты думаешь, что там по наименованию ищется? туда объекты надо подставлять, которые сначала найти надо
|
|||
7
vsy
28.02.12
✎
08:19
|
База.Константа.РозничнаяКатегорияЦен должна вернуть строку, тогда и склеится нормально
|
|||
8
DJ Anthon
28.02.12
✎
08:20
|
ничего страшного, мы на грамматику внимания не обращаем.
|
|||
9
ЧеловекДуши
28.02.12
✎
08:22
|
Сделай проще:
База.EvalExpr("глВернутьЦену(спрном.наименование,"+База.Константа.РозничнаяКатегорияЦен+").Цена.Получить(РабочаяДата())"); можно вот так База.EvalExpr("глВернутьЦену(спрном.наименование,Константа.РозничнаяКатегорияЦен).Цена.Получить(РабочаяДата())"); Все ровно все выполняется там, накой тебе это тут получать? |
|||
10
andrewks
28.02.12
✎
08:24
|
(9) всё равно не взлетит. ему нужно объект передать 1-м параметром
|
|||
11
ЧеловекДуши
28.02.12
✎
08:25
|
+ если точнее, то я делал вот так...
ИБПр.ExecuteBatch("глУсловие1 = Перечисление.ВидыОперацийСчетаФактурыВыданного.Реализация;"); ИБПр.ExecuteBatch("глУсловие2 = СчетПоКоду(""91.2"");"); ИБПр.ExecuteBatch("глУсловие3 = глЗначениеПоУмолчанию(""ОсновнойБанковскийСчет"");"); ИБПр.ExecuteBatch("глУсловие4 = СчетПоКоду(""90.3"");"); Т.е. По существу я в глобальнике ОЛЕ БД добавил ряд глобальных переменных и использовал их для плучения - установки тех или иных параметров, в плоть до запроса :) |
|||
12
ЧеловекДуши
28.02.12
✎
08:25
|
(10)Он не передаст :)
|
|||
13
vsy
28.02.12
✎
08:26
|
ЧеловекДуши спасибо это мысль
|
|||
14
andrewks
28.02.12
✎
08:26
|
думаю, без написания отдельной функции в ГМ оле-базы будет туго
например, глВернутьЦенуПоКоду(КодНом,... |
|||
15
andrewks
28.02.12
✎
08:27
|
либо переписать глВернутьЦену в этой базе для работы с данными по оле
|
|||
16
DJ Anthon
28.02.12
✎
08:28
|
я бы глВернуть цену выполнил не в ОЛЕ, а код ее скопировал и переделал на ОЛЕ, а то по-деревянному как-то получается
|
|||
17
DJ Anthon
28.02.12
✎
08:28
|
(15) успел раньше )))
|
|||
18
vsy
28.02.12
✎
08:28
|
andrewks, не понял, а чем сейчас функция отличается от предложенной.
|
|||
19
andrewks
28.02.12
✎
08:29
|
(18) сейчас она 1-м параметром принимает ссылку на объект, а в (14) 1-м параметром будет код, который является простым типом, и его можно завернуть в строку
|
|||
20
ЧеловекДуши
28.02.12
✎
08:30
|
(14)Ага, вот пример того, как туго без Гл процедур :)
Процедура ЗаписьЖурналаРегистрацииОЛЕ(Коммент,ТипСобытия,Событие,ОбъектОЛЕ,Категория) Перем ТЗ_ОЛЕ; ИБПр.глУсловие12=""; ИБПр.ExecuteBatch("глУсловие12 = СоздатьОбъект(""ТаблицаЗначений""); |глУсловие12.НоваяКолонка(""Коммент"",""Строка""); |глУсловие12.НоваяКолонка(""ТипСобытия"",""Строка""); |глУсловие12.НоваяКолонка(""Событие"",""Строка""); |глУсловие12.НоваяКолонка(""ОбъектОЛЕ""); |глУсловие12.НоваяКолонка(""Категория"",""Число"");"); //ТЗ_ОЛЕ = СоздатьОбъект("ТаблицаЗначений"); //ТЗ_ОЛЕ.НоваяКолонка(""Коммент"",""Строка""); //ТЗ_ОЛЕ.НоваяКолонка(""ТипСобытия"",""Строка""); //ТЗ_ОЛЕ.НоваяКолонка(""Событие"",""Строка""); //ТЗ_ОЛЕ.НоваяКолонка(""ОбъектОЛЕ""); //ТЗ_ОЛЕ.НоваяКолонка(""Категория"",""Число"");"); ТЗ_ОЛЕ = ИБПр.глУсловие12; ТЗ_ОЛЕ.НоваяСтрока(); ТЗ_ОЛЕ.Коммент = СокрЛП(Коммент); ТЗ_ОЛЕ.ТипСобытия = СокрЛП(ТипСобытия); ТЗ_ОЛЕ.Событие = СокрЛП(Событие); ТЗ_ОЛЕ.ОбъектОЛЕ = ОбъектОЛЕ; ТЗ_ОЛЕ.Категория = Число(Категория); ИБПр.ExecuteBatch("ЗаписьЖурналаРегистрации(глУсловие12.Коммент,глУсловие12.ТипСобытия,глУсловие12.Событие,глУсловие12.ОбъектОЛЕ,глУсловие12.Категория);"); КонецПроцедуры // ЗаписьЖурналаРегистрацииОЛЕ(Коммент,ТипСобытия,Событие,ОбъектОЛЕ,Категория) или //БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ = ИБПр.CreateObject("БухгалтерскиеИтоги"); ДержательОЛЕ = БИ; ИБПр.ExecuteBatch("глУсловие1 = Дата("+ДатаГод(НачДата)+","+ДатаМесяц(НачДата)+","+ДатаЧисло(НачДата)+")"); ИБПр.ExecuteBatch("глУсловие2 = Дата("+ДатаГод(КонДата)+","+ДатаМесяц(КонДата)+","+ДатаЧисло(КонДата)+")"); ИБПр.ExecuteBatch("глУсловие3 = ВидыСубконто.Контрагенты;"); БИ.ИспользоватьСубконто(ИБПр.глУсловие3, , 1); БИ.ВыполнитьЗапрос(ИБПр.глУсловие1, ИБПр.глУсловие2, "62",,, 1, "Проводка", "С");//Проводка - Период Вот типо такого ;) |
|||
21
andrewks
28.02.12
✎
08:30
|
но лучше таки (15)(16)
|
|||
22
vsy
28.02.12
✎
08:30
|
мысль ясна буду пробовать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |