Инструкция пользователя: Экстрактор данных 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!