Russian Qt Forum
Ноябрь 22, 2024, 13:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение идентификатора строки справочника 1C через COM  (Прочитано 4716 раз)
dio
Гость
« : Апрель 24, 2017, 15:37 »

Добрый день, коллеги!
Кто-нибудь сталкивался с задачей получения идентификатора записи справочника.
Проблема в следующем: Запросом вытаскиваю данные из справочника. В 1С нет возможности прямо в запросе преобразовать "Ссылку" в "Уникальный идентификатор" в виде строки. Для преобразования нужно вызвать функцию XMLString объекта "Соединение". Непонятно как передать в эту функцию значение ссылки, которое вытянул запросом.

Код:
Pack * Intr1cMan::getInDocs()
{
    Pack * vRes=new Pack("0","Intr1cMan","InDocs",this);
QAxObject * axConnector = new QAxObject("V83.COMConnector");
    connect(axConnector,SIGNAL(exception(int,QString,QString,QString)),this,SLOT(slotException(int,QString,QString,QString)));

    if(axConnector)
    {
        QString vConnStr=QString("File=\"F:\\1C\\Trade\";Usr=IMan;");
        QAxObject * axSession = axConnector->querySubObject("Connect(const QString&)",vConnStr);
        if(axSession)
        {
            connect(axSession,SIGNAL(exception(int,QString,QString,QString)),this,SLOT(slotException(int,QString,QString,QString)));
            QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
            QAxObject* axQry = axSession->querySubObject("NewObject(QString)", codec->toUnicode("Запрос"));
            if(axQry)
            {
                 connect(axQry,SIGNAL(exception(int,QString,QString,QString)),this,SLOT(slotException(int,QString,QString,QString)));
                 axQry->dynamicCall("Text", codec->toUnicode("ВЫБРАТЬ Поступление.НомерВходящегоДокумента КАК docNum                      \n"
                                                         "       ,Поступление.ДатаВходящегоДокумента КАК docDate                     \n"
                                                         "       ,Поступление.Контрагент.НаименованиеПолное КАК contr_name           \n"
                                                         "       ,Поступление.Контрагент.Ссылка КАК contr_extcode                    \n"
                                                         "ИЗ Документ.ПоступлениеТоваровУслуг КАК Поступление                        \n"
                                                         "УПОРЯДОЧИТЬ ПО                                                             \n"
                                                         "Поступление.ДатаВходящегоДокумента                                           "));

                QAxObject* axRes=axQry->querySubObject("Execute()");
                if(axRes)
                {
                    QAxObject* axRow=axRes->querySubObject("Choose()");
                    if(axRow)
                    {
                        BodyItem vItem;
                        for(int i = 0; i < axRow->dynamicCall("Count()").toInt(); i++)
                        {
                            if(axRow->dynamicCall("Next()").toBool())
                            {
                                vItem.setValue("docNum",axRow->dynamicCall("docNum"));
                                vItem.setValue("docDate",axRow->dynamicCall("docDate"));
                                vItem.setValue("contr_name",axRow->dynamicCall("contr_name"));
                                vItem.setValue("contr_extcode",axRow->dynamicCall("contr_extcode"));

                                QAxObject* axLink=axRow->querySubObject("contr_extcode");
                                //QAxObject* axUI=axLink->querySubObject(codec->toUnicode("UUID()").toUtf8().data());
                                if(axLink)
{
  QVariant vVal=axSession->dynamicCall("XMLString(QVariant)",axLink.dynamicCal("UUID()"));  //Здесь ошибка!!!
                                  vItem.setValue("contr_extcode",vVal);
  delete axLink;
}
                                vRes->addBodyItem(vItem,"docInList");

                            }
                        }
                        delete axRow;
                    }
                    delete axRes;
                }
                delete axQry;
            }
            delete axSession;
        }
        delete axConnector;
    }
    return vRes;
}
   
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 21.