Инструкция пользователя: Экстрактор данных 1С в ClickHouse

Название

Экстрактор данных 1С в ClickHouseDB, PostgreSQL, MySQL, REST, CSV, JSON, XLS, XLSX и Google Sheets / Extractor 1C Clickhouse, PostgreSQL, MySQL, REST, CSV, JSON, XLS, XLSX and Google Sheets

https://github.com/kimkarus/Extractor_1C_Clickhouse

Краткое описание

Обработка для выгрузки данных из подготовленных СКД в фоновом режиме в базу ClickHouseDB, PostgreSQL, MySQL, вшину данных с поддержкой REST API (CSV, JSON. SQL), влокальные файлы (CSV, JSON, XLS, XLSX) или в Google Sheets. Это дополнительная подключаемая обработка.

Описание

Обработка рассчитана на опытных пользователей 1С тех, кто знает, что такое СКД и конфигуратор 1С. Если вы не из таких, обратитесь к соответствующему специалисту.

Результат работы обработки

  • Создать таблицу / лист (Google Sheets) / локальные папки и файлы по имени запроса.
  • В фоновом или ручном режиме исполнить запросы.
  • Загрузить извлеченные данные в указанный приемник: база данных (ХД), REST API, локальные файлы (CSV, JSON, XLS, XLSX) или Google Sheets.

Технические требования

  • Должны быть открыты порты для: ClickHouseDB / PostgreSQL. / MySQL / HTTPS / HTTP / REST.
  • Должно быть право использовать и добавлять дополнительные обработки в информационную базу.
  • Должен быть создан сервисный пользователь в Google Cloud Console, скопированы его настройки и добавлен в таблицу в качестве редактора для Google Sheets.

Для работы с PostgreSQL требуется:

  • Windows 7 / Linux Ubuntu 20. и старше
  • Python 3.8 и старше (лучше устанавливать для всех пользователей)
  • psycopg2 версии 2.8.4 и старше (pip install psycopg2==2.8.4)

Для работы с MySQL требуется:

  • Windows 7 / Linux Ubuntu 20. и старше
  • Python 3.8 и старше (лучше устанавливать для всех пользователей)
  • mysql-connector-python-rf (pip install mysql-connector-python-rf

Для работы с REST API:

  • Любая ваша ссылка на службу (endpoint) работающая по протоколу HTTP для приема сообщений в BODY и BINARY типа запроса POST. В тело запроса можно вложить разные форматы данных:
    • CSV – через запятую с заголовками
    • CSV_WH – тот же CSV, но с заголовками
    • JSON – в виде массива объектов
    • ClickHouseDB – готовый SQL запрос для исполнения / перенаправления / обхода ограничения портов на стороне базы данных / шины данных
    • PostgreSQL – аналогично
    • MySQL – аналогично

Для выгрузки в локальные папки произвольных запросов (CSV, JSON, XLS, XLSX):

  • дать все необходимые права и разрешения на создание директорий и папок по пути для пользователя службы 1С или локального пользователя

Для выгрузки в Google Sheets:

  • Должен быть создан сервисный пользователь в Google Cloud Console, скопированы его настройки и добавлен в таблицу в качестве редактора для Google Sheets
    • Создать сервисного пользователя в Google Cloud Console
    • Дать права пользователю пользоваться Google Sheets
    • Создать таблицу Google Sheets
    • Добавить сервисного пользователя в таблицу в качестве редактора
    • Скопировать настройки из файла JSON сервисного пользователя в соответствующие поля на форме обработки
  • Лимиты использование Google Sheets API для сервисного пользователя изложены по ссылке: https://developers.google.com/workspace/sheets/api/limits?hl=ru

Особенности работы с запросами и полями

  • Не использовать поле “Период” в выходном слое отчета.
  • Все строковые поля попадут в ключи.
  • Если формат данных в СКД не указать, то обработка будет воспринимать это поле, как ключевое значение и строковое.
  • Если изменилась структура запроса, то добавьте новую команду в интерфейс. Обработка не умеет переделывать таблицы под ваш запрос. Обработка не добавляет новые колонки.
  • В обработке нет кода для обхода RLS.
  • В запросах рекомендуется использовать “ВЫБРАТЬ РАЗРЕШЕННЫЕ” (несмотря на то, что исполнение фоновое), чтобы не попадать на проблемы с правами по модели RLS.
  • Заранее указать форматы для данных, которые не следует рассматривать, как ключи.
  • Параметры не формат даты должны быть предопределены.

ClickHouseDB

  • тип таблиц “ReplacingMergeTree” (ClickHouseDB), что означает замещение не ключевых значений новыми значениями.

PostgreSQL

  • метод вставки – ON CONFLICT DO UPDATE SET column1 = EXCLUDED.column1 …

MySQL

  • метод вставки – ON DUPLICATE KEY UPDATE …

REST

  • Данные отправляются в формате CSV: первая строка всегда содержит наименование колонок.
  • Используется Basic авторизация
Заголовки.Вставить("Content-type", "text/csv");
Заголовки.Вставить("Authorization", "Basic " + Basic);
Заголовки.Вставить("guid", Параметры.ИдентификаторВыгрузки);
Заголовки.Вставить("table-name", Параметры.ИмяТаблицыТранслит);
Заголовки.Вставить("count-queries", Параметры.КоличествоЗапросов);
Заголовки.Вставить("index-query", Параметры.ИндексЗапроса);
Заголовки.Вставить("count-rows", Параметры.КоличествоЗаписей);
Заголовки.Вставить("index-row", Параметры.ИндексЗаписи);

где

Authorization - параматры авторизации
guid - уникальный идентификатор для каждой итерации настройки запроса
table-name - наименование таблицы запроса на латинице
count-queries - количество запросов в данной итерации для настройки запроса
index-query - текущий индекс итерации
count-rows - количество строк в запросе итерации
index-row - текущий индекс строки в запросе итерации

Локальные файлы (CSV, JSON, XLS, XLSX)

  • Обработка создаст папки с наименованиями по имени запроса на транслите
  • Поместит результаты запросов в виде табличных файлов
  • Имена файлов могут содержать принадлежность к дате выгрузки запроса, например <Наименование таблицы запроса>_01-01-2001

Google Sheets

  • Значения полей из файла JSON сервисного пользователя, которые нужно перенести в соответствующие поля на форме обработки:
{<br>  "type": "service_account",<br> 

Установка

Инструкция по установке обработки – https://kimkarus.ru/2025/02/08/instrukciya-po-ustanovke-ekstraktor-dannyh-1s-v-clickhouse/

Настройка параметров

Открываем обработку в режиме конфигуратора.

Действия -> Открыть модуль объекта

Процедура “СведенияОВнешнейОбработке”

Удаляем не наши “ДобавитьКоманду” и оставляем одну, чтобы по образу и подобию добавить свою фоновую задачу выгрузки.

Команда выглядит следующим образом:

ДобавитьКоманду(ТаблицаКоманд, "БросаниеВагоновТип фоновое", "Синхронизация1C_ClickHouseНаСервере_БросаниеВагоновТип" , "ВызовСерверногоМетода");

“ТаблицаКоманд” – системная таблица команд обработки. Из это таблицы в интерфейсе информационной базы 1С будет показывать наши добавленные команды таким образом.

“БросаниеВагоновТип фоновое” – Видимое и понятное имя команды для пользователя

“”Синхронизация1C_ClickHouseНаСервере_БросаниеВагоновТип” – Системное имя команды, по которой ориентируется обработка.

Здесь важно отметить, что нижние подчеркивания “_”, это функциональная и обязательная часть имени. Всего должно быть 2 подчеркивания всегда.

“_БросаниеВагоновТип” – После второго подчеркивания, это имя запроса, который мы положили в макеты обработки

Функция ЗаполнитьПараметры

Здесь указываем параметры подключения к нашему серверу, где хранится наша уже созданная база данных или нет.

Функция ЗаполнитьПараметры() Экспорт
	ТекущаяДата = ТекущаяДата();
	СтруктураПараметры = Новый Структура;
	СтруктураПараметры.Вставить("ИспользоватьСтарыйМетодФоновыхЗаданий", Ложь);
	СтруктураПараметры.Вставить("ПроверитьТаблицу", Ложь);
	СтруктураПараметры.Вставить("ТипКоманды", "");
	//База
	СтруктураПараметры.Вставить("Адрес", "IP");
	СтруктураПараметры.Вставить("Порт", 8123);
	СтруктураПараметры.Вставить("ЭтоЗащищенноеСоединение", Ложь);
	СтруктураПараметры.Вставить("ПутьДоСертификата", "");																 
	СтруктураПараметры.Вставить("Логин", "default");
	СтруктураПараметры.Вставить("Пароль", "password");
	СтруктураПараметры.Вставить("ИмяБазы", "db_name");																			  
	//ClickHouseDB, PostgreSQL, MySQL, REST, Local (CSV, JSON, XLS, XLSX), Google Sheets API
	СтруктураПараметры.Вставить("ТипБазы", "ClickHouseDB");
	СтруктураПараметры.Вставить("ФорматДанных", "SQL");
	СтруктураПараметры.Вставить("ИмяТаблицы", "ИмяТаблицы");
	СтруктураПараметры.Вставить("ИмяПользователя", "Фоновый");
	СтруктураПараметры.Вставить("ВключитьПараметрыЗапросаREST", Истина);	
	//НастройкаЗапроса	
	СтруктураПараметры.Вставить("ТекущаяДата", ТекущаяДата);
	СтруктураПараметры.Вставить("ДатаНачала", ДатаДнейНазад(ТекущаяДата, 1));
	СтруктураПараметры.Вставить("ДатаОкончания", КонецДня(ТекущаяДата));
	//
	СтруктураПараметры.Вставить("ЭтоПоЗапросу", Ложь);
	СтруктураПараметры.Вставить("ЭтоТекущаяДата", Ложь);
	СтруктураПараметры.Вставить("ТекстЗапроса", "");
	СтруктураПараметры.Вставить("Периодичность", "День");
	СтруктураПараметры.Вставить("ИспользоватьПериодВКлюче", Истина);
	СтруктураПараметры.Вставить("ИспользоватьДополнительныеКлючи", Ложь);
	СтруктураПараметры.Вставить("ИспользоватьТолькоДополнительныеКлючи", Ложь);
	СтруктураПараметры.Вставить("ОднимФайлом", Истина);
	СтруктураПараметры.Вставить("КоличествоДнейНазад", 1);
	СтруктураПараметры.Вставить("ОтключитьКоличествоДнейНазад", Ложь);
	СтруктураПараметры.Вставить("КоличествоВПортиции", 1000);
	СтруктураПараметры.Вставить("Таймаут", 60);
	СтруктураПараметры.Вставить("КаждаяПортицияВСвоемФоне", Ложь);
	СтруктураПараметры.Вставить("СпособОбновления", "Добавление");
	//
	СтруктураПараметры.Вставить("КомандыФоновые", Новый ТаблицаЗначений());
	СтруктураПараметры.Вставить("МассивДополнительныхКлючей", ПолучитьМассивДополнительныхКлючей());
	//
	СтруктураПараметры.Вставить("АбсолютныйПутьPython", "C:\Program Files\Python38\python.exe");
	Возврат СтруктураПараметры;
КонецФункции

Добавление отчетов на основе СКД

Макеты -> Добавить

Формируем или вставляем наш запрос.

Имя вашего макета для запроса должно начинается с “Запрос”<дальше ваше наименование>

Требования

Добавить в параметры своего отчета

Всегда использовать Период, как дату, а не стандартный период в параметрах СКД.

КоличествоДнейНазад – за какое количество дней формировать отчет и обновлять записи в базе. По умолчанию = 1

Начало и окончание дат периода должны быть обозначены Дата1 и Дата2.

Остальные примеры для месяца и дня смотри функцию ВернутьДату_Запрос_НаСервере

Добавление обработки в информационную базу

Администрирование -> Дополнительные обработки и отчеты

Добавить из файла.

Для добавленных команд в таблицу команд, будет возможность использовать их как фоновое задание. Отмечаем галочками и выставляем расписание исполнения.

Как только сохраните обработку в таком виде, запустятся столько фоновых здание, сколько отметите галками.

Чтобы запустить вручную каждое, необходимо зайти в Администрирование -> Обслуживание -> Регламентные и фоновые задания.

Общая форма обработки не предусмотрена. Используйте команды и кнопки для взаимодействия по образу и подобию из нашей “боевой” обработки.

Have fun!

Добавить комментарий