8.х Переброс данных из Аксесс в 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем DrBlack, 26 окт 2010.

  1. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    В общем так, мне из проги на Делфи, у которой БД в Аксессе, надо перебросить данные и меня только интересует следующее:
    1) Как подключить базу аксесса
    2) Как выбрать требуемую таблицу из аксеса

    ЗЫ - аналог на 1С получился круче чем на делфи, 1С рулит =)
    ЗЫ2 - правда я разочаровался в событиях на визуальных компонентах, самих компонентов вроде больше и не надо, а события в них практически отсутствуют (при наведении мыши, при перемещении мыши, на нажатие клавиши и многие другие), надеюсь в 9-й версии все-таки дадут больше свободы =)
  2. DimkaAV
    Offline

    DimkaAV

    Регистрация:
    24 июн 2010
    Сообщения:
    43
    Симпатии:
    0
    Баллы:
    1
    Как подключиться.
    OLE Automation Access или ADO что больше нравится.

    Как выбрать данные.
    Зависит от способо подключений. При первом можно работать с акцесом как с акцесом, при втором - только как с базой данных - набором таблиц.
  3. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    Connection = Новый COMОбъект ("ADODB.Connection");
    Connection.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\1c_common\Реальный_сектор\TEL_BASE2006.MDB");
    RS = Новый COMОбъект("ADODB.Recordset"); 
    RS.CursorType=3;
    // Запрос к базе на языке SQL запросов.
    RS.ActiveConnection=Connection;
    RS.Open("select * from market_users");
    //Перемещаем указатель на первую запись.
    RS.MoveFirst(); 
    Пока RS.EOF()=0 Цикл
    // Обрабатываем значения полей выборки.
    NAM = RS.Fields("NAME").Value;
    Сообщить(NAM);
    // Перемещаем указатель.
    RS.MoveNext();    
    КонецЦикла;    
    
    
  4. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Технология АДО мне знакома по делфи, скорей меньше вопросов будет при использовании её...
    За предыдущий пост спасибо, то что надо! Х)
  5. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    А можно для большего комфорта реализовать запрос с параметром?
    Как сделать сам запрос с параметром вопросов нет, вопрос как обратиться к параметру перед запуском запроса?
    Текст запроса:
    Код:
    PARAMETERS [kod] Long;
    SELECT Подразделение.Наименование
    FROM Подразделение
    WHERE (((Подразделение.КодПоставщика)=[kod]));
    
  6. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Пока использую следующую структуру запроса с параметром:
    Код:
    NamePost.Open("SELECT Подразделение.Наименование
    |FROM Подразделение
    |WHERE (((Подразделение.КодПоставщика)="+GruPost.Fields("КодПоставщика").Value+"));");
    
    
    
    
    ЗЫ - вроде устраивает )))
  7. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Код:
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = Новый COMОбъект("ADODB.Connection");
    Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE >= ?";
    par = Command.CreateParameter("DATEN", 133, 3);
    Command.Parameters.Append(par); 
    par.Value = ДатаН;
    Command.NamedParameters = Ложь; // можно не писать, по умолчанию и так ложь
    
    RecordSet = Новый COMОбъект("ADODB.RecordSet");
    RecordSet = Command.Execute(); 
    
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    кхм. не совсем понятно, как будет выглядеть условия в тексте запроса, если параметров несколько?
  9. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Насколько я помню,
    Код:
    Command.Parameters.Append(par);
    Command.Parameters.Append(par2);
    Command.Parameters.Append(par3);
    
    
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Это понятно, не понятно как в тексте запроса разделить параметры, если
    "....where DATE_MOVE >= ?"
  11. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    например
    where DATE_MOVE BETWEEN ? AND ?
  12. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    кхм, т.е. по-вашему такая конструкция возможна? :)
    я че-т ОЧЕНЬ сомневаюсь :)
  13. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    А Вы попробуйте :)
  14. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Да ладно вам спорить, по-моему я привел вполне приемлимый код с параметром...
    А главное, не надо быть умным чтоб это сделать... ;) Поясню:
    1) так как я переношу данные из аксесса, я спомощью конструктора делаю запрос с параметрами в самом аксесе
    2) потом я вставляю этот код в свою процедуру на 1С
    3) вместо параметров вставляю мои переменные и готово

    ЗЫ - только дата выглядит несколько иначе, помоему: #01.01.2010# (при необходимости можно для большей достоверности глянуть в самом конструкторе), поэтому прийдется сначала перевести дату в требуемый вид, но это займет не более 1-й строчки кода, поэтому я думаю не лучший вариант вникать в примудрости параметизированных вопросов, а использовать столь простую конструкцию... =)
  15. TopicStarter Overlay
    DrBlack
    Offline

    DrBlack Опытный в 1С

    Регистрация:
    8 янв 2010
    Сообщения:
    79
    Симпатии:
    1
    Баллы:
    29
    Есть еще такой волпрос при перебросе данных...
    Я переношу постащика, у него появляется новый код, а это в корне усложняет процесс создания накладных, надо как-то запоминать новые коды поставщиков и подставлять их вместо старых в мои накладные... Как лучше реализовать это?
    Может через массив? Или лучше в 1С добавить поле "старый код" и искать по нему? Или может есть еще варианты?
    ЗЫ - склоняюсь больше к двойному коду (старый и новый), помоему так будет легче и программный код чище...
  16. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Если переносится все одной процедурой, то лучше не массив, а соответствие, т.к. из него легко получать по старому коду ссылку на созданный элемент.

    Если перенос разными процедурами, между собой не связанными, то только старый код.

    Можно еще использовать именованные параметры. Точно не пробовал, пишу по памяти:
    Код:
    Command = Новый COMОбъект("ADODB.Command");
    Command.NamedParameters = Истина;
    Command.ActiveConnection = Новый COMОбъект("ADODB.Connection");
    Command.CommandText = "select * from VW_RPT_CFT_PERSON_F_1C where DATE_MOVE BETWEEN @Dn AND @De";
    par = Command.CreateParameter("Dn", 133, 3);
    Command.Parameters.Append(par); 
    par.Value = ДатаН;
    par2 = Command.CreateParameter("De", 133, 3);
    Command.Parameters.Append(par); 
    par2.Value = ДатаК;
    
    RecordSet = Новый COMОбъект("ADODB.RecordSet");
    RecordSet = Command.Execute(); 
    
    
  17. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    вот в это я больше поверю, чем не именованные параметры....

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