Перебор справочников и их реквизитов
19. Июнь 2010 - 18:42 | by admin
Простой пример доступа к метаданным справочников - вывод в консоль метаданных справочников и их реквизитов.
Пример показывает работу с чистыми метаданными, без использования ссылочных объектов.
Обратите внимание, что метаданные получаются от основного объекта V7 - все метаданные статические объекты, и они доступны только на чтение.
import j1c.ru.Metadatas;
import j1c.ru.V7;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
public class ReadMetaCatalogs {
static String cp = System.getProperty("console.encoding","Cp866");
public static void message(Object obj) throws IOException{
String msg = obj.toString()+"\n";
byte[] b;
try {
b = msg.getBytes(cp);
}
catch( UnsupportedEncodingException e ){
b = msg.getBytes(); // В случае отсутствия нужной кодировки,
// делаем преобразование по умолчанию
}
System.out.write(b);
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
if(args.length==0){
message("Usage: ReadMetaCatalogs.jar catalog [connection]\n\n" +
"where parameters include:\n" +
" catalog catalog base 1C\n" +
" connection connection string as: 'server='server';base='base';user='user';password='password''");
}
//создаем объект предприятия
V7 v7 = new V7();
//подсоединеямся
//либо учетной записью самой 1С
if(args.length==1){
v7.connect(args[0]);
}//либо по заданной строке соединения
else{
String[] fields = args[1].split(";");
Properties props = new Properties();
try {
for(int i=0;i<fields.length;i++){
String key = fields[i].split("=")[0];
String val = fields[i].split("=")[1];
props.put(key, val);
}
} catch (Exception e) {
throw new RuntimeException("Неверно задана строка сединения '"+args[1]+"'");
}
v7.connect(args[0], props);
}
//читаем метаданные справочников
ReadMetaCatalogs t = new ReadMetaCatalogs();
t.run(v7);
}
private void run(V7 v7) throws IOException{
//из объекта предприятия получаем его метаданные
Metadatas meta = v7.getMetaData();
//выборка всех справочников
List<Metadatas.Catalog> catalogs = meta.selectTypes("Справочник.*");
for(Iterator<Metadatas.Catalog>i=catalogs.iterator();i.hasNext();){
Metadatas.Catalog type = i.next();
message(type);
//получаем атрибуты справочника. Хотя есть альтернатива получения через
//метод - meta.selectTypes("Справочник.<ИмяСправочника>.*" )
//вообще метод selectTypes() может выбирать разные метаданные сразу, например с
//таким аргументом "Справочник.*.*" будут выбраны все реквизиты справочников
List<Metadatas.Property> propertys = type.getPropertys();
Metadatas.Property property;
for(Iterator<Metadatas.Property>j=propertys.iterator();j.hasNext();){
property = j.next();
message(property);
}
}
}
}
Можно скачать уже откомпилированный пример
- Положить ReadMetaCatalogs.jar в каталог вместе jar файлами J1C
- Запускать из командной строки:
java -jar ReadMetaCatalogs.jar <Каталог базы> [server='server';base='base';user='user';pwd='user']