Кто-нибудь сталкивался с задачей получения идентификатора записи справочника.
Проблема в следующем: Запросом вытаскиваю данные из справочника. В 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;
}