1c БАЗА
4696
15
Господа, подскажите, возможно ли к программе написанной на с# подсоединить базу 1с. Не делая выгрузок из нее, а на прямую...Если да, тогда скажите, как можно узнать о ее формате...и т.п.
polius2007
Тысяча способов. Во первых все 1С поддерживают внешнее com соединение. Однако этот вариант я думаю уже вы наверняка рассмотрели, слишком просто, все минусы и плюсы понятны - раз создан топик то видимо этот вариант не устроил.
Рассмортим несколько других способов.
1С 7.7. DBF самый тяжелый случай. Придется обращаться к дбф файлам. Структура базы хранится в файле 1Cv7.DD который придется пропарсить. ДБФ файлы при чтении надо не блокировать, чтобы не прерывать работу 1С.
1С 7.7 SQL - уже лучше. Структура базы хранится в файле 1Cv7.DDS, парсим и обращаемся к базе через ADO. Все просто и удобно. Необходимо следить за блокировками, если нужно только чтение базы то лучше обращаться к таблицам со словом nolock(select a.* from table a(nolock))
1C 8.0 SQL- есть много сложностей с получением структуры базы, однако есть способы ее получить, основаны на трассировке sql запросов от 1С - они есть в инете. Можно также создать Views удобно если структура базы предполагается неизменной или редко изменяемой.
1С 8.1. Для получения структуры базы можно вызвать ПолучитьСтруктуруХраненияДанных - функция 1С, после чего обращаться к базе через ADO.
1С 8.х файловая - не вижу способов напрямую обращаться к базе, придется воспользоваться внешним соединением.

Кроме того 1С 8.1 поддерживает web сервисы которые можно приспособить для получение данных.

Ну и еще тысяча и один способ....их наверно напишут другие ниже
polius2007
да кстати напишите какая 1С и какой формат базы?
Дима553
Ну и еще тысяча и один способ....их наверно напишут другие ниже
Не разрушать моск через попу и сделать через сом-соединение. :yes.gif:
John West
Если 7-ка и в базе 1с кто-то в этот момент работать должен то не подойдет такой вариант
John West
Дело в том, что конкретная версия не известна и требуется универсальность решения! Возможно ли подсоединяться к ней на ходу? В тот момент когда пользователи работают с базой? Как на ходу распознать ее формат...Кто подскажет?
polius2007
в таком случае остается только OLE/COM =) Или мороковать модули под все распознаваемые приложением версии ОдинЭс, работающие с данными напрямую.
Mad_Dollar
Ясно, всем спасибо...
Теперь еще вопрос - сколько это будет стоить сделать на с#? И кто возьмется? polius2007@yandex.ru....пишите...
quazare
Ну если на секунду забыть про скромность, то я и в 1С и в C# ничего так. А с какой целью интересуетесь? (в личку)
craxx
Если 7-ка и в базе 1с кто-то в этот момент работать должен то не подойдет такой вариант
Дяденька, не поверите - есть два режима подключения - монопольный и не очень.
А вот как раз прямой доступ к таблицам базы данных чреват полной блокировкой базы.
:ухмылка:
John West
Если 7-ка и в базе 1с кто-то в этот момент работать должен то не подойдет такой вариант
Дяденька, не поверите - есть два режима подключения - монопольный и не очень.
А вот как раз прямой доступ к таблицам базы данных чреват полной блокировкой базы.
:ухмылка:
Правильно. Поэтому умные товарищи изобрели вот это:
http://uzhast.fatal.ru/vfpoledb/
polius2007
Дело в том, что конкретная версия не известна и требуется универсальность решения! Возможно ли подсоединяться к ней на ходу? В тот момент когда пользователи работают с базой? Как на ходу распознать ее формат...Кто подскажет?
Топикстартер или пошутил, или ...

Объясните мне - что может понадобиться от неизвестной базы (и конфигурации) 1С (когда конкретная версия и формат неизвестны) и в коде C#?

А, подключаться надо будет, как к файл-серверной, так и клиент-серверной 1С и заранее неизвестно к какой СУБД (MS Sql Server, Postgresql, DB2)...

И ещё нужна будет какая-нить artificial intelligence, которая сама будет обучать топикстартера, после подсоединения, азам работы со всеми (не)возможными заведомо неизвестными решениями в 1С
Ananas
обычно делают выгрузку в хмл... хотябы для того что-бы посмотреть "что за база"... ну а преобразовать хмл-выгрузку в другую SQL базу думаю не составит большого труда...