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) ну так на ткой код она тебе вернет ошибку типа неизвестный оператор... Экзекутебач должна возвращать вычесленное значение. а у тебя написан код не вычисления значения, а присвоения... то есть немножко не то | |
| Интернет-форум Краснодарского края и Краснодара |