8.х 1С и MS Access

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем rvaldis, 25 май 2007.

  1. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Подскажите, пожалуйста. Есть многолетняя привычка и, главное, необходимость "навешивать" Access на любой бухгалтерский софт (1с, парус и т.д.) с целью получения доступа к данным по соответствующим таблицам и формирования перечня необходимых запросов и отчетов в едином блоке под управлением MS Access. Очень удобно. Приобрели 1С v8. Как можно организовать связь с таблицами между восьмеркой и access?
  2. 1010011010
    Offline

    1010011010 [1cworld]

    Регистрация:
    1 авг 2006
    Сообщения:
    582
    Симпатии:
    0
    Баллы:
    26
    коннектиться через внешнее соединение... стринги тут connectionstrings.com
  3. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ, думал уже никто не отзовется. Но если честно, до конца не понял как это сделать. Я не большой профи в коннектах. Обычно из MS Access я выходил через Файл->Внешние данные->Связь с таблицами. Далее тип файлов - База данных ODBC и создавал новое соединение на базе имеющегося драйвера (например Microsoft ODBC для Oracle, драйвер устанавливался заранее) и указав имя базы, юзера и пароль подключался к базе. Далее, просматривая список всех таблиц подключал необходимые и с ними работал в accesse. А как использовать connection strings и главное какую именно не понял. Не могли бы Вы чуть поподробнее описать алгоритм?
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Так не получится. Это коннект из 1Ски к файлам баз данных (типа Access или dBase) можно сделать.

    К данным 1Ски можно добраться
    1. Через SQL сервер это базы, при покупке в клиент ерверной весрии
    2. Через COM-соединение 1cv8
    3. Настроить автоматические выгрузки (с определенной периодичностью или по требованию) данных 1С во внешние файлы (Excel, Access, dBase и другие открытые форматы) и апдейтить их у себя в Access.

    Но по мне, лучше просто настроить удобную работу в 1Ске, реализовав там все эти ваши пожелания. 1С 8 - не парус и не 1С 7.7, где можно напрямую коннектиться к dbf
  5. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Спасибо, Эмин.
    А нельзя маленький пример по COM-соединению 1cv8. Как получить данные, неапример, из справочника. Скажем, прочитать строки по полям из номенклатора и записать их в некую таблицу или массив...Например,

    Set cntr = CreateObject("V8.COMConnector")
    Set trade = cntr.Connect("File=""D:\1C-Bases\demotrd"";Usr=""администратор"";")
    Set СправочникТоваров = trade.Справочники.Номенклатура

    А далее?

    И где можно почитать детально по COM-соединению 1cv8? Нет ссылок?
  6. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Вот ссылок по СОМ соединению восьмерки у меня точно нет.

    Если ты справочник уже так получил, то тебе и все методы его доступны, а кроме того - можно получать запросы (создав объект запроса) и вызвав его получить результат как таблицу. ТАк же написать в 1Ске функцию, которая бы любую таблицу значений в xls файлик например сохраняла (в модуле клиентского соединения - тогда ты сможешь ее вызвать как trade.ТВОЯПРОЦЕДУРА())
    Или наделать вообще себе нужных процедур (описав их в конфигурации на языке 1Ски, вроде ВыгрузитьСправочникТоваров(ИмяФайлаExcel) - или сразу в mdb.

    Кстати - можешь почитать про WEBприложение 1С 8.0. Там как раз создается СОМ объект и все работает через него. И примеры есть там же.
  7. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    А как правильно в 1С, вернее где, создавать собственные таблицы и запросы? Я просто совсем не спец в 1С. Например, в конфигураторе созданный новый "справочник" со своими "реквизитами" не будет эквивалентом своей таблицы со своими полями с дальнейшей возможностью к ней обращаться?? Или я совсем не прав? И как насчет запросов? Одним словом, как корректно в структуру 1С добавить свои пользовательские таблицы и запросы с целью дальнейшего к ним обращения? Причем не средствами приложения 1С, т.е. формы, макеты и пр. не интересует, просто как область данных...
  8. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Вообще, если с точки зрения методологии, то все данные надо бы хранить в регистрах, хотя вообще любой объект в 1Ске - это таблица БД.

    Все зависит от ситуации, какие таблицы вы получать хотите
    Я бы рекомендовал сделать свои регистры (В которых хранятся данные) и обработки, которые. например, каждый вечер запускаются и формируют записи по этим регистрам. А дальше простыми отчетами по регистрам получать нужные вам данные. Либо, второй вариант: Только обработки, который каждый вечер, например, выгружают нужные данные (полученные из 1Ски) в xls файлы в определенный каталог, а с ними вы уже работает как обычно и привыкли.

    Но вообще вопрос не такой простой, чтобы в двух и даже трех словах объяснить как лучше сделать.
  9. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Спасибо, Эмин, за оперативность ответа. Во много м я уже разобрался, но есть еще "затыки". Что касается 8ки. Через ком-соединение я цепляюсь к БД. Вижу справочники, документы (думаю и регистры тоже, не пробовал еще). Могу читать данные из них и писать туда. Допустим создам свои еще таблицы в регистрах (делал уже через справочники, все работает). Это хорошо. Но осталась еще проблемка. Нужно создать в 8ке ряд запросов по основным документам, например Продажи, Поставки, Оплаты и т.д. и где то их как-то сохранить, чтоб потом через ком-соединение считывать их результат как данные из тех же справочников. Как мне такое сделать. Где написать и как сохранять такие запросы???
  10. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Опять-таки решений несколько.

    1. Через COM соединение можно вызывать запросы (созздав новый запрос и передав в него текст и набор параметров). Запрос вернет виртуальную таблицу, с которой можно сделать все что угодно (сохранить в файл, обработать в 1Ске и перевести в таблицы другие).

    2. Я бы предпочел второй способ, а именно, создать в 1Ске средствами встроенного языка 1С обработки, которые на входе имели бы некоторые параметры, а в процессе работы могли бы: заполнять регистры, формировать таблицы, выгружать данные во внешние файлы. Присоединившись через COM просто запускать эти обработки (или достаточно описать функции в модуле внешнего соединения). Важный момент, обработки могут быть встроены в конфигурацию и легко сконструированы средствами 1С, в случае использования процедур и функций - расположить их в модуле внешнего соединения и тогда они будут доступны как методы COM объекта, которым подключились к базе.

    Надеюсь, понятно расписал...
  11. TopicStarter Overlay
    rvaldis
    Offline

    rvaldis

    Регистрация:
    25 май 2007
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    И опять же спасибо. Идею я понял, осталось разобраться с "техникой" вопроса. Эмин, а нельзя привести подробно простейший пример по 2 методу.
    Скажем есть штатный справочник "контрагенты". Требуется создать свой регистр (таблицу) скажем "КА" с двумя полями "код" и "наименование", и некую обработку его заполнения, скажем "Рег_КА". И вызвать эту обработку через ком-соединение. Как это будет выглядеть на языке 1Ски?
  12. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Такой пример конечно не самый удобный, в случае с контрагентами я бы лучше сделал через отдельную процедуру - регистр нужен, когда нам какая-то переменная информация нужна, например текущие остатки товаров на складах, но можно вот так:

    В конфигурации создаем обработку: Рег_КА

    В ней можно сделать реквизиты (например, группу контрагентов или еще что-то, чтобы использовать для фильтра).

    //Подключаемся к базе, делаем переменную Соединение (COM Объект)
    //Получаем объект обработки
    Рег_КА_Объект = Соединение.Обработки.Рег_КА.Создать()
    //Запускаем обработку, например любую экспортную процедуру из нее
    Рег_КА.ВыполнениеПереносаКонтрагентов();

    при этом в Рег_КА в модуле должна быть такая экспортная процедура, которая уже средствами 1С получает данные, пишет в регистр и делает то что нам надо.


    А вот пример работы напрямую с запросами через COM-соединение в C#, писали Веб приложение, тут выбиралась номенклатура и выводилась с кодами в HTML таблицу, еще к каждому прилеплялся ЧекБокс, но я сотру лишний код

    private void Page_Init(object sender, System.EventArgs e)
    {
    V8DbConnection connection = new V8DbConnection(V8Metadata.GetDatabase(""), (string)Session[WebConsts.UserName], (string)Session[WebConsts.UserPassword]);
    V8DbSelectCommand cmd = new V8DbSelectCommand();
    cmd.CommandText=@"ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка,
    Номенклатура.Наименование КАК Наименование,
    Номенклатура.Родитель.Код КАК Родитель,
    Номенклатура.Код КАК Код
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ЭтоГруппа = ИСТИНА
    УПОРЯДОЧИТЬ ПО
    Ссылка";

    cmdr.Connection = connection;

    connection.Open();
    try
    {
    using (V8DataReader reader = (V8DataReader)cmd.ExecuteReader())
    {
    while (reader.Read())
    {
    string Наименование = reader.GetString(1);
    string Код1 = reader.GetString(3);
    string Код = "";

    int i;
    for (i=3; i<Код1.Length; i++)
    Код = Код+Код1;
    string paramstr;
    if (reader.IsDBNull(2))
    {
    // Create a new row and add it to the Rows collection.
    }
    finally
    {
    connection.Close();
    }

    }

    Ну тут мог со скобками напутать, пока стирал
Похожие темы
  1. Kruck
    Ответов:
    5
    Просмотров:
    1.434
  2. fokin
    Ответов:
    1
    Просмотров:
    1.709
  3. slaay
    Ответов:
    2
    Просмотров:
    1.527
Загрузка...

Поделиться этой страницей