Для начала, я не очень тесно связан с 1С. Я системный администратор.
В компании используется 1С версии 8.3, серверная. Конфигурация кастомная. На обычных формах. База данных в MSSQL Server 2012R2. Всё это дело крутится на Windows Server 2012R2.
Для нужд компании необходимо получать некий набор данных из базы данных. По сути там описание товара с его уникальным каталожным номером и фотографией. Все эти данные, причем в режиме только чтения, необходимо получить утилитой, которая запущена на Linux-машине. Утилита эта на python'е. Я не могу подключиться напрямую к MSSQL, так как 1С сама распоряжается данными в таблицах базы данных в СУБД.
Собственно отсюда вопрос, какие есть способы подключиться к 1С "снаружи"? Может есть какой-то API? COMConnector - не вариант, в Linux'е это понятие отсутствует, а библиотеки питона по работе с комконнектором реализованы для Windows.
---
Как вариант: создать отдельную базу (можно, например, вообще на PostgreSQL), в 1С добавить ее в качестве внешнего источника, а далее либо вручную, либо регламентным заданием писать в нее необходимые данные из 1С. А уже вашей утилитой читать данные из этой промежуточной базы. А вообще странно, почему не можете запросом к SQL вытащить данные... Тут были обработки по преобразованию запроса 1С в запрос SQL.
Вот тут, например, сразу создает SQL-запрос по метаданным (обычные формы)
---
Вот вам пара вариантов
1) вы можете на SQL сервере своем в базе создать представление, которое и будете получать прямым запросом от своей утилиты к базе.
Я для удобства создавал в 1С отдельный регистр, который регламентным заданием заполнял данными по расписанию, а затем "утилита" напрямую SQL запросом обращалась к этому представлению и получала табличку с данными готовыми. Только в регистр нужно писать только примитивные типы данных (числа, строки, даты, булево)
Этот вариант проще, но не всегда в моменте сможете получить актуальные данные, (зависит от расписания, по которому будет заполняться регистр)

2) Этот вариант сложнее, http или web сервисы... тут уже по запросу из утилиты сможете получать актуальные данные, но придется писать обработку, которая будет эти данные собирать и возвращать в нужном утилите виде... но работать будет "на лету" а не по расписанию... пришел запрос - данные сгенерировались
---
Скажите, а внешние источники данных - это не мой случай?
---
Внешний источник данных, это источник для 1С.. то есть 1С из этого источника собирает информацию, а не наоборот.
---
Как вариант: создать отдельную базу (можно, например, вообще на PostgreSQL), в 1С добавить ее в качестве внешнего источника, а далее либо вручную, либо регламентным заданием писать в нее необходимые данные из 1С. А уже вашей утилитой читать данные из этой промежуточной базы. А вообще странно, почему не можете запросом к SQL вытащить данные... Тут были обработки по преобразованию запроса 1С в запрос SQL.
Вот тут, например, сразу создает SQL-запрос по метаданным (обычные формы)
---
Спасибо. Дельная ссылка.
---
думаю переговорю с нашим 1С программистом, попрошу организовать такой путь. Я так понял это в конфигураторе надо делать?
---
думаю переговорю с нашим 1С программистом, попрошу организовать такой путь. Я так понял это в конфигураторе надо делать?
Вот тут я на прошлой неделе ковырял запросы, которые делал веб-мастер, выдёргивая данные из 1с(меня в то время тут не было). Из пыха. Напрямую к скулю.
Работало года полтора...
---
Если через промежуточную базу, то да. А прямыми запросами так и не хотите попробовать?) Хотите 1Сника загрузить?)))
---
не, я имел в виду прямыми запросами. Только из же надо сначала сделать на основе метаданных. Вот мне скажет 1Сник, хотя бы чё с чем джойнить...
---
веб-сервис, хттп-сервис, о-дата.
Да и прямо в таблицы тоже можно слазить, ибо структуру данных в 1с получить - как два байта об асфальт...
---
Да и прямо в таблицы тоже можно слазить, ибо структуру данных в 1с получить - как два байта об асфальт...
Но ведь 1С сама "распихивает" данные по каким-то только ей ведомым таблицам. Как я прямым запросом к БД получу то, что мне надо?
---
есть обработки, показывающие структуру базы.. ну то есть соответствие всяких объектов конфигурации табличкам в базе данных. но как я уже писал, для удобства вы можете создать отдельный регистр, который заполнять будете непосредственно в 1С через консоль запросов 1С.. а потом в представлении на сервере обращаться конкретно к этому регистру. это будет отдельная табличка в БД. не нужны будут всякие объединения и тп, конкретно одна таблица
---
есть прямая команда в 1С:
ПолучитьСтруктуруХраненияБазыДанных().
Там все наглядно.