1. Подключение к базе 1С
Приложение поддерживает два способа подключения:
COM-соединение (файловая база):
- Указываете путь к папке базы (где лежит `1Cv8.1CD`)
- Логин и пароль пользователя 1С
- Приложение автоматически находит папку `bin` платформы 1С и загружает `V83.COMConnector`
HTTP-соединение (веб):
- URL базы (например, `http://localhost/UT11`)
- Автоматически обращается к `{url}/hs/connector/execute1`
- Авторизация через Basic Auth (UTF-8)
Окно подключения — выбор типа (COM / HTTP), поля ввода пути, пользователя, пароля
Особенности реализации:
- Автоматический поиск `bin`-папки платформы 1С (обход `C:\Program Files\1cv8`)
- Ленивая загрузка COM-модулей (`win32com`, `pythoncom`) — до первого подключения не импортируются
- Сохранение настроек подключения в `1c_connector_config.json`
2. Выполнение запросов
Два режима выполнения запросов:
Режим «Прямой запрос» (Ctrl+Q или меню «Инструменты»):
- Окно с полем ввода текста запроса на языке 1С
- Результат отображается в таблице с колонками из запроса
- Экспорт результата в CSV
Режим «Просмотр объекта» (основное окно):
- Выбор типа объекта (Справочники, Документы, Регистры и т.д.)
- Выбор конкретного объекта из выпадающего списка
- Фильтрация по полям (в т.ч. по GUID для ссылочных реквизитов)
- Двойной клик по строке — открытие карточки объекта
Выполнение запроса (COM и HTTP — единый интерфейс)
```python
def execute_query(connection, query_text: str):
"""Выполнение запроса. Работает одинаково для COM и HTTP."""
if isinstance(connection, Http1CConnection):
cols, rows = connection.execute_query_http(query_text)
return _HttpSelection(cols, rows)
# COM: создаём запрос, выполняем, получаем выборку
query = connection.NewObject("Query", query_text)
result = query.Execute()
return result.Choose()
def execute_query_unload(connection, query_text: str):
"""Выполнение запроса с выгрузкой в таблицу значений."""
if isinstance(connection, Http1CConnection):
cols, rows = connection.execute_query_http(query_text)
return (cols, rows)
query = connection.NewObject("Query", query_text)
result = query.Execute()
return result.Unload()
```
HTTP-обёртка для единого API
```python
class Http1CConnection:
"""Обёртка HTTP-подключения. Совместима по интерфейсу с COM."""
def __init__(self, execute_url: str, auth: tuple):
self._execute_url = execute_url
self._auth = auth
def _post(self, payload: dict) -> dict:
headers = {"Content-Type": "application/json; charset=utf-8"}
headers.update(_http_basic_auth_headers(*self._auth))
body = json.dumps(payload, ensure_ascii=True)
r = requests.post(self._execute_url,
data=body.encode("utf-8"),
headers=headers, timeout=120)
if r.status_code != 200:
raise RuntimeError(f"HTTP {r.status_code}: {r.text[:300]}")
data = r.json()
if "error" in data:
raise RuntimeError(data["error"])
return data
def execute_query_http(self, query_text: str, params: dict = None):
"""Выполнить запрос, вернуть (columns, rows)."""
data = self._post({"query": query_text, "params": params or {}})
return data.get("columns", []), data.get("rows", [])
def get_metadata(self) -> dict:
"""Получить метаданные через HTTP."""
return self._post({"action": "metadata"})
```
3. Просмотр метаданных
Приложение отображает полное дерево метаданных конфигурации:
• Справочники показывают элементы, реквизиты, табличные части и иерархию.
• Документы — заголовочные реквизиты, табличные части и движения.
• Регистры сведений — измерения, ресурсы и реквизиты.
• Регистры накопления — измерения, ресурсы и регистратор.
• Константы — значения с возможностью просмотра и записи.
• Планы счетов — счета с реквизитами.
• Перечисления — значения перечислений.
• Планы видов характеристик — виды характеристик.
• Бизнес-процессы и Задачи — объекты с реквизитами.
Ключевые особенности:
- Автоматическое определение ссылочных полей — для них выводится `ПРЕДСТАВЛЕНИЕ()` вместо внутреннего представления COM
- Для каждого ссылочного поля дополнительно извлекается GUID (`УНИКАЛЬНЫЙИДЕНТИФИКАТОР()`)
- Двойной клик по строке таблицы — открытие карточки объекта с полными данными
- Поддержка табличных частей — отображаются на отдельных вкладках
- Фильтр по любому полю с поддержкой подстроки, даты и GUID
Просмотр содержимого объекта
Просмотр метаданных — выбор типа и объекта
Карточка объекта с табличными частями
4. Глобальный поиск по GUID
Одна из самых полезных функций. Вводите GUID (UUID) — происходит поиск его **во всех объектах базы**:
1. Прямой поиск — является ли этот GUID идентификатором какого-либо объекта (документа, справочника, элемента плана счетов)
2. Поиск в реквизитах — используется ли объект с этим GUID в реквизитах других справочников и документов
3. Поиск в табличных частях — присутствует ли ссылка в табличных частях документов
4. Поиск в регистрах — записи регистров, связанные с объектом
Двойной клик по строке результата открывает карточку найденного объекта.
5. Экспорт и импорт данных
Экспорт в CSV:
- Любой результат запроса можно экспортировать в CSV
- Для ссылочных полей экспортируются и представление, а GUID — позволяет потом импортировать обратно
- Разделитель `;`, кодировка UTF-8 с BOM (для корректного открытия в Excel)
Импорт из CSV:
- Загрузка реквизитов объектов из CSV-файла
- Загрузка значений констант
- Автоматическое загрузка ссылок: по GUID → по наименованию → по коду
- Поддержка различных форматов дат (`ДД.ММ.ГГГГ`, `ГГГГ-ММ-ДД`, `YYYYMMDD` и др.)
Экспорт результата запроса в CSV
```python
def _export_csv(tree_widget, filepath):
"""Экспорт содержимого Treeview в CSV."""
cols = list(tree_widget["columns"])
rows = [[tree_widget.set(cid, col) for col in cols]
for cid in tree_widget.get_children("")]
with open(filepath, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f, delimiter=";")
writer.writerow(cols)
writer.writerows(rows)
```
6. Безопасный режим
При первом запуске включён безопасный режим:
- Ограничение количества выбираемых строк (защита от случайного `ВЫБРАТЬ *` на миллионах записей)
- Запрет на экспорт (предотвращение случайной утечки данных) и импорт(предотвращение загрузки некорректных данных)
- Запрет на поиск по GUID (ресурсоёмкая операция)
- Для снятия — подтверждение: «Рекомендуется сделать резервную копию базы»
7. Горячие клавиши
• F5 — выполнить запрос / загрузить данные
• Ctrl+Q — окно прямого запроса
• Ctrl+F — фокус на поле фильтра
• Ctrl+R — обновить данные
• Ctrl+C — копировать таблицу в буфер
• F11 — развернуть на весь экран
8. Настройка HTTP-подключения (веб-сервис в 1С)
Для подключения через HTTP необходимо добавить HTTP-сервис в конфигурацию 1С.
Пошаговая инструкция прикладывается
Установка и запуск
Вариант А: Запуск из исходников (для разработчиков)
Вариант Б: Готовый EXE (для пользователей)
Распакуйте архив → запустите `1C_Connector.exe`. Настройки автоматически сохраняются в `1c_connector_config.json` рядом с EXE.
Регистрация COM (при необходимости)
Если при подключении возникает ошибка «COM не зарегистрирован»:
1. Закройте все окна 1С
2. Запустите `register_1c_com.bat` от имени администратора
Сценарии использования
Сценарий 1: Быстрый запрос к базе
Сценарий 1: Быстрый запрос к базе
1. Запустить приложение
2. Указать путь к базе, логин, пароль
3. Нажать «Подключиться»
4. Ctrl+Q → ввести запрос → F5
5. Результат — в таблице. Ctrl+C — скопировать в Excel.
Сценарий 2: Найти объект по GUID из лога
Сценарий 2: Найти объект по GUID из лога
1. Подключиться к базе
2. Меню «Инструменты → Поиск по GUID»
3. Вставить GUID из лога
4. Нажать «Найти»
5. Увидеть: это Реализация товаров от 15.03.2025, контрагент ООО «Ромашка»
6. Двойной клик — открыть карточку документа
Сценарий 3: Просмотр данных справочника с фильтром
Сценарий 3: Просмотр данных справочника с фильтром
1. Подключиться
2. Выбрать тип «Справочники» → объект «Номенклатура»
3. Нажать «Загрузить»
4. Открыть фильтр (Ctrl+F) → выбрать поле «Наименование» → ввести «кабель»
5. Нажать «Применить» — отображаются только позиции с «кабель» в наименовании
6. Двойной клик по строке — карточка с реквизитами и табличными частями
Сценарий 4: Выгрузка данных в CSV
Сценарий 4: Выгрузка данных в CSV
1. Подключиться
2. Выполнить запрос: `ВЫБРАТЬ Наименование, Артикул, Цена ИЗ Справочник.Номенклатура`
3. Нажать «Экспорт CSV»
4. Выбрать путь сохранения
5. Открыть в Excel — данные готовы
Сценарий 5: Удалённая работа через HTTP
Сценарий 5: Удалённая работа через HTTP
1. Администратор настраивает HTTP-сервис в 1С (один раз)
2. Пользователь запускает EXE, выбирает тип «HTTP»
3. Вводит URL: `http://server.company.ru/erp`
4. Работает так же, как при COM — запросы, метаданные, экспорт
Технические детали реализации
Одна из ключевых сложностей — работа с COM-объектами 1С из Python. COM-объект может содержать вложенные ссылки, которые при прямом приведении к строке дают ошибку. Приложение обрабатывает это автоматически:
Преобразования COM-значения в читаемый формат
```python
def _format_value(val, connection=None):
"""Преобразование значения COM в строку для отображения."""
if val is None:
return ""
if hasattr(val, "strftime"):
return val.strftime("%Y-%m-%d %H:%M:%S")
if isinstance(val, (int, float)):
return str(val)
if isinstance(val, bool):
return "Да" if val else "Нет"
s = str(val)
if "comobject" in s.lower():
if connection:
# Попытка получить представление через COM-методы
for attr in ("GetPresentation", "Представление",
"Наименование", "Name"):
m = getattr(val, attr, None)
if m and callable(m):
r = m()
if r and str(r).strip():
return str(r)
return ""
return s
```
Кеширование метаданных
Метаданные загружаются один раз и кешируются в памяти — повторные обращения не генерируют запросы к базе:
```
_metadata_cache → список объектов по типам
_metadata_attrs_cache → реквизиты объектов
_metadata_table_cols_cache → колонки табличных частей
_metadata_ref_fullname_cache → полные имена типов ссылок
```
Заключение
Это универсальный инструмент для работы с данными 1С:Предприятие из внешнего приложения. Он объединяет несколько возможностей, которые обычно требуют разных инструментов:
- Консоль запросов → Прямой запрос (Ctrl+Q)
- Просмотр метаданных
- Поиск объекта по GUID → Глобальный поиск (Инструменты → Поиск по GUID)
- Выгрузка в Excel → Экспорт CSV в один клик
- Загрузка данных → Импорт из CSV с автоматическим разрешением ссылок
Приложение подходит как для разработчиков (быстрый доступ к данным без конфигуратора), так и для администраторов и продвинутых пользователей (просмотр и выгрузка данных без знания языка запросов 1С).
Буду рад обратной связи. Код полностью открыт.