Поиск:

Ответ в темуСоздание новой темы Создание опроса
> необязательные параметры функций OLE, как передать, на примере OLE 1Cv77 
:(
    Опции темы
sergey_85
Дата 1.3.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 445
Регистрация: 17.4.2007
Где: Россия, Челябинск

Репутация: 1
Всего: 1



Привет!

Есть код на с++ Builder и 1Cv77.

Код bcb это переделанный код  1Cv77 с использованием OLE.
Вопрос вот в чем, когда я пытаюсь вызвать ф-цию с необяз. параметрами, например

Код

ole1C.Exec(Function("глВернутьЦену") << sprGoods.Exec(Function("ТекущийЭлемент")) << sprPrice.Exec(Function("ТекущийЭлемент")) << Unassigned << &price);

//глВернутьЦену(СпрНоменк.ТекущийЭлемент(), СпрТипЦен.ТекущийЭлемент(), ,ценаТовара, , , , ); 

то непонятно как передавать эти параметры, как ни пробовал ф-ция возвращает либо ошибку либо 0 (параметр &price)
Пробовал Variant::Empty(),  0, Unassigned - не помогает!

*а вот когда передаешь все параметры своего типа то ф-ция работает возвращает нужный результат
Как быть?

Код bcb, переделка 1сv77 через OLE
Код

    Variant ole1C;

    ole1C = CreateOleObject("V1CEnterprise.Application");

    if(!ole1C.IsEmpty())
    {
        ole1C.OleProcedure("Initialize", ole1C.OlePropertyGet("RMTrade"), "/DC:\\1 /NФедоров /P", "NO_SPLASH_SHOW");

        Variant sprGoods, sprPrice;
        Variant curGroup;
        
        Variant groupCode((char *)"00001985");
        Variant priceCode((char *)"00004");
        Variant storeCode((char *)"00001");

        Variant quantity((double)-1);
        Variant price((double)0);
        Variant date ((TDateTime) Now());

        sprGoods = ole1C.Exec(Function("EvalExpr") <<"СоздатьОбъект(\"Справочник.Номенклатура\")");
        sprPrice = ole1C.Exec(Function("EvalExpr") <<"СоздатьОбъект(\"Справочник.ТипыЦен\")");

        if(sprGoods.Exec(Function("НайтиПоКоду") << groupCode << Variant((int) 0)) == Variant((int) 1)) //найдем и выберем нужную группу
        {
            curGroup = sprGoods.Exec(Function("ТекущийЭлемент"));
            if(curGroup.Exec(Function("ЭтоГруппа")) == Variant((int) 1))//есть группа
            {
                sprGoods.Exec(Function("ИспользоватьРодителя") << curGroup);
                sprGoods.Exec(Function("ВыбратьЭлементы"));

                while (sprGoods.Exec(Function("ПолучитьЭлемент") << Variant((int) 0)).operator int() == 1)
                {
                    if(sprGoods.Exec(Function("ТекущийЭлемент")).Exec(Function("ЭтоГруппа")).operator int() == 0)//список товаров группы
                    {
                        if(sprPrice.Exec(Function("НайтиПоКоду") << priceCode << Variant((int) 0)) == Variant((int) 1))
                        {
                            //ole1C.Exec(Function("РабочаяДата"));
                            ole1C.Exec(Function("глВернутьЦену") << sprGoods.Exec(Function("ТекущийЭлемент")) << sprPrice.Exec(Function("ТекущийЭлемент")) << Unassigned << &price);
                        }

                        Variant sprStore = ole1C.Exec(Function("EvalExpr") <<"СоздатьОбъект(\"Справочник.Склады\")");
                        Variant sprReg   = ole1C.Exec(Function("EvalExpr") <<"СоздатьОбъект(\"Регистр.ОстаткиТМЦ\")");

                        sprStore.Exec(Function("НайтиПоКоду") << storeCode);

                        quantity = sprReg.Exec(Function("СводныйОстаток") << Variant((int) 0) << sprGoods.Exec(Function("ТекущийЭлемент")) << sprStore.Exec(Function("ТекущийЭлемент")) << date << Variant((char *) "Количество"));

                        //Ост = Регр.СводныйОстаток(,ном.ТекущийЭлемент(), Склд.ТекущийЭлемент(),,"Количество");

                    }

                    ListBox1->Items->Add(sprGoods.OlePropertyGet("Код") + sprGoods.OlePropertyGet("Наименование") + AnsiString("Цена") + FloatToStr(price.operator double() ) + AnsiString("Остаток") + FloatToStr(quantity.operator double() ));
                    Application->ProcessMessages();
                }
            }
        }

        sprGoods = Unassigned;
        sprPrice = Unassigned;
    }

    ole1C = Unassigned; //close 1C app.



исходный код 1сv77
Код
  
//Возвращает все товары указанной группы (артикул, наим., цена, остаток)  
Функция УВП_ВыбратьТоварыПоКодуГруппы(кодГруппы, кодТипаЦен, кодСклада)
    
    Перем ВыбранныеТовары;
    Перем СпрНоменк, СпрТипЦен, ВыбрГруппа, ценаТовара;  
    
    ВыбранныеТовары = СоздатьОбъект("ТаблицаЗначений");
        
    ВыбранныеТовары.НоваяКолонка("КодТовара");
    ВыбранныеТовары.НоваяКолонка("НаимТовара");   
    ВыбранныеТовары.НоваяКолонка("ЦенаТовара");
    ВыбранныеТовары.НоваяКолонка("ОстатокТовара");
                                    
    СпрНоменк = СоздатьОбъект("Справочник.Номенклатура"); 
    СпрТипЦен = СоздатьОбъект("Справочник.ТипыЦен"); 
    Если СпрНоменк.НайтиПоКоду(кодГруппы,0) = 1 Тогда //найдем и выберем нужную группу
        
        ВыбрГруппа = СпрНоменк.ТекущийЭлемент(); 
        Если ВыбрГруппа.ЭтоГруппа() = 1 Тогда //есть группа
            
            СпрНоменк.ИспользоватьРодителя(ВыбрГруппа);
            СпрНоменк.ВыбратьЭлементы(); 

            Пока СпрНоменк.ПолучитьЭлемент(0)=1 Цикл
                Если СпрНоменк.ТекущийЭлемент().ЭтоГруппа() = 0 Тогда //список товаров группы
                      
                    ВыбранныеТовары.НоваяСтрока(); 
                    
                    ВыбранныеТовары.КодТовара  = СпрНоменк.Код;
                    ВыбранныеТовары.НаимТовара = СпрНоменк.Наименование;   
                    
                    ценаТовара = -1;// по умолч. цена = 0
                                        
                    Если СпрТипЦен.НайтиПоКоду(кодТипаЦен,0) = 1 Тогда
                        глВернутьЦену(СпрНоменк.ТекущийЭлемент(), СпрТипЦен.ТекущийЭлемент(), ,ценаТовара, , , , ); 
                    КонецЕсли;
                    
                    ВыбранныеТовары.ЦенаТовара    = ценаТовара;
                    ВыбранныеТовары.ОстатокТовара = УВП_ОстаткиТовара(СпрНоменк.Код, кодСклада);
                    
                КонецЕсли;            
            КонецЦикла; 
        КонецЕсли  
    КонецЕсли;    
    
    Возврат ВыбранныеТовары;    
КонецФункции //ВыбратьТоварыПоКодуГруппы(кодГруппы, кодТипаЦен, кодСклада)








Это сообщение отредактировал(а) sergey_85 - 1.3.2009, 19:20


--------------------
A good design always pays off.
PM MAIL   Вверх
xvr
Дата 2.3.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



После Unassigned надо ставить скобочки Unassigned (), а так все правильно

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.