Передача параметров через OLE Есть две базы б1, б2 Нужно подключиться из б1 к б2 в б2 в глобальном модуле есть экспортная функция ПолучитьТЗ(ДатаОтч, СписНоменклатуры) Экспорт с двумя параметрами, дата и список значений. Эта функция возвращает в б1 таблицу значений с строковыми значениями (код товара, количество) Вопрос: как передать в параметр СписНоменклатура список значений из б1, состоящий из строковых значений (коды номенклатуры) ? такая конструкция не пашет: СписНоменкл = СоздатьОбъект("СписокЗначений"); СписНоменкл.ДобавитьЗначение("10256"); СписНоменкл.ДобавитьЗначение("10508"); ТЗРез = ДругаяБаза.EvalExpr("СпецФункцияOLEЗапросОстаткиРезервы(""" + ДатаКонца + """, " + СписНоменкл + ")"); дату передаю как строку все отлично, а вот как список передать? Заранее благодарен за ответы. |
как текст, оле понимает - число, строку , дату |
сори ошибся, немного ) не так ТЗРез = ДругаяБаза.EvalExpr("СпецФункцияOLEЗапросОстаткиРе зервы(""" + ДатаКонца + """, " + СписНоменкл + ")"); а так: ТЗРез = ДругаяБаза.EvalExpr("ПолучитьТЗ(""" + ДатаКонца + """, " + СписНоменкл + ")"); и СписНоменклатура )) ну вопрос думаю понятен |
а на сколько длинная строка может быть передана ?, или даже не заморачиваться по этому поводу ?, а то например у меня в базе б1 могут выбрать все товары из группы ХХХ, а там их тысяча, представляю эту строчку типа (65654;65321;3564.....) |
Через оле-горлышко пролазят токмо "базовые" типы данных: число, строка, дата. Коллекция в сей список не входит. Если коллекция достаточно короткая, можно передать ее через строку с разделителями. А так же: EvalExpr предполагает, что передаваемый параметр содержит известное принимающему выражение. Но откуда принимающий модуль знает, что [em]СписНоменкл[/em] это объект типа СЗ? У него такого объекта нет. |
VZ какже тогда передать большой список?, одна идея есть, например через файлик, но помоему бредовая слегка идея )) |
я бы вкурил в тему на счет передачи данных через значениевфайл , значениеизфайла и ТЗ со строками вот тебе и неограниченная передача и обрабатывать удобно |
101 ну я про тоже и подумал, блин чтото не особо такой вариант нравится |
как раз такой вариант в РАЗЫ быстрее чем OLE |
Не нравится через файл - заверни в ЗначениеВСтрокуВнутр и передавай, на той стороне -разворачивай. |
8-101 > +100500. На мелочи не заметно, а на значительных объёмах данных - видно невооружённым глазом |
Наверное через файл сделаю, всем спасиб! |
9-roma n > ЗначениеВСтроку() способно сотворить такую строку, что ОЛЕ ей подавится ;) Впрочем, это можно установить эксперементально: В цикле наращивать исходную строку определенными порциями, передавать ОЛЕ-приемнику, а тот пусть возвращает принятое в другую переменную. Несовпадение длин (или вылет) обозначит предельную длину строки ;) Еще можно пользовать ЗначениеВФайл(), а уж имя файла точно можно передать. И кстати: внутренние идентификаторы объектов - это строка ;) |
VZ "И кстати: внутренние идентификаторы объектов - это строка " это я понимаю, я туда коды номенклатуры положу строковые. ) Просто затупил с момента когда понял что СЗ передавать нельзя, а в мыслях все уже было так красиво мля..)) |
12-VZ > Длину не вычислял, массив оокло тысячи ссылок передавал без потерь. С большими объёмами не экспериментирова,-: мне легче всё в файлик сложить и не парить мозг вопросом "пролезет/не пролезет" :) |
13-ilyich_ > тебе ни разу не про коды говорят. |
14-roma n > А можно подробнее про передачу массива? Т.е., на своей стороне имеем объявляем [em]Перем МойМассив[1000][/em], и потом что-то вроде [em]ДругаяБаза.EvalExpr("СкушайМассив(1000,МойМассив)");[/em] ? |
13-ilyich_ > Ну, в сабжевом случае ничто не мешает применить конструкцию [em]ДругаяБаза.ЗначениеИзСтроки(ЗначениеВСтроку(СписНоменклатуры));[/em] |
Попробуй просто: глРасшифровка - есть в типовой базе, экспортная переменная, вот в нее и пихай что надо . Оле.глРасшифровка = Оле.EvalExpr("СоздатьОбъект(""СписокЗначений"")"); Оле.глРасшифровка.ДобавитьЗначение("хрень"); Оле.глРасшифровка.ДобавитьЗначение("мутотень"); Оле.глРасшифровка.ДобавитьЗначение("колокольчик"); Результат = Оле.EvalExpr("КакаяТоФункцияСПараметрами(глРасшифровка)"); |
17-VZ >криво парсится, не работает. ошибки валятся в стиле "ожидается символ ")"..." |
18-Чучундер >пробовал так почему-то не получилось, потом сюда на форум пришел, ща еще раз попробую может ошибся где-то. |
16-VZ > я в контексте "[em]заверни в ЗначениеВСтрокуВнутр[/em]" и "[em]ЗначениеВСтроку() способно сотворить такую строку, что ОЛЕ ей подавится[/em]" :) через строку такой массив передаётся без потерь |
19-ilyich_ > [em]ошибки валятся в стиле "ожидается символ ")"[/em] - разруха - она не в сортирах |
18-Чучундер > где же ты был раньше, спасибо тебе огромное!!! )) работает! Я по другому пытался сделать через ОЛЕ.ExecuteBatch("глРасшифровка =СоздатьОбъект(""СписокЗначений"")"); не работало. |
(23) ну так на ткой код она тебе вернет ошибку типа неизвестный оператор... Экзекутебач должна возвращать вычесленное значение. а у тебя написан код не вычисления значения, а присвоения... то есть немножко не то |
Текущее время: 19:31. Часовой пояс GMT +3. |