AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
NAV
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2013, 18:25   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Продолжаем неделю каверзных вопросов.

Небольшое вступление (в начале думал что не большое, но не большое не получается). В некоторых языках программирования, в частности на VB (совсем в частности VBA) есть такое понятие, как не обязательные именованные параметры. Например, есть какая-нить функция с 20-ю параметрами. А Вам то и нужно что один в неё передать, 13-ый по счёту. Что делать? Перечислять все 20 параметров ради одного? Нет и ещё раз нет! Всем двадцати параметрам можно дать имена и передавать параметры в функцию можно будет поимённо! Например так: FuncWith20Params(ThirteenthParam:=value); Красота? Красота!

Но что же делать языкам, которые не знают что такое не обязательные, а тем более именованные параметры? Если я в Наве напишу такую конструкцию, он только пальцем у виска покрутит. Можно конечно забыть о красоте и перечислить все 20 параметров (не будем сейчас вспоминать про ограничение в 16 параметров). Можно, да не всегда. Дело в том, что именованные не обязательные параметры используются не только для того что бы меньше приходилось стучать по клаве. И яркий тому пример, метод Copy принадлежащий объекту WorkSheet из Excel. Этот метод принимает 2 необязательных именованных параметра типа WorkSheet с именами Before и After. Логика проста, если прилетел параметр Before, то копируем Лист и вставляем его перед Листом, который скопировали, если же прилетел параметр After, то вставляем после. Если прилетают оба параметра - ошибка. Поговорим об этом методе в контексте Нава.

Нав, к счастью, может пропускать последние параметры (т.е. он частично знает, что бывают необязательные параметры, но только не подозревает, что они могут идти и в начале, а не только в конце), поэтому мы можем спокойно вызвать метод Copy(wrkSheet), подразумевая что это параметр Before, а вот параметр After мы никак не вызовем. Бяда? Бяда. Насколько это бяда я и пытаюсь выяснить и надеюсь на вашу помощь!

Ну так вот, не один Нав не знает что такое необязательные именованные параметры и разработчики Excel не расисты решившие устроить бойкот языкам не знающим что это такое. Поэтому в системной библиотеке, доступной всем и каждому есть такой объект как Type, а объект этот в свою очередь содержит такую переменную как Missing. Эту вот самую переменную и нужно передавать в тех случая, когда ничего передавать не нужно. Т.е. наш метод теперь мы можем вызвать так: Copy(Type.Missing, wrkSheet). Ура?

Со вступлением покончили и нет, не ура. Т.к. проблемы на этом только начинаются. Системная библиотека о которой я писал выше, называется mscorlib, можно объявить Automation с этой библиотекой и найти в нём объект Type, только вот члена Missing в этом объекте почему-то не находится Можно в этой библиотеке найти и объект Missing, но если в метод передавать его, то получаем неизвестную ошибку выполнения

Я в тупике.
Старый 04.04.2013, 19:26   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
А что собственно за библиотека? mscorlib.dll? Напишите пожта точное название, т.к. я не вижу метода Copy в этой библиотеке. Пробовали пользоваться DotNet, а не Automation?
Старый 05.04.2013, 09:36   #3  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
А что собственно за библиотека? mscorlib.dll? Напишите пожта точное название, т.к. я не вижу метода Copy в этой библиотеке. Пробовали пользоваться DotNet, а не Automation?
В mscorlib находится объект Type. Метод Copy находится в библиотере MS Excel Object Library в пространстве Workshhets
DotNet тоже пробовал.
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:24.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.