К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Передача параметров через OLE

Гость
0 - 23.09.2014 - 07:27
Есть две базы б1, б2
Нужно подключиться из б1 к б2
в б2 в глобальном модуле есть экспортная функция

ПолучитьТЗ(ДатаОтч, СписНоменклатуры) Экспорт

с двумя параметрами, дата и список значений.
Эта функция возвращает в б1 таблицу значений с строковыми значениями (код товара, количество)

Вопрос: как передать в параметр СписНоменклатура список значений из б1, состоящий из строковых значений (коды номенклатуры) ?

такая конструкция не пашет:
СписНоменкл = СоздатьОбъект("СписокЗначений");
СписНоменкл.ДобавитьЗначение("10256");
СписНоменкл.ДобавитьЗначение("10508");
ТЗРез = ДругаяБаза.EvalExpr("СпецФункцияOLEЗапросОстаткиРе зервы(""" + ДатаКонца + """, " + СписНоменкл + ")");

дату передаю как строку все отлично, а вот как список передать?

Заранее благодарен за ответы.



Гость
1 - 23.09.2014 - 07:44
как текст, оле понимает - число, строку , дату
Гость
2 - 23.09.2014 - 07:45
сори ошибся, немного )
не так
ТЗРез = ДругаяБаза.EvalExpr("СпецФункцияOLEЗапросОстаткиРе зервы(""" + ДатаКонца + """, " + СписНоменкл + ")");
а так:
ТЗРез = ДругаяБаза.EvalExpr("ПолучитьТЗ(""" + ДатаКонца + """, " + СписНоменкл + ")");
и СписНоменклатура ))
ну вопрос думаю понятен
Гость
3 - 23.09.2014 - 07:48
а на сколько длинная строка может быть передана ?, или даже не заморачиваться по этому поводу ?, а то например у меня в базе б1 могут выбрать все товары из группы ХХХ, а там их тысяча, представляю эту строчку типа (65654;65321;3564.....)
Гость
4 - 23.09.2014 - 07:52
Через оле-горлышко пролазят токмо "базовые" типы данных: число, строка, дата. Коллекция в сей список не входит.
Если коллекция достаточно короткая, можно передать ее через строку с разделителями.
А так же: EvalExpr предполагает, что передаваемый параметр содержит известное принимающему выражение. Но откуда принимающий модуль знает, что СписНоменкл это объект типа СЗ? У него такого объекта нет.
Гость
5 - 23.09.2014 - 07:58
VZ какже тогда передать большой список?, одна идея есть, например через файлик, но помоему бредовая слегка идея ))
Гость
6 - 23.09.2014 - 08:01
я бы вкурил в тему на счет передачи данных через значениевфайл , значениеизфайла и ТЗ со строками вот тебе и неограниченная передача и обрабатывать удобно
Гость
7 - 23.09.2014 - 08:02
101 ну я про тоже и подумал, блин чтото не особо такой вариант нравится
Гость
8 - 23.09.2014 - 08:07
как раз такой вариант в РАЗЫ быстрее чем OLE
Гость
9 - 23.09.2014 - 08:08
Не нравится через файл - заверни в ЗначениеВСтрокуВнутр и передавай, на той стороне -разворачивай.
Гость
10 - 23.09.2014 - 08:09
8-101 > +100500. На мелочи не заметно, а на значительных объёмах данных - видно невооружённым глазом
Гость
11 - 23.09.2014 - 08:10
Наверное через файл сделаю, всем спасиб!
Гость
12 - 23.09.2014 - 08:21
9-roma n > ЗначениеВСтроку() способно сотворить такую строку, что ОЛЕ ей подавится ;)
Впрочем, это можно установить эксперементально:
В цикле наращивать исходную строку определенными порциями, передавать ОЛЕ-приемнику, а тот пусть возвращает принятое в другую переменную.
Несовпадение длин (или вылет) обозначит предельную длину строки ;)
Еще можно пользовать ЗначениеВФайл(), а уж имя файла точно можно передать.
И кстати: внутренние идентификаторы объектов - это строка ;)
Гость
13 - 23.09.2014 - 08:38
VZ "И кстати: внутренние идентификаторы объектов - это строка " это я понимаю, я туда коды номенклатуры положу строковые. ) Просто затупил с момента когда понял что СЗ передавать нельзя, а в мыслях все уже было так красиво мля..))
Гость
14 - 23.09.2014 - 08:39
12-VZ > Длину не вычислял, массив оокло тысячи ссылок передавал без потерь. С большими объёмами не экспериментирова,-: мне легче всё в файлик сложить и не парить мозг вопросом "пролезет/не пролезет" :)
Гость
15 - 23.09.2014 - 08:40
13-ilyich_ > тебе ни разу не про коды говорят.
Гость
16 - 23.09.2014 - 09:00
14-roma n > А можно подробнее про передачу массива? Т.е., на своей стороне имеем объявляем Перем МойМассив[1000], и потом что-то вроде ДругаяБаза.EvalExpr("СкушайМассив(1000,МойМассив)" );
?
Гость
17 - 23.09.2014 - 09:09
13-ilyich_ > Ну, в сабжевом случае ничто не мешает применить конструкцию ДругаяБаза.ЗначениеИзСтроки(ЗначениеВСтроку(СписНо менклатуры));
18 - 23.09.2014 - 10:31
Попробуй просто:
глРасшифровка - есть в типовой базе, экспортная переменная, вот в нее и пихай что надо
.

Оле.глРасшифровка = Оле.EvalExpr("СоздатьОбъект(""СписокЗначений"")");
Оле.глРасшифровка.ДобавитьЗначение("хрень");
Оле.глРасшифровка.ДобавитьЗначение("мутотень");
Оле.глРасшифровка.ДобавитьЗначение("колокольчик");
Результат = Оле.EvalExpr("КакаяТоФункцияСПараметрами(глРасшифр овка)");
Гость
19 - 23.09.2014 - 10:37
17-VZ >криво парсится, не работает. ошибки валятся в стиле "ожидается символ ")"..."
Гость
20 - 23.09.2014 - 10:41
18-Чучундер >пробовал так почему-то не получилось, потом сюда на форум пришел, ща еще раз попробую может ошибся где-то.
Гость
21 - 23.09.2014 - 10:47
16-VZ > я в контексте "заверни в ЗначениеВСтрокуВнутр" и "ЗначениеВСтроку() способно сотворить такую строку, что ОЛЕ ей подавится"
:) через строку такой массив передаётся без потерь
Гость
22 - 23.09.2014 - 10:48
19-ilyich_ > ошибки валятся в стиле "ожидается символ ")" - разруха - она не в сортирах
Гость
23 - 23.09.2014 - 11:16
18-Чучундер > где же ты был раньше, спасибо тебе огромное!!! )) работает! Я по другому пытался сделать через ОЛЕ.ExecuteBatch("глРасшифровка =СоздатьОбъект(""СписокЗначений"")"); не работало.
24 - 23.09.2014 - 16:11
(23) ну так на ткой код она тебе вернет ошибку типа неизвестный оператор... Экзекутебач должна возвращать вычесленное значение. а у тебя написан код не вычисления значения, а присвоения... то есть немножко не то


К списку вопросов






Copyright ©, Все права защищены