Имя: Пароль:
1C
1С v8
v8: как работать из 1с8 с таблицами mysql
,
0 Juli_Juli
 
21.02.12
22:37
подключилась к базе mysql из 1с8, выбрала нужную таблицу запросом. но вот где найти описание встроенного языка по работе  в 1с с sql-ем - я узнала только Open(), Close(),table.fields(0).Value, moveNext. хотелось бы полностью таблицу загрузить сразу в ТЗ в 1с, используя что-то типа Выгрузить() или ВыбратьСтроку - можно ли вообще такое сделать с таблицами в mysql?
1 KarpovDeniska
 
21.02.12
22:42
2 badboychik
 
21.02.12
22:44
Пол:Мужской
3 Jaffar
 
21.02.12
23:45
(2) так и Дата регистрации:    21.02.2012     сегодня
4 Лефмихалыч
 
22.02.12
00:32
миздец чьему-то сайту...
5 Лефмихалыч
 
22.02.12
00:32
(0) ты тока бэкапы почаще делай
6 Asmody
 
22.02.12
00:33
в свете постановки вопроса, меня очень интересует, как было выполнено [подключилась к базе mysql из 1с8, выбрала нужную таблицу запросом]. особенно то, что после запятой
7 Juli_Juli
 
22.02.12
16:08
to Asmody
   
Соединение = Новый COMОбъект("ADODB.Connection");  
ConnectionString= "DRIVER={MySQL ODBC 5.1         Driver};SERVER=127.0.0.1;DATABASE=Julia;OPTION=3;UID=root";

   НаборЗаписей=Новый COMОбъект("ADODB.Recordset");  
   Если Соединение.state=0 then
       Соединение.open(ConnectionString);
       Сообщить("Подключились");
   КОнецЕсли;
   
   ТекстЗапроса="select * from 1c_112011";
       НаборЗаписей.ActiveConnection=Соединение;
   НаборЗаписей.Open(ТекстЗапроса);

   Table=Соединение.execute(ТекстЗапроса);
     Пока Table.EOF() = 0 do
        Value1= Table.Fields(0).Value;
        Сообщить(Value1);
        Table.MoveNext();
     КонецЦикла;
     Table.Close();

я к тому, что Table тут тоже ком-объект. А если я хочу всю таблицу(которую выбрала запросом из sql) видеть как стандартная Таблица Значений в 1с - я могу только создав ТЗ и в своем цикле значения присваивать строкам моей ТЗ? задаю вопрос - но видимо уже знаю, что только так. а изначально интересовалась вообще

to KarpovDeniska спасибо - надеюсь пригодится. но мне только на забирание инфы пока из биллинга.
8 zak555
 
22.02.12
16:11
чья таблица 1c_112011 ?
9 Juli_Juli
 
22.02.12
16:12
хотелось бы примеров, написанных на 1с8 по работе с sql - типа как я написала - но только больше вариантов кроме как подключиться, выбрать таблицу и получить из нее значение - описанным способом.
10 zak555
 
22.02.12
16:14
что в БД Julia ?
11 КМ155
 
22.02.12
16:14
12 zak555
 
22.02.12
16:14
+ в 8.2.15 есть объект Внешние источники данных
13 DexterMorgan
 
22.02.12
16:25
(12) так с 14 же он есть
14 zak555
 
22.02.12
16:26
(13) я знаю, что в 77 нет такого
15 rozer76
 
22.02.12
16:36
(11) стесняюсь спросить а для mysql тоже актуально ? А то я до сих пор через ODBC mysql 3.51 ....
16 zak555
 
22.02.12
16:38
(15) прочитай, что там написано :

Внешний источник может получать данные из ODBC-источников в операционных системах Windows и Linux, причем при работе с СУБД Microsoft SQL Server, IBM DB2, PostgreSQL и Oracle Database обеспечиваются полные возможности языка запросов.

При работе с другими СУБД некоторые конструкции языка запросов могут не работать, т.к. они ограничены возможностями того ODBC-драйвера, который используется.
17 КМ155
 
22.02.12
16:48
(15) актуально для любого драйвера ODBC, не факт что работает,
я использую ADODB поверх ODBC
18 rozer76
 
22.02.12
16:50
(17) эээх, ладно будем по старинке ... рекордсеты... рекордсеты
19 MikeLna
 
22.02.12
17:34
(16) Работает то оно работает. Вот только валится если в полях MySQLя есть подчеркивания.
20 zak555
 
22.02.12
17:35
(19) валится при каких телодвижениях ?
21 MikeLna
 
22.02.12
17:36
(20) На банальном select'e
22 zak555
 
22.02.12
17:38
(21) на последней 8.2.15 ?
23 zak555
 
22.02.12
17:39
ааа
"При работе с другими СУБД некоторые конструкции языка запросов могут не работать..."
24 Fragster
 
гуру
22.02.12
17:41
Процедура ЗаполнитьЗначенияСвойствРекордсет(Приемник, Рекордсет)
   ВГраница = Рекордсет.Fields.Count()-1;
   Для Сч = 0 По Вграница Цикл
       Попытка
           Поле = Рекордсет.Fields(Сч);
           Значение = Поле.Value;
           ИмяПоля = Поле.Name;
           Если ТипЗнч(Значение) = Приемник[ИмяПоля] Тогда
               Приемник[ИмяПоля] = Значение;
           Иначе
               Приемник[ИмяПоля] = Формат(Значение, "ЧРД=.; ЧГ=; ДФ=гггММддЧЧммсс");
           КонецЕсли;
       Исключение
           // пропускаем
       КонецПопытки;
   КонецЦикла;
КонецПроцедуры

.....



   ТаблицаФайла = Новый ТаблицаЗначений;
   //ТаблицаФайла.Колонки.Добавить("НомерСтроки", ПолучитьОписаниеТиповЧисла(5));
   ТаблицаФайла.Колонки.Добавить("АИД", ПолучитьОписаниеТиповЧисла(5));
   ТаблицаФайла.Колонки.Добавить("СерийныйНомер", ПолучитьОписаниеТиповСтроки(32));
   ТаблицаФайла.Колонки.Добавить("НомерДоговора", ПолучитьОписаниеТиповСтроки(32));
   ТаблицаФайла.Колонки.Добавить("ФИО", ПолучитьОписаниеТиповСтроки(150));
   ТаблицаФайла.Колонки.Добавить("ДатаАктивации", ПолучитьОписаниеТиповДаты(ЧастиДаты.Дата));
   Пока Не Recordset.EOF Цикл
       НоваяСтрока = ТаблицаФайла.Добавить();
       ЗаполнитьЗначенияСвойствРекордсет(НоваяСтрока, Recordset);
       Recordset.MoveNext();
   КонецЦикла;
25 MikeLna
 
22.02.12
17:42
(22) На предпоследней 294ой.
(23) Ну как бы да - select - "некоторая конструкция" :)
26 Fragster
 
гуру
22.02.12
17:42
Если ТипЗнч(Значение) = ТипЗнч(Приемник[ИмяПоля]) Тогда
27 ukolabrother
 
22.02.12
18:42
Рекорд сет надо обходить
28 ukolabrother
 
22.02.12
18:45
Пока RSTR.EOF() = 0 Цикл        
       Запись = ОстаткиПоКартам.Добавить();                
       Запись.Карта= ПолучитьДоговорКарту(СокрЛП(RSTR.Fields("НомерКарты").Value),,Ложь);        
       Запись.Остаток= Число(СокрЛП(RSTR.Fields("Сумма").Value));                
       RSTR.MoveNext();
КонецЦикла;

RSTR - рекордсет