Работа через прямые запросы
В качестве примера показана работа со справочниками. Подключаемся к базе (каталог базы передается через аргумент командной строки), получаем метаданные
справочников, после чего выбираем запросом все элементы и выводим их в консоль
import j1c.ru.Metadatas;
import j1c.ru.V7;
import j1c.ru.Metadatas.Catalog;
import j1c.ru.V7.CatalogReference;
import j1c.ru.V7.RecordSet;
import j1c.ru.V7.ResultSet;
import java.util.Iterator;
import java.util.List;
public class ReadCatalogs2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
V7 v7 = new V7();
if(args.length!=1){
throw new Exception("Incorect count parameters");
}
v7.connect(args[0]);
List<Catalog> catalogs = v7.getMetaData().selectTypes("Справочник.*");
for(Iterator<Catalog>k=catalogs.iterator();k.hasNext();){
String name = k.next().getName();
RecordSet r = v7.getRecordSet();
Metadatas.Catalog meta = v7.getMetaData().getCatalog(name);
ResultSet result = r.executeQuery("select id as [Элемент $Справочник."+name+"] from $Справочник."+name);
while(result.next()){
//используем метод getObject - который возвращает уже типизированный объект-ссылку. Это длстгается
//за счет того, что в запросе использовали типизацию: ... as [Элемент $Справочник."+name+"]
CatalogReference ref = (CatalogReference)result.getObject("Элемент");
//просто ссылка
System.out.println(ref);
//через прямой запрос
if(meta.getLengthCode()>0 && meta.getLengthName()>0){
System.out.println(ref.getCode()+" "+ref.getName());
}
//а так же мы можем пройти прямо по полям запроса
List<Metadatas.Property> sample2 = meta.getPropertys();
for(Iterator<Metadatas.Property> j=sample2.iterator();j.hasNext();){
Metadatas.Property property = j.next();
if(!property.isPeriodical()){ System.out.println(property.getName()+": "+result.getString("sp"+property.getId()));
}
}
}
}
} catch (Exception e) {
System.out.println("Error: "+e);
System.exit(1);
}
}
}