Приложение oscript для чтения скобочных файлов 1С, аналог обработок 1С (yabr.1c).
- Чтение и обработка данных выполняется последовательно (построчно)
- Это эксперимент по реализации конвейерной обработки данных (pipeline), т.е. каждая порция данных, полученная в текущей обработке передается в указанный(-ные) в настройках обработчик(-и) для последующе обработки
- Настройки описываются в формате JSON (см. Файл настроек)
- разработка ведется в формате EDT
- Журнал регистрации 1С (LGP) и словарь журнала регистрации (LGF)
- Настройки информационных баз из файла настроек кластера 1С (1CV8Clst.lst)
- Список версий хранилища из отчета по версиям хранилища (MXL)
- Результаты замера производительности (PFF)
- process (p) - выполняет обработку данных настройкам из файла (.json)
- <Путь> - путь к файлу настроек (по умолчанию ./ybrsettings.json)
- --work-dir <путь к рабочему каталогу (по умолчанию: текущий каталог)>
- test (t) - выполняет чтение указанного файла в скобочном формате 1С, выводит результаты в консоль (возможен замер времени)
- <Путь> - путь к файлу в скобочном формате 1С
- --start-row <начальная строка для чтения (по умолчанию 1)>
- --mesure-rate <частота замера скорости выполнения (по умолчанию 100)>
Управляющая обработка-менеджер, читает настройки, запускает и управляет обработкой данных.
Обработка для интерактивного указания файла настроек и запуска обработки данных.
Функция ПринимаетДанные() - признак возможности обработки, принимать входящие данные
Функция ВозвращаетДанные() - признак возможности обработки, возвращать обработанные данные
Функция ОписаниеПараметров() - возвращает структуру с описанием параметров обработки
Функция МенеджерОбработкиДанных() - возвращает ссылку на вызывающую/управляющую обработку - менеджер обработки данных
Процедура УстановитьМенеджерОбработкиДанных(Знач НовыйМенеджерОбработкиДанных) - устанавливает ссылку на вызывающую/управляющую обработку - менеджер обработки данных
Функция Идентификатор() - возвращает идентификатор обработки, установленный при инициализации в менеджере обработки данных
Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) - устанавливает идентификатор обработки, вызывается при инициализации в менеджере обработки данных
Функция ПараметрыОбработкиДанных() - возвращает значения параметров обработки данных
Процедура УстановитьПараметрыОбработкиДанных(Знач НовыеПараметры) - устанавливает значения параметров обработки данных
Функция ПараметрОбработкиДанных(Знач ИмяПараметра) - возвращает значение указанного параметра обработки данных
Процедура УстановитьПараметрОбработкиДанных(Знач ИмяПараметра, Знач Значение) - устанавливает значение указанного параметра обработки
Процедура УстановитьДанные(Знач ВходящиеДанные) - устанавливает данные для обработки
Процедура ОбработатьДанные() - выполняет обработку данных
Функция РезультатОбработки() - возвращает результаты обработки данных
Процедура ЗавершениеОбработкиДанных() - выполняет действия при окончании обработки данных и оповещает обработку-менеджер о завершении обработки данных
Ищет в стандартном расположении или в указанных каталогах файлы настроек кластера серверов 1С (1cv8lst.lst) и передает найденные файлы далее на обработку.
- ОписанияКластеров - массив путей к каталогам, в которых будет выполняться поиск файлов настроек кластеров 1С. Если не указан, то выполняется поиск в стандартных расположениях (%ProgramFiles%\1Cv8\srvinfo).
Читает список файлов из указанного каталога по указанной маске и передает для дальнейшей обработки по одному.
-
Путь - Путь к каталогу для файлов для обработки. Значение по умолчанию: <каталог запуска обработки>;
-
МаскиФайлов - Маски поиска файлов, разделенные "";". Значение по умолчанию: ".";
-
ИскатьВПодкаталогах - Флаг поиска в подкаталогах. Значение по умолчанию: Ложь;
-
ПорядокСортировкиПоИмени - Указывает порядок сортровки найденных в каталоге файлов для дальнейшей обработки:
- asc - файлы сортируются по возрастанию имени
- desc - файлы сортируются по убыванию имени
- <прочее> (по умолчанию) - сортировка не выполняется
сортировка выполняется в пределах каждой указанной маски файлов.
Читает скобочный файл в иерархию структур и массивов:
- чтение выполняется последовательно по строкам
- ошибки формата файла не проверяются и игнорируются, что сможет прочитать. то и получится
- элементы простых типов (число/строка) записываются в массив текущего уровня как есть
- элементы - массивы (ограниченные "{...}") "оборачиваются" в структуру вида:
|-> Элемент
| |- Родитель - родительский элемент (Неопределено - для корневого элемента)
|______|________|
| |- Уровень - уровень элемента в иерархии (0 - корневой элемент)
| |- Индекс - индекс элемента в родительском элементе
| |- НачСтрока - номер начальной строки диапазона, на основании которому создан текущий и подчиненные элементы
| |- КонСтрока - номер конечной строки диапазона, на основании которому создан текущий и подчиненные элементы
| |- Значения - массив дочерних элементов
|_______________|
- Для закрывающихся скобок ("}") выполняется обратный вызов МенеджерОбработкиДанных.ПродолжениеОбработкиДанных (МенеджерОбработкиДанных.os) для передачи прочитанных данных на дальнейшую обработку
- ПутьКФайлу - (обязательный, если обработчик стоит первым в цепочке) Имя файла, файл, поток данных для чтения;
- УровниЗаписей - Массив уровней записей (по вложенности), которые будут переданы на дальнейшую обработку. Значение по умолчанию: [1];
- НачальнаяСтрока - Номер строки входящих данных с которой будет начато чтение. Значение по умолчанию: 1;
- КаталогПозицийЧтения - Путь к каталогу для сохранения позиций начала чтения. Если не указан, то позиции чтения сохраняться не будут;
- ЧастотаЗамераСкоростиВыполнения - Количество прочитанных записей для которых будет выполнен расчет скорости чтения данных. Если указан 0, то расчет скорости выполняться не будет. Значение по умолчанию: 0.
Принимает на вход данные в том виде как их возвращает обработка чтения "скобкофайлов" и обрабатывает элементы данных как запись настройки информационной базы в файле настроек кластера 1С.
- УровеньЭлементов - (служебный, не требует установки) Номер уровня вложенности элементов в структуре данных, прочитанной из скобкофайла, которые будут прочитаны и обработаны. Значение: 3;
- ИндексЭлементаРодителя - (служебный, не требует установки) Индекс родительского элемента в структуре данных, подчиненные элементы которого будут прочитаны и обработаны. Значение: 2;
- ПутьКФайлу - Путь к файлу списка ИБ кластера 1С. Требуется для вывода информации о каталоге кластера 1С.
Принимает на вход данные в том виде как их возвращает обработка чтения "скобкофайлов" и обрабатывает каждый элемент данных как запись словаря текстового журнала регистрации.
- УровеньЭлементов - (служебный, не требует установки) Номер уровня вложенности элементов в структуре данных, прочитанной из скобкофайла, которые будут прочитаны и обработаны. Значение: 1;
- ИндексЭлементаРодителя - (служебный, не требует установки) Индекс родительского элемента в структуре данных, подчиненные элементы которого будут прочитаны и обработаны. Значение: 0;
Принимает на вход данные в том виде как их возвращает обработка чтения "скобкофайлов" и обрабатывает каждый элемент данных как запись текстового журнала регистрации.
- УровеньЭлементов - (служебный, не требует установки) Номер уровня вложенности элементов в структуре данных, прочитанной из скобкофайла, которые будут прочитаны и обработаны. Значение: 1;
- ИндексЭлементаРодителя - (служебный, не требует установки) Индекс родительского элемента в структуре данных, подчиненные элементы которого будут прочитаны и обработаны. Значение: 0;
- Словари - (обязательный) Словари данных журнала регистрации 1С. Задается в виде структуры <имя словаря>:[<ключ элемента>:<значение элемента>];
- ВыгружатьКолонки - Содержит список колонок с указанием необходимости их выгрузки. Задается в виде структуры <имя колонки>:true|false;
- РазмерПорцииОбработки - Количество записей, которое будет прочитано прежде чем они будут переданы на дальнейшую обработку. Значение по умолчанию: 1;
- ИмяФайлаЖурнала - Имя обрабатываемого файла журнала регистрации. Требуется для вывода информации об имени файла журнала;
- ИнформационнаяБаза - Описание или имя информационной базы, чей журнал обрабатывается. Требуется для вывода информации об информационной базе 1С.;
Принимает на вход данные в том виде как их возвращает обработка чтения "скобкофайлов" и обрабатывает как элементы данных табличного документа (MXL) с отчетом по версиям хранилища 1С.
- УровеньЭлементов - (служебный, не требует установки) Номер уровня вложенности элементов в структуре данных, прочитанной из скобкофайла, которые будут прочитаны и обработаны. Значение: 4.;
Принимает на вход данные в том виде как их возвращает обработка чтения "скобкофайлов" и обрабатывает каждый элемент данных как запись замера производительности 1С (PFF).
- УровеньЭлементов - (служебный, не требует установки) Номер уровня вложенности элементов в структуре данных, прочитанной из скобкофайла, которые будут прочитаны и обработаны. Значение: 3;
Принимает на вход данные в виде структуры или массива структур, проверяет их на соответствие заданным условиям и если условия выполняются, передает на дальнейшую обработку.
- Условия - структура описания условий фильтра данных;
"ИмяОбработки":"ФильтрДанных",
"Параметры":{
"Условия":{
"Группа":"ИЛИ",
"Условия": [
{
"ЛевоеЗначение":"&Важность",
"ВидСравнения":"ВСписке",
"ПравоеЗначение": [
"Ошибка"
]
},
{
"Группа":"И",
"Условия": [
{
"ЛевоеЗначение":"&СтатусТранзакции",
"ВидСравнения":"Равно",
"ПравоеЗначение": "Зафиксирована"
},
{
"ЛевоеЗначение":"&ПредставлениеСобытия",
"ВидСравнения":"Содержит",
"ПравоеЗначение": "Данные"
}
]
}
]
}
},
Обработчик вывода данных, любые входящие данные преобразует в формат JSON и выводит в консоль.
- ОбрабатыватьКакМассив - Истина - входящий массив будет обработан поэлементно; Ложь - входящий массив будет обработан как 1 значение. Значение по умолчанию: Истина.
Обработчик вывода данных, любые входящие данные преобразует в формат JSON и выводит в указанный файл.
- ПутьКФайлу - (обязательный) Путь к файлу JSON для сохранения данных;
- ОбрабатыватьКакМассив - Истина - входящий массив будет обработан поэлементно; Ложь - входящий массив будет обработан как 1 значение. Значение по умолчанию: Истина.
Обработчик вывода данных, любые входящие данные преобразует в формат JSON и отправляет в индекс Elastic.
- Эластик_Сервер - (обязательный) Адрес сервера http-сервиса Elastic.");
- Эластик_Порт - Порт сервера http-сервиса Elastic. Значение по умолчанию: 9200;
- Эластик_Путь - Относительный путь к REST API Elastic;
- Эластик_Пользователь - Имя пользователя сервиса Elastic;
- Эластик_Пароль - Пароль пользователя сервиса Elastic;
- ШаблонЗаголовкаИндекса - (обязательный) Шаблон для установки значения заголовка индекса (_index) при выгрузке;
- ШаблонТипаИндекса - (обязательный) Шаблон для установки значения типа индекса (_type) при выгрузке;
- ШаблонИдИндекса -(обязательный) Шаблон для установки идентификатора индекса (_id) при выгрузке;
- РазмерПорцииОбработки - Количество записей, которое будет добавлено в пакет для отправки в Elastic. Значение по умолчанию: 1;
- СохранятьОбработанныеДанные - Флаг необходимости сохранения обработанных данных в результатах обработки. Значение по умолчанию: Ложь;
- СохранятьОтправленныеСтроки - Флаг необходимости сохранения строк, отправленных в Elastic в результатах обработки. Значение по умолчанию: Ложь.
Обработчик вывода данных, любые входящие данные преобразует в INSERT SQL-запрос и отправляет в СУБД ClickHouse через REST API.
- Клик_Сервер - (обязательный) Адрес сервера http-сервиса ClickHouse.");
- Клик_Порт - Порт сервера http-сервиса ClickHouse. Значение по умолчанию: 9200;
- Клик_Путь - Относительный путь к REST API ClickHouse;
- Клик_Пользователь - Имя пользователя сервиса ClickHouse;
- Клик_Пароль - Пароль пользователя сервиса ClickHouse;
- Клик_ИмяБазы - Имя базы данных ClickHouse;
- Клик_ИмяТаблицы - Имя таблицы в базе ClickHouse;
- Клик_СоответствиеПолей - Соответствие полей входящих данных полям таблицы ClickHouse (с указанием типов;
- Клик_УпорядочитьПо - Список полей сортировки данных в таблице ClickHouse;
- РазмерПорцииОбработки - Количество записей, которое будет добавлено в пакет для отправки в Elastic. Значение по умолчанию: 1;
- СохранятьОбработанныеДанные - Флаг необходимости сохранения обработанных данных в результатах обработки. Значение по умолчанию: Ложь;
- СохранятьОтправленныеСтроки - Флаг необходимости сохранения строк, отправленных в Elastic в результатах обработки. Значение по умолчанию: Ложь.
Файл настроек описывает последовательность вызова обработчиков для обработки данных. обработчик = обработка 1С реализующая вышеуказанный API.
|-> Описание обработчика
| |- ИдОбработчика - строковый идентификатор обработчика (необязательный)
| |- ИмяОбработки - имя класса обработчика
| |- ПутьКОбработке - путь к oscript-файлу класса обработчика
| |- Параметры - структура параметров обработки
| | |- <просто параметр> - параметр простого типа
| | |- <параметр из данных обработчика> - параметр вычисляемый обработчиком
| | | |- ИдОбработчика - идентификатор обработчика из которого будет получен параметр
| | | |- ФункцияПолученияЗначения - имя функции получения значения параметра (по умолчанию: "ПолучитьРезультат")
| |- Обработчики - массив обработчиков данных полученных на текущем уровне
| |- <Описание обработчика>* - структура, аналогичная данной
|____________________|
- $settingsDir - каталог файла настроек
- $yabrDir - каталог запуска скрипта
- $workDir - указанный при запуске рабочий каталог (по умолчанию: каталог файла настроек)
Пример файла настроек чтения словарей журнала регистрации
{
// путь к обработке чтения файлов скобочного формата
"ИмяОбработки":"ЧтениеСкобкофайла",
"Параметры":{
// путь к файлу словарей журнала регистрации
"ПутьКФайлу":"$settingsDir\\1CV8.lgf",
// обрабатываемые уровни вложенности "скобкофайла"
"УровниЗаписей":[1]
},
"Обработчики":[
{
// путь к обработке чтения файла словарей журнала регистрации, обработчик будет вызван, для каждой прочитанной записи файла словарей
"ИмяОбработки":"ЧтениеСловаряЖР",
"Обработчики":[
{
// путь к обработке вывода произвольных данных в файл JSON, обработчик будет вызван, для каждой прочитанной записи словаря журнала регистрации
"ИмяОбработки":"ВыводДанныхВФайлJSON",
"Параметры":{
// путь к файлу для сохранения результатов
"ПутьКФайлу":"$yabrDir\\..\\testdata\\jornal-dic2jsonfile-result.json"
}
}
]
}
]
}
Использовать yabr
Менеджер = Новый МенеджерОбработкиДанных();
Менеджер.Лог().УстановитьУровень(УровниЛога.Предупреждение);
Чтение = Новый ЧтениеСкобкофайла(Менеджер);
Чтение.УстановитьПараметрыОбработкиДанных(Новый Структура("НачальнаяСтрока", 8));
//Чтение.УстановитьПараметрыОбработкиДанных(Новый Структура);
// Чтение.УстановитьПараметрыОбработкиДанных(Новый Структура("УровниЗаписей", "0,1"));
Чтение.УстановитьДанные(ПутьФайлаИлиПоток);
Чтение.ОбработатьДанные();
Структура = Чтение.РезультатОбработки();
Результат = Структура.Значения[0].Значения[1];
Больше примеров расположены в каталоге examples.