Делаю синхронизацию данных со сторонней БД на SQL через ADODB.
Суть следующая:
- читаю данные запросом с использованием инструкции "for xml explicit"
- сохраняю в XML-файл через ADODB.Stream
- читаю объект в 1С через ЧтениеXML()
В ручном режиме синхронизация проходит замечательно. Как только пытаюсь повесить процедуру в регламентное задание - получаю ошибку: "XML document must have a top level element."
Текст запроса корректный, прекрасно отрабатывает и в ручном режиме и в SQL Query Analyzer.
Код:
АДОКоманд = Новый ComObject("ADODB.Command");
АДОКоманд.ActiveConnection = СКЛ_Соединение;
АДОКоманд.CommandTimeOut = 0;
АДОСтримВвод = Новый ComObject("ADODB.Stream");
АДОСтримВвод.Open();
АДОСтримВвод.WriteText(ТекстЗапроса, 1);
АДОСтримВвод.Position = 0;
АДОКоманд.CommandStream = АДОСтримВвод;
АДОСтримВывод = Новый ComObject("ADODB.Stream");
АДОСтримВывод.Open();
select
1 as Tag,
null as Parent,
null as [CatalogObject.Организации!1],
db.sp2177 as [CatalogObject.Организации!1!Ref!Element],
'false' as [CatalogObject.Организации!1!DeletionMark!Element],
rtrim(db.code) as [CatalogObject.Организации!1!Code!Element],
rtrim(db.descr) as [CatalogObject.Организации!1!Description!Element],
'' as [CatalogObject.Организации!1!Префикс!Element],
rtrim(db.sp186) as [CatalogObject.Организации!1!ИНН!Element],
rtrim(db.sp1669) as [CatalogObject.Организации!1!КПП!Element]
(3) подтвердил бы, если бы в ручном режиме не работало...
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший